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

omarchy bar set --json cannot persist array settings (tray pinned ["steam"] stored as "steam")

Reported by mscurtescu · filed Sep 8, 2026Closed upstream on 2026-09-08 by its own reporter mscurtescu, as a duplicate of #7120 (R-1771). GitHub close reason: duplicate.

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

omarchy bar set --json cannot persist array settings (tray pinned ["steam"] stored as "steam")revision 1 · captured 2026-10-04 12:10 UTC via poll

System details

Framework Laptop 13 (AMD Ryzen AI 9 HX 370 / Radeon 890M), Omarchy 4.0.2-1, linux 7.1.9-arch1-2, Hyprland 0.56.2, quickshell 0.3.1-1

What's wrong?

omarchy bar set --json cannot persist JSON array widget settings. The command reports success, but a one-element array is stored as a string, and a multi-element array is rejected by Quickshell IPC as extra arguments.

This matters for omarchy.tray: pinned / hidden are arrays. Tray.qml only honors an array:

readonly property var pinnedIds: settings.pinned instanceof Array ? settings.pinned : []

So omarchy bar set omarchy.tray pinned '["steam"]' --json looks like it worked and does nothing: Steam stays in the hover drawer. Pinning from the chevron manage popup works, because that path writes a real array in-process via updateEntryInline.

Steps

With omarchy.tray on the bar and Steam running (or any SNI id):

omarchy bar set omarchy.tray pinned '["steam"]' --json
# → Set pinned on omarchy.tray

~/.config/omarchy/shell.json then has:

{ "id": "omarchy.tray", "pinned": "steam" }

Expected:

{ "id": "omarchy.tray", "pinned": ["steam"] }

Direct IPC (same result):

omarchy-shell shell setBarWidget omarchy.tray pinned '["steam"]' '{}'
# stored "steam" (string)

omarchy-shell shell setBarWidget omarchy.tray pinned '["steam","foo"]' '{}'
# Too many arguments provided (4 required but 5 were provided.)
# Function definition: function setBarWidget(id: string, key: string, valueJson: string, selectorJson: string): string

omarchy-shell shell setBarWidget omarchy.tray pinned '{"a":1}' '{}'
# stored {"a":1}  (object, correct)

omarchy-shell shell setBarWidget omarchy.tray pinned '300' '{}'
# stored 300  (number, correct)

Objects, numbers, and bools round-trip. Arrays do not.

Where it breaks

omarchy-bar cmd_set is fine: jq --argjson emits ["steam"], then:

omarchy-shell shell setBarWidget "$id" "$key" "$value_json" "$(placement_json)"

omarchy-shell forwards that to qs ipc call. shell.qml setBarWidget is typed with valueJson: string and does JSON.parse(valueJson).

A JSON array argument is not one string to parse. A one-element array is coerced into the string "steam" (parse succeeds, wrong type). Two or more elements become extra IPC arguments.

The chevron Pin button never hits this path (persistTrayState → updateEntryInline with a JS array), which is why the UI works and the documented CLI does not.

Workaround: edit ~/.config/omarchy/shell.json so pinned is an array, or pin from the chevron popup.

omarchy-debug --no-sudo --print was collected locally; this is a CLI/IPC bug, not a hardware one.

View raw text
### System details

Framework Laptop 13 (AMD Ryzen AI 9 HX 370 / Radeon 890M), Omarchy 4.0.2-1, linux 7.1.9-arch1-2, Hyprland 0.56.2, quickshell 0.3.1-1

### What's wrong?

`omarchy bar set --json` cannot persist **JSON array** widget settings. The command reports success, but a one-element array is stored as a string, and a multi-element array is rejected by Quickshell IPC as extra arguments.

This matters for `omarchy.tray`: `pinned` / `hidden` are arrays. `Tray.qml` only honors an array:

```qml
readonly property var pinnedIds: settings.pinned instanceof Array ? settings.pinned : []
```

So `omarchy bar set omarchy.tray pinned '["steam"]' --json` looks like it worked and does nothing: Steam stays in the hover drawer. Pinning from the chevron manage popup works, because that path writes a real array in-process via `updateEntryInline`.

#### Steps

With `omarchy.tray` on the bar and Steam running (or any SNI id):

```bash
omarchy bar set omarchy.tray pinned '["steam"]' --json
# → Set pinned on omarchy.tray
```

`~/.config/omarchy/shell.json` then has:

```json
{ "id": "omarchy.tray", "pinned": "steam" }
```

Expected:

```json
{ "id": "omarchy.tray", "pinned": ["steam"] }
```

Direct IPC (same result):

```bash
omarchy-shell shell setBarWidget omarchy.tray pinned '["steam"]' '{}'
# stored "steam" (string)

omarchy-shell shell setBarWidget omarchy.tray pinned '["steam","foo"]' '{}'
# Too many arguments provided (4 required but 5 were provided.)
# Function definition: function setBarWidget(id: string, key: string, valueJson: string, selectorJson: string): string

omarchy-shell shell setBarWidget omarchy.tray pinned '{"a":1}' '{}'
# stored {"a":1}  (object, correct)

omarchy-shell shell setBarWidget omarchy.tray pinned '300' '{}'
# stored 300  (number, correct)
```

Objects, numbers, and bools round-trip. Arrays do not.

#### Where it breaks

`omarchy-bar` `cmd_set` is fine: `jq --argjson` emits `["steam"]`, then:

```bash
omarchy-shell shell setBarWidget "$id" "$key" "$value_json" "$(placement_json)"
```

`omarchy-shell` forwards that to `qs ipc call`. `shell.qml` `setBarWidget` is typed with `valueJson: string` and does `JSON.parse(valueJson)`.

A JSON array argument is not one string to parse. A one-element array is coerced into the string `"steam"` (parse succeeds, wrong type). Two or more elements become extra IPC arguments.

The chevron Pin button never hits this path (`persistTrayState` → `updateEntryInline` with a JS array), which is why the UI works and the documented CLI does not.

Workaround: edit `~/.config/omarchy/shell.json` so `pinned` is an array, or pin from the chevron popup.

`omarchy-debug --no-sudo --print` was collected locally; this is a CLI/IPC bug, not a hardware one.

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.