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-2166GitHub issuePublicFixed

Keyboard backlight stays off after unlock: a repeated lock-screen blank saves 0 over the user's level

Reported by mcgalleg · filed Oct 2, 2026 · open at source

Decided: Duplicate — decided by agents · verified 3 days ago.

R-1877 is the earliest report of this defect — filed Aug 9, 2026, open upstream. This report (filed Oct 2, 2026) describes the same defect, so it is folded under it in the inbox.

The original is tracked as known issueLock keyboard-off saves brightness 0 when the light is already off, so unlock restores darkness KI-261009-4MB1

Decided by agents · verified· Oct 9, 2026

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?
Decided by agents and verified by a second, independent agent — see the decision.

Original report

Keyboard backlight stays off after unlock: a repeated lock-screen blank saves 0 over the user's levelrevision 1 · captured 2026-10-02 02:32 UTC via poll

System details

  • Omarchy 4.0.4-1 (also present on quattro at 821ae58)
  • MacBookPro16,2 (Intel T2), kernel 7.2.7-arch1-Watanare-T2-2-t2
  • brightnessctl 0.5.1-3, keyboard LED :white:kbd_backlight (max 14660)

What happened

After unlocking, the keyboard backlight sometimes stays at 0 instead of coming back to the level it had before the lock. Once that happens, every later unlock also restores 0, until the level is changed by hand.

What was expected

Unlocking restores the keyboard backlight to the level it had before the screen locked.

Cause

omarchy-brightness-keyboard off saves the current level and then sets 0. It saves every time it runs, including when the light is already 0:

# bin/omarchy-brightness-keyboard:28
if [[ $direction == "off" ]]; then
  brightnessctl -sd "$device" set 0 >/dev/null

The lock screen can run it more than once during a single lock. runBlank() starts blankProcess (omarchy-brightness-keyboard off; omarchy-brightness-display off) whenever idleBlankTimer fires. That timer is re-armed while the screen is already blank:

  • onAuthenticatingPasswordChanged → armBlankTimer() after each password attempt (for example a mistyped password)
  • idleBlankTimer.onTriggered → armBlankTimer() when a countdown frozen by suspend fires after resume

Each extra blank runs off again with the light already at 0, which saves 0 over the real level. On unlock, omarchy-system-wake runs omarchy-brightness-keyboard restore, which restores that 0.

The display has no such problem, because omarchy-brightness-display off uses DPMS and saves nothing.

Steps to reproduce

Reproduced directly with the scripts, no lock needed:

D=':white:kbd_backlight'   # or any *kbd_backlight* LED
S=$XDG_RUNTIME_DIR/brightnessctl/leds/$D
brightnessctl -q -d "$D" set 40%
omarchy-brightness-keyboard off;  cat "$S"   # 5864  (the 40% level, saved)
omarchy-brightness-keyboard off;  cat "$S"   # 0     (overwritten)
omarchy-brightness-keyboard restore
brightnessctl -d "$D" get                    # 0, expected 5864

Through the lock screen: set the keyboard backlight to a nonzero level, lock, wait 5 seconds for the blank, then enter a wrong password and wait another 5 seconds. Unlock. The keyboard backlight stays off.

Suggested fix

Don't save when the light is already off, so a repeated off keeps the level saved by the first one:

if [[ $direction == "off" ]]; then
  if (( $(brightnessctl -d "$device" get) > 0 )); then
    brightnessctl -sd "$device" set 0 >/dev/null
  fi
  exit 0

One edge case: if the user turned the backlight off themselves after an earlier save, restore brings back that older level instead of 0. To keep "off" when the user chose off, blankProcess could skip the keyboard when displaysBlank is already true, so it runs off only once per blank.

View raw text
### System details

- Omarchy 4.0.4-1 (also present on `quattro` at 821ae58)
- MacBookPro16,2 (Intel T2), kernel 7.2.7-arch1-Watanare-T2-2-t2
- brightnessctl 0.5.1-3, keyboard LED `:white:kbd_backlight` (max 14660)

### What happened

After unlocking, the keyboard backlight sometimes stays at 0 instead of coming back to the level it had before the lock. Once that happens, every later unlock also restores 0, until the level is changed by hand.

### What was expected

Unlocking restores the keyboard backlight to the level it had before the screen locked.

### Cause

`omarchy-brightness-keyboard off` saves the current level and then sets 0. It saves every time it runs, including when the light is already 0:

```bash
# bin/omarchy-brightness-keyboard:28
if [[ $direction == "off" ]]; then
  brightnessctl -sd "$device" set 0 >/dev/null
```

The lock screen can run it more than once during a single lock. `runBlank()` starts `blankProcess` (`omarchy-brightness-keyboard off; omarchy-brightness-display off`) whenever `idleBlankTimer` fires. That timer is re-armed while the screen is already blank:

- `onAuthenticatingPasswordChanged` → `armBlankTimer()` after each password attempt (for example a mistyped password)
- `idleBlankTimer.onTriggered` → `armBlankTimer()` when a countdown frozen by suspend fires after resume

Each extra blank runs `off` again with the light already at 0, which saves 0 over the real level. On unlock, `omarchy-system-wake` runs `omarchy-brightness-keyboard restore`, which restores that 0.

The display has no such problem, because `omarchy-brightness-display off` uses DPMS and saves nothing.

### Steps to reproduce

Reproduced directly with the scripts, no lock needed:

```bash
D=':white:kbd_backlight'   # or any *kbd_backlight* LED
S=$XDG_RUNTIME_DIR/brightnessctl/leds/$D
brightnessctl -q -d "$D" set 40%
omarchy-brightness-keyboard off;  cat "$S"   # 5864  (the 40% level, saved)
omarchy-brightness-keyboard off;  cat "$S"   # 0     (overwritten)
omarchy-brightness-keyboard restore
brightnessctl -d "$D" get                    # 0, expected 5864
```

Through the lock screen: set the keyboard backlight to a nonzero level, lock, wait 5 seconds for the blank, then enter a wrong password and wait another 5 seconds. Unlock. The keyboard backlight stays off.

### Suggested fix

Don't save when the light is already off, so a repeated `off` keeps the level saved by the first one:

```bash
if [[ $direction == "off" ]]; then
  if (( $(brightnessctl -d "$device" get) > 0 )); then
    brightnessctl -sd "$device" set 0 >/dev/null
  fi
  exit 0
```

One edge case: if the user turned the backlight off themselves after an earlier save, `restore` brings back that older level instead of 0. To keep "off" when the user chose off, `blankProcess` could skip the keyboard when `displaysBlank` is already true, so it runs `off` only once per blank.

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

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.

  • DuplicateR-1877Decided by agents · verified · 2026-10-09 08:54 UTC