Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A 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.

Inbox
ReportR-4934GitHub issuePublicReceived

Custom "bar" plugin fails to load — cloning the built-in bar (omarchy plugin clone omarchy.bar) breaks the shell

Reported by toppzi · filed Sep 6, 2026Closed upstream on 2026-09-20 by bjarneo via an automated message, as a duplicate of #6915 (R-1851). GitHub close reason: completed.

Received and recorded verbatim. Nothing has been checked yet.

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

Custom "bar" plugin fails to load — cloning the built-in bar (omarchy plugin clone omarchy.bar) breaks the shellrevision 1 · captured 2026-10-04 12:10 UTC via poll

What happened

Cloning the built-in bar plugin via the documented workflow (omarchy plugin clone omarchy.bar) and switching shell.json's bar.id to the clone breaks the shell entirely — the bar disappears from every monitor until bar.id is reverted back to omarchy.bar and the shell is restarted.

The journal shows:

WARN scene: file:///home/user/.config/omarchy/plugins/<clone-id>/Bar.qml[15:3]: Required property omarchyPath was not initialized
WARN scene: file:///home/user/.config/omarchy/plugins/<clone-id>/Bar.qml[17:3]: Required property barWidgetRegistry was not initialized
WARN scene: file:///home/user/.config/omarchy/plugins/<clone-id>/Bar.qml[22:3]: Required property barConfig was not initialized
WARN scene: @shell.qml[256:-1]: ReferenceError: errorString is not defined

No config edits were made to Bar.qml before this happened — it reproduces on a byte-for-byte clone.

What was expected

A plain clone of the built-in bar plugin, activated the documented way, should render identically to the built-in bar.

