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.
Steam idle-inhibit rule matches the client but not steam_app games
Reported by nicoladen05 · filed Aug 15, 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?
- 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
System details
AMD Ryzen 7 7800X3D, NVIDIA RTX 4070, Omarchy 4.0.0-1, Hyprland 0.56.2
What's wrong?
The default Steam window rule combines floating the Steam client with inhibiting idle while fullscreen:
o.window("steam", { float = true, idle_inhibit = "fullscreen" })Because Hyprland class regexes are full matches, this rule applies to the Steam client class steam, but not games launched by Steam, whose XWayland class is normally steam_app_<appid>. The float = true effect also suggests this rule was primarily intended for the Steam client. Conversely, idle_inhibit = "fullscreen" is most useful on the game windows.
For example, while Assetto Corsa was running fullscreen, hyprctl clients -j reported:
{
"class": "steam_app_244210",
"title": "Assetto Corsa",
"fullscreen": 2,
"xwayland": true,
"inhibitingIdle": false
}After the configured idle timeout, the Omarchy screensaver opened over the game. Controller input does not reliably reset the compositor's idle timer, so the missing inhibitor becomes visible during controller-only play.
The next Steam rule already uses steam.* to cover both client and game classes for opacity:
o.window("steam.*", { tag = "-default-opacity", opacity = "1 1" })Steps to reproduce
- Enable Omarchy idle handling and use a short screensaver timeout.
- Launch a Steam/Proton game whose class is
steam_app_<appid>. - Run the game fullscreen and use only a controller.
- Check
hyprctl clients -j; the game reportsinhibitingIdle: false. - Wait for the idle timeout; the screensaver launches over the game.
Expected
Fullscreen Steam game windows should inhibit the Omarchy screensaver and lock timer. The Steam client can retain its existing floating behavior.
One possible approach is to split the concerns:
o.window("steam", { float = true })
o.window("steam_app_.*", { idle_inhibit = "fullscreen" })Alternatively, the existing steam.* match could receive the fullscreen inhibitor if Steam Big Picture should also inhibit idle.
Related reports
- #1269 originally reported the screensaver activating during controller gameplay and was closed by #1303.
- #5093 reported the same symptom for other game launchers.
- #6352 attempted to treat gamepad input as activity; the maintainer response preferred marking gaming applications as idle inhibitors.
- #6475 / #6572 concern missing D-Bus inhibitor support in Quattro. This issue is narrower: the explicit Hyprland Steam rule does not match
steam_app_*windows, and the live client reportsinhibitingIdle: false.
View raw text
### System details
AMD Ryzen 7 7800X3D, NVIDIA RTX 4070, Omarchy 4.0.0-1, Hyprland 0.56.2
### What's wrong?
The default Steam window rule combines floating the Steam client with inhibiting idle while fullscreen:
```lua
o.window("steam", { float = true, idle_inhibit = "fullscreen" })
```
Source: https://github.com/basecamp/omarchy/blob/9b72edcc94513cba016f145b1ac4ffdaea54b577/default/hypr/apps/steam.lua#L1
Because Hyprland class regexes are full matches, this rule applies to the Steam client class `steam`, but not games launched by Steam, whose XWayland class is normally `steam_app_<appid>`. The `float = true` effect also suggests this rule was primarily intended for the Steam client. Conversely, `idle_inhibit = "fullscreen"` is most useful on the game windows.
For example, while Assetto Corsa was running fullscreen, `hyprctl clients -j` reported:
```json
{
"class": "steam_app_244210",
"title": "Assetto Corsa",
"fullscreen": 2,
"xwayland": true,
"inhibitingIdle": false
}
```
After the configured idle timeout, the Omarchy screensaver opened over the game. Controller input does not reliably reset the compositor's idle timer, so the missing inhibitor becomes visible during controller-only play.
The next Steam rule already uses `steam.*` to cover both client and game classes for opacity:
```lua
o.window("steam.*", { tag = "-default-opacity", opacity = "1 1" })
```
#### Steps to reproduce
1. Enable Omarchy idle handling and use a short screensaver timeout.
2. Launch a Steam/Proton game whose class is `steam_app_<appid>`.
3. Run the game fullscreen and use only a controller.
4. Check `hyprctl clients -j`; the game reports `inhibitingIdle: false`.
5. Wait for the idle timeout; the screensaver launches over the game.
#### Expected
Fullscreen Steam game windows should inhibit the Omarchy screensaver and lock timer. The Steam client can retain its existing floating behavior.
One possible approach is to split the concerns:
```lua
o.window("steam", { float = true })
o.window("steam_app_.*", { idle_inhibit = "fullscreen" })
```
Alternatively, the existing `steam.*` match could receive the fullscreen inhibitor if Steam Big Picture should also inhibit idle.
#### Related reports
- #1269 originally reported the screensaver activating during controller gameplay and was closed by #1303.
- #5093 reported the same symptom for other game launchers.
- #6352 attempted to treat gamepad input as activity; the maintainer response preferred marking gaming applications as idle inhibitors.
- #6475 / #6572 concern missing D-Bus inhibitor support in Quattro. This issue is narrower: the explicit Hyprland Steam rule does not match `steam_app_*` windows, and the live client reports `inhibitingIdle: false`.
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 04:08 UTC