From 71b881889aabda0a584315d8d5e5a90756c8bbcb Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 23 Jun 2026 15:25:56 +0000 Subject: [PATCH] wolf: persist RetroArch shaders & overlays; back up bios + shaders/overlays MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mount retroarch/shaders and retroarch/overlays from the game drive into ~/.config/retroarch/{shaders,overlays} for both ES-DE and standalone RetroArch (sibling to the existing cores mount). Anything pulled from the Online Updater or set in the Quick Menu now persists across sessions and survives a Wolf/OS reinstall, so a CRT shader or bezel set is configured once. Dirs are pre-created on the game drive; storage summary and README updated, including a fallback note to repoint Settings -> Directory if RetroArch ever writes elsewhere. gaming-backup: add opt-in snapshots for emulator BIOS (bios/) and the RetroArch shaders/overlays dirs (cores excluded — re-downloadable). New BACKUP_BIOS and BACKUP_RA_SHADERS flags wired through the prompts, backup.conf, summary, and the worker script. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01XV8mwKLFwUKt94dAKh3k79 --- extras/backup_gaming.sh | 3 +++ services/gaming-backup.sh | 10 ++++++++++ services/wolf.sh | 32 +++++++++++++++++++++++++++----- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/extras/backup_gaming.sh b/extras/backup_gaming.sh index b2952bc..f3ec60b 100644 --- a/extras/backup_gaming.sh +++ b/extras/backup_gaming.sh @@ -120,6 +120,9 @@ if [ -n "${MC_BASE_DIR:-}" ]; then done fi [ "${BACKUP_SAVES:-no}" = yes ] && snap "emulator-saves" "$GAME_STORAGE_DIR/saves" +[ "${BACKUP_BIOS:-no}" = yes ] && snap "emulator-bios" "$GAME_STORAGE_DIR/bios" +[ "${BACKUP_RA_SHADERS:-no}" = yes ] && snap "retroarch-shaders" "$GAME_STORAGE_DIR/retroarch/shaders" +[ "${BACKUP_RA_SHADERS:-no}" = yes ] && snap "retroarch-overlays" "$GAME_STORAGE_DIR/retroarch/overlays" [ "${BACKUP_STEAM:-no}" = yes ] && snap "steam-userdata" "$GAME_STORAGE_DIR/steam" [ "${BACKUP_MEDIA:-no}" = yes ] && snap "es-de-media" "$GAME_STORAGE_DIR/media" [ "${BACKUP_WOLF:-no}" = yes ] && snap "wolf-state" "$WOLF_STATE_DIR" diff --git a/services/gaming-backup.sh b/services/gaming-backup.sh index 07ba869..473963a 100644 --- a/services/gaming-backup.sh +++ b/services/gaming-backup.sh @@ -9,6 +9,8 @@ # Backs up the things you can't re-download — progress, saved games, user data: # • Minecraft worlds / player data (every /data instance under $DOCKER_DIR) # • Emulator saves & save states ($GAME_STORAGE_DIR/saves) [gaming box] +# • Emulator BIOS / firmware ($GAME_STORAGE_DIR/bios) [gaming box] +# • RetroArch shaders & overlays ($GAME_STORAGE_DIR/retroarch) [gaming box] # • ES-DE scraped artwork ($GAME_STORAGE_DIR/media) [gaming box] # • Steam user data & game saves ($GAME_STORAGE_DIR/steam) [gaming box] # • Wolf state (/etc/wolf — config + profile_data) [gaming box] @@ -190,6 +192,10 @@ install_gaming_backup() { local _a="" prompt_yn " Back up emulator saves ($GAME_STORAGE_DIR/saves)? (y/N):" "n" _a local BACKUP_SAVES; BACKUP_SAVES=$([[ "$_a" =~ ^[Yy]$ ]] && echo yes || echo no) + prompt_yn " Back up emulator BIOS/firmware ($GAME_STORAGE_DIR/bios)? (y/N):" "n" _a + local BACKUP_BIOS; BACKUP_BIOS=$([[ "$_a" =~ ^[Yy]$ ]] && echo yes || echo no) + prompt_yn " Back up RetroArch shaders & overlays ($GAME_STORAGE_DIR/retroarch)? (y/N):" "n" _a + local BACKUP_RA_SHADERS; BACKUP_RA_SHADERS=$([[ "$_a" =~ ^[Yy]$ ]] && echo yes || echo no) prompt_yn " Back up Steam user data/saves (game installs excluded)? (y/N):" "n" _a local BACKUP_STEAM; BACKUP_STEAM=$([[ "$_a" =~ ^[Yy]$ ]] && echo yes || echo no) prompt_yn " Back up ES-DE scraped artwork ($GAME_STORAGE_DIR/media)? (y/N):" "n" _a @@ -293,6 +299,8 @@ MC_BASE_DIR="$MC_BASE_DIR" GAME_STORAGE_DIR="$GAME_STORAGE_DIR" WOLF_STATE_DIR="$WOLF_STATE_DIR" BACKUP_SAVES="$BACKUP_SAVES" # \$GAME_STORAGE_DIR/saves +BACKUP_BIOS="$BACKUP_BIOS" # \$GAME_STORAGE_DIR/bios (emulator BIOS/firmware — user-provided) +BACKUP_RA_SHADERS="$BACKUP_RA_SHADERS" # \$GAME_STORAGE_DIR/retroarch/{shaders,overlays} (cores excluded — re-downloadable) BACKUP_STEAM="$BACKUP_STEAM" # \$GAME_STORAGE_DIR/steam (game installs excluded by policy) BACKUP_MEDIA="$BACKUP_MEDIA" # \$GAME_STORAGE_DIR/media (ES-DE scraped artwork) BACKUP_WOLF="$BACKUP_WOLF" # /etc/wolf — config + profile_data @@ -459,6 +467,8 @@ UNITEOF echo " Backing up :" [ -n "$MC_BASE_DIR" ] && echo " • Minecraft worlds $MC_BASE_DIR/*/data (all instances)" [ "$BACKUP_SAVES" = yes ] && echo " • Emulator saves $GAME_STORAGE_DIR/saves" + [ "$BACKUP_BIOS" = yes ] && echo " • Emulator BIOS $GAME_STORAGE_DIR/bios" + [ "$BACKUP_RA_SHADERS" = yes ] && echo " • RA shaders/overlays $GAME_STORAGE_DIR/retroarch/{shaders,overlays}" [ "$BACKUP_STEAM" = yes ] && echo " • Steam user data $GAME_STORAGE_DIR/steam (game installs excluded)" [ "$BACKUP_MEDIA" = yes ] && echo " • ES-DE scraped art $GAME_STORAGE_DIR/media" [ "$BACKUP_WOLF" = yes ] && echo " • Wolf state $WOLF_STATE_DIR (config + profile_data)" diff --git a/services/wolf.sh b/services/wolf.sh index 6dee3e1..45c2f07 100644 --- a/services/wolf.sh +++ b/services/wolf.sh @@ -231,7 +231,7 @@ EOF echo " - Write $WOLF_DIR/docker-compose.yml and $WOLF_DIR/manage.sh" echo " - Open Moonlight UFW ports: TCP ${WOLF_PORTS_TCP[*]} / UDP ${WOLF_PORTS_UDP[*]}" echo " - Start Wolf and inject Steam + EmulationStation app profiles" - echo " - Create bios/ + retroarch/cores/ on the game drive and pre-download RetroArch cores (~1.5 GB)" + echo " - Create bios/ + retroarch/{cores,shaders,overlays}/ on the game drive and pre-download RetroArch cores (~1.5 GB)" return 0 fi @@ -702,7 +702,8 @@ UDEV "$GAME_STORAGE_DIR/firefox" "$GAME_STORAGE_DIR/minecraft" \ "$GAME_STORAGE_DIR/kodi" "$GAME_STORAGE_DIR/emulators" \ "$GAME_STORAGE_DIR/steam-cache" \ - "$GAME_STORAGE_DIR/bios" "$GAME_STORAGE_DIR/retroarch/cores" + "$GAME_STORAGE_DIR/bios" "$GAME_STORAGE_DIR/retroarch/cores" \ + "$GAME_STORAGE_DIR/retroarch/shaders" "$GAME_STORAGE_DIR/retroarch/overlays" # ── Wolf state folder on the game drive ─────────────────────────────────── # This is the clean way to keep Steam (and everything else) off the OS @@ -1303,6 +1304,8 @@ CATALOG = { f'{games}/media:/media:rw', f'{games}/bios:/home/retro/bioses:rw', f'{games}/retroarch/cores:/home/retro/.config/retroarch/cores:rw', + f'{games}/retroarch/shaders:/home/retro/.config/retroarch/shaders:rw', + f'{games}/retroarch/overlays:/home/retro/.config/retroarch/overlays:rw', f'{games}/emulators:/mnt/games/emulators:rw', f'{games}/emulators:/home/retro/Applications:rw'], env=STD_ENV, cap_add=STD_CAP, security_opt=[], ipc_mode='host', @@ -1326,7 +1329,9 @@ CATALOG = { mounts=[f'{games}/roms:/ROMs:rw', f'{games}/saves:/mnt/games/saves:rw', f'{games}/bios:/home/retro/bioses:rw', - f'{games}/retroarch/cores:/home/retro/.config/retroarch/cores:rw'], + f'{games}/retroarch/cores:/home/retro/.config/retroarch/cores:rw', + f'{games}/retroarch/shaders:/home/retro/.config/retroarch/shaders:rw', + f'{games}/retroarch/overlays:/home/retro/.config/retroarch/overlays:rw'], env=STD_ENV, cap_add=STD_CAP, security_opt=[], ipc_mode='host', ulimits=[], privileged=False, ), @@ -2587,6 +2592,8 @@ CATALOG = { f'{games}/media:/media:rw', f'{games}/bios:/home/retro/bioses:rw', f'{games}/retroarch/cores:/home/retro/.config/retroarch/cores:rw', + f'{games}/retroarch/shaders:/home/retro/.config/retroarch/shaders:rw', + f'{games}/retroarch/overlays:/home/retro/.config/retroarch/overlays:rw', f'{games}/emulators:/mnt/games/emulators:rw', f'{games}/emulators:/home/retro/Applications:rw'], env=STD_ENV, cap_add=STD_CAP, security_opt=[], ipc_mode='host', @@ -2610,7 +2617,9 @@ CATALOG = { mounts=[f'{games}/roms:/ROMs:rw', f'{games}/saves:/mnt/games/saves:rw', f'{games}/bios:/home/retro/bioses:rw', - f'{games}/retroarch/cores:/home/retro/.config/retroarch/cores:rw'], + f'{games}/retroarch/cores:/home/retro/.config/retroarch/cores:rw', + f'{games}/retroarch/shaders:/home/retro/.config/retroarch/shaders:rw', + f'{games}/retroarch/overlays:/home/retro/.config/retroarch/overlays:rw'], env=STD_ENV, cap_add=STD_CAP, security_opt=[], ipc_mode='host', ulimits=[], privileged=False, ), @@ -2837,7 +2846,9 @@ PYEOF echo " ${GAME_STORAGE_DIR}/" echo " roms/ → /ROMs (EmulationStation)" echo " bios/ → /home/retro/bioses (emulator BIOS/firmware)" - echo " retroarch/cores/ → ~/.config/retroarch/cores (libretro cores)" + echo " retroarch/cores/ → ~/.config/retroarch/cores (libretro cores)" + echo " retroarch/shaders/ → ~/.config/retroarch/shaders (shaders/CRT filters — persist)" + echo " retroarch/overlays/ → ~/.config/retroarch/overlays (bezels/overlays — persist)" echo " saves/ → /home/retro/.config/retroarch/saves (RetroArch saves)" echo " media/ → /media (ES-DE scraped artwork)" echo " wolf-state/ → Wolf state: Steam install, games, Proton prefixes," @@ -2848,6 +2859,8 @@ PYEOF echo " • Drop ROMs in roms// (e.g. roms/snes/, roms/genesis/)" echo " • Drop BIOS files in bios/ (PSX/Saturn/Dreamcast/Neo-Geo need them)" echo " • RetroArch cores are pre-downloaded — retro games launch immediately" + echo " • Shaders & overlays persist on the game drive — set up a CRT shader or" + echo " bezels once and they survive new sessions and reinstalls" echo " • Controllers auto-configure: ES-DE & RetroArch map Wolf's virtual pad" echo " via SDL, no manual input setup needed" echo " • Exit a game → ES-DE: Start+Select opens RetroArch menu → Quit," @@ -2995,6 +3008,8 @@ Two things live on the game drive (\`$GAME_STORAGE_DIR\`): - \`roms//\` → /ROMs (EmulationStation — drop ROMs here) - \`bios/\` → /home/retro/bioses (emulator BIOS/firmware — drop BIOS here) - \`retroarch/cores/\` → ~/.config/retroarch/cores (libretro cores, pre-downloaded) +- \`retroarch/shaders/\` → ~/.config/retroarch/shaders (shaders/CRT filters — persist) +- \`retroarch/overlays/\` → ~/.config/retroarch/overlays (bezels/overlays — persist) - \`saves/\` → /mnt/games/saves (RetroArch saves & states) - \`emulators/\` → /mnt/games/emulators + ~/Applications (Azahar 3DS AppImage, etc.) @@ -3023,6 +3038,13 @@ ES-DE is usable the moment you launch it; only ROMs and BIOS are yours to add. \`~/.config/retroarch/cores\`, so libretro games launch right away. Refresh or expand the set with \`./manage.sh cores\` (\`all\` = full buildbot set, \`common\` = mainstream systems, add \`force\` to re-download). +- **Shaders & overlays**: \`retroarch/shaders/\` and \`retroarch/overlays/\` are + mounted at \`~/.config/retroarch/{shaders,overlays}\` and live on the game + drive, so anything you pull from the Online Updater or set in the Quick Menu + (Shaders / On-Screen Overlay) persists across sessions and survives a Wolf + reinstall — configure your CRT shader or bezels once. If RetroArch ever writes + them elsewhere, point Settings → Directory → Video Shader / Overlay at + \`~/.config/retroarch/shaders\` and \`~/.config/retroarch/overlays\`. - **Controllers**: auto-configured. ES-DE and RetroArch map Wolf's virtual pad through SDL with no manual input setup. RPCS3 ships Wolf-specific bindings. To remap inside ES-DE: Main menu → Input device settings → Configure