Skip to content

Steam idle-inhibit rule matches the client but not steam_app games #6947

Description

@nicoladen05

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" })

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:

{
  "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

  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:

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions