feat(foxtrot): greetd + ReGreet + wvkbd greeter (controller-only login) #664

Closed
lytedev wants to merge 1 commit from foxtrot-greetd-greeter into foxtrot-gaming-session
Owner

Replaces plasma-login-manager with greetd + ReGreet + wvkbd so foxtrot can be
logged in with only the Steam Controller (lid closed) — the last piece of the
controller gaming flow. plasma-login-manager has no controller-usable OSK (its
keyboard is touch-gated; QT_IM_MODULE can't reach the greeter's separate PAM
session), so only touchscreen hosts ever got one.

How

  • Force plasma-login-manager.enable off (plasma.nix enables it for any
    plasma-enabled host) and bring up programs.regreet + greetd.
  • ReGreet's cage default is single-window (no room for an OSK), so override the
    greetd command to run niri instead — niri renders layer-shell, so wvkbd
    shows above the fullscreen greeter and stays clickable with the controller
    trackpad (a real HID mouse at the greeter).
  • Greeter wrapper exports XDG_DATA_DIRS=…sessionData.desktops so ReGreet lists
    both niri and Gaming (gamescope).
  • security.pam.services.greetd.fprintAuth = false (greetd is the greeter PAM
    service now; password keeps the OSK path + login-keyring capture).

Validation

Deployed to foxtrot (boot + reboot) and confirmed live: ReGreet rendered, the
OSK was present, logged in fully with just the Steam Controller.

Notes / follow-ups (not blockers)

  • Loses plasma-login's kwallet/login-keyring auto-unlock — can wire
    pam_gnome_keyring into greetd if PSK re-prompts become annoying.
  • Greeter doesn't inhibit lid-suspend yet.
  • niri runs niri everywhere, so this greeter is a candidate to roll across the
    fleet (foxtrot first).

Stacked on #656 (Steam migration) → foxtrot-gaming-session (gamescope session).

🤖 Generated with Claude Code

https://claude.ai/code/session_01XX14i2xvfiY2TrYzm3A64c

Replaces plasma-login-manager with **greetd + ReGreet + wvkbd** so foxtrot can be logged in with **only the Steam Controller** (lid closed) — the last piece of the controller gaming flow. plasma-login-manager has no controller-usable OSK (its keyboard is touch-gated; `QT_IM_MODULE` can't reach the greeter's separate PAM session), so only touchscreen hosts ever got one. ### How - Force `plasma-login-manager.enable` off (plasma.nix enables it for any plasma-enabled host) and bring up `programs.regreet` + greetd. - ReGreet's cage default is single-window (no room for an OSK), so override the greetd command to run **niri** instead — niri renders layer-shell, so wvkbd shows above the fullscreen greeter and stays clickable with the controller trackpad (a real HID mouse at the greeter). - Greeter wrapper exports `XDG_DATA_DIRS=…sessionData.desktops` so ReGreet lists both `niri` and `Gaming (gamescope)`. - `security.pam.services.greetd.fprintAuth = false` (greetd is the greeter PAM service now; password keeps the OSK path + login-keyring capture). ### Validation Deployed to foxtrot (boot + reboot) and **confirmed live**: ReGreet rendered, the OSK was present, logged in fully with just the Steam Controller. ### Notes / follow-ups (not blockers) - Loses plasma-login's kwallet/login-keyring auto-unlock — can wire `pam_gnome_keyring` into greetd if PSK re-prompts become annoying. - Greeter doesn't inhibit lid-suspend yet. - niri runs niri everywhere, so this greeter is a candidate to roll across the fleet (foxtrot first). Stacked on #656 (Steam migration) → `foxtrot-gaming-session` (gamescope session). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01XX14i2xvfiY2TrYzm3A64c
feat(foxtrot): greetd + ReGreet + wvkbd greeter (controller-only login)
All checks were successful
/ check-format (push) Successful in 8s
/ build (push) Successful in 8m51s
04c55524ef
Replace plasma-login-manager with greetd running ReGreet inside a minimal niri
compositor, with wvkbd as an always-on layer-shell on-screen keyboard.

plasma-login-manager has no controller-usable OSK: its keyboard is touch-gated
and QT_IM_MODULE can't reach the greeter's separate PAM session, so only
touchscreen hosts ever get it. The Steam Controller's lizard-mode trackpad is a
real HID mouse at the greeter, so an always-visible clickable OSK + the session
picker make login fully controller-only (lid closed) — the last piece of the
foxtrot gaming flow. All my machines run niri, not plasma, so a niri-hosted
greeter also fits the fleet (foxtrot first).

- plasma-login-manager.enable forced off (plasma.nix enables it for any
  plasma-enabled host); programs.regreet.enable + greetd in its place.
- ReGreet's cage default is single-window (no room for an OSK); override the
  greetd command to run niri instead — niri renders layer-shell so wvkbd shows
  above the fullscreen greeter and stays clickable.
- Greeter wrapper exports XDG_DATA_DIRS=sessionData.desktops so ReGreet lists
  both niri and 'Gaming (gamescope)'.
- security.pam.services.greetd.fprintAuth = false (greetd is the greeter PAM
  service now; password keeps the controller OSK path and keyring capture).

Validated live: ReGreet + OSK shown, logged in with only the Steam Controller.
lytedev closed this pull request 2026-06-30 19:00:01 -05:00
All checks were successful
/ check-format (push) Successful in 8s
/ build (push) Successful in 8m51s

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!664
No description provided.