Skip to content

Instantly share code, notes, and snippets.

@Veticia
Created April 18, 2026 02:22
Show Gist options
  • Select an option

  • Save Veticia/f56d97434a381e7f8fbd3084e128fea1 to your computer and use it in GitHub Desktop.

Select an option

Save Veticia/f56d97434a381e7f8fbd3084e128fea1 to your computer and use it in GitHub Desktop.
RetroArch core updater for Steam on Linux (Dolphin, PCSX2, Azahar)
#!/bin/bash
# update_cores.sh — RetroArch nightly core updater for Steam (Linux)
#
# Updates the following libretro cores from buildbot.libretro.com nightly builds:
# - Dolphin (GameCube / Wii)
# - PCSX2 (PlayStation 2)
# - Azahar (Nintendo 3DS)
#
# Also downloads matching .info files and required system files.
#
# Usage:
# chmod +x update_cores.sh
# ./update_cores.sh
#
# Requirements:
# - RetroArch installed via Steam (default path assumed)
# - wget, unzip
#
# Notes:
# - PS2 BIOS not included — place manually in: ~/.steam/steam/steamapps/common/RetroArch/system/pcsx2/bios/
# - 3DS BIOS/keys optional — place in: ~/.steam/steam/steamapps/common/RetroArch/system/
set -e
RA="$HOME/.steam/steam/steamapps/common/RetroArch"
BUILDBOT="https://buildbot.libretro.com/nightly/linux/x86_64/latest"
ASSETS="https://buildbot.libretro.com/assets"
TMP=$(mktemp -d)
trap 'rm -rf "$TMP"' EXIT
CORES=(
dolphin_libretro.so.zip
pcsx2_libretro.so.zip
azahar_libretro.so.zip
)
echo "==> Downloading cores..."
for core in "${CORES[@]}"; do
echo " $core"
wget -q --show-progress -P "$TMP" "$BUILDBOT/$core"
unzip -oq "$TMP/$core" -d "$RA/cores/"
done
echo "==> Downloading info files..."
wget -q --show-progress -O "$TMP/info.zip" "$ASSETS/frontend/info.zip"
unzip -oq "$TMP/info.zip" dolphin_libretro.info -d "$RA/cores/"
unzip -oq "$TMP/info.zip" pcsx2_libretro.info -d "$RA/cores/"
unzip -oq "$TMP/info.zip" azahar_libretro.info -d "$RA/cores/"
echo "==> Downloading system files..."
mkdir -p "$RA/system/dolphin-emu"
wget -q --show-progress -O "$TMP/Dolphin.zip" "$ASSETS/system/Dolphin.zip"
unzip -oq "$TMP/Dolphin.zip" -d "$RA/system/dolphin-emu/"
wget -q --show-progress -O "$TMP/LRPS2.zip" "$ASSETS/system/LRPS2.zip"
unzip -oq "$TMP/LRPS2.zip" -d "$RA/system/"
echo "==> Done."
echo " PS2 BIOS → $RA/system/pcsx2/bios/"
echo " 3DS BIOS → $RA/system/ (optional)"
@Veticia

Veticia commented Apr 18, 2026

Copy link
Copy Markdown
Author

spent way too long trying to get standalone RetroArch running through Steam while keeping cloud saves. tried basically everything:

  • replacing the binary with a wrapper → Steam runs inside a pressure-vessel container, /usr/bin doesn't exist in there
  • STEAM_COMPAT_MOUNTS=/usr to expose host fs → container explicitly blocks /usr
  • /run/host/usr/bin/retroarch since host is mounted there → binary ran but missing libpulsecommon and other libs not in the container runtime
  • STEAM_RUNTIME=0 to skip the container → still sandboxed somehow
  • copying standalone libs into the game dir → should work in theory but was too fiddly
  • AppImage: extracted and replaced the whole Steam RA directory → no retroarch.sh so Steam couldn't launch it, also broke mist (the Steam↔RA bridge)
  • custom retroarch.sh calling AppRun from the AppImage → ran, but fonts broken because config pointed to /usr/share/libretro/assets/ which doesn't exist in the container. fixed that, fonts worked standalone, broken again from Steam because container resolves paths differently
  • also couldn't resize the window at all - gl driver doesn't work properly on Wayland

ended up just going back to stock Steam RetroArch and manually dropping the missing cores from buildbot.libretro.com into cores/. took 5 minutes. hence this script.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment