Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
Cloned bar plugin never loads: required properties are never set
Reported by Yves848 · filed Sep 1, 2026Closed upstream on 2026-09-20 by bjarneo via an automated message, as a duplicate of #6915 (R-1851). GitHub close reason: completed.
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- Not yet mapped to any requirement or component.
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.
Original report
What happened
omarchy plugin clone omarchy.bar produces a bar plugin that cannot be instantiated.
After omarchy bar use <clone-id> the bar never appears — the omarchy-bar layer is
absent from hyprctl layers, leaving only omarchy-background. The shell itself keeps
running.
Journal shows:
WARN scene: file:///home/…/.config/omarchy/plugins/<id>/Bar.qml[22:3]: Required property barConfig was not initialized
WARN scene: file:///home/…/.config/omarchy/plugins/<id>/Bar.qml[15:3]: Required property omarchyPath was not initialized
WARN scene: file:///home/…/.config/omarchy/plugins/<id>/Bar.qml[17:3]: Required property barWidgetRegistry was not initialized
WARN scene: @shell.qml[256:-1]: ReferenceError: errorString is not definedWhat I expected
A freshly cloned bar renders identically to the built-in one, since omarchy plugin clone
advertises itself as the supported way to customize a built-in plugin.
Steps to reproduce
omarchy plugin clone omarchy.bar # also switches to the clone
omarchy restart shell
hyprctl layers | grep omarchy-bar # no bar layerRecover with omarchy bar use omarchy.bar && omarchy restart shell.
Root cause
The two bar load paths in shell/shell.qml are not equivalent.
The built-in bar is instantiated by a Component that supplies the required properties
at creation time:
Component {
id: defaultBarComponent
Bar {
omarchyPath: shell.omarchyPath
barWidgetRegistry: shell.barWidgetRegistry
barConfig: shell.barConfig
…
}
}A third-party bar is loaded from a URL, which cannot supply any initial property, and is
configured only afterwards in onLoaded:
Loader {
id: pluginBarLoader
source: shell.activeBarSourceUrl
onLoaded: shell.configureBar(item, shell.activeBarManifest)
}configureBar sets the same three properties — but plugins/bar/Bar.qml declares them asrequired property, so QML refuses to construct the object before onLoaded ever runs.
Since omarchy plugin clone copies Bar.qml verbatim, every cloned bar hits this.
The secondary ReferenceError: errorString is not defined comes from the error branch in
the same Loader (errorString && errorString()), which then can't report the real failure.
Suggested fixes
Either would do:
- Drop
requiredfromomarchyPath,barWidgetRegistryandbarConfigin
plugins/bar/Bar.qml, giving them defaults — configureBar already assigns them on load.
2. Or have pluginBarLoader use setSource(url, { … }) so the required properties are
provided at creation, matching the built-in path.
I'm currently using (1) as a local patch and the cloned bar works correctly.
There is also a leftover IPC collision worth a look: the cloned bar still registersIpcHandler { target: "omarchy.bar" }, producingHandler was registered but will not be used because another handler is registered for target omarchy.bar.
System
| Omarchy | 4.0.2-1 |
| Kernel | 7.1.9-arch1-2 |
| CPU | 12th Gen Intel Core i7-12700H |
| GPU | Intel Alder Lake-P GT2 [Iris Xe] + NVIDIA GA107M [RTX 3050 Ti Mobile] |
| Hyprland | 0.56.2 |
| Quickshell | 0.3.1 (Arch) |
Note: omarchy debug --no-sudo --print is not available in 4.0.2-1 (`Unknown Omarchy
command`), so the details above were collected manually.
View raw text
### What happened
`omarchy plugin clone omarchy.bar` produces a bar plugin that **cannot be instantiated**.
After `omarchy bar use <clone-id>` the bar never appears — the `omarchy-bar` layer is
absent from `hyprctl layers`, leaving only `omarchy-background`. The shell itself keeps
running.
Journal shows:
```
WARN scene: file:///home/…/.config/omarchy/plugins/<id>/Bar.qml[22:3]: Required property barConfig was not initialized
WARN scene: file:///home/…/.config/omarchy/plugins/<id>/Bar.qml[15:3]: Required property omarchyPath was not initialized
WARN scene: file:///home/…/.config/omarchy/plugins/<id>/Bar.qml[17:3]: Required property barWidgetRegistry was not initialized
WARN scene: @shell.qml[256:-1]: ReferenceError: errorString is not defined
```
### What I expected
A freshly cloned bar renders identically to the built-in one, since `omarchy plugin clone`
advertises itself as the supported way to customize a built-in plugin.
### Steps to reproduce
```bash
omarchy plugin clone omarchy.bar # also switches to the clone
omarchy restart shell
hyprctl layers | grep omarchy-bar # no bar layer
```
Recover with `omarchy bar use omarchy.bar && omarchy restart shell`.
### Root cause
The two bar load paths in `shell/shell.qml` are not equivalent.
The **built-in** bar is instantiated by a `Component` that supplies the required properties
**at creation time**:
```qml
Component {
id: defaultBarComponent
Bar {
omarchyPath: shell.omarchyPath
barWidgetRegistry: shell.barWidgetRegistry
barConfig: shell.barConfig
…
}
}
```
A **third-party** bar is loaded from a URL, which cannot supply any initial property, and is
configured only afterwards in `onLoaded`:
```qml
Loader {
id: pluginBarLoader
source: shell.activeBarSourceUrl
onLoaded: shell.configureBar(item, shell.activeBarManifest)
}
```
`configureBar` sets the same three properties — but `plugins/bar/Bar.qml` declares them as
`required property`, so QML refuses to construct the object before `onLoaded` ever runs.
Since `omarchy plugin clone` copies `Bar.qml` verbatim, every cloned bar hits this.
The secondary `ReferenceError: errorString is not defined` comes from the error branch in
the same Loader (`errorString && errorString()`), which then can't report the real failure.
### Suggested fixes
Either would do:
1. Drop `required` from `omarchyPath`, `barWidgetRegistry` and `barConfig` in
`plugins/bar/Bar.qml`, giving them defaults — `configureBar` already assigns them on load.
2. Or have `pluginBarLoader` use `setSource(url, { … })` so the required properties are
provided at creation, matching the built-in path.
I'm currently using (1) as a local patch and the cloned bar works correctly.
There is also a leftover IPC collision worth a look: the cloned bar still registers
`IpcHandler { target: "omarchy.bar" }`, producing
`Handler was registered but will not be used because another handler is registered for target omarchy.bar`.
### System
| | |
|---|---|
| Omarchy | 4.0.2-1 |
| Kernel | 7.1.9-arch1-2 |
| CPU | 12th Gen Intel Core i7-12700H |
| GPU | Intel Alder Lake-P GT2 [Iris Xe] + NVIDIA GA107M [RTX 3050 Ti Mobile] |
| Hyprland | 0.56.2 |
| Quickshell | 0.3.1 (Arch) |
Note: `omarchy debug --no-sudo --print` is not available in 4.0.2-1 (`Unknown Omarchy
command`), so the details above were collected manually.
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
Not linked to any known issue, other report or change yet.
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
No decision has been recorded yet.