fix(console): first-boot follow-ups, plus three Sway desktop fixes #113

Merged
lyrathorpe merged 6 commits from fix/console-followups into main 2026-09-01 10:39:47 +01:00
Owner

Follow-ups from setting up the Console host, plus three desktop-side fixes
that apply to every Sway machine.

Console

  • Standalone PCSX2 and Dolphin. The LRPS2 core was not good enough in
    practice, so pkgs.pcsx2 was already installed; pkgs.dolphin-emu joins it
    for GameCube and Wii. The libretro cores stay for the sake of a single
    frontend and a shared save/state layout.
  • A failed Steam session is now diagnosable. Autologin into the gamescope
    session does not take on the real hardware — the television lands on ReGreet.
    The config side is correct: initial_session is present in the generated
    greetd.toml and services.greetd.restart evaluates to false. The likely
    cause is the session starting and then dying, which greetd answers by falling
    through to default_session. greetd hands a session the VT for its standard
    streams, so whatever it printed on its way down was erased as soon as the
    greeter repainted. The launcher now runs under systemd-cat, so the reason
    survives in journalctl -b -t steam-session.
  • steamtinkerlaunch. Steam's Add a Non-Steam Game dialog never appears
    on this host. That dialog browses through the XDG portal FileChooser
    interface (ValveSoftware/steam-for-linux#9447, not fixed).
    steamtinkerlaunch writes shortcuts.vdf without the dialog.

The Steam library folder is a separate fault, documented but not fixed here.
The picker opens and Steam creates the directory structure at
/srv/games/steam; the library then never appears in the Storage UI. That rules
out the portal and points at the write-and-execute probe Steam runs before
recording the folder in libraryfolders.vdf
(ValveSoftware/steam-for-linux#8450). The docs give a way to reproduce that
probe inside Steam's FHS sandbox with steam-run, and keep library_folder_add
in Steam's console as the route that reports a reason where the UI says nothing.

Sway (all graphical hosts)

  • wlr-randr is installed. It prints the make/model/serial criteria kanshi
    profiles are keyed on, and nothing else in the Sway package set covers output
    query or adjustment.
  • 4K outputs run at scale 2. Sway cannot key an output rule on resolution,
    so a user service applies it at session start and again on every output
    event, which is what makes it survive a display being switched off and on.
    kanshi still owns mode and position; no profile here sets a scale.
  • natural_scroll on type:pointer, matching the touchpads.
  • Emulators inhibit idle while focused. PCSX2 and Dolphin default to
    borderless-windowed rather than compositor fullscreen, so the existing
    inhibit_idle fullscreen rules never matched and swaylock engaged mid-game.
    The Steam session is unaffected either way: swayidle is wanted by
    graphical-session.target and conditional on WAYLAND_DISPLAY, and the
    gamescope session provides neither.

Docs

docs/hosts/console.md catches up with the host's actual state — the hardware
scan is real now, the emulator set changed, and "untested claims" becomes a list
of open problems. Adds triage sections for autologin and for each of the two
Steam faults. docs/keybindings.md gains Console in its host list.

Validation

nix fmt clean and nix flake check passes, including per-host evaluation.
Nothing here has been booted on the Console yet; the autologin change is
instrumentation rather than a fix, and the Sway window criteria are regexes that
still need confirming against a running PCSX2.

Follow-ups from setting up the Console host, plus three desktop-side fixes that apply to every Sway machine. ## Console - **Standalone PCSX2 and Dolphin.** The LRPS2 core was not good enough in practice, so `pkgs.pcsx2` was already installed; `pkgs.dolphin-emu` joins it for GameCube and Wii. The libretro cores stay for the sake of a single frontend and a shared save/state layout. - **A failed Steam session is now diagnosable.** Autologin into the gamescope session does not take on the real hardware — the television lands on ReGreet. The config side is correct: `initial_session` is present in the generated `greetd.toml` and `services.greetd.restart` evaluates to `false`. The likely cause is the session starting and then dying, which greetd answers by falling through to `default_session`. greetd hands a session the VT for its standard streams, so whatever it printed on its way down was erased as soon as the greeter repainted. The launcher now runs under `systemd-cat`, so the reason survives in `journalctl -b -t steam-session`. - **`steamtinkerlaunch`.** Steam's **Add a Non-Steam Game** dialog never appears on this host. That dialog browses through the XDG portal `FileChooser` interface (ValveSoftware/steam-for-linux#9447, not fixed). `steamtinkerlaunch` writes `shortcuts.vdf` without the dialog. The Steam **library folder** is a separate fault, documented but not fixed here. The picker opens and Steam creates the directory structure at `/srv/games/steam`; the library then never appears in the Storage UI. That rules out the portal and points at the write-and-execute probe Steam runs before recording the folder in `libraryfolders.vdf` (ValveSoftware/steam-for-linux#8450). The docs give a way to reproduce that probe inside Steam's FHS sandbox with `steam-run`, and keep `library_folder_add` in Steam's console as the route that reports a reason where the UI says nothing. ## Sway (all graphical hosts) - **`wlr-randr`** is installed. It prints the make/model/serial criteria kanshi profiles are keyed on, and nothing else in the Sway package set covers output query or adjustment. - **4K outputs run at scale 2.** Sway cannot key an output rule on resolution, so a user service applies it at session start and again on every output event, which is what makes it survive a display being switched off and on. kanshi still owns mode and position; no profile here sets a scale. - **`natural_scroll` on `type:pointer`**, matching the touchpads. - **Emulators inhibit idle while focused.** PCSX2 and Dolphin default to borderless-windowed rather than compositor fullscreen, so the existing `inhibit_idle fullscreen` rules never matched and swaylock engaged mid-game. The Steam session is unaffected either way: `swayidle` is wanted by `graphical-session.target` and conditional on `WAYLAND_DISPLAY`, and the gamescope session provides neither. ## Docs `docs/hosts/console.md` catches up with the host's actual state — the hardware scan is real now, the emulator set changed, and "untested claims" becomes a list of open problems. Adds triage sections for autologin and for each of the two Steam faults. `docs/keybindings.md` gains Console in its host list. ## Validation `nix fmt` clean and `nix flake check` passes, including per-host evaluation. Nothing here has been booted on the Console yet; the autologin change is instrumentation rather than a fix, and the Sway window criteria are regexes that still need confirming against a running PCSX2.
lyrathorpe added 6 commits 2026-09-01 10:34:58 +01:00
wlr-randr prints the make/model/serial criteria kanshi profiles are keyed
on and lets a mode be tried before it is committed to config. Nothing
else in the Sway package set covers output query or adjustment.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Autologin into the gamescope Steam session does not take on the real
hardware; the television lands on ReGreet instead. The config side is
correct -- initial_session is present in the generated greetd.toml and
services.greetd.restart evaluates to false -- so the likely cause is the
session starting and then dying, which greetd answers by falling through
to default_session.

greetd hands a session the VT for its standard streams, so whatever the
session prints on its way down is erased as soon as the greeter repaints.
Run the launcher under systemd-cat so the reason survives in the journal
under the steam-session identifier.

Steam's non-Steam-game Browse dialog and its library-folder picker both
go through the XDG portal FileChooser interface and do not open here
(ValveSoftware/steam-for-linux#9447, #10415). Add steamtinkerlaunch,
which writes shortcuts.vdf without the dialog, and document
library_folder_add as the equivalent route for the library folder.

Docs also catch up with the host's actual state: hardware-configuration
.nix is a real scan now, standalone pcsx2 is installed, and the untested
claims become the list of open problems.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The libretro dolphin core lags upstream on compatibility in the same way
LRPS2 does, so install pkgs.dolphin-emu next to pkgs.pcsx2 and run
GameCube and Wii titles through it. The cores stay for the sake of a
single frontend and a shared save/state layout.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Three unrelated desktop-side fixes, all in home/sway.nix.

Sway cannot key an output rule on resolution, so scale 2 on 4K displays
is applied by a user service that runs once at session start and again on
every output event, which is what makes it survive a display being
switched off and on. The scale guard in the jq filter stops the
subscription feeding itself. kanshi still owns mode and position; no
profile here sets a scale, so the two do not fight.

natural_scroll on type:pointer gives mice the same scroll direction as
the touchpads already had.

PCSX2 and Dolphin default to borderless-windowed rather than compositor
fullscreen, so the existing inhibit_idle fullscreen rules never matched
and swaylock engaged mid-game. Inhibit on focus for the emulators
instead. The Steam session is unaffected either way: swayidle is wanted
by graphical-session.target and conditional on WAYLAND_DISPLAY, and the
gamescope session provides neither.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The library-folder picker does open and Steam does create the directory
structure; the library simply never appears in the Storage UI. That rules
out the portal FileChooser for this symptom and points at the
write-and-execute probe Steam runs before recording the folder in
libraryfolders.vdf (ValveSoftware/steam-for-linux#8450). Document how to
reproduce that probe inside Steam's FHS sandbox with steam-run, and keep
library_folder_add as the route that reports a reason.

The Add a Non-Steam Game dialog is a separate symptom and keeps the
portal explanation.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
chore: ignore .claude/
CI / flake (push) Skipped
CI / flake (pull_request) Successful in 4m44s
b586f98037
Per-machine Claude Code settings, not shared configuration.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
lyrathorpe force-pushed fix/console-followups from b0607d23cd to b586f98037 2026-09-01 10:34:58 +01:00 Compare
lyrathorpe scheduled this pull request to auto merge when all checks succeed 2026-09-01 10:36:17 +01:00
lyrathorpe merged commit cdb034b0e2 into main 2026-09-01 10:39:47 +01:00
lyrathorpe deleted branch fix/console-followups 2026-09-01 10:39:47 +01:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: lyrathorpe/nixfiles#113