# One-step installer for switch emulators on Linux and Windows

> Source: <https://gist.github.com/camcast3/0d8232b3c77cb0ea1d8279dbabd0eeaf>
> Published: 2026-05-01 02:16:24+00:00

Switch Emulator Scripts One-step installer and ES-DE integration for Nintendo Switch emulators on Linux and Windows. Automatically downloads and installs your chosen emulator along with the latest firmware and decryption keys — then optionally configures EmulationStation Desktop Edition (ES-DE) and Steam Gaming Mode. Scripts Overview Script Platform Description installSwitchEmu.sh Linux Install emulator + firmware + keys installSwitchEmuWin.ps1 Windows Install emulator + firmware + keys setupESDESwitchEmu.sh Linux Configure ES-DE to use Switch emulators (EmuDeck-compatible) updateSwitchFirmware.sh Linux Update firmware/keys for all installed emulators addSteamShortcuts.sh Linux Add emulators to Steam Gaming Mode (Bazzite/SteamOS) Supported Emulators Citron — Yuzu fork Eden — Self-hosted Yuzu fork Ryujinx — Ryubing community fork Quick Start Full Setup (Linux — Bazzite / Steam Deck / Desktop) GIST="https://gist.githubusercontent.com/camcast3/0d8232b3c77cb0ea1d8279dbabd0eeaf/raw" # 1. Install emulator curl -fsSL $GIST/installSwitchEmu.sh | bash -s -- --emulator eden # 2. Configure ES-DE to see it curl -fsSL $GIST/setupESDESwitchEmu.sh | bash # 3. (Optional) Add to Steam Gaming Mode curl -fsSL $GIST/addSteamShortcuts.sh | bash Windows $GIST = "https://gist.githubusercontent.com/camcast3/0d8232b3c77cb0ea1d8279dbabd0eeaf/raw" iwr -useb "$GIST/installSwitchEmuWin.ps1" -OutFile $env:TEMP\install.ps1 & $env:TEMP\install.ps1 --emulator eden 1. installSwitchEmu.sh / installSwitchEmuWin.ps1 Downloads and installs a Switch emulator with firmware and decryption keys. Options -e, --emulator EMU Specify emulator: citron (default), ryujinx, eden -f, --force Force reinstall even if already installed -s, --skip-keys Skip downloading prod.keys and firmware -d, --dir DIR Custom installation directory -v, --keys-version VER Specify firmware version (e.g., 20.4.0) -h, --help Show help message Linux Examples GIST="https://gist.githubusercontent.com/camcast3/0d8232b3c77cb0ea1d8279dbabd0eeaf/raw" # Install Eden to default location curl -fsSL $GIST/installSwitchEmu.sh | bash -s -- --emulator eden # Install Ryujinx with custom directory curl -fsSL $GIST/installSwitchEmu.sh | bash -s -- --emulator ryujinx --dir /opt/ryujinx # Install Citron without keys/firmware curl -fsSL $GIST/installSwitchEmu.sh | bash -s -- --skip-keys # Force reinstall with specific firmware version curl -fsSL $GIST/installSwitchEmu.sh | bash -s -- --emulator eden --force --keys-version 20.4.0 Windows Examples $GIST = "https://gist.githubusercontent.com/camcast3/0d8232b3c77cb0ea1d8279dbabd0eeaf/raw" iwr -useb "$GIST/installSwitchEmuWin.ps1" -OutFile $env:TEMP\install.ps1 # Install Eden & $env:TEMP\install.ps1 --emulator eden # Install Ryujinx with custom directory & $env:TEMP\install.ps1 --emulator ryujinx --dir "C:\Games\Ryujinx" # Force reinstall with specific firmware version & $env:TEMP\install.ps1 --emulator eden --force --keys-version 20.4.0 2. setupESDESwitchEmu.sh Configures ES-DE (EmulationStation Desktop Edition) to recognize your installed Switch emulators. Follows EmuDeck directory conventions so it works alongside EmuDeck setups. What it does: Creates ~/Emulation/roms/switch/ for your ROM files Symlinks emulators into ~/Emulation/tools/ (EmuDeck convention) Writes es_find_rules.xml so ES-DE can auto-detect citron, eden, and ryujinx Writes es_systems.xml with all three as selectable launch options Options --emulator EMU Which emulator to configure (citron, ryujinx, eden, all). Default: all --emu-path PATH Path to emulator install (auto-detected if not specified) --roms-dir DIR Custom ROMs directory. Default: ~/Emulation/roms/switch --no-symlink Don't create symlinks in ~/Emulation/tools/ --uninstall Remove ES-DE custom configs added by this script -h, --help Show this help Examples GIST="https://gist.githubusercontent.com/camcast3/0d8232b3c77cb0ea1d8279dbabd0eeaf/raw" # Auto-detect and configure all installed emulators curl -fsSL $GIST/setupESDESwitchEmu.sh | bash # Configure only Eden with a custom install path curl -fsSL $GIST/setupESDESwitchEmu.sh | bash -s -- --emulator eden --emu-path ~/Applications/eden # Use a custom ROMs directory curl -fsSL $GIST/setupESDESwitchEmu.sh | bash -s -- --roms-dir /mnt/games/switch # Remove the ES-DE configuration curl -fsSL $GIST/setupESDESwitchEmu.sh | bash -s -- --uninstall Directory Layout After Setup ~/Emulation/ ├── roms/ │ └── switch/ ← Place .nsp / .xci files here └── tools/ ├── citron/ ← Symlinks to installed emulator binaries ├── eden/ └── ryujinx/ After running, restart ES-DE. Change the default emulator in: Other Settings → Alternative Emulators → Nintendo Switch 3. updateSwitchFirmware.sh Updates firmware and decryption keys for all installed Switch emulators without needing to re-run the full installer. Detects which emulators are installed and updates each one. Options --version VER Firmware/keys version to install (e.g., 19.0.1). Default: latest --list-versions Show available versions and exit --keys-only Only update prod.keys --firmware-only Only update firmware -h, --help Show this help Examples GIST="https://gist.githubusercontent.com/camcast3/0d8232b3c77cb0ea1d8279dbabd0eeaf/raw" # Update all emulators to latest firmware/keys curl -fsSL $GIST/updateSwitchFirmware.sh | bash # Update to a specific version curl -fsSL $GIST/updateSwitchFirmware.sh | bash -s -- --version 19.0.1 # Only update keys (faster) curl -fsSL $GIST/updateSwitchFirmware.sh | bash -s -- --keys-only # See what versions are available curl -fsSL $GIST/updateSwitchFirmware.sh | bash -s -- --list-versions 4. addSteamShortcuts.sh Creates desktop entries and launcher scripts for Steam Gaming Mode. Essential for Bazzite, SteamOS, and Steam Deck where Game Mode is the primary interface. What it does: Adds ES-DE as a non-Steam shortcut (launch your game library from Gaming Mode) Adds individual emulators as shortcuts for direct access Creates launcher scripts in ~/Emulation/tools/launchers/ Options --esde-only Only add ES-DE shortcut --emulators-only Only add emulator shortcuts --all Add both ES-DE and emulator shortcuts (default) --remove Remove all shortcuts added by this script -h, --help Show this help Examples GIST="https://gist.githubusercontent.com/camcast3/0d8232b3c77cb0ea1d8279dbabd0eeaf/raw" # Add all shortcuts curl -fsSL $GIST/addSteamShortcuts.sh | bash # Only add ES-DE as a shortcut curl -fsSL $GIST/addSteamShortcuts.sh | bash -s -- --esde-only # Remove shortcuts curl -fsSL $GIST/addSteamShortcuts.sh | bash -s -- --remove After running, add shortcuts to Steam via: Open Steam in Desktop Mode Games → Add a Non-Steam Game to My Library Select the entries with "(Switch" in their name Switch to Gaming Mode — they'll appear in your library Recommended Workflow (Bazzite / Steam Deck) GIST="https://gist.githubusercontent.com/camcast3/0d8232b3c77cb0ea1d8279dbabd0eeaf/raw" # Step 1: Install your preferred emulator curl -fsSL $GIST/installSwitchEmu.sh | bash -s -- --emulator eden # Step 2: Hook it into ES-DE (EmuDeck-compatible) curl -fsSL $GIST/setupESDESwitchEmu.sh | bash # Step 3: Add to Steam for Gaming Mode access curl -fsSL $GIST/addSteamShortcuts.sh | bash # Step 4: Place your games # Copy .nsp / .xci files to ~/Emulation/roms/switch/ # Later: Update firmware when new games need it curl -fsSL $GIST/updateSwitchFirmware.sh | bash Notes These scripts depend on THZoria/NX_Firmware for firmware and keys. If the latest versions are mismatched, use --keys-version to specify explicitly. The ES-DE setup is fully compatible with existing EmuDeck installations — it uses the same directory layout and conventions. On Bazzite, you may need to chmod +x AppImage files if they weren't installed via the script.
