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-1099GitHub issuePublicDecided· Out of scope

Screensaver fires over fullscreen Steam games every 150s: the idle_inhibit rule can never match a game

Reported by angel-ventura · filed Sep 1, 2026 · open at source

Decided: Out of scope — decided by agents · verified 3 days ago.

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?
AreaOutside the audited area· 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

Screensaver fires over fullscreen Steam games every 150s: the idle_inhibit rule can never match a gamerevision 1 · captured 2026-09-28 21:24 UTC via poll

System details

AMD Ryzen 7 9700X, NVIDIA RTX 5070 Ti (nvidia-utils 610.57.04), Omarchy 4.0.0.alpha, Hyprland 0.56.2, kernel 7.1.9-arch1

What's wrong?

Summary

default/hypr/apps/steam.lua:1 gives Steam an idle inhibitor:

o.window("steam", { float = true, idle_inhibit = "fullscreen" })

Hyprland matches window-rule regexes with re2::RE2::FullMatch
(src/desktop/rule/matchEngine/RegexMatchEngine.cpp:16), so "steam" matches
only the literal class steam — the Steam client and Big Picture Mode. An
actual game has class steam_app_<appid>, so **no Steam game ever receives an
idle inhibitor.**

The result: the screensaver launches on top of a fullscreen game every
idle.screensaver seconds (default 150) and is dismissed about a second later.
It reads as a graphics bug — a brief flash where the game looks like it is
re-entering fullscreen, showing the desktop gaps and the gradient window border
— because the screensaver window carries fullscreen = true, float = true,
animation = "slide" (default/hypr/apps/system.lua:35-37).

It only affects gamepad play. Gamepads are not on the Wayland seat — SDL reads
them straight from evdev — so controller input never resets the idle timer.
Keyboard/mouse sessions are unaffected, which makes it look intermittent and
hard to pin down.

Evidence

Correlating Steam's logs/console_log.txt game sessions against
idle-cycle-start in the user journal, on this machine:

SessionLengthScreensaver fired
Elden Ring Nightreign, 2026-08-26 18:48–20:37109 min42x, every 151s
Elden Ring Nightreign, 2026-08-30 18:58–19:2830 min11x
Elden Ring Nightreign, 2026-08-30 19:30–20:5888 min34x
Elden Ring Nightreign, 2026-08-31 19:43–20:01 (kb+mouse)18 min0
Elden Ring Nightreign, 2026-09-01 10:41–11:15 (after fix)33 min0

Measured interval across those 42 fires: min 151s, median 151s, max 152s,
against the configured idle.screensaver = 150.

One cycle, mid-game:

Aug 26 18:51:46.724  idle-monitor: idle
Aug 26 18:51:46.724  idle-cycle-start: screensaver=150 lock=300
Aug 26 18:51:46.724  process-start: screensaver ... omarchy-launch-screensaver
Aug 26 18:51:46.881  idle-monitor: active
Aug 26 18:51:46.884  process-exit: screensaver exitCode=0
Aug 26 18:51:47.932  idle-cycle-cancel: screensaver-dismissed
Aug 26 18:51:48.006  process-exit: wake exitCode=0
Aug 26 18:54:17.933  idle-monitor: idle          <- 151s later, again

Confirmed the game's class from the Hyprland event socket:

openwindow>>557641f17e50,2,steam_app_2622380,ELDEN RING NIGHTREIGN
fullscreen>>1
  -> fullscreen now: class='steam_app_2622380' title='ELDEN RING NIGHTREIGN'

Reproduced on two independent machines running the same Omarchy install, and
the one-line fix below was applied to both and resolved it on both.

Why Big Picture Mode appears to work around it

Big Picture's window class is literally steam, so it is the one Steam window
the rule does match. Using Big Picture as a workaround happens to inhibit idle —
which is why this looks like a Big Picture vs. desktop-mode difference rather
than a rule-matching bug.

Repro

  1. Set idle.screensaver in ~/.config/omarchy/shell.json (default 150 is fine)

and leave stay-awake off.
2. Launch any Steam game and let it go fullscreen.
3. Play with a gamepad only — no keyboard or mouse input — for 3+ minutes.
4. The screensaver flashes over the game and is dismissed, repeating every 150s.
5. Confirm: journalctl --user | grep idle-cycle-start shows fires during the
session.

Suggested fix

The sibling app rules all match their own class correctly —
geforce.lua:1 (GeForceNOW), retroarch.lua:5, moonlight.lua:1. Steam is
the outlier because its games do not share the launcher's class.

One added line in default/hypr/apps/steam.lua:

 o.window("steam", { float = true, idle_inhibit = "fullscreen" })
+-- Games are steam_app_<appid>, not "steam"; rule regexes are FullMatch, so the
+-- rule above never covers a running game.
+o.window("steam_app_.*", { idle_inhibit = "fullscreen" })
 o.window({ class = "steam", title = "Steam" }, { center = true, size = { 1100, 700 } })

Verified: 33 minutes of gameplay with zero idle cycles, against 42 fires in a
comparable pre-fix session — and confirmed independently on the second machine.

Worth considering more broadly: any fullscreen game played on a gamepad has this
problem, not only Steam ones. A general "inhibit idle while any window is
fullscreen" option, or a gamepad-aware idle reset, would cover Lutris, Heroic,
and standalone launchers too — but the one-line Steam fix above resolves the
reported case.

