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

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.

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

Display panel: clicking a display row does nothing — toggleDisplay() still uses `hyprctl keyword`, which Hyprland 0.56's Lua parser rejectsrevision 1 · captured 2026-10-04 12:03 UTC via poll

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

  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

hyprctl eval 'hl.monitor({ output = "DP-2", disabled = true })'   # off
hyprctl reload                                                     # back on

Possible 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.