feat(foxtrot): seated gamescope gaming session + controller exit #665

Closed
lytedev wants to merge 1 commit from foxtrot-gaming-session into foxtrot-system-steam
Owner

Adds a "Gaming (gamescope)" wayland-session the display manager launches on its
own DRM seat. On its own seat gamescope owns input and Steam Input drives the
cursor natively (the Steam Deck model) — the only way to get controller-as-mouse.
Nested in niri, gamescope can't own the seat and Steam falls back to a frozen
XTest cursor. Seating it via the DM also gives Steam a real login session, so its
bwrap/runtime work (a hand-rolled systemd seat broke that).

  • gamingSessionPackage: [Desktop Entry] running gamescope --backend drm -e -- steam -gamepadui, registered via services.displayManager.sessionPackages.
  • steamos-session-select stub turns Steam's "Switch to Desktop" into an exit:
    touch a sentinel → the foxtrot-gamemode-exit.path user unit quits Steam +
    gamescope, returning to the greeter.

Status

The session seats and Steam runs in it (no cap/bwrap breakage). Still to confirm
before merge:
controller-as-mouse actually moving the cursor in-game (per the
verify-before-merge habit). Opening now per always-open-a-PR.

Stacked on #656 (Steam migration). The greeter that makes login controller-only is
#664 on top of this.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XX14i2xvfiY2TrYzm3A64c

Adds a **"Gaming (gamescope)" wayland-session** the display manager launches on its own DRM seat. On its own seat gamescope owns input and Steam Input drives the cursor natively (the Steam Deck model) — the only way to get controller-as-mouse. Nested in niri, gamescope can't own the seat and Steam falls back to a frozen XTest cursor. Seating it via the DM also gives Steam a real login session, so its bwrap/runtime work (a hand-rolled systemd seat broke that). - `gamingSessionPackage`: `[Desktop Entry]` running `gamescope --backend drm -e -- steam -gamepadui`, registered via `services.displayManager.sessionPackages`. - `steamos-session-select` stub turns Steam's "Switch to Desktop" into an exit: touch a sentinel → the `foxtrot-gamemode-exit.path` user unit quits Steam + gamescope, returning to the greeter. ### Status The session seats and Steam runs in it (no cap/bwrap breakage). **Still to confirm before merge:** controller-as-mouse actually moving the cursor in-game (per the verify-before-merge habit). Opening now per always-open-a-PR. Stacked on #656 (Steam migration). The greeter that makes login controller-only is #664 on top of this. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01XX14i2xvfiY2TrYzm3A64c
feat(foxtrot): seated gamescope 'Gaming (gamescope)' session + controller exit
All checks were successful
/ check-format (push) Successful in 9s
/ build (push) Successful in 7m26s
a67ad4ccd8
A wayland-session the display manager launches on its own DRM seat, so gamescope
owns input and Steam Input drives the cursor natively (the Steam Deck model) —
the only way to get controller-as-mouse. Nested in niri gamescope can't own the
seat and Steam falls back to a frozen XTest cursor. Letting the DM seat it also
gives Steam a real login session (bwrap/runtime work).

steamos-session-select stub turns Steam's 'Switch to Desktop' into an exit:
touch a sentinel -> the foxtrot-gamemode-exit.path unit quits Steam + gamescope,
returning to the greeter.
lytedev closed this pull request 2026-06-30 19:00:01 -05:00
All checks were successful
/ check-format (push) Successful in 9s
/ build (push) Successful in 7m26s

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lytedev/nix!665
No description provided.