2022-10-04 16:21:46 +00:00
#!/bin/bash
2022-10-07 17:46:48 +00:00
# VARIABLES SECTION
2022-10-24 19:49:47 +00:00
#rd_conf="retrodeck.cfg" # uncomment for standalone testing
#source functions.sh # uncomment for standalone testing
2022-10-12 20:06:17 +00:00
2022-10-24 19:49:47 +00:00
source /app/libexec/global.sh # uncomment for flatpak testing
source /app/libexec/functions.sh # uncomment for flatpak testing
2022-10-07 17:46:48 +00:00
# DIALOG SECTION
2022-10-04 16:21:46 +00:00
# Configurator Option Tree
# Welcome
# - Move Directories
2022-10-26 16:51:46 +00:00
# - Migrate everything
2022-10-07 17:46:48 +00:00
# - Change Emulator Options
# - RetroArch
# - Change Rewind Setting
2022-10-04 16:21:46 +00:00
# - RetroAchivement login
2022-10-07 17:46:48 +00:00
# - Login prompt
2022-10-04 16:21:46 +00:00
# - Reset RetroDECK
2022-10-07 17:46:48 +00:00
# - Reset RetroArch
2022-10-12 20:06:17 +00:00
# - Reset Specific Standalone Emulator
# - Reset Yuzu
# - Reset Dolphin
# - Reset PCSX2
# - Reset MelonDS
# - Reset Citra
# - Reset RPCS3
# - Reset XEMU
# - Reset PPSSPP
# - Reset Duckstation
# - Reset All Standalone Emulators
2022-10-07 17:46:48 +00:00
# - Reset Tools
# - Reset All
2022-10-04 16:21:46 +00:00
2022-10-07 17:46:48 +00:00
# Code for the menus should be put in reverse order, so functions for sub-menus exists before it is called by the parent menu
2022-10-04 16:21:46 +00:00
2022-10-12 20:06:17 +00:00
# DIALOG TREE FUNCTIONS
2022-10-04 16:21:46 +00:00
2022-10-07 17:46:48 +00:00
configurator_reset_dialog( ) {
2022-10-26 16:51:46 +00:00
choice = $( zenity --list --title= "RetroDECK Configurator Utility - Reset Options" --cancel-label= "Back" \
--window-icon= "/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--column= "Choice" --column= "Action" \
"Reset RetroArch" "Reset RetroArch to default settings" \
"Reset Specific Standalone" "Reset only one specific standalone emulator to default settings" \
"Reset All Standalones" "Reset all standalone emulators to default settings" \
"Reset Tools" "Reset Tools menu entries" \
"Reset All" "Reset RetroDECK to default settings" )
case $choice in
"Reset RetroArch" )
2022-11-19 20:47:49 +00:00
ra_init
2022-10-26 16:51:46 +00:00
configurator_process_complete_dialog "resetting RetroArch"
; ;
2022-10-07 17:46:48 +00:00
2022-10-26 16:51:46 +00:00
"Reset Specific Standalone" )
emulator_to_reset = $( zenity --list \
--title "RetroDECK Configurator Utility - Reset Specific Standalone Emulator" --cancel-label= "Back" \
2022-10-07 17:46:48 +00:00
--window-icon= "/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
2022-10-26 16:51:46 +00:00
--text= "Which emulator do you want to reset to default?" \
2022-10-07 17:46:48 +00:00
--hide-header \
--column= emulator \
"RetroArch" \
"Citra" \
"Dolphin" \
"Duckstation" \
"MelonDS" \
2022-10-26 16:51:46 +00:00
"PCSX2" \
2022-10-07 17:46:48 +00:00
"PPSSPP" \
"RPCS3" \
"XEMU" \
2022-10-12 20:06:17 +00:00
"Yuzu" )
2022-10-07 17:46:48 +00:00
2022-10-26 16:51:46 +00:00
case $emulator_to_reset in
2022-10-07 17:46:48 +00:00
"RetroArch" )
2022-11-19 20:47:49 +00:00
ra_init
2022-10-26 16:51:46 +00:00
configurator_process_complete_dialog " resetting $emulator_to_reset "
; ;
2022-10-07 17:46:48 +00:00
"Citra" )
2022-11-19 20:47:49 +00:00
citra_init
2022-10-26 16:51:46 +00:00
configurator_process_complete_dialog " resetting $emulator_to_reset "
; ;
2022-10-12 20:06:17 +00:00
2022-10-07 17:46:48 +00:00
"Dolphin" )
2022-11-19 20:47:49 +00:00
dolphin_init
2022-10-26 16:51:46 +00:00
configurator_process_complete_dialog " resetting $emulator_to_reset "
; ;
2022-10-12 20:06:17 +00:00
2022-10-07 17:46:48 +00:00
"Duckstation" )
2022-11-19 20:47:49 +00:00
duckstation_init
2022-10-26 16:51:46 +00:00
configurator_process_complete_dialog " resetting $emulator_to_reset "
; ;
2022-10-12 20:06:17 +00:00
2022-10-07 17:46:48 +00:00
"MelonDS" )
2022-11-19 20:47:49 +00:00
melonds_init
2022-10-26 16:51:46 +00:00
configurator_process_complete_dialog " resetting $emulator_to_reset "
; ;
2022-10-12 20:06:17 +00:00
2022-10-26 16:51:46 +00:00
"PCSX2" )
2022-11-19 20:47:49 +00:00
pcsx2_init
2022-10-26 16:51:46 +00:00
configurator_process_complete_dialog " resetting $emulator_to_reset "
; ;
2022-10-12 20:06:17 +00:00
2022-10-07 17:46:48 +00:00
"PPSSPP" )
2022-11-19 20:47:49 +00:00
ppssppsdl_init
2022-10-26 16:51:46 +00:00
configurator_process_complete_dialog " resetting $emulator_to_reset "
; ;
2022-10-12 20:06:17 +00:00
2022-10-07 17:46:48 +00:00
"RPCS3" )
2022-11-19 20:47:49 +00:00
rpcs3_init
2022-10-26 16:51:46 +00:00
configurator_process_complete_dialog " resetting $emulator_to_reset "
; ;
2022-10-12 20:06:17 +00:00
2022-10-07 17:46:48 +00:00
"XEMU" )
2022-11-19 20:47:49 +00:00
xemu_init
2022-10-26 16:51:46 +00:00
configurator_process_complete_dialog " resetting $emulator_to_reset "
; ;
2022-10-12 20:06:17 +00:00
2022-10-07 17:46:48 +00:00
"Yuzu" )
2022-11-19 20:47:49 +00:00
yuzu_init
2022-10-26 16:51:46 +00:00
configurator_process_complete_dialog " resetting $emulator_to_reset "
; ;
2022-10-12 20:06:17 +00:00
2022-10-07 17:46:48 +00:00
"" ) # No selection made or Back button clicked
2022-10-26 16:51:46 +00:00
configurator_reset_dialog
; ;
2022-10-04 16:21:46 +00:00
2022-10-07 17:46:48 +00:00
esac
2022-10-26 16:51:46 +00:00
; ;
"Reset All Standalones" )
2022-11-19 20:47:49 +00:00
standalones_init
2022-10-26 16:51:46 +00:00
configurator_process_complete_dialog "resetting standalone emulators"
; ;
"Reset Tools" )
2022-11-19 20:47:49 +00:00
tools_init
2022-10-26 16:51:46 +00:00
configurator_process_complete_dialog "resetting the tools menu"
; ;
"Reset All" )
zenity --icon-name= net.retrodeck.retrodeck --info --no-wrap \
--window-icon= "/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Reset RetroDECK" \
--text= "You are resetting RetroDECK to its default state.\n\nAfter the process is complete you will need to exit RetroDECK and run it again."
2022-11-19 20:47:49 +00:00
rm -f " $lockfile "
2022-10-26 16:51:46 +00:00
configurator_process_complete_dialog "resetting RetroDECK"
; ;
"" ) # No selection made or Back button clicked
configurator_welcome_dialog
; ;
esac
}
configurator_retroachivement_dialog( ) {
2022-11-19 20:47:49 +00:00
login = $( zenity --forms --title= "RetroDECK Configurator Utility - RetroArch RetroAchievements Login" --cancel-label= "Back" \
2022-10-26 16:51:46 +00:00
--window-icon= "/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
2022-11-19 20:47:49 +00:00
--text= "Enter your RetroAchievements Account details.\n\nBe aware that this tool cannot verify your login details and currently only supports logging in with RetroArch.\nFor registration and more info visit\nhttps://retroachievements.org/\n" \
2022-10-26 16:51:46 +00:00
--separator= "=SEP=" \
--add-entry= "Username" \
--add-password= "Password" )
if [ $? = = 1 ] # Cancel button clicked
then
configurator_welcome_dialog
fi
arrIN = ( ${ login //=SEP=/ } )
user = ${ arrIN [0] }
pass = ${ arrIN [1] }
2022-11-19 20:47:49 +00:00
set_setting_value $raconf cheevos_enable true retroarch
set_setting_value $raconf cheevos_username $user retroarch
set_setting_value $raconf cheevos_password $pass retroarch
2022-10-26 16:51:46 +00:00
2022-11-19 20:47:49 +00:00
configurator_process_complete_dialog "logging in to RetroArch RetroAchievements"
2022-10-26 16:51:46 +00:00
}
configurator_update_dialog( ) {
configurator_generic_dialog "This feature is not available yet"
configurator_welcome_dialog
}
configurator_power_user_changes_dialog( ) {
zenity --title "RetroDECK Configurator Utility - Power User Options" --question --no-wrap --cancel-label= "Back" \
--window-icon= "/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
2022-11-18 20:15:59 +00:00
--text= "Making manual changes to an emulators configuration may create serious issues,\nand some settings may be overwitten during RetroDECK updates.\n\nSome standalone emulator functions may not work properly outside of Desktop mode.\n\nPlease continue only if you know what you're doing.\n\nDo you want to continue?"
2022-10-26 16:51:46 +00:00
if [ $? = = 1 ] # Cancel button clicked
then
configurator_options_dialog
fi
emulator = $( zenity --list \
--title "RetroDECK Configurator Utility - Power User Options" --cancel-label= "Back" \
--window-icon= "/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--text= "Which emulator do you want to configure?" \
--hide-header \
--column= emulator \
"RetroArch" \
"Citra" \
"Dolphin" \
"Duckstation" \
"MelonDS" \
"PCSX2-QT" \
"PCSX2-Legacy" \
"PPSSPP" \
"RPCS3" \
"XEMU" \
"Yuzu" )
case $emulator in
"RetroArch" )
retroarch
; ;
"Citra" )
citra-qt
; ;
"Dolphin" )
dolphin-emu
; ;
"Duckstation" )
duckstation-qt
; ;
"MelonDS" )
melonDS
; ;
"PCSX2-QT" )
pcsx2-qt
; ;
"PCSX2-Legacy" )
pcsx2
; ;
"PPSSPP" )
PPSSPPSDL
; ;
"RPCS3" )
rpcs3
; ;
"XEMU" )
xemu
; ;
"Yuzu" )
yuzu
; ;
"" ) # No selection made or Back button clicked
configurator_options_dialog
; ;
esac
2022-10-04 16:21:46 +00:00
}
2022-10-07 20:28:36 +00:00
configurator_retroarch_rewind_dialog( ) {
2022-10-26 16:51:46 +00:00
if [ [ $( get_setting_value $raconf rewind_enable retroarch) = = "true" ] ] ; then
zenity --question \
--no-wrap --window-icon= "/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - Rewind" \
--text= "Rewind is currently enabled. Do you want to disable it?."
if [ $? = = 0 ]
then
2022-11-19 20:47:49 +00:00
set_setting_value $raconf rewind_enable true retroarch
2022-10-26 16:51:46 +00:00
configurator_process_complete_dialog "enabling Rewind"
2022-10-07 20:28:36 +00:00
else
2022-10-26 16:51:46 +00:00
configurator_options_dialog
2022-10-07 17:46:48 +00:00
fi
2022-10-26 16:51:46 +00:00
else
zenity --question \
--no-wrap --window-icon= "/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - Rewind" \
--text= "Rewind is currently disabled, do you want to enable it?\n\nNOTE:\nThis may impact performance expecially on the latest systems."
if [ $? = = 0 ]
then
2022-11-19 20:47:49 +00:00
set_setting_value $raconf rewind_enable false retroarch
2022-10-26 16:51:46 +00:00
configurator_process_complete_dialog "disabling Rewind"
else
configurator_options_dialog
fi
fi
2022-10-07 17:46:48 +00:00
}
2022-10-07 20:28:36 +00:00
configurator_retroarch_options_dialog( ) {
2022-10-26 16:51:46 +00:00
choice = $( zenity --list --title= "RetroDECK Configurator Utility - RetroArch Options" --cancel-label= "Back" \
--window-icon= "/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--column= "Choice" --column= "Action" \
"Change Rewind Setting" "Enable or disable the Rewind function in RetroArch" )
2022-10-07 20:28:36 +00:00
2022-10-26 16:51:46 +00:00
case $choice in
2022-10-07 20:28:36 +00:00
2022-10-26 16:51:46 +00:00
"Change Rewind Setting" )
configurator_retroarch_rewind_dialog
; ;
2022-10-07 20:28:36 +00:00
2022-10-26 16:51:46 +00:00
"" ) # No selection made or Back button clicked
configurator_options_dialog
; ;
2022-10-12 20:06:17 +00:00
2022-10-26 16:51:46 +00:00
esac
2022-10-07 20:28:36 +00:00
}
2022-10-07 17:46:48 +00:00
configurator_options_dialog( ) {
2022-10-26 16:51:46 +00:00
choice = $( zenity --list --title= "RetroDECK Configurator Utility - Change Options" --cancel-label= "Back" \
--window-icon= "/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--column= "Choice" --column= "Action" \
"Change RetroArch Settings" "Change settings specific to RetroArch" \
"Power User Changes" "Make changes directly in an emulator" )
2022-10-07 17:46:48 +00:00
2022-10-26 16:51:46 +00:00
case $choice in
2022-10-07 17:46:48 +00:00
2022-10-26 16:51:46 +00:00
"Change RetroArch Settings" )
configurator_retroarch_options_dialog
; ;
2022-10-07 17:46:48 +00:00
2022-10-26 16:51:46 +00:00
"Power User Changes" )
configurator_power_user_changes_dialog
; ;
2022-10-07 17:46:48 +00:00
2022-10-26 16:51:46 +00:00
"" ) # No selection made or Back button clicked
configurator_welcome_dialog
; ;
2022-10-12 20:06:17 +00:00
2022-10-26 16:51:46 +00:00
esac
2022-10-07 17:46:48 +00:00
}
2022-10-10 21:01:19 +00:00
configurator_move_dialog( ) {
2022-10-26 16:59:36 +00:00
if [ [ -d $rdhome ] ] ; then
configurator_generic_dialog "This option will move the RetroDECK data folder (ROMs, saves, BIOS etc.) to a new location.\n\nPlease choose where to move the RetroDECK data folder."
destination = $( configurator_destination_choice_dialog "RetroDECK Data" "Please choose a destination for the RetroDECK data folder." )
case $destination in
"Back" )
2022-10-26 16:51:46 +00:00
configurator_move_dialog
2022-10-26 16:59:36 +00:00
; ;
"Internal Storage" )
if [ [ ! -L /home/deck/retrodeck && -d /home/deck/retrodeck ] ] ; then
configurator_generic_dialog "The RetroDECK data folder is already at that location, please pick a new one."
2022-10-26 16:51:46 +00:00
configurator_move_dialog
2022-10-26 16:59:36 +00:00
else
configurator_generic_dialog " Moving RetroDECK data folder to $destination "
2022-11-19 20:47:49 +00:00
unlink /home/deck/retrodeck # Remove symlink for $rdhome
move $sdcard /retrodeck "/home/deck/"
roms_folder = " $rdhome /roms "
dir_prep $roms_folder "/var/config/emulationstation/ROMs"
conf_write
2022-10-26 16:59:36 +00:00
configurator_process_complete_dialog "moving the RetroDECK data directory to internal storage"
fi
; ;
"SD Card" )
if [ [ -L $rdhome && -d $sdcard /retrodeck ] ] ; then
configurator_generic_dialog "The RetroDECK data folder is already at that location, please pick a new one."
2022-10-26 16:51:46 +00:00
configurator_move_dialog
2022-10-26 16:59:36 +00:00
else
if [ [ ! -w $sdcard ] ] ; then
configurator_generic_dialog "The SD card was found but is not writable\nThis can happen with cards formatted on PC or for other reasons.\nPlease format the SD card through the Steam Deck's Game Mode and try the moving process again."
configurator_welcome_dialog
2022-10-26 16:51:46 +00:00
else
configurator_generic_dialog " Moving RetroDECK data folder to $destination "
2022-10-26 16:59:36 +00:00
if [ [ -L $rdhome /roms ] ] ; then # Check for ROMs symlink user may have created
2022-11-19 20:47:49 +00:00
unlink $rdhome /roms
2022-10-26 16:59:36 +00:00
fi
2022-11-19 20:47:49 +00:00
dir_prep " $sdcard /retrodeck " $rdhome
roms_folder = " $sdcard /retrodeck/roms "
dir_prep $roms_folder "/var/config/emulationstation/ROMs"
conf_write
2022-10-26 16:59:36 +00:00
configurator_process_complete_dialog "moving the RetroDECK data directory to SD card"
2022-10-26 16:51:46 +00:00
fi
2022-10-26 16:59:36 +00:00
fi
; ;
2022-10-10 21:01:19 +00:00
2022-10-26 16:59:36 +00:00
"Custom Location" )
configurator_generic_dialog "A custom location for the RetroDECK data folder is not currently supported.\nPlease choose another location."
configurator_move_dialog
; ;
esac
else
configurator_generic_dialog "The RetroDECK data folder was not found at the expected location.\n\nThis may have happened if the folder was moved manually.\n\nPlease select the current location of the RetroDECK data folder."
2022-11-19 20:47:49 +00:00
rdhome = $( browse "RetroDECK directory location" )
conf_write
2022-10-26 16:59:36 +00:00
configurator_generic_dialog " RetroDECK data folder now configured at $rdhome . Please start the moving process again. "
configurator_move_dialog
fi
2022-10-07 17:46:48 +00:00
}
configurator_welcome_dialog( ) {
2022-10-26 16:51:46 +00:00
# Clear the variables
source =
destination =
action =
setting =
setting_value =
choice = $( zenity --list --title= "RetroDECK Configurator Utility" --cancel-label= "Quit" \
--window-icon= "/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--column= "Choice" --column= "Action" \
"Move Files" "Move files between internal/SD card or to custom locations" \
"Change Options" "Adjust how RetroDECK behaves" \
"RetroAchivements" "Log in to RetroAchievements" \
"Reset" "Reset parts of RetroDECK" )
case $choice in
"Move Files" )
configurator_move_dialog
; ;
"Change Options" )
configurator_options_dialog
; ;
"RetroAchivements" )
configurator_retroachivement_dialog
; ;
"Reset" )
configurator_reset_dialog
; ;
"Quit" )
exit 0
; ;
esac
2022-10-07 17:46:48 +00:00
}
# START THE CONFIGURATOR
2022-10-04 16:21:46 +00:00
2022-10-07 17:46:48 +00:00
configurator_welcome_dialog