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 can't be set by pluginBarLoader, and the error is swallowed
Reported by kesavsabari · filed Sep 8, 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 that never renders. There is noomarchy-bar layer in hyprctl layers, and the screen has no bar at all — the
shell does not fall back to the built-in one either.
This is not caused by editing the clone: a byte-identical copy of the packagedshell/plugins/bar/Bar.qml fails the same way.
Cause
The built-in bar is instantiated through defaultBarComponent (shell/shell.qml),
which sets its properties declaratively. A cloned bar goes throughpluginBarLoader instead, which loads it by URL:
Loader {
id: pluginBarLoader
source: shell.activeBarId !== shell.defaultBarId ? shell.activeBarSourceUrl : ""
asynchronous: true
onLoaded: shell.configureBar(item, shell.activeBarManifest)Bar.qml declares three properties the host injects as required:
required property string omarchyPath
required property var barWidgetRegistry
required property var barConfigA Loader using source: cannot satisfy required property — there is no way to
supply them at creation — so instantiation fails and the Loader goes toLoader.Error before configureBar() ever runs. The shell logs:
WARN scene: file:///home/<user>/.config/omarchy/plugins/<user>.bar/Bar.qml[15:3]: Required property omarchyPath was not initialized
WARN scene: file:///home/<user>/.config/omarchy/plugins/<user>.bar/Bar.qml[17:3]: Required property barWidgetRegistry was not initialized
WARN scene: file:///home/<user>/.config/omarchy/plugins/<user>.bar/Bar.qml[22:3]: Required property barConfig was not initializedDropping required on those three (plain property string omarchyPath: "",property var barWidgetRegistry: null, property var barConfig: null) makes the
cloned bar load and render correctly — configureBar() assigns them immediately
after load. That looks like the right fix, and it would let any third-party bar
plugin work too, since they all face the same loader.
Second bug: the real error is swallowed
The failure is very hard to diagnose because pluginBarLoader's error handler
(shell/shell.qml:256) calls errorString(), which is not in scope there:
var detail = errorString && errorString() ? errorString() : ""That throws, so instead of the "bar option ... failed to load, falling back to ..."
message the user only ever sees:
WARN scene: @shell.qml[256:-1]: ReferenceError: errorString is not definedand shell.failedBarId is never set, so the documented fallback to the built-in
bar never happens either — hence no bar on screen at all rather than a degraded one.
Steps to reproduce
omarchy plugin clone omarchy.bar(it switchesbar.idto<user>.bar)omarchy restart shell- No bar renders;
hyprctl layers | grep omarchy-barreturns nothing. journalctl --user -eshows the three "Required property" warnings and the
ReferenceError: errorString is not defined.
Expected
A freshly cloned bar renders identically to the built-in one — that is the point ofomarchy plugin clone. Failing that, the shell should fall back to the built-in bar
and log why.
System
- Omarchy 4.0.2-1
- Arch Linux, Hyprland, single 1920x1080 display
View raw text
### What happened
`omarchy plugin clone omarchy.bar` produces a bar that never renders. There is no
`omarchy-bar` layer in `hyprctl layers`, and the screen has no bar at all — the
shell does not fall back to the built-in one either.
This is not caused by editing the clone: a byte-identical copy of the packaged
`shell/plugins/bar/Bar.qml` fails the same way.
### Cause
The built-in bar is instantiated through `defaultBarComponent` (`shell/shell.qml`),
which sets its properties declaratively. A cloned bar goes through
`pluginBarLoader` instead, which loads it by URL:
```qml
Loader {
id: pluginBarLoader
source: shell.activeBarId !== shell.defaultBarId ? shell.activeBarSourceUrl : ""
asynchronous: true
onLoaded: shell.configureBar(item, shell.activeBarManifest)
```
`Bar.qml` declares three properties the host injects as `required`:
```qml
required property string omarchyPath
required property var barWidgetRegistry
required property var barConfig
```
A `Loader` using `source:` cannot satisfy `required property` — there is no way to
supply them at creation — so instantiation fails and the Loader goes to
`Loader.Error` before `configureBar()` ever runs. The shell logs:
```
WARN scene: file:///home/<user>/.config/omarchy/plugins/<user>.bar/Bar.qml[15:3]: Required property omarchyPath was not initialized
WARN scene: file:///home/<user>/.config/omarchy/plugins/<user>.bar/Bar.qml[17:3]: Required property barWidgetRegistry was not initialized
WARN scene: file:///home/<user>/.config/omarchy/plugins/<user>.bar/Bar.qml[22:3]: Required property barConfig was not initialized
```
Dropping `required` on those three (plain `property string omarchyPath: ""`,
`property var barWidgetRegistry: null`, `property var barConfig: null`) makes the
cloned bar load and render correctly — `configureBar()` assigns them immediately
after load. That looks like the right fix, and it would let any third-party bar
plugin work too, since they all face the same loader.
### Second bug: the real error is swallowed
The failure is very hard to diagnose because `pluginBarLoader`'s error handler
(`shell/shell.qml:256`) calls `errorString()`, which is not in scope there:
```qml
var detail = errorString && errorString() ? errorString() : ""
```
That throws, so instead of the "bar option ... failed to load, falling back to ..."
message the user only ever sees:
```
WARN scene: @shell.qml[256:-1]: ReferenceError: errorString is not defined
```
and `shell.failedBarId` is never set, so the documented fallback to the built-in
bar never happens either — hence no bar on screen at all rather than a degraded one.
### Steps to reproduce
1. `omarchy plugin clone omarchy.bar` (it switches `bar.id` to `<user>.bar`)
2. `omarchy restart shell`
3. No bar renders; `hyprctl layers | grep omarchy-bar` returns nothing.
4. `journalctl --user -e` shows the three "Required property" warnings and the
`ReferenceError: errorString is not defined`.
### Expected
A freshly cloned bar renders identically to the built-in one — that is the point of
`omarchy plugin clone`. Failing that, the shell should fall back to the built-in bar
and log why.
### System
- Omarchy 4.0.2-1
- Arch Linux, Hyprland, single 1920x1080 display
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.