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.
Cloning a service plugin silently breaks its bar indicator
Reported by simonlomax · filed Sep 3, 2026Closed upstream on 2026-09-20 by bjarneo via an automated message, as a duplicate of #7355 (R-1694). 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
Cloning any first-party service plugin silently kills the bar indicator that
depends on it. The indicator stops reflecting state and its click handler
becomes a no-op, with nothing logged.
Concretely, after omarchy plugin clone omarchy.notifications:
- the
Dndbar indicator never lights up, so there is no visual cue that
notifications are silenced
- clicking it does nothing
- SUPER + CTRL + , and the omarchy menu's "Notifications" toggle still work
That last point is the tell: the IPC path resolves clones correctly, the
service-object path does not.
Expected
A cloned service should keep driving its bar indicator, the same way IPC calls
keep reaching it.
Steps to reproduce
omarchy plugin clone omarchy.notificationsomarchy restart shellomarchy-shell notifications setDnd on- Observe the bar: no DND indicator appears. Click where it would be: nothing.
omarchy-toggle-notification-silencingstill toggles state correctly
(omarchy-shell notifications dndState confirms), proving only the
indicator's lookup is broken.
Cause
shell/shell.qml:275
function serviceFor(pluginId) {
return _services[String(pluginId)] || null
}
function firstPartyServiceFor(pluginId) {
return serviceFor(pluginId)
}This is a plain map lookup on the built-in id. Cloning disablesomarchy.notifications and enables <user>.notifications, so the key is absent
and the call returns null.
shell/services/PluginRegistry.qml:146 already has the function that solves
this, and its comment says exactly what is intended:
function resolveEnabledId(id) {
// Callers keep using the built-in id after cloning; the enabled local
// manifest is the implementation that should receive the call.The IPC layer routes through it. serviceFor does not.
Suggested fix
Route firstPartyServiceFor (or serviceFor) through resolveEnabledId, so
both paths agree.
Affected call sites
All hardcode a built-in id and break identically once that plugin is cloned:
| File | Looks up |
|---|---|
shell/plugins/bar/indicators/Dnd.qml:8 | omarchy.notifications |
shell/plugins/bar/indicators/NightLight.qml:7 | omarchy.nightlight |
shell/plugins/bar/indicators/StayAwake.qml:7 | omarchy.idle |
shell/plugins/panels/audio/Panel.qml:20 | omarchy.media |
shell/plugins/services/media/BarWidget.qml:10 | omarchy.media |
Why it matters beyond a dead button
For Dnd the failure mode is genuinely harmful: notifications can be silenced
with no indicator and no working way to unsilence from the bar. It reads as
"notifications are broken" rather than "you are in DND".
System
- Omarchy 4.0.2-1
- Hyprland 0.56.2
- Kernel 7.1.9-arch1-2
- AMD Ryzen 7 7800X3D / NVIDIA RTX 4090
View raw text
## What happened
Cloning any first-party **service** plugin silently kills the bar indicator that
depends on it. The indicator stops reflecting state *and* its click handler
becomes a no-op, with nothing logged.
Concretely, after `omarchy plugin clone omarchy.notifications`:
- the `Dnd` bar indicator never lights up, so there is no visual cue that
notifications are silenced
- clicking it does nothing
- `SUPER + CTRL + ,` and the omarchy menu's "Notifications" toggle still work
That last point is the tell: the IPC path resolves clones correctly, the
service-object path does not.
## Expected
A cloned service should keep driving its bar indicator, the same way IPC calls
keep reaching it.
## Steps to reproduce
1. `omarchy plugin clone omarchy.notifications`
2. `omarchy restart shell`
3. `omarchy-shell notifications setDnd on`
4. Observe the bar: no DND indicator appears. Click where it would be: nothing.
5. `omarchy-toggle-notification-silencing` still toggles state correctly
(`omarchy-shell notifications dndState` confirms), proving only the
indicator's lookup is broken.
## Cause
`shell/shell.qml:275`
```qml
function serviceFor(pluginId) {
return _services[String(pluginId)] || null
}
function firstPartyServiceFor(pluginId) {
return serviceFor(pluginId)
}
```
This is a plain map lookup on the built-in id. Cloning disables
`omarchy.notifications` and enables `<user>.notifications`, so the key is absent
and the call returns `null`.
`shell/services/PluginRegistry.qml:146` already has the function that solves
this, and its comment says exactly what is intended:
```qml
function resolveEnabledId(id) {
// Callers keep using the built-in id after cloning; the enabled local
// manifest is the implementation that should receive the call.
```
The IPC layer routes through it. `serviceFor` does not.
## Suggested fix
Route `firstPartyServiceFor` (or `serviceFor`) through `resolveEnabledId`, so
both paths agree.
## Affected call sites
All hardcode a built-in id and break identically once that plugin is cloned:
| File | Looks up |
|---|---|
| `shell/plugins/bar/indicators/Dnd.qml:8` | `omarchy.notifications` |
| `shell/plugins/bar/indicators/NightLight.qml:7` | `omarchy.nightlight` |
| `shell/plugins/bar/indicators/StayAwake.qml:7` | `omarchy.idle` |
| `shell/plugins/panels/audio/Panel.qml:20` | `omarchy.media` |
| `shell/plugins/services/media/BarWidget.qml:10` | `omarchy.media` |
## Why it matters beyond a dead button
For `Dnd` the failure mode is genuinely harmful: notifications can be silenced
with no indicator and no working way to unsilence from the bar. It reads as
"notifications are broken" rather than "you are in DND".
## System
- Omarchy 4.0.2-1
- Hyprland 0.56.2
- Kernel 7.1.9-arch1-2
- AMD Ryzen 7 7800X3D / NVIDIA RTX 4090
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.