Steps to reproduce

  1. omarchy plugin clone omarchy.bar (this clones the plugin and switches ~/.config/omarchy/shell.json's bar.id to the new clone automatically).
  2. omarchy restart shell (or wait for the hot-reload triggered by the clone).
  3. The bar vanishes on every monitor. journalctl --user shows the required-property warnings and the ReferenceError above.

Root cause (found while reading shell.qml)

shell/plugins/bar/Bar.qml declares three required properties:

required property string omarchyPath
required property var barWidgetRegistry
required property var barConfig

The built-in bar is instantiated through defaultBarComponent in shell.qml, which binds these inline at creation time:

Component {
  id: defaultBarComponent
  Bar {
    omarchyPath: shell.omarchyPath
    barWidgetRegistry: shell.barWidgetRegistry
    barConfig: shell.barConfig
    ...
  }
}

But a custom/cloned bar goes through pluginBarLoader instead — a Loader { source: shell.activeBarSourceUrl } — which creates the object with no initial properties and only assigns them afterward via onLoaded: shell.configureBar(item, ...). Because the three properties are required, object creation fails synchronously before configureBar() ever runs, and pluginBarLoader.status becomes Loader.Error.

That failure then hits a second bug in the same file — the onStatusChanged error handler references a bare errorString identifier instead of the loader's own errorString():

onStatusChanged: {
  if (status === Loader.Error) {
    var detail = errorString && errorString() ? errorString() : ""  // ReferenceError here
    ...

so even the "fall back to the default bar" diagnostic path throws.

Net effect: the custom-bar plugin mechanism ("kinds": ["bar"] + shell.json's bar.id) appears to be non-functional for any plugin that doesn't happen to dodge these two bugs — including a stock, unmodified clone of the built-in bar made via the officially documented omarchy plugin clone command.

Suggested fix

  • Supply the required properties at creation time for the custom-bar Loader too (e.g. Loader.setSource(url, {omarchyPath, barWidgetRegistry, barConfig}), or drop required from those three properties in Bar.qml and rely on configureBar() to populate them immediately after, as the default-bar path effectively already does for shell/manifest).
  • Fix the errorString reference in pluginBarLoader.onStatusChanged to call the loader's own errorString().

System details

  • Omarchy: 4.0.2-1
  • Kernel: Linux 7.1.9-arch1-2 x86_64
  • Hyprland: 0.56.2
  • Quickshell: 0.3.1-1
  • GPU: AMD Radeon RX 5600 XT (Navi 10)
View raw text
## What happened

Cloning the built-in bar plugin via the documented workflow (`omarchy plugin clone omarchy.bar`) and switching `shell.json`'s `bar.id` to the clone breaks the shell entirely — the bar disappears from every monitor until `bar.id` is reverted back to `omarchy.bar` and the shell is restarted.

The journal shows:

```
WARN scene: file:///home/user/.config/omarchy/plugins/<clone-id>/Bar.qml[15:3]: Required property omarchyPath was not initialized
WARN scene: file:///home/user/.config/omarchy/plugins/<clone-id>/Bar.qml[17:3]: Required property barWidgetRegistry was not initialized
WARN scene: file:///home/user/.config/omarchy/plugins/<clone-id>/Bar.qml[22:3]: Required property barConfig was not initialized
WARN scene: @shell.qml[256:-1]: ReferenceError: errorString is not defined
```

No config edits were made to `Bar.qml` before this happened — it reproduces on a byte-for-byte clone.

## What was expected

A plain clone of the built-in bar plugin, activated the documented way, should render identically to the built-in bar.

## Steps to reproduce

1. `omarchy plugin clone omarchy.bar` (this clones the plugin and switches `~/.config/omarchy/shell.json`'s `bar.id` to the new clone automatically).
2. `omarchy restart shell` (or wait for the hot-reload triggered by the clone).
3. The bar vanishes on every monitor. `journalctl --user` shows the required-property warnings and the `ReferenceError` above.

## Root cause (found while reading `shell.qml`)

`shell/plugins/bar/Bar.qml` declares three required properties:

```qml
required property string omarchyPath
required property var barWidgetRegistry
required property var barConfig
```

The built-in bar is instantiated through `defaultBarComponent` in `shell.qml`, which binds these inline at creation time:

```qml
Component {
  id: defaultBarComponent
  Bar {
    omarchyPath: shell.omarchyPath
    barWidgetRegistry: shell.barWidgetRegistry
    barConfig: shell.barConfig
    ...
  }
}
```

But a custom/cloned bar goes through `pluginBarLoader` instead — a `Loader { source: shell.activeBarSourceUrl }` — which creates the object with no initial properties and only assigns them afterward via `onLoaded: shell.configureBar(item, ...)`. Because the three properties are `required`, object creation fails synchronously before `configureBar()` ever runs, and `pluginBarLoader.status` becomes `Loader.Error`.

That failure then hits a second bug in the same file — the `onStatusChanged` error handler references a bare `errorString` identifier instead of the loader's own `errorString()`:

```qml
onStatusChanged: {
  if (status === Loader.Error) {
    var detail = errorString && errorString() ? errorString() : ""  // ReferenceError here
    ...
```

so even the "fall back to the default bar" diagnostic path throws.

Net effect: the custom-bar plugin mechanism (`"kinds": ["bar"]` + `shell.json`'s `bar.id`) appears to be non-functional for any plugin that doesn't happen to dodge these two bugs — including a stock, unmodified clone of the built-in bar made via the officially documented `omarchy plugin clone` command.

## Suggested fix

- Supply the required properties at creation time for the custom-bar Loader too (e.g. `Loader.setSource(url, {omarchyPath, barWidgetRegistry, barConfig})`, or drop `required` from those three properties in `Bar.qml` and rely on `configureBar()` to populate them immediately after, as the default-bar path effectively already does for `shell`/`manifest`).
- Fix the `errorString` reference in `pluginBarLoader.onStatusChanged` to call the loader's own `errorString()`.

## System details

- Omarchy: 4.0.2-1
- Kernel: Linux 7.1.9-arch1-2 x86_64
- Hyprland: 0.56.2
- Quickshell: 0.3.1-1
- GPU: AMD Radeon RX 5600 XT (Navi 10)

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.