wolf: persist RetroArch shaders & overlays; back up bios + shaders/overlays

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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XV8mwKLFwUKt94dAKh3k79
This commit is contained in:
Claude
2026-06-23 15:25:56 +00:00
parent 9778696ac1
commit 71b881889a
3 changed files with 40 additions and 5 deletions
+3
View File
@@ -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"
+10
View File
@@ -9,6 +9,8 @@
# Backs up the things you can't re-download — progress, saved games, user data:
# • Minecraft worlds / player data (every <id>/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)"
+27 -5
View File
@@ -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/<system>/ (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/<system>/\` → /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