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-brightness-display off dispatches a dpms form the Lua API ignores — locked screens never power off
Reported by kinggs · filed Aug 19, 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?
- 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. So far: in the audited area (lock) — decided by agents · verified; matches no known issue — decided by agents · verified. The outcome (valid, duplicate, not a bug, …) is not decided yet. See the decision.
Original report
What happened
Locking the machine (manually via omarchy system lock, or via idle timeout)
never powers the displays off. The lock screen stays fully lit indefinitely.
What was expected
omarchy-shell's lock plugin arms a blank timer that runsomarchy-brightness-keyboard off; omarchy-brightness-display off ~5 s after
locking (shell/plugins/lock/Service.qml, blankProcess), so the panels
should go dark shortly after lock.
Root cause
bin/omarchy-brightness-display dispatches DPMS like this (current master,
lines ~63 and ~70):
hyprctl dispatch 'hl.dsp.dpms({ action = "disable" })' # off branch
hyprctl dispatch 'hl.dsp.dpms({ action = "enable" })' # on branchOn this system the { action = "disable" } form returns ok but does
nothing — every output still reports dpmsStatus: true afterwards. The
string form works:
$ hyprctl dispatch 'hl.dsp.dpms({ action = "disable" })'; sleep 1
$ hyprctl monitors -j | jq '.[].dpmsStatus'
true
true
$ hyprctl dispatch 'hl.dsp.dpms("off")'; sleep 1
$ hyprctl monitors -j | jq '.[].dpmsStatus'
false
false(hl.dsp.dpms({ action = "enable" }) does relight the panels, which is
consistent with the dispatcher treating any unrecognized argument as "on" —
that would make the broken "off" branch invisible everywhere except a lock
that never blanks.)
Suggested fix
Use the string form in omarchy-brightness-display:
hyprctl dispatch 'hl.dsp.dpms("off")'
hyprctl dispatch 'hl.dsp.dpms("on")'Steps to reproduce
omarchy system lock(or wait for idle lock)- Don't touch anything for a minute
- Displays stay lit;
hyprctl monitors -j | jq '.[].dpmsStatus'(from a TTY
or over SSH) shows true on every output
System
- Omarchy 4.0.0-1 (also reproduced against current master's
bin/omarchy-brightness-display)
- Hyprland 0.56.2-1 (v0.56.2, commit efb5099)
- CPU: AMD Ryzen 9 7950X3D; GPU: NVIDIA RTX 4060 Ti (AD106) + AMD Raphael iGPU
- Monitors: 2× Dell SE3223Q (HDMI-A-1 + DP-3), scale 1.6
- Full omarchy debug log available on request
Possibly related but distinct: #7399 reports the lock screen re-blanking
after DPMS wake, which implies blanking does work on that setup — so this may
be version- or path-dependent rather than universal.
View raw text
## What happened
Locking the machine (manually via `omarchy system lock`, or via idle timeout)
never powers the displays off. The lock screen stays fully lit indefinitely.
## What was expected
`omarchy-shell`'s lock plugin arms a blank timer that runs
`omarchy-brightness-keyboard off; omarchy-brightness-display off` ~5 s after
locking (`shell/plugins/lock/Service.qml`, `blankProcess`), so the panels
should go dark shortly after lock.
## Root cause
`bin/omarchy-brightness-display` dispatches DPMS like this (current master,
lines ~63 and ~70):
```bash
hyprctl dispatch 'hl.dsp.dpms({ action = "disable" })' # off branch
hyprctl dispatch 'hl.dsp.dpms({ action = "enable" })' # on branch
```
On this system the `{ action = "disable" }` form returns `ok` but does
nothing — every output still reports `dpmsStatus: true` afterwards. The
string form works:
```
$ hyprctl dispatch 'hl.dsp.dpms({ action = "disable" })'; sleep 1
$ hyprctl monitors -j | jq '.[].dpmsStatus'
true
true
$ hyprctl dispatch 'hl.dsp.dpms("off")'; sleep 1
$ hyprctl monitors -j | jq '.[].dpmsStatus'
false
false
```
(`hl.dsp.dpms({ action = "enable" })` does relight the panels, which is
consistent with the dispatcher treating any unrecognized argument as "on" —
that would make the broken "off" branch invisible everywhere except a lock
that never blanks.)
## Suggested fix
Use the string form in `omarchy-brightness-display`:
```bash
hyprctl dispatch 'hl.dsp.dpms("off")'
hyprctl dispatch 'hl.dsp.dpms("on")'
```
## Steps to reproduce
1. `omarchy system lock` (or wait for idle lock)
2. Don't touch anything for a minute
3. Displays stay lit; `hyprctl monitors -j | jq '.[].dpmsStatus'` (from a TTY
or over SSH) shows `true` on every output
## System
- Omarchy 4.0.0-1 (also reproduced against current master's
`bin/omarchy-brightness-display`)
- Hyprland 0.56.2-1 (v0.56.2, commit efb5099)
- CPU: AMD Ryzen 9 7950X3D; GPU: NVIDIA RTX 4060 Ti (AD106) + AMD Raphael iGPU
- Monitors: 2× Dell SE3223Q (HDMI-A-1 + DP-3), scale 1.6
- Full `omarchy debug` log available on request
Possibly related but distinct: #7399 reports the lock screen *re-blanking*
after DPMS wake, which implies blanking does work on that setup — so this may
be version- or path-dependent rather than universal.
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.
- Decided by agents · verified: in the audited area (lock)
- Decided by agents · verified: matches no known issue
The outcome (valid, duplicate, not a bug, …) is not decided yet.