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.
omarchy plugin clone leaves moduleName/ipcTarget pointing at the source plugin, so the clone collides with the original
Reported by travelingnomad1 · filed Oct 7, 2026 · open at source
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
What happened
omarchy plugin clone omarchy.power produces a clone whose manifest id is
correct (will.power) but whose QML still declares the source plugin's
identifiers:
// ~/.config/omarchy/plugins/will.power/Panel.qml, straight after cloning
moduleName: "omarchy.power"
ipcTarget: "omarchy.power"Consequences observed:
- The clone registers the IPC target
omarchy.power, the same one the stock
plugin uses. qs ipc … show lists only one omarchy.power; the clone is not
individually addressable, and omarchy-shell will.power open fails with
"Target not found".
- The panel's own right-click action (the show-percentage toggle) calls
shell.updateEntryInline(root.moduleName, …), so it writes its setting to
the stock plugin's bar entry rather than the clone's — the toggle appears
to do nothing.
Editing both lines to the clone's id fixes everything; nothing else was needed.
Cause
omarchy-plugin-clone rewrites only file names listed in entryPoints /omarchy.clonePaths:
if [[ $source != "$target" ]]; then
source_pattern=${source//./\\.}
while IFS= read -r -d '' file; do
sed -i "s|$source_pattern|$target|g" "$file"
done < <(rg --files-with-matches --null --fixed-strings "$source" "$target_dir")
done < <(jq -r '[ (.entryPoints[] | {source: ., target: .}),
(.omarchy.clonePaths[]? | {source: .source, target: .target}) ] ...' "$manifest")The loop is driven by path entries, so the plugin id itself is never part
of $source/$target and occurrences of it inside the copied QML are left
untouched. update_manifest() correctly rewrites the manifest id and recordsclonedFrom, which makes the mismatch easy to miss.
Expected
A cloned plugin should be self-contained: its moduleName / ipcTarget (and
any other reference to its own id) should be rewritten to the clone's id, so it
neither collides with the original nor writes settings to it.
Suggested fix
In omarchy-plugin-clone, after copying, additionally rewrite the source
plugin id to the target id across the cloned tree — i.e. run the same sed
with source = <source manifest id> and target = <target id>, not just for
path entries.
Steps to reproduce
omarchy plugin clone omarchy.powergrep -nE '^\s*(moduleName|ipcTarget):' ~/.config/omarchy/plugins/<user>.power/Panel.qml
→ both still read omarchy.power.
3. omarchy restart shell, then
qs ipc -n -p /usr/share/omarchy/shell show | grep -A1 'target .*power'
→ only omarchy.power is registered.
4. Right-click the cloned battery widget to toggle the percentage → the setting
lands on the stock plugin's bar entry.
System
- Omarchy 4.0.4-1, omarchy-settings 4.0.4-1
- Quickshell 0.3.1-1
- Kernel 7.2.5-3-omarchy
- Google Pixelbook (Eve)
View raw text
### What happened
`omarchy plugin clone omarchy.power` produces a clone whose manifest id is
correct (`will.power`) but whose QML still declares the **source** plugin's
identifiers:
```qml
// ~/.config/omarchy/plugins/will.power/Panel.qml, straight after cloning
moduleName: "omarchy.power"
ipcTarget: "omarchy.power"
```
Consequences observed:
- The clone registers the IPC target `omarchy.power`, the same one the stock
plugin uses. `qs ipc … show` lists only one `omarchy.power`; the clone is not
individually addressable, and `omarchy-shell will.power open` fails with
"Target not found".
- The panel's own right-click action (the show-percentage toggle) calls
`shell.updateEntryInline(root.moduleName, …)`, so it writes its setting to
the **stock plugin's** bar entry rather than the clone's — the toggle appears
to do nothing.
Editing both lines to the clone's id fixes everything; nothing else was needed.
### Cause
`omarchy-plugin-clone` rewrites only *file names* listed in `entryPoints` /
`omarchy.clonePaths`:
```bash
if [[ $source != "$target" ]]; then
source_pattern=${source//./\\.}
while IFS= read -r -d '' file; do
sed -i "s|$source_pattern|$target|g" "$file"
done < <(rg --files-with-matches --null --fixed-strings "$source" "$target_dir")
done < <(jq -r '[ (.entryPoints[] | {source: ., target: .}),
(.omarchy.clonePaths[]? | {source: .source, target: .target}) ] ...' "$manifest")
```
The loop is driven by path entries, so the plugin **id** itself is never part
of `$source`/`$target` and occurrences of it inside the copied QML are left
untouched. `update_manifest()` correctly rewrites the manifest id and records
`clonedFrom`, which makes the mismatch easy to miss.
### Expected
A cloned plugin should be self-contained: its `moduleName` / `ipcTarget` (and
any other reference to its own id) should be rewritten to the clone's id, so it
neither collides with the original nor writes settings to it.
### Suggested fix
In `omarchy-plugin-clone`, after copying, additionally rewrite the source
plugin id to the target id across the cloned tree — i.e. run the same `sed`
with `source = <source manifest id>` and `target = <target id>`, not just for
path entries.
### Steps to reproduce
1. `omarchy plugin clone omarchy.power`
2. `grep -nE '^\s*(moduleName|ipcTarget):' ~/.config/omarchy/plugins/<user>.power/Panel.qml`
→ both still read `omarchy.power`.
3. `omarchy restart shell`, then
`qs ipc -n -p /usr/share/omarchy/shell show | grep -A1 'target .*power'`
→ only `omarchy.power` is registered.
4. Right-click the cloned battery widget to toggle the percentage → the setting
lands on the stock plugin's bar entry.
### System
- Omarchy 4.0.4-1, omarchy-settings 4.0.4-1
- Quickshell 0.3.1-1
- Kernel 7.2.5-3-omarchy
- Google Pixelbook (Eve)
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 22:04 UTC