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-4809GitHub issuePublicReceived

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.

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

Cloned bar plugin never loads: required properties are never setrevision 1 · captured 2026-10-04 12:03 UTC via poll

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

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:

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

Omarchy4.0.2-1
Kernel7.1.9-arch1-2
CPU12th Gen Intel Core i7-12700H
GPUIntel Alder Lake-P GT2 [Iris Xe] + NVIDIA GA107M [RTX 3050 Ti Mobile]
Hyprland0.56.2
Quickshell0.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.