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

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

In the audited area (lock) — decided by agents · verified. Not validated 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?
AreaIn the audited arealock· 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?
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

omarchy-brightness-display off dispatches a dpms form the Lua API ignores — locked screens never power offrevision 1 · captured 2026-09-28 21:29 UTC via poll

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):

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:

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.

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.