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-947GitHub issuePublicDecided· Out of scope

Bar widget stays disabled: enable/putBarWidget no-op once a plugin already has an overlay plugins[] entry

Reported by theaxlklo · filed Sep 5, 2026 · open at source

Decided: Out of scope — decided by agents · verified 3 days ago.

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?
AreaOutside the audited area· Decided by agents · verified
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?
Decided by agents and verified by a second, independent agent — see the decision.

Original report

Bar widget stays disabled: enable/putBarWidget no-op once a plugin already has an overlay plugins[] entryrevision 1 · captured 2026-09-28 21:23 UTC via poll

What happened

For a third-party plugin whose manifest started as "kinds": ["overlay"]
and later gained "bar-widget" (new entryPoints.barWidget +
barWidget block, e.g. after adding a status-bar icon to an existing
overlay plugin), both omarchy plugin enable <id> and the underlying
omarchy-shell shell putBarWidget <id> '{}' IPC call report success but
do nothing: the widget is never added to shell.json's bar.layout, and
omarchy plugin list keeps reporting it as disabled.

Root cause

In shell/services/PluginRegistry.qml, setEnabled() computes
location = findEntryLocation(config, key) up front. Because the plugin
already has a top-level entry in config.plugins[] (added back when it
was still overlay-only), location.found is true. The bar-widget
insertion branch is guarded by:

if (!location.found && isBarWidget) {
  ... config.bar.layout[target.section].splice(target.index, 0, entry) ...
}

so it's skipped — the plugin is treated as "already enabled" and nothing
is written to bar.layout.

But shell.qml's listPlugins() defines enabled for anything with
bar-widget in kinds as shell.pluginRegistry.inBar(id) (checks
bar.layout specifically, not plugins[]):

enabled: isBarOption ? active
  : (isBarWidget ? shell.pluginRegistry.inBar(id) : shell.pluginRegistry.isEnabled(id)),

So the two functions disagree about what "enabled" means for this
plugin, and there is no way to get the widget placed via the documented
omarchy plugin enable / putBarWidget path once this state is reached.

putBarWidget() hits the same wall: it only special-cases inBar(id)
before delegating straight to setEnabled(id, true, target), so it fails
identically once location.found is already true for another reason.

Repro

  1. Install/enable a plugin with "kinds": ["overlay"] only. This adds

{ "id": "<id>" } to shell.json's top-level plugins[].
2. Update the plugin's manifest.json: add "bar-widget" to kinds,
plus entryPoints.barWidget and a barWidget block pointing at a new
QML file.
3. omarchy-shell shell rescanPlugins
4. omarchy plugin enable <id> → prints "Enabled <id>", exit 0. (Or:
omarchy-shell shell putBarWidget <id> '{}' → returns "ok".)
5. omarchy plugin list --json still shows "enabled": false for
<id>, and shell.json's bar.layout has no entry for it.

Expected

Step 4 should add the widget to bar.layout (at the plugin's
barWidget.defaultSection, same placement a brand-new install would
get), matching what listPlugins() actually checks for a
bar-widget-kind plugin's enabled state.

Workaround

Manually add { "id": "<id>" } to the right bar.layout.<section>
array in shell.json by hand; the running shell picks it up live and
omarchy plugin list then correctly reports it enabled.

System

  • Omarchy 4.0.2-1
  • Hyprland 0.56.2
  • omarchy-shell / Quickshell — live process, IPC responsive throughout
View raw text
## What happened

For a third-party plugin whose manifest started as `"kinds": ["overlay"]`
and later gained `"bar-widget"` (new `entryPoints.barWidget` +
`barWidget` block, e.g. after adding a status-bar icon to an existing
overlay plugin), both `omarchy plugin enable <id>` and the underlying
`omarchy-shell shell putBarWidget <id> '{}'` IPC call report success but
do nothing: the widget is never added to `shell.json`'s `bar.layout`, and
`omarchy plugin list` keeps reporting it as disabled.

## Root cause

In `shell/services/PluginRegistry.qml`, `setEnabled()` computes
`location = findEntryLocation(config, key)` up front. Because the plugin
already has a top-level entry in `config.plugins[]` (added back when it
was still overlay-only), `location.found` is `true`. The bar-widget
insertion branch is guarded by:

```js
if (!location.found && isBarWidget) {
  ... config.bar.layout[target.section].splice(target.index, 0, entry) ...
}
```

so it's skipped — the plugin is treated as "already enabled" and nothing
is written to `bar.layout`.

But `shell.qml`'s `listPlugins()` defines `enabled` for anything with
`bar-widget` in `kinds` as `shell.pluginRegistry.inBar(id)` (checks
`bar.layout` specifically, not `plugins[]`):

```js
enabled: isBarOption ? active
  : (isBarWidget ? shell.pluginRegistry.inBar(id) : shell.pluginRegistry.isEnabled(id)),
```

So the two functions disagree about what "enabled" means for this
plugin, and there is no way to get the widget placed via the documented
`omarchy plugin enable` / `putBarWidget` path once this state is reached.

`putBarWidget()` hits the same wall: it only special-cases `inBar(id)`
before delegating straight to `setEnabled(id, true, target)`, so it fails
identically once `location.found` is already true for another reason.

## Repro

1. Install/enable a plugin with `"kinds": ["overlay"]` only. This adds
   `{ "id": "<id>" }` to `shell.json`'s top-level `plugins[]`.
2. Update the plugin's `manifest.json`: add `"bar-widget"` to `kinds`,
   plus `entryPoints.barWidget` and a `barWidget` block pointing at a new
   QML file.
3. `omarchy-shell shell rescanPlugins`
4. `omarchy plugin enable <id>` → prints "Enabled `<id>`", exit 0. (Or:
   `omarchy-shell shell putBarWidget <id> '{}'` → returns `"ok"`.)
5. `omarchy plugin list --json` still shows `"enabled": false` for
   `<id>`, and `shell.json`'s `bar.layout` has no entry for it.

## Expected

Step 4 should add the widget to `bar.layout` (at the plugin's
`barWidget.defaultSection`, same placement a brand-new install would
get), matching what `listPlugins()` actually checks for a
bar-widget-kind plugin's `enabled` state.

## Workaround

Manually add `{ "id": "<id>" }` to the right `bar.layout.<section>`
array in `shell.json` by hand; the running shell picks it up live and
`omarchy plugin list` then correctly reports it enabled.

## System

- Omarchy 4.0.2-1
- Hyprland 0.56.2
- omarchy-shell / Quickshell — live process, IPC responsive throughout

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.

  • Out of scopeDecided by agents · verified · 2026-10-09 10:49 UTC