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

Plugin code under ~/.config/omarchy/plugins/ never hot-reloads: neither on save nor via rescanPlugins

Reported by kidskript3 · filed Sep 3, 2026Closed upstream on 2026-09-20 by bjarneo via an automated message, as a duplicate of #6981 (R-1835). 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

Plugin code under ~/.config/omarchy/plugins/ never hot-reloads: neither on save nor via rescanPluginsrevision 1 · captured 2026-10-04 12:10 UTC via poll

What happened

shell/README.md documents two ways for plugin code under
~/.config/omarchy/plugins/ to take effect in the running shell:

Saving a file anywhere under ~/.config/omarchy/plugins/ reloads plugin code automatically; omarchy-shell shell rescanPlugins remains available to force a reload.

Neither works here. The panel keeps rendering the previous code until
omarchy restart shell.

The file watcher itself is fine — saving the file logs the reload:

DEBUG qml: Local plugin changed, reloading: <user>.monitor

…and the plugin registry rescans afterwards (the usual service-ready and
handler-registration lines follow). The QML that is actually rendered does not
change.

Steps to reproduce

  1. omarchy plugin clone omarchy.monitor
  2. In ~/.config/omarchy/plugins/<user>.monitor/Panel.qml, change the panel

heading (line 611) from text: "Display" to text: "Display MARKER-A" and save.
3. Open the panel (SUPER + CTRL + D) — heading still reads Display.
4. omarchy-shell shell rescanPlugins, reopen — still Display.
5. omarchy restart shell, reopen — now reads Display MARKER-A.

Steps 3 and 4 are the bug; step 5 is the workaround.

Why this one bites harder than a stale heading

The same staleness applies to omarchy plugin clone itself. After cloning,
every tool reports the clone as the active plugin:

$ omarchy plugin list
omarchy.monitor      disabled  first-party  bar-widget  Display
<user>.monitor       enabled   third-party  bar-widget  My Display

…while the shell goes on executing the built-in component. Editing the clone
appears to have no effect, and there is nothing in the UI or the CLI output
pointing at a restart. I spent a while re-checking a patch that had been
correct all along before a marker string showed me which copy was live.

Possible cause

Worth checking rather than a diagnosis — finishPluginReload() in
shell/shell.qml:752 clears the component cache behind a feature test:

if (typeof Qt.clearComponentCache === "function") Qt.clearComponentCache()

If Qt.clearComponentCache is not exposed in Quickshell's QML environment,
that test fails silently and pluginRegistry.rescan() re-instantiates the
components from cache — which matches the symptom exactly: the reload runs
end to end, and the old code survives it. ~/.cache/quickshell/qmlcache/ may
be worth a look in the same breath.

System

  • Omarchy 4.0.2-1
  • Hyprland 0.56.2
  • Intel Core i7-12700H / NVIDIA RTX 3070 Ti Laptop GPU

Related

Found while patching the display panel locally for #10086.

View raw text
### What happened

`shell/README.md` documents two ways for plugin code under
`~/.config/omarchy/plugins/` to take effect in the running shell:

> Saving a file anywhere under `~/.config/omarchy/plugins/` reloads plugin code
> automatically; `omarchy-shell shell rescanPlugins` remains available to force a reload.

Neither works here. The panel keeps rendering the previous code until
`omarchy restart shell`.

The file watcher itself is fine — saving the file logs the reload:

```
DEBUG qml: Local plugin changed, reloading: <user>.monitor
```

…and the plugin registry rescans afterwards (the usual `service-ready` and
handler-registration lines follow). The QML that is actually rendered does not
change.

### Steps to reproduce

1. `omarchy plugin clone omarchy.monitor`
2. In `~/.config/omarchy/plugins/<user>.monitor/Panel.qml`, change the panel
   heading (line 611) from `text: "Display"` to `text: "Display MARKER-A"` and save.
3. Open the panel (`SUPER + CTRL + D`) — heading still reads **Display**.
4. `omarchy-shell shell rescanPlugins`, reopen — still **Display**.
5. `omarchy restart shell`, reopen — now reads **Display MARKER-A**.

Steps 3 and 4 are the bug; step 5 is the workaround.

### Why this one bites harder than a stale heading

The same staleness applies to `omarchy plugin clone` itself. After cloning,
every tool reports the clone as the active plugin:

```
$ omarchy plugin list
omarchy.monitor      disabled  first-party  bar-widget  Display
<user>.monitor       enabled   third-party  bar-widget  My Display
```

…while the shell goes on executing the built-in component. Editing the clone
appears to have no effect, and there is nothing in the UI or the CLI output
pointing at a restart. I spent a while re-checking a patch that had been
correct all along before a marker string showed me which copy was live.

### Possible cause

Worth checking rather than a diagnosis — `finishPluginReload()` in
`shell/shell.qml:752` clears the component cache behind a feature test:

```qml
if (typeof Qt.clearComponentCache === "function") Qt.clearComponentCache()
```

If `Qt.clearComponentCache` is not exposed in Quickshell's QML environment,
that test fails silently and `pluginRegistry.rescan()` re-instantiates the
components from cache — which matches the symptom exactly: the reload runs
end to end, and the old code survives it. `~/.cache/quickshell/qmlcache/` may
be worth a look in the same breath.

### System

- Omarchy 4.0.2-1
- Hyprland 0.56.2
- Intel Core i7-12700H / NVIDIA RTX 3070 Ti Laptop GPU

### Related

Found while patching the display panel locally for #10086.

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.