#!/bin/bash INSTALL_DIR=~/retrodeck CORES_LINK=https://buildbot.libretro.com/stable/1.10.1/linux/x86_64/RetroArch_cores.7z PREVIOUS_DIR=$PWD echo "Welcome to the RetroDECK installer." echo "RetroDECK will be installed in $INSTALL_DIR." # TODO-MAYBE: give the option to change the installation directory? echo "WARNING: RetroDECK will replace your retroarch.cfg, the former one will be renamed moved in ~/.config/retroarch/retroarch.cfg.bak." echo "Whenever a choice is prompted just accept it to continue (yes/enter), root password will be asked." # but maybe it will not affect the original retroarch, let's see # maybe --root option of pacman may be useful to install my own copy of retroarch without messing the one already installed read -n 1 -r -s -p $'Press enter to continue...\n' echo "Installing RetroDECK in $INSTALL_DIR, please stand by." cd $INSTALL_DIR # TODO: download everything from retrodeck github # git clone --recursive https://github.com/XargonWan/RetroDECK retrodeck # Initalizing rom folders if [ test ! -d "$INSTALL_DIR/storage/roms/" ]; then mkdir -p $INSTALL_DIR/storage/roms/ fi if [ test ! -d "$INSTALL_DIR/roms" ]; then ln -s $INSTALL_DIR/storage/roms $INSTALL_DIR/roms fi mkdir -p $INSTALL_DIR/roms/3do mkdir -p $INSTALL_DIR/roms/amiga mkdir -p $INSTALL_DIR/roms/amigacd32 mkdir -p $INSTALL_DIR/roms/amstradcpc mkdir -p $INSTALL_DIR/roms/arcade mkdir -p $INSTALL_DIR/roms/atari2600 mkdir -p $INSTALL_DIR/roms/atari5200 mkdir -p $INSTALL_DIR/roms/atari7800 mkdir -p $INSTALL_DIR/roms/atarist mkdir -p $INSTALL_DIR/roms/atari800 mkdir -p $INSTALL_DIR/roms/atomiswave mkdir -p $INSTALL_DIR/roms/channelf mkdir -p $INSTALL_DIR/roms/colecovision mkdir -p $INSTALL_DIR/roms/c64 mkdir -p $INSTALL_DIR/roms/c128 mkdir -p $INSTALL_DIR/roms/vic20 mkdir -p $INSTALL_DIR/roms/laserdisc mkdir -p $INSTALL_DIR/roms/dreamcast mkdir -p $INSTALL_DIR/roms/easyrpg mkdir -p $INSTALL_DIR/roms/famicom mkdir -p $INSTALL_DIR/roms/fbn mkdir -p $INSTALL_DIR/roms/gb mkdir -p $INSTALL_DIR/roms/gbh mkdir -p $INSTALL_DIR/roms/gameandwatch mkdir -p $INSTALL_DIR/roms/gba mkdir -p $INSTALL_DIR/roms/fds mkdir -p $INSTALL_DIR/roms/c16 mkdir -p $INSTALL_DIR/roms/ggh mkdir -p $INSTALL_DIR/roms/gbah mkdir -p $INSTALL_DIR/roms/intellivision mkdir -p $INSTALL_DIR/roms/gbch mkdir -p $INSTALL_DIR/roms/atarilynx mkdir -p $INSTALL_DIR/roms/mame mkdir -p $INSTALL_DIR/roms/dos mkdir -p $INSTALL_DIR/roms/snesmsu1 mkdir -p $INSTALL_DIR/roms/msx mkdir -p $INSTALL_DIR/roms/msx2 mkdir -p $INSTALL_DIR/roms/naomi mkdir -p $INSTALL_DIR/roms/neogeo mkdir -p $INSTALL_DIR/roms/ngp mkdir -p $INSTALL_DIR/roms/nds mkdir -p $INSTALL_DIR/roms/n64 mkdir -p $INSTALL_DIR/roms/nes mkdir -p $INSTALL_DIR/roms/nesh mkdir -p $INSTALL_DIR/roms/ngpc mkdir -p $INSTALL_DIR/roms/neocd mkdir -p $INSTALL_DIR/roms/pc-9800 mkdir -p $INSTALL_DIR/roms/pcengine mkdir -p $INSTALL_DIR/roms/pcenginecd mkdir -p $INSTALL_DIR/roms/pcfx mkdir -p $INSTALL_DIR/roms/openbor mkdir -p $INSTALL_DIR/roms/piece mkdir -p $INSTALL_DIR/roms/odyssey2 mkdir -p $INSTALL_DIR/roms/psp mkdir -p $INSTALL_DIR/roms/pspminis mkdir -p $INSTALL_DIR/roms/pokemini mkdir -p $INSTALL_DIR/roms/homebrew mkdir -p $INSTALL_DIR/roms/ports mkdir -p $INSTALL_DIR/roms/sc-3000 mkdir -p $INSTALL_DIR/roms/scummvm mkdir -p $INSTALL_DIR/roms/psx mkdir -p $INSTALL_DIR/roms/segacd mkdir -p $INSTALL_DIR/roms/sega32x mkdir -p $INSTALL_DIR/roms/genesis mkdir -p $INSTALL_DIR/roms/genh mkdir -p $INSTALL_DIR/roms/mastersystem mkdir -p $INSTALL_DIR/roms/megadrive mkdir -p $INSTALL_DIR/roms/megaduck mkdir -p $INSTALL_DIR/roms/saturn mkdir -p $INSTALL_DIR/roms/sg-1000 mkdir -p $INSTALL_DIR/roms/x1 mkdir -p $INSTALL_DIR/roms/zxspectrum mkdir -p $INSTALL_DIR/roms/zx81 mkdir -p $INSTALL_DIR/roms/pc-8800 mkdir -p $INSTALL_DIR/roms/snes mkdir -p $INSTALL_DIR/roms/supergrafx mkdir -p $INSTALL_DIR/roms/pico-8 mkdir -p $INSTALL_DIR/roms/megacd mkdir -p $INSTALL_DIR/roms/snesh mkdir -p $INSTALL_DIR/roms/satellaview mkdir -p $INSTALL_DIR/roms/sfc mkdir -p $INSTALL_DIR/roms/sufami mkdir -p $INSTALL_DIR/roms/tic-80 mkdir -p $INSTALL_DIR/roms/tg16 mkdir -p $INSTALL_DIR/roms/solarus mkdir -p $INSTALL_DIR/roms/vectrex mkdir -p $INSTALL_DIR/roms/gbc mkdir -p $INSTALL_DIR/roms/videopac mkdir -p $INSTALL_DIR/roms/virtualboy mkdir -p $INSTALL_DIR/roms/wonderswan mkdir -p $INSTALL_DIR/roms/wonderswancolor mkdir -p $INSTALL_DIR/roms/ecwolf mkdir -p $INSTALL_DIR/roms/x68000 mkdir -p $INSTALL_DIR/roms/build mkdir -p $INSTALL_DIR/roms/tools mkdir -p $INSTALL_DIR/roms/imageviewer mkdir -p $INSTALL_DIR/roms/gamegear mkdir -p $INSTALL_DIR/roms/tg16cd mkdir -p $INSTALL_DIR/roms/j2me mkdir -p $INSTALL_DIR/roms/uzebox mkdir -p $INSTALL_DIR/roms/supervision mkdir -p $INSTALL_DIR/roms/doom mkdir -p $INSTALL_DIR/roms/switch # Initializing directories mkdir -p $INSTALL_DIR/storage/.config/ mkdir -p $INSTALL_DIR/usr/ mkdir -p $INSTALL_DIR/emulators ln -s $INSTALL_DIR/emulationstation ~/.emulationstation # Defining architecture rm -f $INSTALL_DIR/storage/.config/.OS_ARCH touch $INSTALL_DIR/storage/.config/.OS_ARCH echo "DECK" >> $INSTALL_DIR/storage/.config/.OS_ARCH # Installing RetroArch sudo pacman -S retroarch # Setting up RetroArch mkdir -p ~/.config/retroarch/ mv ~/.config/retroarch/retroarch.cfg ~/.config/retroarch/retroarch.cfg.bak mv $INSTALL_DIR/retroarch.cfg ~/.config/retroarch/ # TODO: download controller config # Installing libretro cores cd $INSTALL_DIR/emulators if test -f "$INSTALL_DIR/emulators/RetroArch_cores.7z"; then read -p "The RetroArch cores seems to be already downloaded, do you want to re-download them? [Y/n]: " -n 1 -r if [[ ! $REPLY =~ ^[Nn]$ ]]; then break else rm -rf RetroArch* wget $CORES_LINK fi fi 7z x RetroArch_cores.7z mv $INSTALL_DIR/emulators/RetroArch-Linux-x86_64/RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores $INSTALL_DIR/emulators/ # TODO: Installing standalone emulators # Switch - Yuzu flatpak install flathub org.yuzu_emu.yuzu # Switch - Ryujinx cd $INSTALL_DIR/emulators wget https://github.com/Ryujinx/release-channel-master/releases/download/1.1.76/ryujinx-1.1.76-linux_x64.tar.gz tar -xvf ryujinx-1.1.76-linux_x64.tar.gz mv publish ryujinx # Installing 351elec-emulationstation cd $INSTALL_DIR git clone --recursive https://github.com/351ELEC/351elec-emulationstation emulationstation # TODO: one day I will have to fork this emustation... # applying patches cp $INSTALL_DIR/patches/Splash.h $INSTALL_DIR/emulationstation/es-core/src/Splash.h cp $INSTALL_DIR/patches/GuiMenu.cpp $INSTALL_DIR/emulationstation/es-app/src/guis/GuiMenu.cpp # pathes applied cd emulationstation sudo pacman -S base-devel cmake freeimage sdl2_mixer sdl2 rapidjson boost openal # openal is needed for ryujinx cmake -DENABLE_EMUELEC=1 -DGLES2=0 -DDISABLE_KODI=1 -DENABLE_FILEMANAGER=0 -DCEC=0 -DRG552=1 make -j$(nproc) cp $INSTALL_DIR/es_systems.cfg $INSTALL_DIR/emulationstation/ cp $INSTALL_DIR/es_settings.cfg $INSTALL_DIR/emulationstation/ cp $INSTALL_DIR/es_input.cfg $INSTALL_DIR/emulationstation/ # Installing default theme mkdir -p $INSTALL_DIR/emulationstation/themes cd $INSTALL_DIR/emulationstation/themes git clone --recursive https://github.com/anthonycaccese/es-theme-art-book-next # Downloading needed files # TODO 351elec-es-packages batocera-config batocera-scraper batocera-settings runemu.py setsettings.py # Creating desktop element rm -f ~/Desktop/RetroDECK.desktop touch ~/Desktop/RetroDECK.desktop cat << EOF >> ~/Desktop/RetroDECK.desktop [Desktop Entry] Comment=An enbedded emulation system. Exec=$INSTALL_DIR/retrodeck.sh GenericName=RetroDECK Icon=$INSTALL_DIR/res/icon128.png MimeType= Name=RetroDECK Path=$INSTALL_DIR/ StartupNotify=true Terminal=false TerminalOptions= Type=Application X-DBUS-ServiceName= X-DBUS-StartupType= X-KDE-SubstituteUID=false X-KDE-Username= EOF # Creating start script rm -rf $INSTALL_DIR/retrodeck.sh touch $INSTALL_DIR/retrodeck.sh cat << EOF >> $INSTALL_DIR/retrodeck.sh #!/bin/bash $INSTALL_DIR/export_func.sh mkdir -p /tmp/logs if [ test -d "/tmp/cores" ]; then break else ln -s $INSTALL_DIR/emulators/cores /tmp/cores fi $INSTALL_DIR/emulationstation/emulationstation EOF chmod 777 $INSTALL_DIR/retrodeck.sh chmod 777 $INSTALL_DIR/export_func.sh # Cleaning up # TODO: these removal must be made when I am sure this files are safe on github #rm -rf $INSTALL_DIR/emulators/RetroArch-Linux-x86_64 #rm -rf $INSTALL_DIR/emulators/RetroArch_cores.7z #rm $INSTALL_DIR/es_systems.cfg #rm $INSTALL_DIR/es_settings.cfg #rm $INSTALL_DIR/es_input.cfg #rm -rf $INSTALL_DIR/patches echo "Installation terminated, you can run RetroDECK from the desktop link or add it on your Steam Library." # TODO: maybe I can add it to the steam library directly, I think I have to close steam and design a banner cd $PREVIOUS_DIR