View raw text
### System details

AMD Ryzen 7 9700X, NVIDIA RTX 5070 Ti (nvidia-utils 610.57.04), Omarchy 4.0.0.alpha, Hyprland 0.56.2, kernel 7.1.9-arch1

### What's wrong?

## Summary

`default/hypr/apps/steam.lua:1` gives Steam an idle inhibitor:

```lua
o.window("steam", { float = true, idle_inhibit = "fullscreen" })
```

Hyprland matches window-rule regexes with `re2::RE2::FullMatch`
(`src/desktop/rule/matchEngine/RegexMatchEngine.cpp:16`), so `"steam"` matches
**only** the literal class `steam` — the Steam client and Big Picture Mode. An
actual game has class `steam_app_<appid>`, so **no Steam game ever receives an
idle inhibitor.**

The result: the screensaver launches on top of a fullscreen game every
`idle.screensaver` seconds (default 150) and is dismissed about a second later.
It reads as a graphics bug — a brief flash where the game looks like it is
re-entering fullscreen, showing the desktop gaps and the gradient window border
— because the screensaver window carries `fullscreen = true`, `float = true`,
`animation = "slide"` (`default/hypr/apps/system.lua:35-37`).

It only affects gamepad play. Gamepads are not on the Wayland seat — SDL reads
them straight from evdev — so controller input never resets the idle timer.
Keyboard/mouse sessions are unaffected, which makes it look intermittent and
hard to pin down.

## Evidence

Correlating Steam's `logs/console_log.txt` game sessions against
`idle-cycle-start` in the user journal, on this machine:

| Session | Length | Screensaver fired |
|---|---|---|
| Elden Ring Nightreign, 2026-08-26 18:48–20:37 | 109 min | **42x**, every 151s |
| Elden Ring Nightreign, 2026-08-30 18:58–19:28 | 30 min | 11x |
| Elden Ring Nightreign, 2026-08-30 19:30–20:58 | 88 min | 34x |
| Elden Ring Nightreign, 2026-08-31 19:43–20:01 (kb+mouse) | 18 min | 0 |
| Elden Ring Nightreign, 2026-09-01 10:41–11:15 (**after fix**) | 33 min | **0** |

Measured interval across those 42 fires: min 151s, median 151s, max 152s,
against the configured `idle.screensaver = 150`.

One cycle, mid-game:

```
Aug 26 18:51:46.724  idle-monitor: idle
Aug 26 18:51:46.724  idle-cycle-start: screensaver=150 lock=300
Aug 26 18:51:46.724  process-start: screensaver ... omarchy-launch-screensaver
Aug 26 18:51:46.881  idle-monitor: active
Aug 26 18:51:46.884  process-exit: screensaver exitCode=0
Aug 26 18:51:47.932  idle-cycle-cancel: screensaver-dismissed
Aug 26 18:51:48.006  process-exit: wake exitCode=0
Aug 26 18:54:17.933  idle-monitor: idle          <- 151s later, again
```

Confirmed the game's class from the Hyprland event socket:

```
openwindow>>557641f17e50,2,steam_app_2622380,ELDEN RING NIGHTREIGN
fullscreen>>1
  -> fullscreen now: class='steam_app_2622380' title='ELDEN RING NIGHTREIGN'
```

Reproduced on two independent machines running the same Omarchy install, and
the one-line fix below was applied to both and resolved it on both.

## Why Big Picture Mode appears to work around it

Big Picture's window class *is* literally `steam`, so it is the one Steam window
the rule does match. Using Big Picture as a workaround happens to inhibit idle —
which is why this looks like a Big Picture vs. desktop-mode difference rather
than a rule-matching bug.

## Repro

1. Set `idle.screensaver` in `~/.config/omarchy/shell.json` (default 150 is fine)
   and leave stay-awake off.
2. Launch any Steam game and let it go fullscreen.
3. Play with a gamepad only — no keyboard or mouse input — for 3+ minutes.
4. The screensaver flashes over the game and is dismissed, repeating every 150s.
5. Confirm: `journalctl --user | grep idle-cycle-start` shows fires during the
   session.

## Suggested fix

The sibling app rules all match their own class correctly —
`geforce.lua:1` (`GeForceNOW`), `retroarch.lua:5`, `moonlight.lua:1`. Steam is
the outlier because its games do not share the launcher's class.

One added line in `default/hypr/apps/steam.lua`:

```diff
 o.window("steam", { float = true, idle_inhibit = "fullscreen" })
+-- Games are steam_app_<appid>, not "steam"; rule regexes are FullMatch, so the
+-- rule above never covers a running game.
+o.window("steam_app_.*", { idle_inhibit = "fullscreen" })
 o.window({ class = "steam", title = "Steam" }, { center = true, size = { 1100, 700 } })
```

Verified: 33 minutes of gameplay with zero idle cycles, against 42 fires in a
comparable pre-fix session — and confirmed independently on the second machine.

Worth considering more broadly: any fullscreen game played on a gamepad has this
problem, not only Steam ones. A general "inhibit idle while any window is
fullscreen" option, or a gamepad-aware idle reset, would cover Lutris, Heroic,
and standalone launchers too — but the one-line Steam fix above resolves the
reported case.

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.

  • Out of scopeDecided by agents · verified · 2026-10-09 10:28 UTC