6 Commits
Author SHA1 Message Date
Emma ThorpeandClaude Opus 5 b586f98037 chore: ignore .claude/
CI / flake (push) Skipped
CI / flake (pull_request) Successful in 4m44s
Per-machine Claude Code settings, not shared configuration.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-01 10:32:24 +01:00
Emma ThorpeandClaude Opus 5 3311f64c6a docs(console): separate the two Steam picker faults
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>
2026-09-01 10:32:24 +01:00
Emma ThorpeandClaude Opus 5 46c03df06d feat(sway): 4K scale 2, natural mouse scroll, idle inhibit for emulators
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>
2026-09-01 10:32:24 +01:00
Emma ThorpeandClaude Opus 5 730bcd1a5d feat(console): add the standalone Dolphin emulator
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>
2026-09-01 10:32:24 +01:00
Emma ThorpeandClaude Opus 5 4e3347cb8c fix(console): make a failed Steam session diagnosable, add shortcut tooling
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>
2026-09-01 10:32:24 +01:00
Emma ThorpeandClaude Opus 5 59d5d70221 feat(sway): install wlr-randr on all Sway hosts
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>
2026-09-01 10:32:24 +01:00
2 changed files with 3 additions and 50 deletions
-50
View File
@@ -1,50 +0,0 @@
{
"permissions": {
"allow": [
"Read(//tmp/claude/**)",
"WebFetch(domain:github.com)",
"WebFetch(domain:codeload.github.com)",
"WebFetch(domain:channels.nixos.org)",
"WebFetch(domain:raw.githubusercontent.com)",
"Read(//mnt/c/Users/**)",
"Bash(wsl.exe --version)",
"Bash(ps -eo pid,pcpu,comm)",
"Bash(powershell.exe -NoProfile -Command \"Get-Process vmmemWSL,vmmem,wslservice,msrdc -ErrorAction SilentlyContinue | Select-Object Name,CPU,WorkingSet | Format-Table -AutoSize\")",
"Read(//nix/store/**)",
"Bash(zsh -ic 'bindkey | grep -Ei \"substring|up-line|down-line|\\\\^\\\\[\\\\[A|\\\\^\\\\[OA|\\\\^\\\\[\\\\[B|\\\\^\\\\[OB\"; echo \"--- widgets exist? ---\"; zle -la 2>/dev/null | grep substring || echo \"\\(zle -la only works interactively\\)\"')",
"Read(//home/emmathorpe/.vscode-server/**)",
"Bash(python3 *)",
"Bash(command -v gh)",
"Bash(gh auth *)",
"Bash(tea login *)",
"Read(//home/emmathorpe/.ssh/**)",
"Read(//tmp/**)",
"Bash(/nix/store/kjnr6lh4r8vcf9wr38zylgj1s5a9hl6q-probe2/bin/bat --paging=never -n f1.txt)",
"Bash(/nix/store/kjnr6lh4r8vcf9wr38zylgj1s5a9hl6q-probe2/bin/bat --paging=never -A f1.txt)",
"Bash(timeout 25 curl -sS -o /dev/null -w \"%{http_code}\\\\n\" https://docs.lyrapup.pet/)",
"Bash(timeout 25 curl -sS -o /dev/null -w \"%{http_code}\\\\n\" https://docs.lyrapup.pet/nixfiles/)",
"Bash(timeout 40 tea pr 96 --login code.emmathe.dev --repo lyrathorpe/nixfiles)",
"Bash(sort -t' ' -k3)",
"Bash(tea pr *)",
"Bash(tea repo *)",
"Bash(command -v wsl.exe)",
"Bash(wsl.exe -l -q)",
"Bash(wsl.exe -u root -d NixOS -- id)",
"Bash(docker build *)",
"WebSearch",
"WebFetch(domain:www.last.fm)",
"WebFetch(domain:wiki.servarr.com)",
"Bash(docker run *)",
"Bash(tea repos *)",
"Bash(curl -s -H 'Authorization: token __CMDSUB_OUTPUT__' https://code.emmathe.dev/api/v1/repos/lyrathorpe/music-mirror)",
"Bash(curl -s -H 'Authorization: token __TRACKED_VAR__' https://code.emmathe.dev/api/v1/user)",
"Bash(curl -s -H 'Authorization: token __CMDSUB_OUTPUT__' https://code.emmathe.dev/api/v1/repos/lyrathorpe/music-curator/actions/tasks?limit=3)",
"Read(//home/emmathorpe/.config/tea/**)",
"Bash(curl -s -H 'Authorization: token __CMDSUB_OUTPUT__' https://code.emmathe.dev/api/v1/repos/lyrathorpe/music-curator/actions/secrets)",
"Bash(curl -s -H 'Authorization: token __CMDSUB_OUTPUT__' https://code.emmathe.dev/api/v1/repos/lyrathorpe/music-curator/actions/jobs/2629/logs)",
"Bash(gh search *)"
]
},
"enabledMcpjsonServers": ["jenkins-uce", "jenkins-stf"],
"disabledMcpjsonServers": ["grafana"]
}
+3
View File
@@ -5,3 +5,6 @@ modules/firmware/*
# Local scratch project, not part of this flake.
tf-inspect/
# Per-machine Claude Code settings; not shared configuration.
.claude/