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.
Display panel: clicking a display row does nothing — toggleDisplay() still uses `hyprctl keyword`, which Hyprland 0.56's Lua parser rejects
Reported by jondan1986 · filed Sep 1, 2026Closed upstream on 2026-09-01 by its own reporter jondan1986, as a duplicate of #6968 (R-1839). GitHub close reason: not_planned.
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
In the Display panel (omarchy.monitor, SUPER + CTRL + D), clicking a row under DISPLAYS does nothing. The display is not turned off, the checkmark never changes, and no error is surfaced anywhere in the UI.
Expected
Clicking a display row toggles that output off/on — which is what the row's checkmark, hover fill and pointing-hand cursor advertise.
Cause
shell/plugins/panels/monitor/Panel.qml — toggleDisplay() (line 303 on master today):
actionProc.command = ["hyprctl", "keyword", "monitor", name + (enabled ? ",disable" : ",preferred,auto,auto")]Hyprland 0.56's Lua config parser no longer accepts hyprctl keyword at all:
$ hyprctl keyword general:border_size 5
keyword can't work with non-legacy parsers. Use eval.The process exits immediately, actionProc.onRunningChanged fires refresh(), the state re-reads unchanged, and the click silently no-ops.
The panel's SCALE pills still work, because they route through omarchy-hyprland-monitor-scaling, which was migrated to hyprctl eval:
hyprctl eval "hl.monitor({ output = \"$active_monitor\", mode = ..., position = \"auto\", scale = $new_scale })"The monitor panel's enable/disable path appears to have been missed in that migration. bin/omarchy-hyprland-monitor-internal likewise avoids keyword (it writes a Lua toggle flag and reloads).
Steps to reproduce
- Two or more connected displays (so
enabledDisplayCount > 1and the rows are clickable). SUPER + CTRL + D→ DISPLAYS section.- Click any display row.
- Nothing happens;
hyprctl monitors all -jstill reports"disabled": falsefor that output.
Workaround
hyprctl eval 'hl.monitor({ output = "DP-2", disabled = true })' # off
hyprctl reload # back onPossible fix
actionProc.command = enabled
? ["hyprctl", "eval", "hl.monitor({ output = \"" + name + "\", disabled = true })"]
: ["hyprctl", "reload"]Re-enabling via hyprctl reload has a side benefit over the current preferred,auto,auto: it restores whatever the user pinned in ~/.config/hypr/monitors.lua (mode, position, scale) instead of discarding it. If a per-output re-enable is wanted instead, the mode/position/scale would need to be re-declared through eval.
System
- Omarchy 4.0.1-1
- Hyprland 0.56.2 (
v0.56.2,efb50993780079460b0cbed1363e2166a2de1d9f) - Kernel 7.1.9-arch1-2
- AMD Ryzen 5 5600X, NVIDIA GeForce RTX 3060 (GA106)
- Two DisplayPort monitors: 2560x1440@120 and [email protected], both at scale 1.25
Happy to attach a full omarchy debug log if useful.
View raw text
## What happened
In the Display panel (`omarchy.monitor`, `SUPER + CTRL + D`), clicking a row under **DISPLAYS** does nothing. The display is not turned off, the checkmark never changes, and no error is surfaced anywhere in the UI.
## Expected
Clicking a display row toggles that output off/on — which is what the row's checkmark, hover fill and pointing-hand cursor advertise.
## Cause
`shell/plugins/panels/monitor/Panel.qml` — `toggleDisplay()` (line 303 on master today):
```qml
actionProc.command = ["hyprctl", "keyword", "monitor", name + (enabled ? ",disable" : ",preferred,auto,auto")]
```
Hyprland 0.56's Lua config parser no longer accepts `hyprctl keyword` at all:
```
$ hyprctl keyword general:border_size 5
keyword can't work with non-legacy parsers. Use eval.
```
The process exits immediately, `actionProc.onRunningChanged` fires `refresh()`, the state re-reads unchanged, and the click silently no-ops.
The panel's **SCALE** pills still work, because they route through `omarchy-hyprland-monitor-scaling`, which *was* migrated to `hyprctl eval`:
```bash
hyprctl eval "hl.monitor({ output = \"$active_monitor\", mode = ..., position = \"auto\", scale = $new_scale })"
```
The monitor panel's enable/disable path appears to have been missed in that migration. `bin/omarchy-hyprland-monitor-internal` likewise avoids `keyword` (it writes a Lua toggle flag and reloads).
## Steps to reproduce
1. Two or more connected displays (so `enabledDisplayCount > 1` and the rows are clickable).
2. `SUPER + CTRL + D` → **DISPLAYS** section.
3. Click any display row.
4. Nothing happens; `hyprctl monitors all -j` still reports `"disabled": false` for that output.
## Workaround
```bash
hyprctl eval 'hl.monitor({ output = "DP-2", disabled = true })' # off
hyprctl reload # back on
```
## Possible fix
```qml
actionProc.command = enabled
? ["hyprctl", "eval", "hl.monitor({ output = \"" + name + "\", disabled = true })"]
: ["hyprctl", "reload"]
```
Re-enabling via `hyprctl reload` has a side benefit over the current `preferred,auto,auto`: it restores whatever the user pinned in `~/.config/hypr/monitors.lua` (mode, position, scale) instead of discarding it. If a per-output re-enable is wanted instead, the mode/position/scale would need to be re-declared through `eval`.
## System
- Omarchy 4.0.1-1
- Hyprland 0.56.2 (`v0.56.2`, `efb50993780079460b0cbed1363e2166a2de1d9f`)
- Kernel 7.1.9-arch1-2
- AMD Ryzen 5 5600X, NVIDIA GeForce RTX 3060 (GA106)
- Two DisplayPort monitors: 2560x1440@120 and [email protected], both at scale 1.25
Happy to attach a full `omarchy debug` log if useful.
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.