From 0e10083ea45ccdb928827b2e3dfdf5b39cc582a8 Mon Sep 17 00:00:00 2001 From: Emma Thorpe Date: Tue, 1 Sep 2026 10:08:56 +0100 Subject: [PATCH] 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) --- .claude/settings.local.json | 50 +++++++++++++++++++++++++++++++++++++ docs/hosts/console.md | 20 ++++++++------- hosts/Console/gaming.nix | 4 +++ 3 files changed, 65 insertions(+), 9 deletions(-) create mode 100644 .claude/settings.local.json diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..ea654a4 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,50 @@ +{ + "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"] +} diff --git a/docs/hosts/console.md b/docs/hosts/console.md index cb9710d..a487d9e 100644 --- a/docs/hosts/console.md +++ b/docs/hosts/console.md @@ -124,11 +124,11 @@ The greeter is **Dvorak**, like every other host here (`modules/sway.nix` forces `XKB_DEFAULT_VARIANT=dvorak` on cage). Only relevant if someone else has to type a password. -### Adding RetroArch, PCSX2 and Clone Hero to Big Picture +### Adding non-Steam titles to Big Picture -All three are installed system-wide but are not Steam titles. Added as Steam -shortcuts they appear in Big Picture and inherit Steam Input, so the controller -works in them without further configuration. +RetroArch, PCSX2, Dolphin and Clone Hero are installed system-wide but are not +Steam titles. Added as Steam shortcuts they appear in Big Picture and inherit +Steam Input, so the controller works in them without further configuration. Steam's own **Games → Add a Non-Steam Game** is the documented route and is also the one that tends not to work. Both that dialog's **Browse** button and the @@ -156,6 +156,7 @@ Independent of the dialog, `steamtinkerlaunch` writes `shortcuts.vdf` directly: # Steam must be closed -- it rewrites shortcuts.vdf on exit. steamtinkerlaunch addnonsteamgame -an="RetroArch" -ep="$(command -v retroarch)" steamtinkerlaunch addnonsteamgame -an="PCSX2" -ep="$(command -v pcsx2-qt)" +steamtinkerlaunch addnonsteamgame -an="Dolphin" -ep="$(command -v dolphin-emu)" steamtinkerlaunch addnonsteamgame -an="Clone Hero" -ep="$(command -v clonehero)" ``` @@ -221,11 +222,12 @@ cores lag on compatibility and are the first place to look when a GameCube, Wii or PS2 title misbehaves. That has already happened for PS2: the LRPS2 core was not good enough in -practice, so **standalone `pkgs.pcsx2` is installed** in `gaming.nix` alongside -the core and is what PS2 titles should be run through. `pkgs.dolphin-emu` is not -installed; add it the same way if GameCube or Wii turns out to need it. +practice. **`pkgs.pcsx2` and `pkgs.dolphin-emu` are both installed** in +`gaming.nix` alongside their cores, and are what PS2, GameCube and Wii titles +should be run through. The cores stay for the sake of a single frontend and a +shared save/state layout. -Both are controller-driven and can be added to Big Picture the same way as +Both are controller-driven and are added to Big Picture the same way as RetroArch. The hardware is not the limit here — a GTX 1070 and a Haswell i7 run PS2 and Wii comfortably. @@ -278,7 +280,7 @@ once, in their own UIs: - **Steam** — Settings → Storage → the `+` control → add `/srv/games/steam` as a library folder. Games installed there survive a reinstall of the OS. That picker is the broken one described under - [Adding RetroArch, PCSX2 and Clone Hero to Big Picture](#adding-retroarch-pcsx2-and-clone-hero-to-big-picture); + [Adding non-Steam titles to Big Picture](#adding-non-steam-titles-to-big-picture); when it comes up blank, use Steam's own console instead — open Steam with `steam -console`, pick the **CONSOLE** tab and run: diff --git a/hosts/Console/gaming.nix b/hosts/Console/gaming.nix index 3332680..7b103a3 100644 --- a/hosts/Console/gaming.nix +++ b/hosts/Console/gaming.nix @@ -246,6 +246,10 @@ in environment.systemPackages = [ retroarch pkgs.clonehero + # Standalone GameCube/Wii and PS2, alongside the libretro cores of the same + # name: upstream effort goes into these builds, so they are what the two + # heaviest systems should actually be run through. + pkgs.dolphin-emu pkgs.pcsx2 pkgs.dualsensectl # DualSense LED/battery/mic control from the shell # Writes shortcuts.vdf from the shell. Steam's own "Add a Non-Steam Game"