Convert /var/config and /var/data paths to XDG environment variables for portability

Also fix a ton of improperly-quoted bash variables
This commit is contained in:
icenine451 2025-03-27 12:52:04 -04:00
parent 79381909a4
commit c8fc7f3f8e
15 changed files with 590 additions and 591 deletions

View file

@ -10,7 +10,7 @@ save_migration() {
# ROMs on SD card
roms_folder="$default_sd/retrodeck/roms"
if [[ ! -L "$rdhome" && ! -L "$rdhome/roms" ]]; then # Add a roms folder symlink back to ~/retrodeck if missing, to fix things like PS2 autosaves until user migrates whole ~retrodeck directory
ln -s $roms_folder "$rdhome/roms"
ln -s "$roms_folder" "$rdhome/roms"
fi
else
# ROMs on Internal
@ -31,19 +31,19 @@ save_migration() {
fi
# Doing the dir prep as we don't know from which version we came
dir_prep "$media_folder" "/var/config/ES-DE/downloaded_media"
dir_prep "$themes_folder" "/var/config/ES-DE/themes"
dir_prep "$media_folder" "$XDG_CONFIG_HOME/ES-DE/downloaded_media"
dir_prep "$themes_folder" "$XDG_CONFIG_HOME/ES-DE/themes"
create_dir "$rdhome/logs" #this was added later, maybe safe to remove in a few versions
# Resetting es_settings, now we need it but in the future I should think a better solution, maybe with sed
cp -fv /app/retrodeck/es_settings.xml /var/config/ES-DE/settings/es_settings.xml
cp -fv "/app/retrodeck/es_settings.xml" "$XDG_CONFIG_HOME/ES-DE/settings/es_settings.xml"
# 0.4 -> 0.5
# Perform save and state migration if needed
# Moving PCSX2 Saves
mv -fv /var/config/PCSX2/sstates/* "$rdhome/states/ps2/pcsx2"
mv -fv /var/config/PCSX2/memcards/* "$rdhome/saves/ps2/memcards"
mv -fv "$XDG_CONFIG_HOME/PCSX2/sstates/"* "$rdhome/states/ps2/pcsx2"
mv -fv "$XDG_CONFIG_HOME/PCSX2/memcards/"* "$rdhome/saves/ps2/memcards"
# Moving Citra saves from legacy location to 0.5.0b structure
@ -52,7 +52,7 @@ save_migration() {
versionwheresaveschanged="0.4.5b" # Hardcoded break point between unsorted and sorted saves
if [[ $(sed -e "s/\.//g" <<< $hard_version) > $(sed -e "s/\.//g" <<< $versionwheresaveschanged) ]] && [[ ! $(sed -e "s/\.//g" <<< $version) > $(sed -e "s/\.//g" <<< $versionwheresaveschanged) ]]; then # Check if user is upgrading from the version where save organization was changed. Try not to reuse this, it things 0.4.5b is newer than 0.4.5
if [[ $(sed -e "s/\.//g" <<< "$hard_version") > $(sed -e "s/\.//g" <<< "$versionwheresaveschanged") ]] && [[ ! $(sed -e "s/\.//g" <<< "$version") > $(sed -e "s/\.//g" <<< "$versionwheresaveschanged") ]]; then # Check if user is upgrading from the version where save organization was changed. Try not to reuse this, it things 0.4.5b is newer than 0.4.5
migration_logfile="$rdhome/logs/savemove_$(date +"%Y_%m_%d_%I_%M_%p").log"
save_backup_file="$rdhome/savebackup_$(date +"%Y_%m_%d_%I_%M_%p").zip"
state_backup_file="$rdhome/statesbackup_$(date +"%Y_%m_%d_%I_%M_%p").zip"
@ -74,16 +74,16 @@ save_migration() {
current_dest_folder=
gamestoskip=
tar -C "$rdhome" -czf $save_backup_file saves # Backup save directory for safety
log i "Saves backed up to" $save_backup_file $migration_logfile
tar -C "$rdhome" -czf $state_backup_file states # Backup state directory for safety
log i "States backed up to" $state_backup_file $migration_logfile
tar -C "$rdhome" -czf "$save_backup_file" saves # Backup save directory for safety
log i "Saves backed up to" "$save_backup_file" "$migration_logfile"
tar -C "$rdhome" -czf "$state_backup_file" states # Backup state directory for safety
log i "States backed up to" "$state_backup_file" "$migration_logfile"
(
movefile() { # Take matching save and rom files and sort save into appropriate system folder
echo "# $filesleft $currentlybeingmoved remaining..." # These lines update the Zenity progress bar
progress=$(( 100 - (( 100 / "$totalfiles" ) * "$filesleft" )))
echo $progress
echo "$progress"
filesleft=$((filesleft-1))
if [[ ! " ${gamestoskip[*]} " =~ " ${1} " ]]; then # If the current game name exists multiple times in array ie. /roms/snes/Mortal Kombat 3.zip and /roms/genesis/Mortal Kombat 3.zip, skip and alert user to sort manually
game=$(sed -e "s/\^/ /g" <<< "$1") # Remove whitespace placeholder
@ -91,59 +91,59 @@ save_migration() {
systemdir="$(basename "$(dirname "$1")")" # Extract parent directory identifying system ROM belongs to
matches=($(find "$roms_folder" -maxdepth 2 -mindepth 2 -name "$gamebasename"".*" | sed -e 's/ /^/g' | sed -e 's/\..*//')) # Search for multiple instances of pure game name, adding to skip list if found
if [[ ${#matches[@]} -gt 1 ]]; then
echo "ERROR: Multiple ROMS found with name:" $gamebasename "Please sort saves and states for these ROMS manually" >> $migration_logfile
echo "ERROR: Multiple ROMS found with name: $gamebasename Please sort saves and states for these ROMS manually" >> "$migration_logfile"
gamestoskip+=("$1")
return
fi
log i "Examining ROM file:" "$game" $migration_logfile
log i "System detected as" $systemdir $migration_logfile
log i "Examining ROM file:" "$game" "$migration_logfile"
log i "System detected as" "$systemdir" "$migration_logfile"
sosfile=$(sed -e "s/\^/ /g" <<< "$2") # Remove whitespace placeholder from s-ave o-r s-tate file
sospurebasename="$(basename "$sosfile")" # Extract pure file name ie. /saves/game1.sav becomes game1
log i "Current save or state being examined for match:" $sosfile $migration_logfile
log i "Matching save or state" $sosfile "and game" $game "found." $migration_logfile
log i "Moving save or state to $current_dest_folder/$systemdir/$sosbasename" $migration_logfile
log i "Current save or state being examined for match:" "$sosfile" "$migration_logfile"
log i "Matching save or state $sosfile and game $game found." "$migration_logfile"
log i "Moving save or state to $current_dest_folder/$systemdir/$sosbasename" "$migration_logfile"
if [[ ! -d $current_dest_folder"/"$systemdir ]]; then # If system directory doesn't exist for save yet, create it
log w "Creating missing system directory $current_dest_folder/$systemdir"
mkdir $current_dest_folder/$systemdir
mkdir "$current_dest_folder/$systemdir"
fi
mv "$sosfile" -t $current_dest_folder/$systemdir # Move save to appropriate system directory
mv "$sosfile" -t "$current_dest_folder/$systemdir" # Move save to appropriate system directory
return
else
local name="$(basename "$1" | sed -e "s/\^/ /g")"
log w "Game with name \"$name\" already found. Skipping to next game..." $migration_logfile # Inform user of game being skipped due to duplicate ROM names
log w "Game with name \"$name\" already found. Skipping to next game..." "$migration_logfile" # Inform user of game being skipped due to duplicate ROM names
fi
}
find "$roms_folder" -mindepth 2 -maxdepth 2 -name "*\^*" -exec echo "ERROR: Game named" {} "found, please move save manually" \; >> $migration_logfile # Warn user if any of their files have the whitespace replacement character used by the script
find "$roms_folder" -mindepth 2 -maxdepth 2 -name "*\^*" -exec echo "ERROR: Game named" {} "found, please move save manually" \; >> "$migration_logfile" # Warn user if any of their files have the whitespace replacement character used by the script
totalfiles=$totalsaves #set variables for save file migration
filesleft=$totalsaves
totalfiles="$totalsaves" #set variables for save file migration
filesleft="$totalsaves"
currentlybeingmoved="saves"
current_dest_folder=$saves_folder
current_dest_folder="$saves_folder"
for i in "${allsaves[@]}"; do # For each save file, compare to every ROM file name looking for a match
found=
currentsave=($(basename "$i" | sed -e 's/\..*//')) # Extract pure file name ie. /saves/game1.sav becomes game1
for j in "${allgames[@]}"; do
currentgame=($(basename "$j" | sed -e 's/\..*//')) # Extract pure file name ie. /roms/snes/game1.zip becomes game1
[[ $currentgame == $currentsave ]] && { found=1; break; } # If names match move to next stage, otherwise skip
[[ "$currentgame" == "$currentsave" ]] && { found=1; break; } # If names match move to next stage, otherwise skip
done
[[ -n $found ]] && movefile $j $i || echo "ERROR: No ROM match found for save file" $i | sed -e 's/\^/ /g' >> $migration_logfile # If a match is found, run movefile() otherwise warn user of stranded save file
[[ -n "$found" ]] && movefile "$j" "$i" || echo "ERROR: No ROM match found for save file" "$i" | sed -e 's/\^/ /g' >> "$migration_logfile" # If a match is found, run movefile() otherwise warn user of stranded save file
done
totalfiles=$totalstates #set variables for state file migration
filesleft=$totalstates
totalfiles="$totalstates" #set variables for state file migration
filesleft="$totalstates"
currentlybeingmoved="states"
current_dest_folder=$states_folder
current_dest_folder="$states_folder"
for i in "${allstates[@]}"; do # For each state file, compare to every ROM file name looking for a match
found=
currentstate=($(basename "$i" | sed -e 's/\..*//')) # Extract pure file name ie. /states/game1.sav becomes game1
for j in "${allgames[@]}"; do
currentgame=($(basename "$j" | sed -e 's/\..*//')) # Extract pure file name ie. /roms/snes/game1.zip becomes game1
[[ $currentgame == $currentstate ]] && { found=1; break; } # If names match move to next stage, otherwise skip
[[ "$currentgame" == "$currentstate" ]] && { found=1; break; } # If names match move to next stage, otherwise skip
done
[[ -n $found ]] && movefile $j $i || echo "ERROR: No ROM match found for state file" $i | sed -e 's/\^/ /g' >> $migration_logfile # If a match is found, run movefile() otherwise warn user of stranded state file
[[ -n "$found" ]] && movefile "$j" "$i" || echo "ERROR: No ROM match found for state file" "$i" | sed -e 's/\^/ /g' >> "$migration_logfile" # If a match is found, run movefile() otherwise warn user of stranded state file
done
) |
@ -156,18 +156,18 @@ save_migration() {
--no-cancel \
--auto-close
if [[ $(cat $migration_logfile | grep "ERROR" | wc -l) -eq 0 ]]; then
if [[ $(cat "$migration_logfile" | grep "ERROR" | wc -l) -eq 0 ]]; then
rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK" \
--text="The migration process has sorted all of your files automatically.\n\nEverything should be working normally, if you experience any issues please check the RetroDECK wiki or contact us directly on the Discord."
else
cat $migration_logfile | grep "ERROR" > "$rdhome/manual_sort_needed.log"
cat "$migration_logfile" | grep "ERROR" > "$rdhome/manual_sort_needed.log"
rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK" \
--text="The migration process was unable to sort $(cat $migration_logfile | grep "ERROR" | wc -l) files automatically.\n\nThese files will need to be moved manually to their new locations, find more detail on the RetroDECK wiki.\n\nA log of the files that need manual sorting can be found at $rdhome/manual_sort_needed.log"
--text="The migration process was unable to sort $(cat "$migration_logfile" | grep "ERROR" | wc -l) files automatically.\n\nThese files will need to be moved manually to their new locations, find more detail on the RetroDECK wiki.\n\nA log of the files that need manual sorting can be found at $rdhome/manual_sort_needed.log"
fi
else

View file

@ -4,11 +4,11 @@ check_network_connectivity() {
# This function will do a basic check for network availability and return "true" if it is working.
# USAGE: if [[ $(check_network_connectivity) == "true" ]]; then
if [[ ! -z $(wget --spider -t 1 $remote_network_target_1 | grep "HTTP response 200") ]]; then
if [[ ! -z $(wget --spider -t 1 "$remote_network_target_1" | grep "HTTP response 200") ]]; then
local network_connected="true"
elif [[ ! -z $(wget --spider -t 1 $remote_network_target_2 | grep "HTTP response 200") ]]; then
elif [[ ! -z $(wget --spider -t 1 "$remote_network_target_2" | grep "HTTP response 200") ]]; then
local network_connected="true"
elif [[ ! -z $(wget --spider -t 1 $remote_network_target_3 | grep "HTTP response 200") ]]; then
elif [[ ! -z $(wget --spider -t 1 "$remote_network_target_3" | grep "HTTP response 200") ]]; then
local network_connected="true"
else
local network_connected="false"
@ -21,7 +21,7 @@ check_desktop_mode() {
# This function will do a basic check of if we are running in Steam Deck game mode or not, and return "true" if we are outside of game mode
# USAGE: if [[ $(check_desktop_mode) == "true" ]]; then
if [[ ! $XDG_CURRENT_DESKTOP == "gamescope" ]]; then
if [[ ! "$XDG_CURRENT_DESKTOP" == "gamescope" ]]; then
echo "true"
else
echo "false"
@ -32,7 +32,7 @@ check_is_steam_deck() {
# This function will check the internal product ID for the Steam Deck codename and return "true" if RetroDECK is running on a real Deck
# USAGE: if [[ $(check_is_steam_deck) == "true" ]]; then
if [[ $(cat /sys/devices/virtual/dmi/id/product_name) =~ ^(Jupiter|Galileo)$ ]]; then
if [[ $(cat "/sys/devices/virtual/dmi/id/product_name") =~ ^(Jupiter|Galileo)$ ]]; then
echo "true"
else
echo "false"
@ -58,7 +58,7 @@ check_for_version_update() {
fi
if [[ ! "$update_ignore" == "$online_version" ]]; then
if [[ "$update_repo" == "RetroDECK" ]] && [[ $(sed -e 's/[\.a-z]//g' <<< $version) -le $(sed -e 's/[\.a-z]//g' <<< $online_version) ]]; then
if [[ "$update_repo" == "RetroDECK" ]] && [[ $(sed -e 's/[\.a-z]//g' <<< "$version") -le $(sed -e 's/[\.a-z]//g' <<< "$online_version") ]]; then
choice=$(rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="OK" --extra-button="Ignore this version" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK - New Update Available" \
@ -66,7 +66,7 @@ check_for_version_update() {
rc=$? # Capture return code, as "OK" button has no text value
if [[ $rc == "1" ]]; then # If any button other than "OK" was clicked
log i "Selected: \"OK\""
set_setting_value $rd_conf "update_ignore" "$online_version" retrodeck "options" # Store version to ignore for future checks
set_setting_value "$rd_conf" "update_ignore" "$online_version" retrodeck "options" # Store version to ignore for future checks
fi
elif [[ "$update_repo" == "$cooker_repository_name" ]] && [[ ! $version == $online_version ]]; then
log i "Showing update request dialog as \"$online_version\" was found and is greater then \"$version\""
@ -78,10 +78,10 @@ check_for_version_update() {
if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked
if [[ $choice == "Ignore this version" ]]; then
log i "\"Ignore this version\" selected, updating \"$rd_conf\""
set_setting_value $rd_conf "update_ignore" "$online_version" retrodeck "options" # Store version to ignore for future checks.
set_setting_value "$rd_conf" "update_ignore" "$online_version" retrodeck "options" # Store version to ignore for future checks.
fi
else # User clicked "Yes"
install_release $online_version
install_release "$online_version"
fi
fi
fi
@ -93,13 +93,13 @@ check_for_version_update() {
validate_input() {
while IFS="^" read -r input action || [[ -n "$input" ]];
do
if [[ ! $input == "#"* ]] && [[ ! -z "$input" ]]; then
if [[ ! "$input" == "#"* ]] && [[ ! -z "$input" ]]; then
if [[ "$input" == "$1" ]]; then
eval "$action"
input_validated="true"
fi
fi
done < $input_validation
done < "$input_validation"
}
check_version_is_older_than() {
@ -135,7 +135,7 @@ fi
# Perform post_update commands for current version if it is a cooker or PR
if grep -qF "cooker" <<< "$hard_version" || grep -qF "PR" <<< "$hard_version"; then
# If newly-installed version is a "cooker" or "PR" build, always perform post_update commands for current version
if [[ "$(echo $hard_version | cut -d'-' -f2)" == "$new_version" ]]; then
if [[ "$(echo "$hard_version" | cut -d'-' -f2)" == "$new_version" ]]; then
is_newer_version="true"
fi
fi

View file

@ -63,10 +63,10 @@ find_compatible_compression_format() {
local system=$(echo "$1" | grep -oE "$roms_folder/[^/]+" | grep -oE "[^/]+$")
# Extract the relevant lists from the JSON file
local chd_systems=$(jq -r '.compression_targets.chd[]' $features)
local rvz_systems=$(jq -r '.compression_targets.rvz[]' $features)
local zip_systems=$(jq -r '.compression_targets.zip[]' $features)
local zip_compressable_extensions=$(jq -r '.zip_compressable_extensions[]' $features)
local chd_systems=$(jq -r '.compression_targets.chd[]' "$features")
local rvz_systems=$(jq -r '.compression_targets.rvz[]' "$features")
local zip_systems=$(jq -r '.compression_targets.zip[]' "$features")
local zip_compressable_extensions=$(jq -r '.zip_compressable_extensions[]' "$features")
if [[ $(validate_for_chd "$1") == "true" ]] && echo "$chd_systems" | grep -q "\b$system\b"; then
echo "chd"
@ -259,9 +259,9 @@ cli_compress_all_games() {
local compressable_game=""
local all_compressable_games=()
if [[ $compression_format == "all" ]]; then
local compressible_systems_list=$(jq -r '.compression_targets | to_entries[] | .value[]' $features)
local compressible_systems_list=$(jq -r '.compression_targets | to_entries[] | .value[]' "$features")
else
local compressible_systems_list=$(jq -r '.compression_targets["'"$compression_format"'"][]' $features)
local compressible_systems_list=$(jq -r '.compression_targets["'"$compression_format"'"][]' "$features")
fi
read -p "Do you want to have the original files removed after compression is complete? Please answer y/n and press Enter: " post_compression_cleanup

View file

@ -51,13 +51,13 @@ find_empty_rom_folders() {
}
configurator_check_multifile_game_structure() {
local folder_games=($(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3"))
local folder_games=($(find "$roms_folder" -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3"))
if [[ ${#folder_games[@]} -gt 1 ]]; then
echo "$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")" > $logs_folder/multi_file_games_"$(date +"%Y_%m_%d_%I_%M_%p").log"
echo "$(find "$roms_folder" -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")" > "$logs_folder"/multi_file_games_"$(date +"%Y_%m_%d_%I_%M_%p").log"
rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - Verify Multi-file Structure" \
--text="The following games were found to have the incorrect folder structure:\n\n$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")\n\nIncorrect folder structure can result in failure to launch games or saves being in the incorrect location.\n\nPlease see the RetroDECK wiki for more details!\n\nYou can find this list of games in ~/retrodeck/logs"
--text="The following games were found to have the incorrect folder structure:\n\n$(find "$roms_folder" -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")\n\nIncorrect folder structure can result in failure to launch games or saves being in the incorrect location.\n\nPlease see the RetroDECK wiki for more details!\n\nYou can find this list of games in ~/retrodeck/logs"
else
configurator_generic_dialog "RetroDECK Configurator - Verify Multi-file Structure" "No incorrect multi-file game folder structures found."
fi

View file

@ -65,7 +65,7 @@ configurator_destination_choice_dialog() {
if [[ $rc == "0" ]] && [[ -z "$choice" ]]; then
echo "Back"
else
echo $choice
echo "$choice"
fi
}
@ -88,7 +88,7 @@ configurator_move_folder_dialog() {
# USAGE: configurator_move_folder_dialog "folder_variable_name"
local rd_dir_name="$1" # The folder variable name from retrodeck.cfg
local dir_to_move="$(get_setting_value "$rd_conf" "$rd_dir_name" "retrodeck" "paths")/" # The path of that folder variable
local source_root="$(echo $dir_to_move | sed -e 's/\(.*\)\/retrodeck\/.*/\1/')" # The root path of the folder, excluding retrodeck/<folder name>. So /home/deck/retrodeck/roms becomes /home/deck
local source_root="$(echo "$dir_to_move" | sed -e 's/\(.*\)\/retrodeck\/.*/\1/')" # The root path of the folder, excluding retrodeck/<folder name>. So /home/deck/retrodeck/roms becomes /home/deck
if [[ ! "$rd_dir_name" == "rdhome" ]]; then # If a sub-folder is being moved, find it's path without the source_root. So /home/deck/retrodeck/roms becomes retrodeck/roms
local rd_dir_path="$(echo "$dir_to_move" | sed "s/.*\(retrodeck\/.*\)/\1/; s/\/$//")"
else # Otherwise just set the retrodeck root folder
@ -114,7 +114,7 @@ configurator_move_folder_dialog() {
configurator_generic_dialog "RetroDECK Configurator - Move Folder" "The $(basename "$dir_to_move") folder is already at that location, please pick a new one."
configurator_move_folder_dialog "$rd_dir_name"
else
if [[ $(verify_space "$(echo $dir_to_move | sed 's/\/$//')" "$dest_root") ]]; then # Make sure there is enough space at the destination
if [[ $(verify_space "$(echo "$dir_to_move" | sed 's/\/$//')" "$dest_root") ]]; then # Make sure there is enough space at the destination
configurator_generic_dialog "RetroDECK Configurator - Move Folder" "Moving $(basename "$dir_to_move") folder to $choice"
unlink "$dest_root/$rd_dir_path" # In case there is already a symlink at the picked destination
move "$dir_to_move" "$dest_root/$rd_dir_path"
@ -168,28 +168,28 @@ changelog_dialog() {
log d "Showing changelog dialog"
if [[ "$1" == "all" ]]; then
> "/var/config/retrodeck/changelog-full.xml"
for release in $(xml sel -t -m "//component/releases/release" -v "@version" -n $rd_metainfo); do
echo "<h1>RetroDECK v$release</h1>" >> "/var/config/retrodeck/changelog-full.xml"
xml sel -t -m "//component/releases/release[@version='$release']/description" -c . $rd_metainfo | tr -s '\n' | sed 's/^\s*//' >> "/var/config/retrodeck/changelog-full.xml"
echo "" >> "/var/config/retrodeck/changelog-full.xml"
> "$XDG_CONFIG_HOME/retrodeck/changelog-full.xml"
for release in $(xml sel -t -m "//component/releases/release" -v "@version" -n "$rd_metainfo"); do
echo "<h1>RetroDECK v$release</h1>" >> "$XDG_CONFIG_HOME/retrodeck/changelog-full.xml"
xml sel -t -m "//component/releases/release[@version='"$release"']/description" -c . "$rd_metainfo" | tr -s '\n' | sed 's/^\s*//' >> "$XDG_CONFIG_HOME/retrodeck/changelog-full.xml"
echo "" >> "$XDG_CONFIG_HOME/retrodeck/changelog-full.xml"
done
#convert_to_markdown "/var/config/retrodeck/changelog-full.xml"
#convert_to_markdown "$XDG_CONFIG_HOME/retrodeck/changelog-full.xml"
rd_zenity --icon-name=net.retrodeck.retrodeck --text-info --width=1200 --height=720 \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Changelogs" \
--filename="/var/config/retrodeck/changelog-full.xml.md"
--filename="$XDG_CONFIG_HOME/retrodeck/changelog-full.xml.md"
else
xml sel -t -m "//component/releases/release[@version='$1']/description" -c . $rd_metainfo | tr -s '\n' | sed 's/^\s*//' > "/var/config/retrodeck/changelog.xml"
xml sel -t -m "//component/releases/release[@version='"$1"']/description" -c . "$rd_metainfo" | tr -s '\n' | sed 's/^\s*//' > "$XDG_CONFIG_HOME/retrodeck/changelog.xml"
convert_to_markdown "/var/config/retrodeck/changelog.xml"
convert_to_markdown "$XDG_CONFIG_HOME/retrodeck/changelog.xml"
rd_zenity --icon-name=net.retrodeck.retrodeck --text-info --width=1200 --height=720 \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Changelogs" \
--filename="/var/config/retrodeck/changelog.xml.md"
--filename="$XDG_CONFIG_HOME/retrodeck/changelog.xml.md"
fi
}
@ -204,9 +204,9 @@ get_cheevos_token_dialog() {
--add-password="Password")
IFS='^' read -r cheevos_username cheevos_password < <(printf '%s\n' "$cheevos_info")
local cheevos_response=$(curl --silent --data "r=login&u=$cheevos_username&p=$cheevos_password" $RA_API_URL)
local cheevos_success=$(echo $cheevos_response | jq .Success | tr -d '"')
local cheevos_token=$(echo $cheevos_response | jq .Token | tr -d '"')
local cheevos_response=$(curl --silent --data "r=login&u=$cheevos_username&p=$cheevos_password" "$RA_API_URL")
local cheevos_success=$(echo "$cheevos_response" | jq .Success | tr -d '"')
local cheevos_token=$(echo "$cheevos_response" | jq .Token | tr -d '"')
local cheevos_login_timestamp=$(date +%s)
if [[ "$cheevos_success" == "true" ]]; then
echo "$cheevos_username,$cheevos_token,$cheevos_login_timestamp"
@ -235,7 +235,7 @@ desktop_mode_warning() {
exit 1
elif [[ $choice == "Never show this again" ]]; then
log i "Selected: \"Never show this again\""
set_setting_value $rd_conf "desktop_mode_warning" "false" retrodeck "options" # Store desktop mode warning variable for future checks
set_setting_value "$rd_conf" "desktop_mode_warning" "false" retrodeck "options" # Store desktop mode warning variable for future checks
fi
else
log i "Selected: \"Yes\""
@ -258,7 +258,7 @@ low_space_warning() {
--text="$message")
if [[ $choice == "Never show this again" ]]; then
log i "Selected: \"Never show this again\""
set_setting_value $rd_conf "low_space_warning" "false" retrodeck "options" # Store low space warning variable for future checks
set_setting_value "$rd_conf" "low_space_warning" "false" retrodeck "options" # Store low space warning variable for future checks
fi
fi
log i "Selected: \"OK\""

View file

@ -141,7 +141,7 @@ get_setting_value() {
"dolphin" | "duckstation" | "pcsx2" | "ppsspp" | "primehack" | "xemu" ) # For files with this syntax - setting_name = setting_value
if [[ -z $current_section_name ]]; then
echo $(grep -o -P "(?<=^$current_setting_name = ).*" $1)
echo $(grep -o -P "(?<=^$current_setting_name = ).*" "$1")
else
sed -n -E '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'|\[^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' "$1" | grep -o -P "(?<=^$current_setting_name = ).*"
fi
@ -337,7 +337,7 @@ generate_single_patch() {
current_setting_name=$(get_setting_name "$escaped_setting_line" "$system")
if [[ (-z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\b'"$current_setting_name"'\s*?[:=]^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\b'"$(sed -E 's/^[ \t]*//;' <<< "$escaped_setting_line")"'$^ p } }' "$modified_file")) ]]; then # If the same setting line is not found in the same section of the modified file...
if [[ ! -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\b'"$current_setting_name"'\s*?[:=]^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\b'"$current_setting_name"'\s*?[:=]^ p } }' "$modified_file") ]]; then # But the setting exists in that section, only with a different value...
new_setting_value=$(get_setting_value "$2" "$current_setting_name" "$system" $current_section)
new_setting_value=$(get_setting_value "$2" "$current_setting_name" "$system" "$current_section")
action="change"
echo $action"^"$current_section"^"$(sed -e 's%\\\\%\\%g' <<< "$current_setting_name")"^"$new_setting_value"^"$system >> "$patch_file"
fi
@ -356,7 +356,7 @@ generate_single_patch() {
if [[ (-z $(sed -n -E '\^\s*?\b'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'$^p' "$modified_file")) ]]; then # If the same setting line is not found in the modified file...
current_setting_name=$(get_setting_name "$escaped_setting_line" "$system")
if [[ ! -z $(sed -n -E '\^\s*?\b'"$current_setting_name"'\s*?[:=]^p' "$modified_file") ]]; then # But the setting exists, only with a different value...
new_setting_value=$(get_setting_value $2 "$current_setting_name" "$system")
new_setting_value=$(get_setting_value "$2" "$current_setting_name" "$system")
action="change"
echo $action"^"$current_section"^"$(sed -e 's%\\\\%\\%g' <<< "$current_setting_name")"^"$new_setting_value"^"$system >> "$patch_file"
fi
@ -381,22 +381,22 @@ generate_single_patch() {
if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") || ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # Capture section header lines
if [[ $current_setting_line =~ ^\[.+\] ]]; then # If normal section line
action="section"
current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name
current_section=$(sed 's^[][]^^g' <<< "$current_setting_line") # Remove brackets from section name
elif [[ ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # If RPCS3 section name
action="section"
current_section=$(sed 's^:$^^' <<< $current_setting_line) # Remove colon from section name
current_section=$(sed 's^:$^^' <<< "$current_setting_line") # Remove colon from section name
fi
elif [[ (! -z $current_section) ]]; then
current_setting_name=$(get_setting_name "$escaped_setting_line" "$4")
if [[ -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\b'"$current_setting_name"'.*^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\b'"$current_setting_name"'^p } }' $1 ) ]]; then # If setting name is not found in this section of the original file...
if [[ -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\b'"$current_setting_name"'.*^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\b'"$current_setting_name"'^p } }' "$1" ) ]]; then # If setting name is not found in this section of the original file...
action="add_setting_line" # TODO: This should include the previous line, so that new lines can be inserted in the correct place rather than at the end.
echo $action"^"$current_section"^"$current_setting_line"^^"$4 >> $3
echo $action"^"$current_section"^"$current_setting_line"^^"$4 >> "$3"
fi
elif [[ (-z $current_section) ]]; then
current_setting_name=$(get_setting_name "$escaped_setting_line" "$4")
if [[ -z $(sed -n -E '\^\s*?\b'"$current_setting_name"'\s*?[:=]^p' $1) ]]; then # If setting name is not found in the original file...
if [[ -z $(sed -n -E '\^\s*?\b'"$current_setting_name"'\s*?[:=]^p' "$1") ]]; then # If setting name is not found in the original file...
action="add_setting_line" # TODO: This should include the previous line, so that new lines can be inserted in the correct place rather than at the end.
echo $action"^"$current_section"^"$current_setting_line"^^"$4 >> $3
echo $action"^"$current_section"^"$current_setting_line"^^"$4 >> "$3"
fi
fi
fi
@ -562,4 +562,4 @@ populate_steamuser_srm(){
)
' "$XDG_CONFIG_HOME/steam-rom-manager/userData/userConfigurations.json" > "$XDG_CONFIG_HOME/steam-rom-manager/userData/userConfigurations.json.tmp" &&
mv "$XDG_CONFIG_HOME/steam-rom-manager/userData/userConfigurations.json.tmp" "$XDG_CONFIG_HOME/steam-rom-manager/userData/userConfigurations.json"
}
}

View file

@ -7,7 +7,7 @@
# export LD_LIBRARY_PATH="/app/retrodeck/lib:/app/retrodeck/lib/debug:/app/retrodeck/lib/pkgconfig:$LD_LIBRARY_PATH"
: "${logging_level:=info}" # Initializing the log level variable if not already valued, this will be actually red later from the config file
rd_logs_folder="/var/config/retrodeck/logs" # Static location to write all RetroDECK-related logs
rd_logs_folder="$XDG_CONFIG_HOME/retrodeck/logs" # Static location to write all RetroDECK-related logs
if [ -h "$rd_logs_folder" ]; then # Check if internal logging folder is already a symlink
if [ ! -e "$rd_logs_folder" ]; then # Check if internal logging folder symlink is broken
unlink "$rd_logs_folder" # Remove broken symlink so the folder is recreated when sourcing logger.sh
@ -55,21 +55,21 @@ source /app/libexec/run_game.sh
source /app/libexec/steam_sync.sh
# Static variables
rd_conf="/var/config/retrodeck/retrodeck.cfg" # RetroDECK config file path
rd_conf_backup="/var/config/retrodeck/retrodeck.bak" # Backup of RetroDECK config file from update
rd_conf="$XDG_CONFIG_HOME/retrodeck/retrodeck.cfg" # RetroDECK config file path
rd_conf_backup="$XDG_CONFIG_HOME/retrodeck/retrodeck.bak" # Backup of RetroDECK config file from update
config="/app/retrodeck/config" # folder with all the default emulator configs
rd_defaults="$config/retrodeck/retrodeck.cfg" # A default RetroDECK config file
rd_update_patch="/var/config/retrodeck/rd_update.patch" # A static location for the temporary patch file used during retrodeck.cfg updates
rd_update_patch="$XDG_CONFIG_HOME/retrodeck/rd_update.patch" # A static location for the temporary patch file used during retrodeck.cfg updates
bios_checklist="$config/retrodeck/reference_lists/bios.json" # A config file listing BIOS file information that can be verified
input_validation="$config/retrodeck/reference_lists/input_validation.cfg" # A config file listing valid CLI inputs
finit_options_list="$config/retrodeck/reference_lists/finit_options_list.cfg" # A config file listing available optional installs during finit
splashscreen_dir="/var/config/ES-DE/resources/graphics/extra_splashes" # The default location of extra splash screens
current_splash_file="/var/config/ES-DE/resources/graphics/splash.svg" # The active splash file that will be shown on boot
default_splash_file="/var/config/ES-DE/resources/graphics/splash-orig.svg" # The default RetroDECK splash screen
splashscreen_dir="$XDG_CONFIG_HOME/ES-DE/resources/graphics/extra_splashes" # The default location of extra splash screens
current_splash_file="$XDG_CONFIG_HOME/ES-DE/resources/graphics/splash.svg" # The active splash file that will be shown on boot
default_splash_file="$XDG_CONFIG_HOME/ES-DE/resources/graphics/splash-orig.svg" # The default RetroDECK splash screen
# TODO: instead of this maybe we can iterate the features.json
multi_user_emulator_config_dirs="$config/retrodeck/reference_lists/multi_user_emulator_config_dirs.cfg" # A list of emulator config folders that can be safely linked/unlinked entirely in multi-user mode
rd_es_themes="/app/share/es-de/themes" # The directory where themes packaged with RetroDECK are stored
lockfile="/var/config/retrodeck/.lock" # Where the lockfile is located
lockfile="$XDG_CONFIG_HOME/retrodeck/.lock" # Where the lockfile is located
default_sd="/run/media/mmcblk0p1" # Steam Deck SD default path
hard_version="$(cat '/app/retrodeck/version')" # hardcoded version (in the readonly filesystem)
rd_repo="https://github.com/RetroDECK/RetroDECK" # The URL of the main RetroDECK GitHub repo
@ -91,84 +91,84 @@ es_find_rules="/app/share/es-de/resources/systems/linux/es_find_rules.xml"
# Godot data transfer temp files
godot_bios_files_checked="/var/config/retrodeck/godot/godot_bios_files_checked.tmp"
godot_current_preset_settings="/var/config/retrodeck/godot/godot_current_preset_settings.tmp"
godot_compression_compatible_games="/var/config/retrodeck/godot/godot_compression_compatible_games.tmp"
godot_empty_roms_folders="/var/config/retrodeck/godot/godot_empty_roms_folders.tmp"
godot_bios_files_checked="$XDG_CONFIG_HOME/retrodeck/godot/godot_bios_files_checked.tmp"
godot_current_preset_settings="$XDG_CONFIG_HOME/retrodeck/godot/godot_current_preset_settings.tmp"
godot_compression_compatible_games="$XDG_CONFIG_HOME/retrodeck/godot/godot_compression_compatible_games.tmp"
godot_empty_roms_folders="$XDG_CONFIG_HOME/retrodeck/godot/godot_empty_roms_folders.tmp"
# Config files for emulators with single config files
duckstationconf="/var/config/duckstation/settings.ini"
melondsconf="/var/config/melonDS/melonDS.ini"
ryujinxconf="/var/config/Ryujinx/Config.json"
xemuconf="/var/config/xemu/xemu.toml"
yuzuconf="/var/config/yuzu/qt-config.ini"
citraconf="/var/config/citra-emu/qt-config.ini"
duckstationconf="$XDG_CONFIG_HOME/duckstation/settings.ini"
melondsconf="$XDG_CONFIG_HOME/melonDS/melonDS.ini"
ryujinxconf="$XDG_CONFIG_HOME/Ryujinx/Config.json"
xemuconf="$XDG_CONFIG_HOME/xemu/xemu.toml"
yuzuconf="$XDG_CONFIG_HOME/yuzu/qt-config.ini"
citraconf="$XDG_CONFIG_HOME/citra-emu/qt-config.ini"
# ES-DE config files
export ESDE_APPDATA_DIR="/var/config/ES-DE"
es_settings="/var/config/ES-DE/settings/es_settings.xml"
es_source_logs="/var/config/ES-DE/logs"
export ESDE_APPDATA_DIR="$XDG_CONFIG_HOME/ES-DE"
es_settings="$XDG_CONFIG_HOME/ES-DE/settings/es_settings.xml"
es_source_logs="$XDG_CONFIG_HOME/ES-DE/logs"
# RetroArch config files
raconf="/var/config/retroarch/retroarch.cfg"
ra_core_conf="/var/config/retroarch/retroarch-core-options.cfg"
ra_scummvm_conf="/var/config/retroarch/system/scummvm.ini"
ra_cores_path="/var/config/retroarch/cores"
raconf="$XDG_CONFIG_HOME/retroarch/retroarch.cfg"
ra_core_conf="$XDG_CONFIG_HOME/retroarch/retroarch-core-options.cfg"
ra_scummvm_conf="$XDG_CONFIG_HOME/retroarch/system/scummvm.ini"
ra_cores_path="$XDG_CONFIG_HOME/retroarch/cores"
# CEMU config files
cemuconf="/var/config/Cemu/settings.xml"
cemucontrollerconf="/var/config/Cemu/controllerProfiles/controller0.xml"
cemuconf="$XDG_CONFIG_HOME/Cemu/settings.xml"
cemucontrollerconf="$XDG_CONFIG_HOME/Cemu/controllerProfiles/controller0.xml"
# Dolphin config files
dolphinconf="/var/config/dolphin-emu/Dolphin.ini"
dolphingcpadconf="/var/config/dolphin-emu/GCPadNew.ini"
dolphingfxconf="/var/config/dolphin-emu/GFX.ini"
dolphinhkconf="/var/config/dolphin-emu/Hotkeys.ini"
dolphinqtconf="/var/config/dolphin-emu/Qt.ini"
dolphinDynamicInputTexturesPath="/var/data/dolphin-emu/Load/DynamicInputTextures"
dolphinCheevosConf="/var/config/dolphin-emu/RetroAchievements.ini"
dolphinconf="$XDG_CONFIG_HOME/dolphin-emu/Dolphin.ini"
dolphingcpadconf="$XDG_CONFIG_HOME/dolphin-emu/GCPadNew.ini"
dolphingfxconf="$XDG_CONFIG_HOME/dolphin-emu/GFX.ini"
dolphinhkconf="$XDG_CONFIG_HOME/dolphin-emu/Hotkeys.ini"
dolphinqtconf="$XDG_CONFIG_HOME/dolphin-emu/Qt.ini"
dolphinDynamicInputTexturesPath="$XDG_DATA_HOME/dolphin-emu/Load/DynamicInputTextures"
dolphinCheevosConf="$XDG_CONFIG_HOME/dolphin-emu/RetroAchievements.ini"
# PCSX2 config files
pcsx2conf="/var/config/PCSX2/inis/PCSX2.ini"
pcsx2gsconf="/var/config/PCSX2/inis/GS.ini" # This file should be deprecated since moving to PCSX2-QT
pcsx2uiconf="/var/config/PCSX2/inis/PCSX2_ui.ini" # This file should be deprecated since moving to PCSX2-QT
pcsx2vmconf="/var/config/PCSX2/inis/PCSX2_vm.ini" # This file should be deprecated since moving to PCSX2-QT
pcsx2conf="$XDG_CONFIG_HOME/PCSX2/inis/PCSX2.ini"
pcsx2gsconf="$XDG_CONFIG_HOME/PCSX2/inis/GS.ini" # This file should be deprecated since moving to PCSX2-QT
pcsx2uiconf="$XDG_CONFIG_HOME/PCSX2/inis/PCSX2_ui.ini" # This file should be deprecated since moving to PCSX2-QT
pcsx2vmconf="$XDG_CONFIG_HOME/PCSX2/inis/PCSX2_vm.ini" # This file should be deprecated since moving to PCSX2-QT
# PPSSPP-SDL config files
ppssppconf="/var/config/ppsspp/PSP/SYSTEM/ppsspp.ini"
ppssppcontrolsconf="/var/config/ppsspp/PSP/SYSTEM/controls.ini"
ppssppcheevosconf="/var/config/ppsspp/PSP/SYSTEM/ppsspp_retroachievements.dat"
ppssppconf="$XDG_CONFIG_HOME/ppsspp/PSP/SYSTEM/ppsspp.ini"
ppssppcontrolsconf="$XDG_CONFIG_HOME/ppsspp/PSP/SYSTEM/controls.ini"
ppssppcheevosconf="$XDG_CONFIG_HOME/ppsspp/PSP/SYSTEM/ppsspp_retroachievements.dat"
# Primehack config files
primehackconf="/var/config/primehack/Dolphin.ini"
primehackgcpadconf="/var/config/primehack/GCPadNew.ini"
primehackgfxconf="/var/config/primehack/GFX.ini"
primehackhkconf="/var/config/primehack/Hotkeys.ini"
primehackqtconf="/var/config/primehack/Qt.ini"
primehackDynamicInputTexturesPath="/var/data/primehack/Load/DynamicInputTextures"
primehackconf="$XDG_CONFIG_HOME/primehack/Dolphin.ini"
primehackgcpadconf="$XDG_CONFIG_HOME/primehack/GCPadNew.ini"
primehackgfxconf="$XDG_CONFIG_HOME/primehack/GFX.ini"
primehackhkconf="$XDG_CONFIG_HOME/primehack/Hotkeys.ini"
primehackqtconf="$XDG_CONFIG_HOME/primehack/Qt.ini"
primehackDynamicInputTexturesPath="$XDG_DATA_HOME/primehack/Load/DynamicInputTextures"
# RPCS3 config files
rpcs3conf="/var/config/rpcs3/config.yml"
rpcs3vfsconf="/var/config/rpcs3/vfs.yml"
rpcs3conf="$XDG_CONFIG_HOME/rpcs3/config.yml"
rpcs3vfsconf="$XDG_CONFIG_HOME/rpcs3/vfs.yml"
# Vita3k config files
vita3kconf="/var/config/Vita3K/config.yml"
vita3kconf="$XDG_CONFIG_HOME/Vita3K/config.yml"
# MAME-SA config files
mameconf="/var/config/mame/ini/mame.ini"
mameuiconf="/var/config/mame/ini/ui.ini"
mamedefconf="/var/config/mame/cfg/default.cfg"
mameconf="$XDG_CONFIG_HOME/mame/ini/mame.ini"
mameuiconf="$XDG_CONFIG_HOME/mame/ini/ui.ini"
mamedefconf="$XDG_CONFIG_HOME/mame/cfg/default.cfg"
# Initialize logging location if it doesn't exist, before anything else happens
if [ ! -d "$rd_logs_folder" ]; then
@ -176,13 +176,13 @@ if [ ! -d "$rd_logs_folder" ]; then
fi
# Initialize location of Godot temp data files, if it doesn't exist
if [[ ! -d "/var/config/retrodeck/godot" ]]; then
create_dir "/var/config/retrodeck/godot"
if [[ ! -d "$XDG_CONFIG_HOME/retrodeck/godot" ]]; then
create_dir "$XDG_CONFIG_HOME/retrodeck/godot"
fi
# We moved the lockfile in /var/config/retrodeck in order to solve issue #53 - Remove in a few versions
# We moved the lockfile in $XDG_CONFIG_HOME/retrodeck in order to solve issue #53 - Remove in a few versions
if [[ -f "$HOME/retrodeck/.lock" ]]; then
mv "$HOME/retrodeck/.lock" $lockfile
mv "$HOME/retrodeck/.lock" "$lockfile"
fi
# If there is no config file I initalize the file with the the default values
@ -193,9 +193,9 @@ if [[ ! -f "$rd_conf" ]]; then
# Initializing the variables
if [[ -z "$version" ]]; then
if [[ -f "$lockfile" ]]; then
if [[ $(cat $lockfile) == *"0.4."* ]] || [[ $(cat $lockfile) == *"0.3."* ]] || [[ $(cat $lockfile) == *"0.2."* ]] || [[ $(cat $lockfile) == *"0.1."* ]]; then # If the previous version is very out of date, pre-rd_conf
if [[ $(cat "$lockfile") == *"0.4."* ]] || [[ $(cat "$lockfile") == *"0.3."* ]] || [[ $(cat "$lockfile") == *"0.2."* ]] || [[ $(cat "$lockfile") == *"0.1."* ]]; then # If the previous version is very out of date, pre-rd_conf
log d "Running version workaround"
version=$(cat $lockfile)
version=$(cat "$lockfile")
fi
else
version="$hard_version"
@ -203,28 +203,28 @@ if [[ ! -f "$rd_conf" ]]; then
fi
# Check if SD card path has changed from SteamOS update
if [[ ! -d "$default_sd" && "$(ls -A /run/media/deck/)" ]]; then
if [[ $(find /run/media/deck/* -maxdepth 0 -type d -print | wc -l) -eq 1 ]]; then # If there is only one SD card found in the new SteamOS 3.5 location, assign it as the default
default_sd="$(find /run/media/deck/* -maxdepth 0 -type d -print)"
if [[ ! -d "$default_sd" && "$(ls -A "/run/media/deck/")" ]]; then
if [[ $(find "/run/media/deck/"* -maxdepth 0 -type d -print | wc -l) -eq 1 ]]; then # If there is only one SD card found in the new SteamOS 3.5 location, assign it as the default
default_sd="$(find "/run/media/deck/"* -maxdepth 0 -type d -print)"
else # If the default legacy path cannot be found, and there are multiple entries in the new Steam OS 3.5 SD card path, let the user pick which one to use
configurator_generic_dialog "RetroDECK Setup" "The SD card was not found in the default location, and multiple drives were detected.\nPlease browse to the location of the desired SD card.\n\nIf you are not using an SD card, please click \"Cancel\"."
default_sd="$(directory_browse "SD Card Location")"
fi
fi
cp $rd_defaults $rd_conf # Load default settings file
set_setting_value $rd_conf "version" "$version" retrodeck # Set current version for new installs
set_setting_value $rd_conf "sdcard" "$default_sd" retrodeck "paths" # Set SD card location if default path has changed
cp "$rd_defaults" "$rd_conf" # Load default settings file
set_setting_value "$rd_conf" "version" "$version" retrodeck # Set current version for new installs
set_setting_value "$rd_conf" "sdcard" "$default_sd" retrodeck "paths" # Set SD card location if default path has changed
if grep -qF "cooker" <<< "$hard_version" || grep -qF "PR-" <<< "$hard_version"; then # If newly-installed version is a "cooker" or PR build
set_setting_value $rd_conf "update_repo" "$cooker_repository_name" retrodeck "options"
set_setting_value $rd_conf "update_check" "true" retrodeck "options"
set_setting_value $rd_conf "developer_options" "true" retrodeck "options"
set_setting_value "$rd_conf" "update_repo" "$cooker_repository_name" retrodeck "options"
set_setting_value "$rd_conf" "update_check" "true" retrodeck "options"
set_setting_value "$rd_conf" "developer_options" "true" retrodeck "options"
fi
log i "Setting config file permissions"
chmod +rw $rd_conf
log i "RetroDECK config file initialized. Contents:\n\n$(cat $rd_conf)\n"
chmod +rw "$rd_conf"
log i "RetroDECK config file initialized. Contents:\n\n$(cat "$rd_conf")\n"
conf_read # Load new variables into memory
#tmplog_merger # This function is tempry(?) removed
@ -232,10 +232,10 @@ if [[ ! -f "$rd_conf" ]]; then
else
log i "Loading RetroDECK config file in $rd_conf"
if grep -qF "cooker" <<< $hard_version; then # If newly-installed version is a "cooker" build
set_setting_value $rd_conf "update_repo" "$cooker_repository_name" retrodeck "options"
set_setting_value $rd_conf "update_check" "true" retrodeck "options"
set_setting_value $rd_conf "developer_options" "true" retrodeck "options"
if grep -qF "cooker" <<< "$hard_version"; then # If newly-installed version is a "cooker" build
set_setting_value "$rd_conf" "update_repo" "$cooker_repository_name" retrodeck "options"
set_setting_value "$rd_conf" "update_check" "true" retrodeck "options"
set_setting_value "$rd_conf" "developer_options" "true" retrodeck "options"
fi
conf_read
@ -244,7 +244,7 @@ else
if [[ ! -d "$rdhome" ]]; then
configurator_generic_dialog "RetroDECK Setup" "The RetroDECK data folder was not found in the expected location.\nThis may happen when SteamOS is updated.\n\nPlease browse to the current location of the \"retrodeck\" folder."
new_home_path=$(directory_browse "RetroDECK folder location")
set_setting_value $rd_conf "rdhome" "$new_home_path" retrodeck "paths"
set_setting_value "$rd_conf" "rdhome" "$new_home_path" retrodeck "paths"
conf_read
#tmplog_merger # This function is tempry(?) removed
prepare_component "postmove" "retrodeck"

View file

@ -8,11 +8,11 @@ multi_user_set_default_dialog() {
--text="Would you like to set $chosen_user as the default user?\n\nIf the current user cannot be determined from the system, the default will be used.\nThis normally only happens in Desktop Mode.\n\nIf you would like to be asked which user is playing every time, click \"No and don't ask again\"")
rc=$? # Capture return code, as "Yes" button has no text value
if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked
if [[ $choice == "No and don't ask again" ]]; then
set_setting_value $rd_conf "ask_default_user" "false" retrodeck "options"
if [[ "$choice" == "No and don't ask again" ]]; then
set_setting_value "$rd_conf" "ask_default_user" "false" retrodeck "options"
fi
else # User clicked "Yes"
set_setting_value $rd_conf "default_user" "$chosen_user" retrodeck "options"
set_setting_value "$rd_conf" "default_user" "$chosen_user" retrodeck "options"
fi
}
@ -30,7 +30,7 @@ chosen_user=$(rd_zenity \
--column "Steam Username" --print-column=1 \
"${full_userlist[@]}")
if [[ ! -z $chosen_user && -z $default_user && $ask_default_user == "true" ]]; then
if [[ ! -z "$chosen_user" && -z "$default_user" && "$ask_default_user" == "true" ]]; then
multi_user_set_default_dialog "$chosen_user"
fi
echo "$chosen_user"
@ -48,7 +48,7 @@ multi_user_enable_multi_user_mode() {
rm -rf "$multi_user_data_folder/$SteamAppUser" # Remove stale data after backup
fi
fi
set_setting_value $rd_conf "multi_user_mode" "true" retrodeck "options"
set_setting_value "$rd_conf" "multi_user_mode" "true" retrodeck "options"
multi_user_determine_current_user
if [[ -d "$multi_user_data_folder/$SteamAppUser" ]]; then
configurator_process_complete_dialog "enabling multi-user support"
@ -74,7 +74,7 @@ multi_user_disable_multi_user_mode() {
if [[ ! -z "$single_user" ]]; then # Single user was selected
multi_user_return_to_single_user "$single_user"
set_setting_value $rd_conf "multi_user_mode" "false" retrodeck "options"
set_setting_value "$rd_conf" "multi_user_mode" "false" retrodeck "options"
configurator_process_complete_dialog "disabling multi-user support"
else
configurator_generic_dialog "RetroDECK Multi-User Mode" "No single user was selected, please try the process again."
@ -83,13 +83,13 @@ multi_user_disable_multi_user_mode() {
else
single_user=$(ls -1 "$multi_user_data_folder")
multi_user_return_to_single_user "$single_user"
set_setting_value $rd_conf "multi_user_mode" "false" retrodeck "options"
set_setting_value "$rd_conf" "multi_user_mode" "false" retrodeck "options"
configurator_process_complete_dialog "disabling multi-user support"
fi
}
multi_user_determine_current_user() {
if [[ $(get_setting_value $rd_conf "multi_user_mode" retrodeck "options") == "true" ]]; then # If multi-user environment is enabled in rd_conf
if [[ $(get_setting_value "$rd_conf" "multi_user_mode" retrodeck "options") == "true" ]]; then # If multi-user environment is enabled in rd_conf
if [[ -d "$multi_user_data_folder" ]]; then
if [[ ! -z $SteamAppUser ]]; then # If running in Game Mode and this variable exists
if [[ -z $(ls -1 "$multi_user_data_folder" | grep "$SteamAppUser") ]]; then
@ -99,24 +99,24 @@ multi_user_determine_current_user() {
fi
else # Unable to find Steam user ID
if [[ $(ls -1 "$multi_user_data_folder" | wc -l) -gt 1 ]]; then
if [[ -z $default_user ]]; then # And a default user is not set
if [[ -z "$default_user" ]]; then # And a default user is not set
configurator_generic_dialog "RetroDECK Multi-User Mode" "The current user could not be determined from the system, and there are multiple users registered.\n\nPlease select which user is currently playing in the next dialog."
SteamAppUser=$(multi_user_choose_current_user_dialog)
if [[ ! -z $SteamAppUser ]]; then # User was chosen from dialog
if [[ ! -z "$SteamAppUser" ]]; then # User was chosen from dialog
multi_user_link_current_user_files
else
configurator_generic_dialog "RetroDECK Multi-User Mode" "No user was chosen, RetroDECK will launch with the files from the user who played most recently."
fi
else # The default user is set
if [[ ! -z $(ls -1 $multi_user_data_folder | grep "$default_user") ]]; then # Confirm user data folder exists
SteamAppUser=$default_user
if [[ ! -z $(ls -1 "$multi_user_data_folder" | grep "$default_user") ]]; then # Confirm user data folder exists
SteamAppUser="$default_user"
multi_user_link_current_user_files
else # Default user has no data folder, something may have gone horribly wrong. Setting up as a new user.
multi_user_setup_new_user
fi
fi
else # If there is only 1 user in the userlist, default to that user
SteamAppUser=$(ls -1 $multi_user_data_folder)
SteamAppUser=$(ls -1 "$multi_user_data_folder")
multi_user_link_current_user_files
fi
fi
@ -134,11 +134,11 @@ multi_user_determine_current_user() {
multi_user_setup_new_user
else # But dialog box was blank
configurator_generic_dialog "RetroDECK Multi-User Mode" "No username was entered, so multi-user data folder cannot be created.\n\nDisabling multi-user mode, please try the process again."
set_setting_value $rd_conf "multi_user_mode" "false" retrodeck "options"
set_setting_value "$rd_conf" "multi_user_mode" "false" retrodeck "options"
fi
else # User clicked "Cancel"
configurator_generic_dialog "RetroDECK Multi-User Mode" "Cancelling multi-user mode activation."
set_setting_value $rd_conf "multi_user_mode" "false" retrodeck "options"
set_setting_value "$rd_conf" "multi_user_mode" "false" retrodeck "options"
fi
fi
fi
@ -155,16 +155,16 @@ multi_user_return_to_single_user() {
unlink "$rd_conf"
mv -f "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" "$rd_conf"
# RetroArch one-offs, because it has so many folders that should be shared between users
unlink "/var/config/retroarch/retroarch.cfg"
unlink "/var/config/retroarch/retroarch-core-options.cfg"
mv -f "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" "/var/config/retroarch/retroarch.cfg"
mv -f "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" "/var/config/retroarch/retroarch-core-options.cfg"
# XEMU one-offs, because it stores its config in /var/data, not /var/config like everything else
unlink "/var/config/xemu"
unlink "/var/data/xemu/xemu"
create_dir "/var/config/xemu"
mv -f "$multi_user_data_folder/$single_user/config/xemu"/{.[!.],}* "/var/config/xemu"
dir_prep "/var/config/xemu" "/var/data/xemu/xemu"
unlink "$XDG_CONFIG_HOME/retroarch/retroarch.cfg"
unlink "$XDG_CONFIG_HOME/retroarch/retroarch-core-options.cfg"
mv -f "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" "$XDG_CONFIG_HOME/retroarch/retroarch.cfg"
mv -f "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" "$XDG_CONFIG_HOME/retroarch/retroarch-core-options.cfg"
# XEMU one-offs, because it stores its config in $XDG_DATA_HOME, not $XDG_CONFIG_HOME like everything else
unlink "$XDG_CONFIG_HOME/xemu"
unlink "$XDG_DATA_HOME/xemu/xemu"
create_dir "$XDG_CONFIG_HOME/xemu"
mv -f "$multi_user_data_folder/$single_user/config/xemu"/{.[!.],}* "$XDG_CONFIG_HOME/xemu"
dir_prep "$XDG_CONFIG_HOME/xemu" "$XDG_DATA_HOME/xemu/xemu"
create_dir "$saves_folder"
create_dir "$states_folder"
mv -f "$multi_user_data_folder/$single_user/saves"/{.[!.],}* "$saves_folder"
@ -172,9 +172,9 @@ multi_user_return_to_single_user() {
for emu_conf in $(find "$multi_user_data_folder/$single_user/config" -mindepth 1 -maxdepth 1 -type d -printf '%f\n')
do
if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then
unlink "/var/config/$emu_conf"
create_dir "/var/config/$emu_conf"
mv -f "$multi_user_data_folder/$single_user/config/$emu_conf"/{.[!.],}* "/var/config/$emu_conf"
unlink "$XDG_CONFIG_HOME/$emu_conf"
create_dir "$XDG_CONFIG_HOME/$emu_conf"
mv -f "$multi_user_data_folder/$single_user/config/$emu_conf"/{.[!.],}* "$XDG_CONFIG_HOME/$emu_conf"
fi
done
rm -r "$multi_user_data_folder/$single_user" # Should be empty, omitting -f for safety
@ -192,9 +192,9 @@ multi_user_setup_new_user() {
rm -f "$rd_conf"
ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" "$rd_conf"
create_dir "$multi_user_data_folder/$SteamAppUser/config/retroarch"
if [[ ! -L "/var/config/retroarch/retroarch.cfg" ]]; then
mv "/var/config/retroarch/retroarch.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg"
mv "/var/config/retroarch/retroarch-core-options.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg"
if [[ ! -L "$XDG_CONFIG_HOME/retroarch/retroarch.cfg" ]]; then
mv "$XDG_CONFIG_HOME/retroarch/retroarch.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg"
mv "$XDG_CONFIG_HOME/retroarch/retroarch-core-options.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg"
else
cp "$config/retroarch/retroarch.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg"
cp "$config/retroarch/retroarch-core-options.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg"
@ -202,19 +202,19 @@ multi_user_setup_new_user() {
set_setting_value "$raconf" "savestate_directory" "$states_folder" "retroarch"
set_setting_value "$raconf" "screenshot_directory" "$screenshots_folder" "retroarch"
fi
ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" "/var/config/retroarch/retroarch.cfg"
ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" "/var/config/retroarch/retroarch-core-options.cfg"
for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type l -printf '%f\n') # For all the config folders already linked to a different user
ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" "$XDG_CONFIG_HOME/retroarch/retroarch.cfg"
ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" "$XDG_CONFIG_HOME/retroarch/retroarch-core-options.cfg"
for emu_conf in $(find "$XDG_CONFIG_HOME" -mindepth 1 -maxdepth 1 -type l -printf '%f\n') # For all the config folders already linked to a different user
do
if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then
unlink "/var/config/$emu_conf"
unlink "$XDG_CONFIG_HOME/$emu_conf"
prepare_component "reset" "$emu_conf"
fi
done
for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') # For all the currently non-linked config folders, like from a newly-added emulator
for emu_conf in $(find "$XDG_CONFIG_HOME" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') # For all the currently non-linked config folders, like from a newly-added emulator
do
if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then
dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "/var/config/$emu_conf"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "$XDG_CONFIG_HOME/$emu_conf"
fi
done
}
@ -224,22 +224,22 @@ multi_user_link_current_user_files() {
ln -sfT "$multi_user_data_folder/$SteamAppUser/saves" "$saves_folder"
ln -sfT "$multi_user_data_folder/$SteamAppUser/states" "$states_folder"
ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" "$rd_conf"
ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" "/var/config/retroarch/retroarch.cfg"
ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" "/var/config/retroarch/retroarch-core-options.cfg"
for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') # Find any new emulator config folders from last time this user played
ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" "$XDG_CONFIG_HOME/retroarch/retroarch.cfg"
ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" "$XDG_CONFIG_HOME/retroarch/retroarch-core-options.cfg"
for emu_conf in $(find "$XDG_CONFIG_HOME" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') # Find any new emulator config folders from last time this user played
do
if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then
dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "/var/config/$emu_conf"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "$XDG_CONFIG_HOME/$emu_conf"
fi
done
for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type l -printf '%f\n')
for emu_conf in $(find "$XDG_CONFIG_HOME" -mindepth 1 -maxdepth 1 -type l -printf '%f\n')
do
if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then
if [[ -d "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" ]]; then # If the current user already has a config folder for this emulator
ln -sfT "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "retrodeck/config/$emu_conf"
else # If the current user doesn't have a config folder for this emulator, init it and then link it
prepare_component "reset" "$emu_conf"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "/var/config/$emu_conf"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "$XDG_CONFIG_HOME/$emu_conf"
fi
fi
done

View file

@ -80,8 +80,8 @@ move() {
# Function to move a directory from one parent to another
# USAGE: move $source_dir $dest_dir
source_dir="$(echo $1 | sed 's![^/]$!&/!')" # Add trailing slash if it is missing
dest_dir="$(echo $2 | sed 's![^/]$!&/!')" # Add trailing slash if it is missing
source_dir="$(echo "$1" | sed 's![^/]$!&/!')" # Add trailing slash if it is missing
dest_dir="$(echo "$2" | sed 's![^/]$!&/!')" # Add trailing slash if it is missing
log d "Moving \"$source_dir\" to \"$dest_dir\""
@ -147,17 +147,17 @@ update_rd_conf() {
# STAGE 1: For current files that haven't been broken into sections yet, where every setting name is unique
conf_read # Read current settings into memory
mv -f $rd_conf $rd_conf_backup # Backup config file before update
cp $rd_defaults $rd_conf # Copy defaults file into place
mv -f "$rd_conf" "$rd_conf_backup" # Backup config file before update
cp "$rd_defaults" "$rd_conf" # Copy defaults file into place
conf_write # Write old values into new retrodeck.cfg file
# STAGE 2: To handle presets sections that use duplicate setting names
generate_single_patch $rd_defaults $rd_conf_backup $rd_update_patch retrodeck # Create a patch file for differences between defaults and current user settings
sed -i '/change^^version/d' $rd_update_patch # Remove version line from temporary patch file
deploy_single_patch $rd_defaults $rd_update_patch $rd_conf # Re-apply user settings to defaults file
set_setting_value $rd_conf "version" "$hard_version" retrodeck # Set version of currently running RetroDECK to updated retrodeck.cfg
rm -f $rd_update_patch # Cleanup temporary patch file
generate_single_patch "$rd_defaults" "$rd_conf_backup" "$rd_update_patch" retrodeck # Create a patch file for differences between defaults and current user settings
sed -i '/change^^version/d' "$rd_update_patch" # Remove version line from temporary patch file
deploy_single_patch "$rd_defaults" "$rd_update_patch" "$rd_conf" # Re-apply user settings to defaults file
set_setting_value "$rd_conf" "version" "$hard_version" retrodeck # Set version of currently running RetroDECK to updated retrodeck.cfg
rm -f "$rd_update_patch" # Cleanup temporary patch file
conf_read # Read all settings into memory
# STAGE 3: Create new folders that were added to the shipped retrodeck.cfg, if any
@ -196,13 +196,13 @@ update_rd_conf() {
"\(.key):\(.value)",
"\(.value):\(.key)"
] | join("\n")
' $features)
' "$features")
while IFS= read -r current_setting_line # Read the existing retrodeck.cfg
do
if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it
if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") ]]; then # If the line is a section header
local current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name
local current_section=$(sed 's^[][]^^g' <<< "$current_setting_line") # Remove brackets from section name
else
if [[ ! ("$current_section" == "" || "$current_section" == "paths" || "$current_section" == "options" || "$current_section" == "cheevos" || "$current_section" == "cheevos_hardcore") ]]; then
local system_name=$(get_setting_name "$current_setting_line" "retrodeck") # Read the variable name from the current line
@ -220,7 +220,7 @@ update_rd_conf() {
fi
fi
fi
done < $rd_conf
done < "$rd_conf"
}
conf_read() {
@ -252,7 +252,7 @@ conf_write() {
do
if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it
if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") ]]; then # If the line is a section header
local current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name
local current_section=$(sed 's^[][]^^g' <<< "$current_setting_line") # Remove brackets from section name
else
if [[ "$current_section" == "" || "$current_section" == "paths" || "$current_section" == "options" ]]; then
local current_setting_name=$(get_setting_name "$current_setting_line" "retrodeck") # Read the variable name from the current line
@ -264,7 +264,7 @@ conf_write() {
fi
fi
fi
done < $rd_conf
done < "$rd_conf"
log d "retrodeck.cfg written"
}
@ -335,7 +335,7 @@ rd_zenity() {
unset CONFIGURATOR_GUI
return $status
return "$status"
}
update_rpcs3_firmware() {
@ -394,7 +394,7 @@ backup_retrodeck_userdata() {
local current_setting_value=$(get_setting_value "$rd_conf" "$current_setting_name" "retrodeck" "paths")
config_paths["$current_setting_name"]="$current_setting_value"
fi
done < <(grep -v '^\s*$' $rd_conf | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f')
done < <(grep -v '^\s*$' "$rd_conf" | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f')
# Determine which paths to backup
if [[ "$backup_type" == "complete" ]]; then
@ -553,7 +553,7 @@ backup_retrodeck_userdata() {
path_size=$(du -sk "$path" 2>/dev/null | cut -f1) # Get size in KB
path_size=$((path_size * 1024)) # Convert to bytes for calculation
total_size=$((total_size + path_size))
echo "$total_size" > $total_size_file
echo "$total_size" > "$total_size_file"
fi
done
) |
@ -578,15 +578,15 @@ backup_retrodeck_userdata() {
available_space=$(df -B1 "$backups_folder" | awk 'NR==2 {print $4}')
# Log sizes for reference
log i "Total size of backup data: $(numfmt --to=iec-i --suffix=B $total_size)"
log i "Available space at destination: $(numfmt --to=iec-i --suffix=B $available_space)"
log i "Total size of backup data: $(numfmt --to=iec-i --suffix=B "$total_size")"
log i "Available space at destination: $(numfmt --to=iec-i --suffix=B "$available_space")"
# Check if we have enough space (using uncompressed size as a conservative estimate)
if [[ "$available_space" -lt "$total_size" ]]; then
if [[ "$CONFIGURATOR_GUI" == "zenity" ]]; then
configurator_generic_dialog "RetroDECK Userdata Backup" "There is not enough free space to perform this backup.\n\nYou need at least $(numfmt --to=iec-i --suffix=B $total_size),\nplease free up some space and try again."
configurator_generic_dialog "RetroDECK Userdata Backup" "There is not enough free space to perform this backup.\n\nYou need at least $(numfmt --to=iec-i --suffix=B "$total_size"),\nplease free up some space and try again."
fi
log e "Error: Not enough space to perform backup. Need at least $(numfmt --to=iec-i --suffix=B $total_size)"
log e "Error: Not enough space to perform backup. Need at least $(numfmt --to=iec-i --suffix=B "$total_size")"
return 1
fi
@ -853,9 +853,9 @@ install_retrodeck_starterpack() {
## DOOM section ##
cp /app/retrodeck/extras/doom1.wad "$roms_folder/doom/doom1.wad" # No -f in case the user already has it
create_dir "/var/config/ES-DE/gamelists/doom"
if [[ ! -f "/var/config/ES-DE/gamelists/doom/gamelist.xml" ]]; then # Don't overwrite an existing gamelist
cp "/app/retrodeck/rd_prepacks/doom/gamelist.xml" "/var/config/ES-DE/gamelists/doom/gamelist.xml"
create_dir "$XDG_CONFIG_HOME/ES-DE/gamelists/doom"
if [[ ! -f "$XDG_CONFIG_HOME/ES-DE/gamelists/doom/gamelist.xml" ]]; then # Don't overwrite an existing gamelist
cp "/app/retrodeck/rd_prepacks/doom/gamelist.xml" "$XDG_CONFIG_HOME/ES-DE/gamelists/doom/gamelist.xml"
fi
create_dir "$media_folder/doom"
unzip -oq "/app/retrodeck/rd_prepacks/doom/doom.zip" -d "$media_folder/doom/"
@ -893,8 +893,8 @@ update_splashscreens() {
log i "Updating splash screen"
rm -rf /var/config/ES-DE/resources/graphics
rsync -rlD --mkpath "/app/retrodeck/graphics/" "/var/config/ES-DE/resources/graphics/"
rm -rf "$XDG_CONFIG_HOME/ES-DE/resources/graphics"
rsync -rlD --mkpath "/app/retrodeck/graphics/" "$XDG_CONFIG_HOME/ES-DE/resources/graphics/"
}
@ -930,7 +930,7 @@ splash_screen() {
($current_day | tonumber) <= (.value.end_date | tonumber) and
($current_time | tonumber) >= (.value.start_time | tonumber) and
($current_time | tonumber) <= (.value.end_time | tonumber)
) | .value.filename' $features)
) | .value.filename' "$features")
# Determine the splash file to use
if [[ -n "$splash_screen" ]]; then
@ -972,7 +972,7 @@ install_release() {
mkdir -p "$rdhome/RetroDECK_Updates"
# Download the flatpak file
wget -P "$rdhome/RetroDECK_Updates" $flatpak_url -O "$rdhome/RetroDECK_Updates/RetroDECK$iscooker.flatpak"
wget -P "$rdhome/RetroDECK_Updates" "$flatpak_url" -O "$rdhome/RetroDECK_Updates/RetroDECK$iscooker.flatpak"
# Check if the download was successful
if [[ $? -ne 0 ]]; then
@ -1012,13 +1012,13 @@ ponzu() {
local executable
# if the binaries are found, ponzu should be set as true into the retrodeck config
if [ -f "/var/data/ponzu/Citra/bin/citra-qt" ]; then
if [ -f "$XDG_DATA_HOME/ponzu/Citra/bin/citra-qt" ]; then
log d "Citra binaries has already been installed, checking for updates and forcing the setting as true."
set_setting_value $rd_conf "akai_ponzu" "true" retrodeck "options"
set_setting_value "$rd_conf" "akai_ponzu" "true" retrodeck "options"
fi
if [ -f "/var/data/ponzu/Yuzu/bin/yuzu" ]; then
if [ -f "$XDG_DATA_HOME/ponzu/Yuzu/bin/yuzu" ]; then
log d "Yuzu binaries has already been installed, checking for updates and forcing the setting as true."
set_setting_value $rd_conf "kiroi_ponzu" "true" retrodeck "options"
set_setting_value "$rd_conf" "kiroi_ponzu" "true" retrodeck "options"
fi
# Loop through all ponzu files
@ -1027,11 +1027,11 @@ ponzu() {
if [ -f "$ponzu_file" ]; then
if [[ "$ponzu_file" == *itra* ]]; then
log i "Found akai ponzu! Elaborating it"
data_dir="/var/data/ponzu/Citra"
data_dir="$XDG_DATA_HOME/ponzu/Citra"
local message="Akai ponzu is served, enjoy"
elif [[ "$ponzu_file" == *uzu* ]]; then
log i "Found kiroi ponzu! Elaborating it"
data_dir="/var/data/ponzu/Yuzu"
data_dir="$XDG_DATA_HOME/ponzu/Yuzu"
local message="Kiroi ponzu is served, enjoy"
else
log e "AppImage not recognized, not a ponzu ingredient!"
@ -1059,14 +1059,14 @@ ponzu() {
chmod +x "$executable"
chmod +x "$executable-qt"
prepare_component "reset" "citra"
set_setting_value $rd_conf "akai_ponzu" "true" retrodeck "options"
set_setting_value "$rd_conf" "akai_ponzu" "true" retrodeck "options"
elif [[ "$ponzu_file" == *uzu* ]]; then
mv "$tmp_folder/usr/"** .
executable="$data_dir/bin/yuzu"
log d "Making $executable executable"
chmod +x "$executable"
prepare_component "reset" "yuzu"
set_setting_value $rd_conf "kiroi_ponzu" "true" retrodeck "options"
set_setting_value "$rd_conf" "kiroi_ponzu" "true" retrodeck "options"
fi
cd -
@ -1084,15 +1084,15 @@ ponzu_remove() {
if [[ "$1" == "citra" ]]; then
if [[ $(configurator_generic_question_dialog "Ponzu - Remove Citra" "Do you really want to remove Citra binaries?\n\nYour games and saves will not be deleted.") == "true" ]]; then
log i "Ponzu: removing Citra"
rm -rf "/var/data/ponzu/Citra"
set_setting_value $rd_conf "akai_ponzu" "false" retrodeck "options"
rm -rf "$XDG_DATA_HOME/ponzu/Citra"
set_setting_value "$rd_conf" "akai_ponzu" "false" retrodeck "options"
configurator_generic_dialog "Ponzu - Remove Citra" "Done, Citra is now removed from RetroDECK"
fi
elif [[ "$1" == "yuzu" ]]; then
if [[ $(configurator_generic_question_dialog "Ponzu - Remove Yuzu" "Do you really want to remove Yuzu binaries?\n\nYour games and saves will not be deleted.") == "true" ]]; then
log i "Ponzu: removing Yuzu"
rm -rf "/var/data/ponzu/Yuzu"
set_setting_value $rd_conf "kiroi_ponzu" "false" retrodeck "options"
rm -rf "$XDG_DATA_HOME/ponzu/Yuzu"
set_setting_value "$rd_conf" "kiroi_ponzu" "false" retrodeck "options"
configurator_generic_dialog "Ponzu - Remove Yuzu" "Done, Yuzu is now removed from RetroDECK"
fi
else
@ -1115,7 +1115,7 @@ release_selector() {
# Fetch the main release from the RetroDECK repository
log d "Fetching latest main release from GitHub API for repository RetroDECK"
local main_release=$(curl -s https://api.github.com/repos/$git_organization_name/RetroDECK/releases/latest)
local main_release=$(curl -s "https://api.github.com/repos/$git_organization_name/RetroDECK/releases/latest")
if [[ -z "$main_release" ]]; then
log e "Failed to fetch the main release"
@ -1134,7 +1134,7 @@ release_selector() {
local release_array=("Main Release" "$main_tag_name" "$main_human_readable_date")
# Fetch all releases (including draft and pre-release) from the Cooker repository
local releases=$(curl -s https://api.github.com/repos/$git_organization_name/$cooker_repository_name/releases?per_page=100)
local releases=$(curl -s "https://api.github.com/repos/$git_organization_name/$cooker_repository_name/releases?per_page=100")
if [[ -z "$releases" ]]; then
log e "Failed to fetch releases or no releases available"
@ -1220,16 +1220,16 @@ release_selector() {
log d "User confirmed installation of release $selected_tag"
if echo "$selected_release" | grep -q "Main Release"; then
set_setting_value $rd_conf "update_repo" "$main_repository_name" retrodeck "options"
set_setting_value "$rd_conf" "update_repo" "$main_repository_name" retrodeck "options"
log i "Switching to main channel"
else
set_setting_value $rd_conf "update_repo" "$cooker_repository_name" retrodeck "options"
set_setting_value "$rd_conf" "update_repo" "$cooker_repository_name" retrodeck "options"
log i "Switching to cooker channel"
fi
set_setting_value "$rd_conf" "branch" "$selected_branch" "retrodeck" "options"
log d "Set branch to $selected_branch in configuration"
install_release $selected_tag
install_release "$selected_tag"
else
log d "User canceled installation"
@ -1294,21 +1294,21 @@ retroarch_updater(){
log i "Running RetroArch updater"
# Synchronize cores from the application share directory to the RetroArch cores directory
rsync -rlD --mkpath "/app/share/libretro/cores/" "/var/config/retroarch/cores/" && log d "RetroArch cores updated correctly"
rsync -rlD --mkpath "/app/share/libretro/cores/" "$XDG_CONFIG_HOME/retroarch/cores/" && log d "RetroArch cores updated correctly"
# Synchronize border overlays from the RetroDeck configuration directory to the RetroArch overlays directory
rsync -rlD --mkpath "/app/retrodeck/config/retroarch/borders/" "/var/config/retroarch/overlays/borders/" && log d "RetroArch overlays and borders updated correctly"
rsync -rlD --mkpath "/app/retrodeck/config/retroarch/borders/" "$XDG_CONFIG_HOME/retroarch/overlays/borders/" && log d "RetroArch overlays and borders updated correctly"
}
portmaster_show(){
log d "Setting PortMaster visibility in ES-DE"
if [ "$1" = "true" ]; then
log d "\"$roms_folder/portmaster/PortMaster.sh\" is not found, installing it"
install -Dm755 "/var/data/PortMaster/PortMaster.sh" "$roms_folder/portmaster/PortMaster.sh" && log d "PortMaster is correctly showing in ES-DE"
set_setting_value $rd_conf "portmaster_show" "true" retrodeck "options"
install -Dm755 "$XDG_DATA_HOME/PortMaster/PortMaster.sh" "$roms_folder/portmaster/PortMaster.sh" && log d "PortMaster is correctly showing in ES-DE"
set_setting_value "$rd_conf" "portmaster_show" "true" retrodeck "options"
elif [ "$1" = "false" ]; then
rm -rf "$roms_folder/portmaster/PortMaster.sh" && log d "PortMaster is correctly hidden in ES-DE"
set_setting_value $rd_conf "portmaster_show" "false" retrodeck "options"
set_setting_value "$rd_conf" "portmaster_show" "false" retrodeck "options"
else
log e "\"$1\" is not a valid choice, quitting"
fi
@ -1430,7 +1430,7 @@ repair_paths() {
fi
fi
fi
done < <(grep -v '^\s*$' $rd_conf | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f')
done < <(grep -v '^\s*$' "$rd_conf" | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f')
if [[ $invalid_path_found == "true" ]]; then
log i "One or more invalid paths repaired, fixing internal RetroDECK structures"

View file

@ -21,7 +21,7 @@ run_and_check() {
fi
# Run command with timeout
timeout -s TERM $TIMEOUT $full_cmd
timeout -s TERM $TIMEOUT "$full_cmd"
local exit_code=$?
# Log the results
@ -52,4 +52,4 @@ for entry in "${commands[@]}"; do
# Run the command with optional CLI argument
run_and_check "$cmd" "$cli_arg"
done
done

View file

@ -40,7 +40,7 @@ post_update() {
local current_setting_value=$(get_setting_value "$rd_conf" "$current_setting_name" "retrodeck" "paths")
compressible_paths=("${compressible_paths[@]}" "false" "$current_setting_name" "$current_setting_value")
fi
done < <(grep -v '^\s*$' $rd_conf | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f')
done < <(grep -v '^\s*$' "$rd_conf" | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f')
choice=$(rd_zenity \
--list --width=1200 --height=720 \
@ -92,11 +92,11 @@ post_update() {
# - Duckstation save and state locations were dir_prep'd to the rdhome/save and /state folders, which was not previously done. Much safer now!
# - Fix PICO-8 folder structure. ROM and save folders are now sane and binary files will go into ~/retrodeck/bios/pico-8/
rm -rf /var/config/primehack # Purge old Primehack config files. Saves are safe as they are linked into /var/data/primehack.
rm -rf "$XDG_CONFIG_HOME/primehack" # Purge old Primehack config files. Saves are safe as they are linked into $XDG_DATA_HOME/primehack.
prepare_component "reset" "primehack"
dir_prep "$rdhome/saves/duckstation" "/var/data/duckstation/memcards"
dir_prep "$rdhome/states/duckstation" "/var/data/duckstation/savestates"
dir_prep "$rdhome/saves/duckstation" "$XDG_DATA_HOME/duckstation/memcards"
dir_prep "$rdhome/states/duckstation" "$XDG_DATA_HOME/duckstation/savestates"
mv "$bios_folder/pico8" "$bios_folder/pico8_olddata" # Move legacy (and incorrect / non-functional ) PICO-8 location for future cleanup / less confusion
dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed
@ -109,21 +109,21 @@ post_update() {
# - Fix symlink to hard-coded PICO-8 config folder (dir_prep doesn't like ~)
# - Overwrite Citra and Yuzu configs, as controller mapping was broken due to emulator updates.
dir_prep "$rdhome/states/dolphin" "/var/data/dolphin-emu/StateSaves"
dir_prep "$rdhome/states/primehack" "/var/data/primehack/StateSaves"
dir_prep "$rdhome/states/dolphin" "$XDG_DATA_HOME/dolphin-emu/StateSaves"
dir_prep "$rdhome/states/primehack" "$XDG_DATA_HOME/primehack/StateSaves"
rm -rf "$HOME/~/" # Remove old incorrect location from 0.6.2b
rm -f "$HOME/.lexaloffle/pico-8" # Remove old symlink to prevent recursion
dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed
dir_prep "$saves_folder/pico-8" "$bios_folder/pico-8/cdata" # PICO-8 saves folder structure was backwards, fixing for consistency.
cp -f "$config/citra/qt-config.ini" /var/config/citra-emu/qt-config.ini
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/citra-emu/qt-config.ini
cp -fr "$config/yuzu/"* /var/config/yuzu/
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/yuzu/qt-config.ini
cp -f "$config/citra/qt-config.ini" "$XDG_CONFIG_HOME/citra-emu/qt-config.ini"
sed -i 's#RETRODECKHOMEDIR#'"$rdhome"'#g' "$XDG_CONFIG_HOME/citra-emu/qt-config.ini"
cp -fr "$config/yuzu/"* "$XDG_CONFIG_HOME/yuzu/"
sed -i 's#RETRODECKHOMEDIR#'"$rdhome"'#g' "$XDG_CONFIG_HOME/yuzu/qt-config.ini"
# Remove unneeded tools folder, as location has changed to RO space
rm -rfv /var/config/retrodeck/tools/
rm -rfv "$XDG_CONFIG_HOME/retrodeck/tools/"
fi
if [[ $(check_version_is_older_than "$version_being_updated" "0.6.4b") == "true" ]]; then
# In version 0.6.4b, the following changes were made:
@ -137,12 +137,12 @@ post_update() {
# In version 0.6.5b, the following changes were made:
# Change Yuzu GPU accuracy to normal for better performance
set_setting_value $yuzuconf "gpu_accuracy" "0" "yuzu" "Renderer"
set_setting_value "$yuzuconf" "gpu_accuracy" "0" "yuzu" "Renderer"
fi
if [[ $(check_version_is_older_than "$version_being_updated" "0.7.0b") == "true" ]]; then
# In version 0.7.0b, the following changes were made that required config file updates/reset or other changes to the filesystem:
# - Update retrodeck.cfg and set new paths to $rdhome by default
# - Update PCSX2 and Duckstation configs to latest templates (to accomadate RetroAchievements feature) and move Duckstation config folder from /var/data to /var/config
# - Update PCSX2 and Duckstation configs to latest templates (to accomadate RetroAchievements feature) and move Duckstation config folder from $XDG_DATA_HOME to $XDG_CONFIG_HOME
# - New ~/retrodeck/mods and ~/retrodeck/texture_packs directories are added and symlinked to multiple different emulators (where supported)
# - Expose ES-DE gamelists folder to user at ~/retrodeck/gamelists
# - Copy new borders into RA config location
@ -162,52 +162,52 @@ post_update() {
# - Init PICO-8 as it has newly-shipped config files
update_rd_conf # Expand retrodeck.cfg to latest template
set_setting_value $rd_conf "screenshots_folder" "$rdhome/screenshots"
set_setting_value $rd_conf "mods_folder" "$rdhome/mods"
set_setting_value $rd_conf "texture_packs_folder" "$rdhome/texture_packs"
set_setting_value $rd_conf "borders_folder" "$rdhome/borders"
set_setting_value "$rd_conf" "screenshots_folder" "$rdhome/screenshots"
set_setting_value "$rd_conf" "mods_folder" "$rdhome/mods"
set_setting_value "$rd_conf" "texture_packs_folder" "$rdhome/texture_packs"
set_setting_value "$rd_conf" "borders_folder" "$rdhome/borders"
conf_read
mv -f "$pcsx2conf" "$pcsx2conf.bak"
generate_single_patch "$config/PCSX2/PCSX2.ini" "$pcsx2conf.bak" "/var/config/PCSX2/inis/PCSX2-cheevos-upgrade.patch" pcsx2
deploy_single_patch "$config/PCSX2/PCSX2.ini" "/var/config/PCSX2/inis/PCSX2-cheevos-upgrade.patch" "$pcsx2conf"
rm -f "/var/config/PCSX2/inis/PCSX2-cheevos-upgrade.patch"
dir_prep "/var/config/duckstation" "/var/data/duckstation"
generate_single_patch "$config/PCSX2/PCSX2.ini" "$pcsx2conf.bak" "$XDG_CONFIG_HOME/PCSX2/inis/PCSX2-cheevos-upgrade.patch" pcsx2
deploy_single_patch "$config/PCSX2/PCSX2.ini" "$XDG_CONFIG_HOME/PCSX2/inis/PCSX2-cheevos-upgrade.patch" "$pcsx2conf"
rm -f "$XDG_CONFIG_HOME/PCSX2/inis/PCSX2-cheevos-upgrade.patch"
dir_prep "$XDG_CONFIG_HOME/duckstation" "$XDG_DATA_HOME/duckstation"
mv -f "$duckstationconf" "$duckstationconf.bak"
generate_single_patch "$config/duckstation/settings.ini" "$duckstationconf.bak" "/var/config/duckstation/duckstation-cheevos-upgrade.patch" pcsx2
deploy_single_patch "$config/duckstation/settings.ini" "/var/config/duckstation/duckstation-cheevos-upgrade.patch" "$duckstationconf"
rm -f "/var/config/duckstation/duckstation-cheevos-upgrade.patch"
generate_single_patch "$config/duckstation/settings.ini" "$duckstationconf.bak" "$XDG_CONFIG_HOME/duckstation/duckstation-cheevos-upgrade.patch" pcsx2
deploy_single_patch "$config/duckstation/settings.ini" "$XDG_CONFIG_HOME/duckstation/duckstation-cheevos-upgrade.patch" "$duckstationconf"
rm -f "$XDG_CONFIG_HOME/duckstation/duckstation-cheevos-upgrade.patch"
create_dir "$mods_folder"
create_dir "$texture_packs_folder"
create_dir "$borders_folder"
dir_prep "$mods_folder/Primehack" "/var/data/primehack/Load/GraphicMods"
dir_prep "$texture_packs_folder/Primehack" "/var/data/primehack/Load/Textures"
dir_prep "$mods_folder/Dolphin" "/var/data/dolphin-emu/Load/GraphicMods"
dir_prep "$texture_packs_folder/Dolphin" "/var/data/dolphin-emu/Load/Textures"
dir_prep "$mods_folder/Citra" "/var/data/citra-emu/load/mods"
dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures"
dir_prep "$mods_folder/Yuzu" "/var/data/yuzu/load"
dir_prep "$texture_packs_folder/RetroArch-Mesen" "/var/config/retroarch/system/HdPacks"
dir_prep "$texture_packs_folder/PPSSPP" "/var/config/ppsspp/PSP/TEXTURES"
dir_prep "$texture_packs_folder/PCSX2" "/var/config/PCSX2/textures"
dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "/var/config/retroarch/system/Mupen64plus/cache"
dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "/var/config/retroarch/system/Mupen64plus/hires_texture"
dir_prep "$texture_packs_folder/Duckstation" "/var/config/duckstation/textures"
dir_prep "$mods_folder/Primehack" "$XDG_DATA_HOME/primehack/Load/GraphicMods"
dir_prep "$texture_packs_folder/Primehack" "$XDG_DATA_HOME/primehack/Load/Textures"
dir_prep "$mods_folder/Dolphin" "$XDG_DATA_HOME/dolphin-emu/Load/GraphicMods"
dir_prep "$texture_packs_folder/Dolphin" "$XDG_DATA_HOME/dolphin-emu/Load/Textures"
dir_prep "$mods_folder/Citra" "$XDG_DATA_HOME/citra-emu/load/mods"
dir_prep "$texture_packs_folder/Citra" "$XDG_DATA_HOME/citra-emu/load/textures"
dir_prep "$mods_folder/Yuzu" "$XDG_DATA_HOME/yuzu/load"
dir_prep "$texture_packs_folder/RetroArch-Mesen" "$XDG_CONFIG_HOME/retroarch/system/HdPacks"
dir_prep "$texture_packs_folder/PPSSPP" "$XDG_CONFIG_HOME/ppsspp/PSP/TEXTURES"
dir_prep "$texture_packs_folder/PCSX2" "$XDG_CONFIG_HOME/PCSX2/textures"
dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "$XDG_CONFIG_HOME/retroarch/system/Mupen64plus/cache"
dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "$XDG_CONFIG_HOME/retroarch/system/Mupen64plus/hires_texture"
dir_prep "$texture_packs_folder/Duckstation" "$XDG_CONFIG_HOME/duckstation/textures"
dir_prep "$rdhome/gamelists" "/var/config/emulationstation/ES-DE/gamelists"
dir_prep "$rdhome/gamelists" "$XDG_CONFIG_HOME/emulationstation/ES-DE/gamelists"
dir_prep "$borders_folder" "/var/config/retroarch/overlays/borders"
rsync -rlD --mkpath "/app/retrodeck/config/retroarch/borders/" "/var/config/retroarch/overlays/borders/"
dir_prep "$borders_folder" "$XDG_CONFIG_HOME/retroarch/overlays/borders"
rsync -rlD --mkpath "/app/retrodeck/config/retroarch/borders/" "$XDG_CONFIG_HOME/retroarch/overlays/borders/"
rsync -rlD --mkpath "$config/retrodeck/presets/remaps/" "/var/config/retroarch/config/remaps/"
rsync -rlD --mkpath "$config/retrodeck/presets/remaps/" "$XDG_CONFIG_HOME/retroarch/config/remaps/"
if [[ ! -f "$bios_folder/capsimg.so" ]]; then
cp -f "/app/retrodeck/extras/Amiga/capsimg.so" "$bios_folder/capsimg.so"
fi
cp -f $config/rpcs3/vfs.yml /var/config/rpcs3/vfs.yml
cp -f "$config/rpcs3/vfs.yml" "$XDG_CONFIG_HOME/rpcs3/vfs.yml"
sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3/"'^' "$rpcs3vfsconf"
set_setting_value "$rpcs3vfsconf" "/games/" "$roms_folder/ps3/" "rpcs3"
if [[ -d "$roms_folder/ps3/emudir" ]]; then # The old location exists, meaning the emulator was run at least once.
@ -225,7 +225,7 @@ post_update() {
create_dir "$bios_folder/rpcs3/dev_usb000"
dir_prep "$bios_folder/rpcs3/dev_hdd0/home/00000001/savedata" "$saves_folder/ps3/rpcs3"
set_setting_value $es_settings "ApplicationUpdaterFrequency" "never" "es_settings"
set_setting_value "$es_settings" "ApplicationUpdaterFrequency" "never" "es_settings"
if [[ -f "$saves_folder/duckstation/shared_card_1.mcd" || -f "$saves_folder/duckstation/shared_card_2.mcd" ]]; then
configurator_generic_dialog "RetroDECK 0.7.0b Upgrade" "As part of this update, the location of saves and states for Duckstation has been changed.\n\nYour files will be moved automatically, and can now be found at\n\n~.../saves/psx/duckstation/memcards/\nand\n~.../states/psx/duckstation/"
@ -233,42 +233,42 @@ post_update() {
create_dir "$saves_folder/psx/duckstation/memcards"
mv "$saves_folder/duckstation/"* "$saves_folder/psx/duckstation/memcards/"
rmdir "$saves_folder/duckstation" # File-safe folder cleanup
unlink "/var/config/duckstation/memcards"
unlink "$XDG_CONFIG_HOME/duckstation/memcards"
set_setting_value "$duckstationconf" "Card1Path" "$saves_folder/psx/duckstation/memcards/shared_card_1.mcd" "duckstation" "MemoryCards"
set_setting_value "$duckstationconf" "Card2Path" "$saves_folder/psx/duckstation/memcards/shared_card_2.mcd" "duckstation" "MemoryCards"
set_setting_value "$duckstationconf" "Directory" "$saves_folder/psx/duckstation/memcards" "duckstation" "MemoryCards"
set_setting_value "$duckstationconf" "RecursivePaths" "$roms_folder/psx" "duckstation" "GameList"
create_dir "$states_folder/psx"
mv -t "$states_folder/psx/" "$states_folder/duckstation"
unlink "/var/config/duckstation/savestates"
dir_prep "$states_folder/psx/duckstation" "/var/config/duckstation/savestates"
unlink "$XDG_CONFIG_HOME/duckstation/savestates"
dir_prep "$states_folder/psx/duckstation" "$XDG_CONFIG_HOME/duckstation/savestates"
rm -rf /var/config/retrodeck/tools
rm -rf /var/config/emulationstation/ES-DE/gamelists/tools/
rm -rf "$XDG_CONFIG_HOME/retrodeck/tools"
rm -rf "$XDG_CONFIG_HOME/emulationstation/ES-DE/gamelists/tools/"
mv "$saves_folder/gc/dolphin/EUR" "$saves_folder/gc/dolphin/EU"
mv "$saves_folder/gc/dolphin/USA" "$saves_folder/gc/dolphin/US"
mv "$saves_folder/gc/dolphin/JAP" "$saves_folder/gc/dolphin/JP"
dir_prep "$saves_folder/gc/dolphin/EU" "/var/data/dolphin-emu/GC/EUR"
dir_prep "$saves_folder/gc/dolphin/US" "/var/data/dolphin-emu/GC/USA"
dir_prep "$saves_folder/gc/dolphin/JP" "/var/data/dolphin-emu/GC/JAP"
dir_prep "$saves_folder/gc/dolphin/EU" "$XDG_DATA_HOME/dolphin-emu/GC/EUR"
dir_prep "$saves_folder/gc/dolphin/US" "$XDG_DATA_HOME/dolphin-emu/GC/USA"
dir_prep "$saves_folder/gc/dolphin/JP" "$XDG_DATA_HOME/dolphin-emu/GC/JAP"
mv "$saves_folder/gc/primehack/EUR" "$saves_folder/gc/primehack/EU"
mv "$saves_folder/gc/primehack/USA" "$saves_folder/gc/primehack/US"
mv "$saves_folder/gc/primehack/JAP" "$saves_folder/gc/primehack/JP"
dir_prep "$saves_folder/gc/primehack/EU" "/var/data/primehack/GC/EUR"
dir_prep "$saves_folder/gc/primehack/US" "/var/data/primehack/GC/USA"
dir_prep "$saves_folder/gc/primehack/JP" "/var/data/primehack/GC/JAP"
dir_prep "$saves_folder/gc/primehack/EU" "$XDG_DATA_HOME/primehack/GC/EUR"
dir_prep "$saves_folder/gc/primehack/US" "$XDG_DATA_HOME/primehack/GC/USA"
dir_prep "$saves_folder/gc/primehack/JP" "$XDG_DATA_HOME/primehack/GC/JAP"
dir_prep "$saves_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/SAVEDATA"
dir_prep "$states_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/PPSSPP_STATE"
dir_prep "$saves_folder/PSP/PPSSPP-SA" "$XDG_CONFIG_HOME/ppsspp/PSP/SAVEDATA"
dir_prep "$states_folder/PSP/PPSSPP-SA" "$XDG_CONFIG_HOME/ppsspp/PSP/PPSSPP_STATE"
set_setting_value "$es_settings" "ROMDirectory" "$roms_folder" "es_settings"
set_setting_value "$es_settings" "MediaDirectory" "$media_folder" "es_settings"
sed -i '$ a <string name="UserThemeDirectory" value="" />' "$es_settings" # Add new default line to existing file
set_setting_value "$es_settings" "UserThemeDirectory" "$themes_folder" "es_settings"
unlink "/var/config/emulationstation/ROMs"
unlink "/var/config/emulationstation/ES-DE/downloaded_media"
unlink "/var/config/emulationstation/ES-DE/themes"
unlink "$XDG_CONFIG_HOME/emulationstation/ROMs"
unlink "$XDG_CONFIG_HOME/emulationstation/ES-DE/downloaded_media"
unlink "$XDG_CONFIG_HOME/emulationstation/ES-DE/themes"
set_setting_value "$raconf" "savestate_auto_load" "false" "retroarch"
set_setting_value "$raconf" "savestate_auto_save" "false" "retroarch"
@ -303,7 +303,7 @@ post_update() {
if [[ $(check_version_is_older_than "$version_being_updated" "0.7.3b") == "true" ]]; then
# In version 0.7.3b, there was a bug that prevented the correct creations of the roms/system folders, so we force recreate them.
emulationstation --home /var/config/emulationstation --create-system-dirs
emulationstation --home "$XDG_CONFIG_HOME/emulationstation" --create-system-dirs
fi
if [[ $(check_version_is_older_than "$version_being_updated" "0.8.0b") == "true" ]]; then
@ -342,8 +342,8 @@ post_update() {
set_setting_value "$raconf" "rewind_enable" "false" "retroarch"
# in 3.0 .emulationstation was moved into ES-DE
log i "Renaming old \"/var/config/emulationstation\" folder as \"/var/config/ES-DE\""
mv -f /var/config/emulationstation /var/config/ES-DE
log i "Renaming old \"$XDG_CONFIG_HOME/emulationstation\" folder as \"$XDG_CONFIG_HOME/ES-DE\""
mv -f "$XDG_CONFIG_HOME/emulationstation" "$XDG_CONFIG_HOME/ES-DE"
prepare_component "reset" "es-de"
prepare_component "reset" "mame"
@ -357,7 +357,7 @@ post_update() {
# The save folder of rpcs3 was inverted so we're moving the saves into the real one
log i "RPCS3 saves needs to be migrated, executing."
if [[ "$(ls -A $bios_folder/rpcs3/dev_hdd0/home/00000001/savedata)" ]]; then
if [[ "$(ls -A "$bios_folder/rpcs3/dev_hdd0/home/00000001/savedata")" ]]; then
log i "Existing RPCS3 savedata found, backing up..."
create_dir "$backups_folder"
zip -rq9 "$backups_folder/$(date +"%0m%0d")_rpcs3_save_data.zip" "$bios_folder/rpcs3/dev_hdd0/home/00000001/savedata"
@ -369,7 +369,7 @@ post_update() {
mv "$bios_folder/switch/registered" "$bios_folder/switch/firmware"
log i "New systems were added in this version, regenerating system folders."
#es-de --home "/var/config/" --create-system-dirs
#es-de --home "$XDG_CONFIG_HOME/" --create-system-dirs
es-de --create-system-dirs
fi # end of 0.8.0b
@ -380,8 +380,8 @@ post_update() {
log i "- Give the user the option to reset Ryujinx, which was not properly initialized in 0.8.0b"
log d "ES-DE files were moved inside the retrodeck folder, migrating to the new structure"
dir_prep "$rdhome/ES-DE/collections" "/var/config/ES-DE/collections"
dir_prep "$rdhome/ES-DE/gamelists" "/var/config/ES-DE/gamelists"
dir_prep "$rdhome/ES-DE/collections" "$XDG_CONFIG_HOME/ES-DE/collections"
dir_prep "$rdhome/ES-DE/gamelists" "$XDG_CONFIG_HOME/ES-DE/gamelists"
log i "Moving ES-DE collections, downloaded_media, gamelist, and themes from \"$rdhome\" to \"$rdhome/ES-DE\""
set_setting_value "$es_settings" "MediaDirectory" "$rdhome/ES-DE/downloaded_media" "es_settings"
set_setting_value "$es_settings" "UserThemeDirectory" "$rdhome/ES-DE/themes" "es_settings"
@ -389,21 +389,21 @@ post_update() {
mv -f "$rdhome/downloaded_media" "$rdhome/ES-DE/downloaded_media" && log d "Move of \"$rdhome/downloaded_media\" in \"$rdhome/ES-DE\" folder completed"
mv -f "$rdhome/gamelists/"* "$rdhome/ES-DE/gamelists" && log d "Move of \"$rdhome/gamelists/\" in \"$rdhome/ES-DE\" folder completed" && rm -rf "$rdhome/gamelists"
log i "MAME-SA, migrating samples to the new exposed folder: from \"/var/data/mame/assets/samples\" to \"$bios_folder/mame-sa/samples\""
log i "MAME-SA, migrating samples to the new exposed folder: from \"$XDG_DATA_HOME/mame/assets/samples\" to \"$bios_folder/mame-sa/samples\""
create_dir "$bios_folder/mame-sa/samples"
mv -f "/var/data/mame/assets/samples/"* "$bios_folder/mame-sa/samples"
mv -f "$XDG_DATA_HOME/mame/assets/samples/"* "$bios_folder/mame-sa/samples"
set_setting_value "$mameconf" "samplepath" "$bios_folder/mame-sa/samples" "mame"
log i "Installing the missing ScummVM assets and renaming \"$mods_folder/RetroArch/ScummVM/themes\" into \"theme\""
mv -f "$mods_folder/RetroArch/ScummVM/themes" "$mods_folder/RetroArch/ScummVM/theme"
unzip -o "$config/retroarch/ScummVM.zip" 'scummvm/extra/*' -d /tmp
unzip -o "$config/retroarch/ScummVM.zip" 'scummvm/theme/*' -d /tmp
mv -f /tmp/scummvm/extra "$mods_folder/RetroArch/ScummVM"
mv -f /tmp/scummvm/theme "$mods_folder/RetroArch/ScummVM"
rm -rf /tmp/extra /tmp/theme
mv -f "/tmp/scummvm/extra" "$mods_folder/RetroArch/ScummVM"
mv -f "/tmp/scummvm/theme" "$mods_folder/RetroArch/ScummVM"
rm -rf "/tmp/extra /tmp/theme"
log i "Placing cheats in \"/var/data/mame/cheat\""
unzip -j -o "$config/mame/cheat0264.zip" 'cheat.7z' -d "/var/data/mame/cheat"
log i "Placing cheats in \"$XDG_DATA_HOME/mame/cheat\""
unzip -j -o "$config/mame/cheat0264.zip" 'cheat.7z' -d "$XDG_DATA_HOME/mame/cheat"
log d "Verifying with user if they want to reset Ryujinx"
if [[ "$(configurator_generic_question_dialog "RetroDECK 0.8.1b Ryujinx Reset" "In RetroDECK 0.8.0b the Ryujinx emulator was not properly initialized for upgrading users.\nThis would cause Ryujinx to not work properly.\n\nWould you like to reset Ryujinx to default RetroDECK settings now?\n\nIf you have made your own changes to the Ryujinx config, you can decline this reset.")" == "true" ]]; then
@ -413,15 +413,15 @@ post_update() {
fi # end of 0.8.1b
if [[ $(check_version_is_older_than "$version_being_updated" "0.8.2b") == "true" ]]; then
log i "Vita3K changed some paths, reflecting them: moving \"/var/data/Vita3K\" in \"/var/config/Vita3K\""
move "/var/data/Vita3K" "/var/config/Vita3K"
log i "Vita3K changed some paths, reflecting them: moving \"$XDG_DATA_HOME/Vita3K\" in \"$XDG_CONFIG_HOME/Vita3K\""
move "$XDG_DATA_HOME/Vita3K" "$XDG_CONFIG_HOME/Vita3K"
log i "Moving ES-DE downloaded_media, gamelist, and themes from \"$rdhome\" to \"$rdhome/ES-DE\" due to a RetroDECK Framework bug"
move "$rdhome/themes" "$rdhome/ES-DE/themes" && log d "Move of \"$rdhome/themes\" in \"$rdhome/ES-DE\" folder completed"
move "$rdhome/downloaded_media" "$rdhome/ES-DE/downloaded_media" && log d "Move of \"$rdhome/downloaded_media\" in \"$rdhome/ES-DE\" folder completed"
move "$rdhome/gamelists" "$rdhome/ES-DE/gamelists" && log d "Move of \"$rdhome/gamelists/\" in \"$rdhome/ES-DE\" folder completed"
move "$rdhome/collections" "$rdhome/ES-DE/collections" && log d "Move of \"$rdhome/collections/\" in \"$rdhome/ES-DE\" folder completed"
log i "Since in this version we moved to a PR build of Ryujinx we need to symlink it."
ln -sv $ryujinxconf "$(dirname $ryujinxconf)/PRConfig.json"
ln -sv "$ryujinxconf" "$(dirname "$ryujinxconf")/PRConfig.json"
fi #end of 0.8.2b
if [[ $(check_version_is_older_than "$version_being_updated" "0.8.3b") == "true" ]]; then
@ -605,26 +605,26 @@ post_update() {
# RetroArch
log i "Forcing RetroArch to use the new libretro info path"
set_setting_value "$raconf" "libretro_info_path" "/var/config/retroarch/cores" "retroarch"
set_setting_value "$raconf" "libretro_info_path" "$XDG_CONFIG_HOME/retroarch/cores" "retroarch"
log i "Moving Ryujinx data to the new locations"
if [[ -d "/var/config/Ryujinx/bis" ]]; then
mv -f "/var/config/Ryujinx/bis"/* "$saves_folder/switch/ryujinx/nand" && rm -rf "/var/config/Ryujinx/bis" && log i "Migrated Ryujinx nand data to the new location"
if [[ -d "$XDG_CONFIG_HOME/Ryujinx/bis" ]]; then
mv -f "$XDG_CONFIG_HOME/Ryujinx/bis"/* "$saves_folder/switch/ryujinx/nand" && rm -rf "$XDG_CONFIG_HOME/Ryujinx/bis" && log i "Migrated Ryujinx nand data to the new location"
fi
if [[ -d "/var/config/Ryujinx/sdcard" ]]; then
mv -f "/var/config/Ryujinx/sdcard"/* "$saves_folder/switch/ryujinx/sdcard" && rm -rf "/var/config/Ryujinx/sdcard" && log i "Migrated Ryujinx sdcard data to the new location"
if [[ -d "$XDG_CONFIG_HOME/Ryujinx/sdcard" ]]; then
mv -f "$XDG_CONFIG_HOME/Ryujinx/sdcard"/* "$saves_folder/switch/ryujinx/sdcard" && rm -rf "$XDG_CONFIG_HOME/Ryujinx/sdcard" && log i "Migrated Ryujinx sdcard data to the new location"
fi
if [[ -d "/var/config/Ryujinx/bis/system/Contents/registered" ]]; then
mv -f "/var/config/Ryujinx/bis/system/Contents/registered"/* "$bios_folder/switch/firmware" && rm -rf "/var/config/Ryujinx/bis/system/Contents/registered" && log i "Migration of Ryujinx firmware data to the new location"
if [[ -d "$XDG_CONFIG_HOME/Ryujinx/bis/system/Contents/registered" ]]; then
mv -f "$XDG_CONFIG_HOME/Ryujinx/bis/system/Contents/registered"/* "$bios_folder/switch/firmware" && rm -rf "$XDG_CONFIG_HOME/Ryujinx/bis/system/Contents/registered" && log i "Migration of Ryujinx firmware data to the new location"
fi
if [[ -d "/var/config/Ryujinx/system" ]]; then
mv -f "/var/config/Ryujinx/system"/* "$bios_folder/switch/keys" && rm -rf "/var/config/Ryujinx/system" && log i "Migrated Ryujinx keys data to the new location"
if [[ -d "$XDG_CONFIG_HOME/Ryujinx/system" ]]; then
mv -f "$XDG_CONFIG_HOME/Ryujinx/system"/* "$bios_folder/switch/keys" && rm -rf "$XDG_CONFIG_HOME/Ryujinx/system" && log i "Migrated Ryujinx keys data to the new location"
fi
if [[ -d "/var/config/Ryujinx/mods" ]]; then
mv -f "/var/config/Ryujinx/mods"/* "$mods_folder/ryujinx" && rm -rf "/var/config/Ryujinx/mods" && log i "Migrated Ryujinx mods data to the new location"
if [[ -d "$XDG_CONFIG_HOME/Ryujinx/mods" ]]; then
mv -f "$XDG_CONFIG_HOME/Ryujinx/mods"/* "$mods_folder/ryujinx" && rm -rf "$XDG_CONFIG_HOME/Ryujinx/mods" && log i "Migrated Ryujinx mods data to the new location"
fi
if [[ -d "/var/config/Ryujinx/screenshots" ]]; then
mv -f "/var/config/Ryujinx/screenshots"/* "$screenshots_folder/ryujinx" && rm -rf "/var/config/Ryujinx/screenshots" && log i "Migrated Ryujinx screenshots to the new location"
if [[ -d "$XDG_CONFIG_HOME/Ryujinx/screenshots" ]]; then
mv -f "$XDG_CONFIG_HOME/Ryujinx/screenshots"/* "$screenshots_folder/ryujinx" && rm -rf "$XDG_CONFIG_HOME/Ryujinx/screenshots" && log i "Migrated Ryujinx screenshots to the new location"
fi
fi # end of 0.9.0b
@ -708,7 +708,7 @@ post_update() {
# --- ALWAYS EXECUTED IN 0.9.1b ---
log i "Preparing the shaders folder for MAME..."
shaders_folder=$rdhome/shaders && log i "Shaders folder set to \"$shaders_folder\""
shaders_folder="$rdhome/shaders" && log i "Shaders folder set to \"$shaders_folder\""
conf_write && log i "Done"
create_dir "$shaders_folder/mame/bgfx"
set_setting_value "$mameconf" "bgfx_path" "$shaders_folder/mame/bgfx/" "mame"
@ -717,26 +717,26 @@ post_update() {
log i "Preparing the cheats for RetroArch..."
create_dir "$cheats_folder/retroarch"
set_setting_value "$raconf" "cheat_database_path" "$cheats_folder/retroarch" "retroarch"
tar --strip-components=1 -xzf /app/retrodeck/cheats/retroarch.tar.gz -C "$cheats_folder/retroarch" --overwrite && log i "Cheats for RetroArch installed"
tar --strip-components=1 -xzf "/app/retrodeck/cheats/retroarch.tar.gz" -C "$cheats_folder/retroarch" --overwrite && log i "Cheats for RetroArch installed"
log i "Preparing the cheats for PPSSPP..."
create_dir -d "$cheats_folder/PPSSPP"
dir_prep "$cheats_folder/PPSSPP" "/var/config/ppsspp/PSP/Cheats"
tar -xzf /app/retrodeck/cheats/ppsspp.tar.gz -C "$cheats_folder/PPSSPP" --overwrite && log i "Cheats for PPSSPP installed"
dir_prep "$cheats_folder/PPSSPP" "$XDG_CONFIG_HOME/ppsspp/PSP/Cheats"
tar -xzf "/app/retrodeck/cheats/ppsspp.tar.gz" -C "$cheats_folder/PPSSPP" --overwrite && log i "Cheats for PPSSPP installed"
log i "Preparing the cheats for PCSX2..."
create_dir "$cheats_folder/pcsx2"
set_setting_value "$pcsx2conf" "Cheats" "$cheats_folder/pcsx2" "Folders"
tar --strip-components=1 -xzf /app/retrodeck/cheats/pcsx2.tar.gz -C "$cheats_folder/pcsx2" --overwrite && log i "Cheats for PCSX2 installed"
tar --strip-components=1 -xzf "/app/retrodeck/cheats/pcsx2.tar.gz" -C "$cheats_folder/pcsx2" --overwrite && log i "Cheats for PCSX2 installed"
log i "Preparing the cheats for MAME..."
create_dir "$cheats_folder/mame"
set_setting_value "$mameconf" "cheatpath" "$cheats_folder/mame" "mame"
unzip -j -o "$config/mame/cheat0264.zip" 'cheat.7z' -d "$cheats_folder/mame" && log i "Cheats for MAME installed"
rm -rf /var/data/mame/cheat
rm -rf "$XDG_DATA_HOME/mame/cheat"
log i "Preparing the RetroAchievements for Dolphin..."
cp -vn "$config/dolphin/"* /var/config/dolphin-emu/
cp -vn "$config/dolphin/"* "$XDG_CONFIG_HOME/dolphin-emu/"
log i "Fixing PrimeHack roms paths..."
set_setting_value "$rd_conf" "ppsspp" "$(get_setting_value "$rd_defaults" "ppsspp" "retrodeck" "cheevos")" "retrodeck" "cheevos"
@ -766,18 +766,17 @@ post_update() {
fi
fi
fi
fi # end of 0.9.2b
# The following commands are run every time.
if [[ -d "/var/data/dolphin-emu/Load/DynamicInputTextures" ]]; then # Refresh installed textures if they have been enabled
if [[ -d "$XDG_DATA_HOME/dolphin-emu/Load/DynamicInputTextures" ]]; then # Refresh installed textures if they have been enabled
log i "Refreshing installed textures for Dolphin..."
rsync -rlD --mkpath "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/dolphin-emu/Load/DynamicInputTextures/" && log i "Done"
rsync -rlD --mkpath "/app/retrodeck/extras/DynamicInputTextures/" "$XDG_DATA_HOME/dolphin-emu/Load/DynamicInputTextures/" && log i "Done"
fi
if [[ -d "/var/data/primehack/Load/DynamicInputTextures" ]]; then # Refresh installed textures if they have been enabled
if [[ -d "$XDG_DATA_HOME/primehack/Load/DynamicInputTextures" ]]; then # Refresh installed textures if they have been enabled
log i "Refreshing installed textures for Dolphin..."
rsync -rlD --mkpath "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/primehack/Load/DynamicInputTextures/" && log i "Done"
rsync -rlD --mkpath "/app/retrodeck/extras/DynamicInputTextures/" "$XDG_DATA_HOME/primehack/Load/DynamicInputTextures/" && log i "Done"
fi
if [[ ! -z $(find "$HOME/.steam/steam/controller_base/templates/" -maxdepth 1 -type f -iname "RetroDECK*.vdf") || ! -z $(find "$HOME/.var/app/com.valvesoftware.Steam/.steam/steam/controller_base/templates/" -maxdepth 1 -type f -iname "RetroDECK*.vdf") ]]; then # If RetroDECK controller profile has been previously installed
@ -796,11 +795,11 @@ post_update() {
--text="RetroDECK is finishing up the upgrading process, please be patient.\n\n<span foreground='$purple' size='larger'><b>NOTICE - If the process is taking too long:</b></span>\n\nSome windows might be running in the background that could require your attention: pop-ups from emulators or the upgrade itself that needs user input to continue.\n\n"
conf_read
version=$hard_version
version="$hard_version"
conf_write
if grep -qF "cooker" <<< $hard_version; then
changelog_dialog "$(echo $version | cut -d'-' -f2)"
if grep -qF "cooker" <<< "$hard_version"; then
changelog_dialog "$(echo "$version" | cut -d'-' -f2)"
else
changelog_dialog "$version"
fi

View file

@ -5,7 +5,7 @@ prepare_component() {
# The actions currently include "reset" and "postmove"
# The "reset" action will initialize the component
# The "postmove" action will update the component settings after one or more RetroDECK folders were moved
# An component can be called by name, by parent folder name in the /var/config root or use the option "all" to perform the action on all components equally
# An component can be called by name, by parent folder name in the $XDG_CONFIG_HOME root or use the option "all" to perform the action on all components equally
# USAGE: prepare_component "$action" "$component" "$call_source(optional)"
if [[ "$1" == "--list" ]]; then
@ -76,8 +76,8 @@ prepare_component() {
log d "Logs folder moved to $logs_folder and linked back to $rd_logs_folder"
fi
fi
done < <(grep -v '^\s*$' $rd_conf | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f')
create_dir "/var/config/retrodeck/godot" # TODO: what is this for? Can we delete it or add it to the retrodeck.cfg so the folder will be created by the above script?
done < <(grep -v '^\s*$' "$rd_conf" | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f')
create_dir "$XDG_CONFIG_HOME/retrodeck/godot" # TODO: what is this for? Can we delete it or add it to the retrodeck.cfg so the folder will be created by the above script?
fi
if [[ "$action" == "postmove" ]]; then # Update the paths of any folders that came with the retrodeck folder during a move
@ -89,7 +89,7 @@ prepare_component() {
declare -g "$current_setting_name=$rdhome/${current_setting_value#*retrodeck/}"
fi
fi
done < <(grep -v '^\s*$' $rd_conf | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f')
done < <(grep -v '^\s*$' "$rd_conf" | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f')
dir_prep "$logs_folder" "$rd_logs_folder"
fi
fi
@ -100,16 +100,16 @@ prepare_component() {
log i "Prepearing ES-DE"
log i "--------------------------------"
if [[ "$action" == "reset" ]]; then
rm -rf /var/config/ES-DE
create_dir /var/config/ES-DE/settings
rm -rf "$XDG_CONFIG_HOME/ES-DE"
create_dir "$XDG_CONFIG_HOME/ES-DE/settings"
log d "Prepearing es_settings.xml"
cp -f /app/retrodeck/es_settings.xml /var/config/ES-DE/settings/es_settings.xml
cp -f "/app/retrodeck/es_settings.xml" "$XDG_CONFIG_HOME/ES-DE/settings/es_settings.xml"
set_setting_value "$es_settings" "ROMDirectory" "$roms_folder" "es_settings"
set_setting_value "$es_settings" "MediaDirectory" "$media_folder" "es_settings"
set_setting_value "$es_settings" "UserThemeDirectory" "$themes_folder" "es_settings"
dir_prep "$rdhome/ES-DE/gamelists" "/var/config/ES-DE/gamelists"
dir_prep "$rdhome/ES-DE/collections" "/var/config/ES-DE/collections"
dir_prep "$rdhome/ES-DE/custom_systems" "/var/config/ES-DE/custom_systems"
dir_prep "$rdhome/ES-DE/gamelists" "$XDG_CONFIG_HOME/ES-DE/gamelists"
dir_prep "$rdhome/ES-DE/collections" "$XDG_CONFIG_HOME/ES-DE/collections"
dir_prep "$rdhome/ES-DE/custom_systems" "$XDG_CONFIG_HOME/ES-DE/custom_systems"
log d "Generating roms system folders"
es-de --create-system-dirs
update_splashscreens
@ -118,7 +118,7 @@ prepare_component() {
set_setting_value "$es_settings" "ROMDirectory" "$roms_folder" "es_settings"
set_setting_value "$es_settings" "MediaDirectory" "$media_folder" "es_settings"
set_setting_value "$es_settings" "UserThemeDirectory" "$themes_folder" "es_settings"
dir_prep "$rdhome/gamelists" "/var/config/ES-DE/gamelists"
dir_prep "$rdhome/gamelists" "$XDG_CONFIG_HOME/ES-DE/gamelists"
fi
fi
@ -128,7 +128,7 @@ prepare_component() {
log i "Prepearing Steam ROM Manager"
log i "-----------------------------"
local srm_userdata="/var/config/steam-rom-manager/userData"
local srm_userdata="$XDG_CONFIG_HOME/steam-rom-manager/userData"
create_dir -d "$srm_userdata"
cp -fv "$config/steam-rom-manager/"*.json "$srm_userdata"
cp -fvr "$config/steam-rom-manager/manifests" "$srm_userdata"
@ -148,28 +148,28 @@ prepare_component() {
if [[ "$action" == "reset" ]]; then # Run reset-only commands
if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
create_dir -d "$multi_user_data_folder/$SteamAppUser/config/retroarch"
cp -fv $config/retroarch/retroarch.cfg "$multi_user_data_folder/$SteamAppUser/config/retroarch/"
cp -fv $config/retroarch/retroarch-core-options.cfg "$multi_user_data_folder/$SteamAppUser/config/retroarch/"
cp -fv "$config/retroarch/retroarch.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/"
cp -fv "$config/retroarch/retroarch-core-options.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/"
else # Single-user actions
create_dir -d /var/config/retroarch
dir_prep "$bios_folder" "/var/config/retroarch/system"
dir_prep "$rdhome/logs/retroarch" "/var/config/retroarch/logs"
create_dir -d "/var/config/retroarch/shaders/"
if [[ -d "$cheats_folder/retroarch" && "$(ls -A $cheats_folder/retroarch)" ]]; then
create_dir -d "$XDG_CONFIG_HOME/retroarch"
dir_prep "$bios_folder" "$XDG_CONFIG_HOME/retroarch/system"
dir_prep "$rdhome/logs/retroarch" "$XDG_CONFIG_HOME/retroarch/logs"
create_dir -d "$XDG_CONFIG_HOME/retroarch/shaders/"
if [[ -d "$cheats_folder/retroarch" && "$(ls -A "$cheats_folder/retroarch")" ]]; then
backup_file="$backups_folder/cheats/retroarch-$(date +%y%m%d).tar.gz"
create_dir "$(dirname "$backup_file")"
tar -czf "$backup_file" -C "$cheats_folder" retroarch
log i "RetroArch cheats backed up to $backup_file"
fi
create_dir -d "$cheats_folder/retroarch"
tar --strip-components=1 -xzf /app/retrodeck/cheats/retroarch.tar.gz -C "$cheats_folder/retroarch" --overwrite
cp -rf /app/share/libretro/shaders /var/config/retroarch/
dir_prep "$shaders_folder/retroarch" "/var/config/retroarch/shaders"
cp -fv $config/retroarch/retroarch.cfg /var/config/retroarch/
cp -fv $config/retroarch/retroarch-core-options.cfg /var/config/retroarch/
rsync -rlD --mkpath "$config/retroarch/core-overrides/" "/var/config/retroarch/config/"
rsync -rlD --mkpath "$config/retrodeck/presets/remaps/" "/var/config/retroarch/config/remaps/"
dir_prep "$borders_folder" "/var/config/retroarch/overlays/borders"
tar --strip-components=1 -xzf "/app/retrodeck/cheats/retroarch.tar.gz" -C "$cheats_folder/retroarch" --overwrite
cp -rf "/app/share/libretro/shaders" "$XDG_CONFIG_HOME/retroarch/"
dir_prep "$shaders_folder/retroarch" "$XDG_CONFIG_HOME/retroarch/shaders"
cp -fv "$config/retroarch/retroarch.cfg" "$XDG_CONFIG_HOME/retroarch/"
cp -fv "$config/retroarch/retroarch-core-options.cfg" "$XDG_CONFIG_HOME/retroarch/"
rsync -rlD --mkpath "$config/retroarch/core-overrides/" "$XDG_CONFIG_HOME/retroarch/config/"
rsync -rlD --mkpath "$config/retrodeck/presets/remaps/" "$XDG_CONFIG_HOME/retroarch/config/remaps/"
dir_prep "$borders_folder" "$XDG_CONFIG_HOME/retroarch/overlays/borders"
set_setting_value "$raconf" "savefile_directory" "$saves_folder" "retroarch"
set_setting_value "$raconf" "savestate_directory" "$states_folder" "retroarch"
set_setting_value "$raconf" "screenshot_directory" "$screenshots_folder" "retroarch"
@ -244,9 +244,9 @@ prepare_component() {
set_setting_value "$ra_scummvm_conf" "savepath" "$saves_folder/scummvm" "libretro_scummvm" "scummvm"
set_setting_value "$ra_scummvm_conf" "browser_lastpath" "$roms_folder/scummvm" "libretro_scummvm" "scummvm"
dir_prep "$texture_packs_folder/RetroArch-Mesen" "/var/config/retroarch/system/HdPacks"
dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "/var/config/retroarch/system/Mupen64plus/cache"
dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "/var/config/retroarch/system/Mupen64plus/hires_texture"
dir_prep "$texture_packs_folder/RetroArch-Mesen" "$XDG_CONFIG_HOME/retroarch/system/HdPacks"
dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "$XDG_CONFIG_HOME/retroarch/system/Mupen64plus/cache"
dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "$XDG_CONFIG_HOME/retroarch/system/Mupen64plus/hires_texture"
# Reset default preset settings
set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "cheevos")" "retrodeck" "cheevos"
@ -272,12 +272,12 @@ prepare_component() {
set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "savestate_auto_save")" "retrodeck" "savestate_auto_save"
fi
if [[ "$action" == "postmove" ]]; then # Run only post-move commands
dir_prep "$bios_folder" "/var/config/retroarch/system"
dir_prep "$logs_folder/retroarch" "/var/config/retroarch/logs"
dir_prep "$shaders_folder/retroarch" "/var/config/retroarch/shaders"
dir_prep "$texture_packs_folder/RetroArch-Mesen" "/var/config/retroarch/system/HdPacks"
dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "/var/config/retroarch/system/Mupen64plus/cache"
dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "/var/config/retroarch/system/Mupen64plus/hires_texture"
dir_prep "$bios_folder" "$XDG_CONFIG_HOME/retroarch/system"
dir_prep "$logs_folder/retroarch" "$XDG_CONFIG_HOME/retroarch/logs"
dir_prep "$shaders_folder/retroarch" "$XDG_CONFIG_HOME/retroarch/shaders"
dir_prep "$texture_packs_folder/RetroArch-Mesen" "$XDG_CONFIG_HOME/retroarch/system/HdPacks"
dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "$XDG_CONFIG_HOME/retroarch/system/Mupen64plus/cache"
dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "$XDG_CONFIG_HOME/retroarch/system/Mupen64plus/hires_texture"
set_setting_value "$raconf" "savefile_directory" "$saves_folder" "retroarch"
set_setting_value "$raconf" "savestate_directory" "$states_folder" "retroarch"
set_setting_value "$raconf" "screenshot_directory" "$screenshots_folder" "retroarch"
@ -294,15 +294,15 @@ prepare_component() {
log i "------------------------"
if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
create_dir -d "$multi_user_data_folder/$SteamAppUser/config/citra-emu"
cp -fv $config/citra/qt-config.ini "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini"
cp -fv "$config/citra/qt-config.ini" "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "nand_directory" "$saves_folder/n3ds/citra/nand/" "citra" "Data%20Storage"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "sdmc_directory" "$saves_folder/n3ds/citra/sdmc/" "citra" "Data%20Storage"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "Paths\gamedirs\3\path" "$roms_folder/n3ds" "citra" "UI"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "Paths\screenshotPath" "$screenshots_folder" "citra" "UI"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/citra-emu" "/var/config/citra-emu"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/citra-emu" "$XDG_CONFIG_HOME/citra-emu"
else # Single-user actions
create_dir -d /var/config/citra-emu/
cp -f $config/citra/qt-config.ini /var/config/citra-emu/qt-config.ini
create_dir -d "$XDG_CONFIG_HOME/citra-emu/"
cp -f "$config/citra/qt-config.ini" "$XDG_CONFIG_HOME/citra-emu/qt-config.ini"
set_setting_value "$citraconf" "nand_directory" "$saves_folder/n3ds/citra/nand/" "citra" "Data%20Storage"
set_setting_value "$citraconf" "sdmc_directory" "$saves_folder/n3ds/citra/sdmc/" "citra" "Data%20Storage"
set_setting_value "$citraconf" "Paths\gamedirs\3\path" "$roms_folder/n3ds" "citra" "UI"
@ -311,20 +311,20 @@ prepare_component() {
# Shared actions
create_dir "$saves_folder/n3ds/citra/nand/"
create_dir "$saves_folder/n3ds/citra/sdmc/"
dir_prep "$bios_folder/citra/sysdata" "/var/data/citra-emu/sysdata"
dir_prep "$logs_folder/citra" "/var/data/citra-emu/log"
dir_prep "$mods_folder/Citra" "/var/data/citra-emu/load/mods"
dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures"
dir_prep "$bios_folder/citra/sysdata" "$XDG_DATA_HOME/citra-emu/sysdata"
dir_prep "$logs_folder/citra" "$XDG_DATA_HOME/citra-emu/log"
dir_prep "$mods_folder/Citra" "$XDG_DATA_HOME/citra-emu/load/mods"
dir_prep "$texture_packs_folder/Citra" "$XDG_DATA_HOME/citra-emu/load/textures"
# Reset default preset settings
set_setting_value "$rd_conf" "citra" "$(get_setting_value "$rd_defaults" "citra" "retrodeck" "abxy_button_swap")" "retrodeck" "abxy_button_swap"
set_setting_value "$rd_conf" "citra" "$(get_setting_value "$rd_defaults" "citra" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit"
fi
if [[ "$action" == "postmove" ]]; then # Run only post-move commands
dir_prep "$bios_folder/citra/sysdata" "/var/data/citra-emu/sysdata"
dir_prep "$rdhome/logs/citra" "/var/data/citra-emu/log"
dir_prep "$mods_folder/Citra" "/var/data/citra-emu/load/mods"
dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures"
dir_prep "$bios_folder/citra/sysdata" "$XDG_DATA_HOME/citra-emu/sysdata"
dir_prep "$rdhome/logs/citra" "$XDG_DATA_HOME/citra-emu/log"
dir_prep "$mods_folder/Citra" "$XDG_DATA_HOME/citra-emu/load/mods"
dir_prep "$texture_packs_folder/Citra" "$XDG_DATA_HOME/citra-emu/load/textures"
set_setting_value "$citraconf" "nand_directory" "$saves_folder/n3ds/citra/nand/" "citra" "Data%20Storage"
set_setting_value "$citraconf" "sdmc_directory" "$saves_folder/n3ds/citra/sdmc/" "citra" "Data%20Storage"
set_setting_value "$citraconf" "Paths\gamedirs\3\path" "$roms_folder/n3ds" "citra" "UI"
@ -344,10 +344,10 @@ prepare_component() {
cp -fr "$config/cemu/"* "$multi_user_data_folder/$SteamAppUser/config/Cemu/"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/Cemu/settings.ini" "mlc_path" "$bios_folder/cemu" "cemu"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/Cemu/settings.ini" "Entry" "$roms_folder/wiiu" "cemu" "GamePaths"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/Cemu" "/var/config/Cemu"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/Cemu" "$XDG_CONFIG_HOME/Cemu"
else
create_dir -d /var/config/Cemu/
cp -fr "$config/cemu/"* /var/config/Cemu/
create_dir -d "$XDG_CONFIG_HOME/Cemu/"
cp -fr "$config/cemu/"* "$XDG_CONFIG_HOME/Cemu/"
set_setting_value "$cemuconf" "mlc_path" "$bios_folder/cemu" "cemu"
set_setting_value "$cemuconf" "Entry" "$roms_folder/wiiu" "cemu" "GamePaths"
if [[ -e "$bios_folder/cemu/keys.txt" ]]; then
@ -378,10 +378,10 @@ prepare_component() {
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "ISOPath0" "$roms_folder/wii" "dolphin" "General"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "ISOPath1" "$roms_folder/gc" "dolphin" "General"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "WiiSDCardPath" "$saves_folder/wii/dolphin/sd.raw" "dolphin" "General"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu" "/var/config/dolphin-emu"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu" "$XDG_CONFIG_HOME/dolphin-emu"
else # Single-user actions
create_dir -d /var/config/dolphin-emu/
cp -fvr "$config/dolphin/"* /var/config/dolphin-emu/
create_dir -d "$XDG_CONFIG_HOME/dolphin-emu/"
cp -fvr "$config/dolphin/"* "$XDG_CONFIG_HOME/dolphin-emu/"
set_setting_value "$dolphinconf" "BIOS" "$bios_folder" "dolphin" "GBA"
set_setting_value "$dolphinconf" "SavesPath" "$saves_folder/gba" "dolphin" "GBA"
set_setting_value "$dolphinconf" "ISOPath0" "$roms_folder/wii" "dolphin" "General"
@ -389,27 +389,27 @@ prepare_component() {
set_setting_value "$dolphinconf" "WiiSDCardPath" "$saves_folder/wii/dolphin/sd.raw" "dolphin" "General"
fi
# Shared actions
dir_prep "$saves_folder/gc/dolphin/EU" "/var/data/dolphin-emu/GC/EUR" # TODO: Multi-user one-off
dir_prep "$saves_folder/gc/dolphin/US" "/var/data/dolphin-emu/GC/USA" # TODO: Multi-user one-off
dir_prep "$saves_folder/gc/dolphin/JP" "/var/data/dolphin-emu/GC/JAP" # TODO: Multi-user one-off
dir_prep "$screenshots_folder" "/var/data/dolphin-emu/ScreenShots"
dir_prep "$states_folder/dolphin" "/var/data/dolphin-emu/StateSaves"
dir_prep "$saves_folder/wii/dolphin" "/var/data/dolphin-emu/Wii"
dir_prep "$mods_folder/Dolphin" "/var/data/dolphin-emu/Load/GraphicMods"
dir_prep "$texture_packs_folder/Dolphin" "/var/data/dolphin-emu/Load/Textures"
dir_prep "$saves_folder/gc/dolphin/EU" "$XDG_DATA_HOME/dolphin-emu/GC/EUR" # TODO: Multi-user one-off
dir_prep "$saves_folder/gc/dolphin/US" "$XDG_DATA_HOME/dolphin-emu/GC/USA" # TODO: Multi-user one-off
dir_prep "$saves_folder/gc/dolphin/JP" "$XDG_DATA_HOME/dolphin-emu/GC/JAP" # TODO: Multi-user one-off
dir_prep "$screenshots_folder" "$XDG_DATA_HOME/dolphin-emu/ScreenShots"
dir_prep "$states_folder/dolphin" "$XDG_DATA_HOME/dolphin-emu/StateSaves"
dir_prep "$saves_folder/wii/dolphin" "$XDG_DATA_HOME/dolphin-emu/Wii"
dir_prep "$mods_folder/Dolphin" "$XDG_DATA_HOME/dolphin-emu/Load/GraphicMods"
dir_prep "$texture_packs_folder/Dolphin" "$XDG_DATA_HOME/dolphin-emu/Load/Textures"
# Reset default preset settings
set_setting_value "$rd_conf" "dolphin" "$(get_setting_value "$rd_defaults" "dolphin" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit"
fi
if [[ "$action" == "postmove" ]]; then # Run only post-move commands
dir_prep "$saves_folder/gc/dolphin/EU" "/var/data/dolphin-emu/GC/EUR"
dir_prep "$saves_folder/gc/dolphin/US" "/var/data/dolphin-emu/GC/USA"
dir_prep "$saves_folder/gc/dolphin/JP" "/var/data/dolphin-emu/GC/JAP"
dir_prep "$screenshots_folder" "/var/data/dolphin-emu/ScreenShots"
dir_prep "$states_folder/dolphin" "/var/data/dolphin-emu/StateSaves"
dir_prep "$saves_folder/wii/dolphin" "/var/data/dolphin-emu/Wii"
dir_prep "$mods_folder/Dolphin" "/var/data/dolphin-emu/Load/GraphicMods"
dir_prep "$texture_packs_folder/Dolphin" "/var/data/dolphin-emu/Load/Textures"
dir_prep "$saves_folder/gc/dolphin/EU" "$XDG_DATA_HOME/dolphin-emu/GC/EUR"
dir_prep "$saves_folder/gc/dolphin/US" "$XDG_DATA_HOME/dolphin-emu/GC/USA"
dir_prep "$saves_folder/gc/dolphin/JP" "$XDG_DATA_HOME/dolphin-emu/GC/JAP"
dir_prep "$screenshots_folder" "$XDG_DATA_HOME/dolphin-emu/ScreenShots"
dir_prep "$states_folder/dolphin" "$XDG_DATA_HOME/dolphin-emu/StateSaves"
dir_prep "$saves_folder/wii/dolphin" "$XDG_DATA_HOME/dolphin-emu/Wii"
dir_prep "$mods_folder/Dolphin" "$XDG_DATA_HOME/dolphin-emu/Load/GraphicMods"
dir_prep "$texture_packs_folder/Dolphin" "$XDG_DATA_HOME/dolphin-emu/Load/Textures"
set_setting_value "$dolphinconf" "BIOS" "$bios_folder" "dolphin" "GBA"
set_setting_value "$dolphinconf" "SavesPath" "$saves_folder/gba" "dolphin" "GBA"
set_setting_value "$dolphinconf" "ISOPath0" "$roms_folder/wii" "dolphin" "General"
@ -432,11 +432,11 @@ prepare_component() {
set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "Card2Path" "$saves_folder/psx/duckstation/memcards/shared_card_2.mcd" "duckstation" "MemoryCards"
set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "Directory" "$saves_folder/psx/duckstation/memcards" "duckstation" "MemoryCards"
set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "RecursivePaths" "$roms_folder/psx" "duckstation" "GameList"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/duckstation" "/var/config/duckstation"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/duckstation" "$XDG_CONFIG_HOME/duckstation"
else # Single-user actions
create_dir -d "/var/config/duckstation/"
create_dir -d "$XDG_CONFIG_HOME/duckstation/"
create_dir "$saves_folder/psx/duckstation/memcards"
cp -fv "$config/duckstation/"* /var/config/duckstation
cp -fv "$config/duckstation/"* "$XDG_CONFIG_HOME/duckstation"
set_setting_value "$duckstationconf" "SearchDirectory" "$bios_folder" "duckstation" "BIOS"
set_setting_value "$duckstationconf" "Card1Path" "$saves_folder/psx/duckstation/memcards/shared_card_1.mcd" "duckstation" "MemoryCards"
set_setting_value "$duckstationconf" "Card2Path" "$saves_folder/psx/duckstation/memcards/shared_card_2.mcd" "duckstation" "MemoryCards"
@ -444,8 +444,8 @@ prepare_component() {
set_setting_value "$duckstationconf" "RecursivePaths" "$roms_folder/psx" "duckstation" "GameList"
fi
# Shared actions
dir_prep "$states_folder/psx/duckstation" "/var/config/duckstation/savestates" # This is hard-coded in Duckstation, always needed
dir_prep "$texture_packs_folder/Duckstation" "/var/config/duckstation/textures"
dir_prep "$states_folder/psx/duckstation" "$XDG_CONFIG_HOME/duckstation/savestates" # This is hard-coded in Duckstation, always needed
dir_prep "$texture_packs_folder/Duckstation" "$XDG_CONFIG_HOME/duckstation/textures"
# Reset default preset settings
set_setting_value "$rd_conf" "duckstation" "$(get_setting_value "$rd_defaults" "duckstation" "retrodeck" "cheevos")" "retrodeck" "cheevos"
@ -459,8 +459,8 @@ prepare_component() {
set_setting_value "$duckstationconf" "Card2Path" "$saves_folder/psx/duckstation/memcards/shared_card_2.mcd" "duckstation" "MemoryCards"
set_setting_value "$duckstationconf" "Directory" "$saves_folder/psx/duckstation/memcards" "duckstation" "MemoryCards"
set_setting_value "$duckstationconf" "RecursivePaths" "$roms_folder/psx" "duckstation" "GameList"
dir_prep "$states_folder/psx/duckstation" "/var/config/duckstation/savestates" # This is hard-coded in Duckstation, always needed
dir_prep "$texture_packs_folder/Duckstation" "/var/config/duckstation/textures"
dir_prep "$states_folder/psx/duckstation" "$XDG_CONFIG_HOME/duckstation/savestates" # This is hard-coded in Duckstation, always needed
dir_prep "$texture_packs_folder/Duckstation" "$XDG_CONFIG_HOME/duckstation/textures"
fi
fi
@ -472,16 +472,16 @@ prepare_component() {
log i "----------------------"
if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
create_dir -d "$multi_user_data_folder/$SteamAppUser/config/melonDS/"
cp -fvr $config/melonds/melonDS.ini "$multi_user_data_folder/$SteamAppUser/config/melonDS/"
cp -fvr "$config/melonds/melonDS.ini" "$multi_user_data_folder/$SteamAppUser/config/melonDS/"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "BIOS9Path" "$bios_folder/bios9.bin" "melonds"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "BIOS7Path" "$bios_folder/bios7.bin" "melonds"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "FirmwarePath" "$bios_folder/firmware.bin" "melonds"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "SaveFilePath" "$saves_folder/nds/melonds" "melonds"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "SavestatePath" "$states_folder/nds/melonds" "melonds"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/melonDS" "/var/config/melonDS"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/melonDS" "$XDG_CONFIG_HOME/melonDS"
else # Single-user actions
create_dir -d /var/config/melonDS/
cp -fvr $config/melonds/melonDS.ini /var/config/melonDS/
create_dir -d "$XDG_CONFIG_HOME/melonDS/"
cp -fvr "$config/melonds/melonDS.ini" "$XDG_CONFIG_HOME/melonDS/"
set_setting_value "$melondsconf" "BIOS9Path" "$bios_folder/bios9.bin" "melonds"
set_setting_value "$melondsconf" "BIOS7Path" "$bios_folder/bios7.bin" "melonds"
set_setting_value "$melondsconf" "FirmwarePath" "$bios_folder/firmware.bin" "melonds"
@ -491,10 +491,10 @@ prepare_component() {
# Shared actions
create_dir "$saves_folder/nds/melonds"
create_dir "$states_folder/nds/melonds"
dir_prep "$bios_folder" "/var/config/melonDS/bios"
dir_prep "$bios_folder" "$XDG_CONFIG_HOME/melonDS/bios"
fi
if [[ "$action" == "postmove" ]]; then # Run only post-move commands
dir_prep "$bios_folder" "/var/config/melonDS/bios"
dir_prep "$bios_folder" "$XDG_CONFIG_HOME/melonDS/bios"
set_setting_value "$melondsconf" "BIOS9Path" "$bios_folder/bios9.bin" "melonds"
set_setting_value "$melondsconf" "BIOS7Path" "$bios_folder/bios7.bin" "melonds"
set_setting_value "$melondsconf" "FirmwarePath" "$bios_folder/firmware.bin" "melonds"
@ -517,29 +517,29 @@ prepare_component() {
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "SaveStates" "$states_folder/ps2/pcsx2" "pcsx2" "Folders"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "MemoryCards" "$saves_folder/ps2/pcsx2/memcards" "pcsx2" "Folders"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "RecursivePaths" "$roms_folder/ps2" "pcsx2" "GameList"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/PCSX2" "/var/config/PCSX2"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/PCSX2" "$XDG_CONFIG_HOME/PCSX2"
else # Single-user actions
create_dir -d "/var/config/PCSX2/inis"
cp -fvr "$config/PCSX2/"* /var/config/PCSX2/inis/
create_dir -d "$XDG_CONFIG_HOME/PCSX2/inis"
cp -fvr "$config/PCSX2/"* "$XDG_CONFIG_HOME/PCSX2/inis/"
set_setting_value "$pcsx2conf" "Bios" "$bios_folder" "pcsx2" "Folders"
set_setting_value "$pcsx2conf" "Snapshots" "$screenshots_folder" "pcsx2" "Folders"
set_setting_value "$pcsx2conf" "SaveStates" "$states_folder/ps2/pcsx2" "pcsx2" "Folders"
set_setting_value "$pcsx2conf" "MemoryCards" "$saves_folder/ps2/pcsx2/memcards" "pcsx2" "Folders"
set_setting_value "$pcsx2conf" "RecursivePaths" "$roms_folder/ps2" "pcsx2" "GameList"
set_setting_value "$pcsx2conf" "Cheats" "$cheats_folder/pcsx2" "Folders"
if [[ -d "$cheats_folder/pcsx2" && "$(ls -A $cheats_folder/pcsx2)" ]]; then
if [[ -d "$cheats_folder/pcsx2" && "$(ls -A "$cheats_folder/pcsx2")" ]]; then
backup_file="$backups_folder/cheats/pcsx2-$(date +%y%m%d).tar.gz"
create_dir "$(dirname $backup_file)"
create_dir "$(dirname "$backup_file")"
tar -czf "$backup_file" -C "$cheats_folder" pcsx2
log i "PCSX2 cheats backed up to $backup_file"
fi
create_dir -d "$cheats_folder/pcsx2"
tar --strip-components=1 -xzf /app/retrodeck/cheats/pcsx2.tar.gz -C "$cheats_folder/pcsx2" --overwrite
tar --strip-components=1 -xzf "/app/retrodeck/cheats/pcsx2.tar.gz" -C "$cheats_folder/pcsx2" --overwrite
fi
# Shared actions
create_dir "$saves_folder/ps2/pcsx2/memcards"
create_dir "$states_folder/ps2/pcsx2"
dir_prep "$texture_packs_folder/PCSX2" "/var/config/PCSX2/textures"
dir_prep "$texture_packs_folder/PCSX2" "$XDG_CONFIG_HOME/PCSX2/textures"
# Reset default preset settings
set_setting_value "$rd_conf" "pcsx2" "$(get_setting_value "$rd_defaults" "pcsx2" "retrodeck" "cheevos")" "retrodeck" "cheevos"
@ -554,7 +554,7 @@ prepare_component() {
set_setting_value "$pcsx2conf" "MemoryCards" "$saves_folder/ps2/pcsx2/memcards" "pcsx2" "Folders"
set_setting_value "$pcsx2conf" "RecursivePaths" "$roms_folder/ps2" "pcsx2" "GameList"
set_setting_value "$pcsx2conf" "Cheats" "$cheats_folder/pcsx2" "Folders"
dir_prep "$texture_packs_folder/PCSX2" "/var/config/PCSX2/textures"
dir_prep "$texture_packs_folder/PCSX2" "$XDG_CONFIG_HOME/PCSX2/textures"
fi
fi
@ -581,25 +581,25 @@ prepare_component() {
create_dir -d "$multi_user_data_folder/$SteamAppUser/config/ppsspp/PSP/SYSTEM/"
cp -fv "$config/ppssppsdl/"* "$multi_user_data_folder/$SteamAppUser/config/ppsspp/PSP/SYSTEM/"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/ppsspp/PSP/SYSTEM/ppsspp.ini" "CurrentDirectory" "$roms_folder/psp" "ppsspp" "General"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/ppsspp" "/var/config/ppsspp"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/ppsspp" "$XDG_CONFIG_HOME/ppsspp"
else # Single-user actions
create_dir -d /var/config/ppsspp/PSP/SYSTEM/
cp -fv "$config/ppssppsdl/"* /var/config/ppsspp/PSP/SYSTEM/
create_dir -d "$XDG_CONFIG_HOME/ppsspp/PSP/SYSTEM/"
cp -fv "$config/ppssppsdl/"* "$XDG_CONFIG_HOME/ppsspp/PSP/SYSTEM/"
set_setting_value "$ppssppconf" "CurrentDirectory" "$roms_folder/psp" "ppsspp" "General"
fi
# Shared actions
dir_prep "$saves_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/SAVEDATA"
dir_prep "$states_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/PPSSPP_STATE"
dir_prep "$texture_packs_folder/PPSSPP" "/var/config/ppsspp/PSP/TEXTURES"
dir_prep "$saves_folder/PSP/PPSSPP-SA" "$XDG_CONFIG_HOME/ppsspp/PSP/SAVEDATA"
dir_prep "$states_folder/PSP/PPSSPP-SA" "$XDG_CONFIG_HOME/ppsspp/PSP/PPSSPP_STATE"
dir_prep "$texture_packs_folder/PPSSPP" "$XDG_CONFIG_HOME/ppsspp/PSP/TEXTURES"
create_dir -d "$cheats_folder/PPSSPP"
dir_prep "$cheats_folder/PPSSPP" "/var/config/ppsspp/PSP/Cheats"
dir_prep "$cheats_folder/PPSSPP" "$XDG_CONFIG_HOME/ppsspp/PSP/Cheats"
if [[ -d "$cheats_folder/PPSSPP" && "$(ls -A "$cheats_folder"/PPSSPP)" ]]; then
backup_file="$backups_folder/cheats/PPSSPP-$(date +%y%m%d).tar.gz"
create_dir "$(dirname "$backup_file")"
tar -czf "$backup_file" -C "$cheats_folder" PPSSPP
log i "PPSSPP cheats backed up to $backup_file"
fi
tar -xzf /app/retrodeck/cheats/ppsspp.tar.gz -C "$cheats_folder/PPSSPP" --overwrite
tar -xzf "/app/retrodeck/cheats/ppsspp.tar.gz" -C "$cheats_folder/PPSSPP" --overwrite
# Reset default preset settings
set_setting_value "$rd_conf" "ppsspp" "$(get_setting_value "$rd_defaults" "ppsspp" "retrodeck" "cheevos")" "retrodeck" "cheevos"
@ -607,10 +607,10 @@ prepare_component() {
fi
if [[ "$action" == "postmove" ]]; then # Run only post-move commands
set_setting_value "$ppssppconf" "CurrentDirectory" "$roms_folder/psp" "ppsspp" "General"
dir_prep "$saves_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/SAVEDATA"
dir_prep "$states_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/PPSSPP_STATE"
dir_prep "$texture_packs_folder/PPSSPP" "/var/config/ppsspp/PSP/TEXTURES"
dir_prep "$cheats_folder/PPSSPP" "/var/config/ppsspp/PSP/Cheats"
dir_prep "$saves_folder/PSP/PPSSPP-SA" "$XDG_CONFIG_HOME/ppsspp/PSP/SAVEDATA"
dir_prep "$states_folder/PSP/PPSSPP-SA" "$XDG_CONFIG_HOME/ppsspp/PSP/PPSSPP_STATE"
dir_prep "$texture_packs_folder/PPSSPP" "$XDG_CONFIG_HOME/ppsspp/PSP/TEXTURES"
dir_prep "$cheats_folder/PPSSPP" "$XDG_CONFIG_HOME/ppsspp/PSP/Cheats"
fi
fi
@ -623,25 +623,25 @@ prepare_component() {
if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
create_dir -d "$multi_user_data_folder/$SteamAppUser/config/primehack"
cp -fvr "$config/primehack/config/"* "$multi_user_data_folder/$SteamAppUser/config/primehack/"
set_setting_value ""$multi_user_data_folder/$SteamAppUser/config/primehack/Dolphin.ini"" "ISOPath0" "$roms_folder/wii" "primehack" "General"
set_setting_value ""$multi_user_data_folder/$SteamAppUser/config/primehack/Dolphin.ini"" "ISOPath1" "$roms_folder/gc" "primehack" "General"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/primehack" "/var/config/primehack"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/primehack/Dolphin.ini" "ISOPath0" "$roms_folder/wii" "primehack" "General"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/primehack/Dolphin.ini" "ISOPath1" "$roms_folder/gc" "primehack" "General"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/primehack" "$XDG_CONFIG_HOME/primehack"
else # Single-user actions
create_dir -d /var/config/primehack/
cp -fvr "$config/primehack/config/"* /var/config/primehack/
create_dir -d "$XDG_CONFIG_HOME/primehack/"
cp -fvr "$config/primehack/config/"* "$XDG_CONFIG_HOME/primehack/"
set_setting_value "$primehackconf" "ISOPath0" "$roms_folder/wii" "primehack" "General"
set_setting_value "$primehackconf" "ISOPath1" "$roms_folder/gc" "primehack" "General"
fi
# Shared actions
dir_prep "$saves_folder/gc/primehack/EU" "/var/data/primehack/GC/EUR"
dir_prep "$saves_folder/gc/primehack/US" "/var/data/primehack/GC/USA"
dir_prep "$saves_folder/gc/primehack/JP" "/var/data/primehack/GC/JAP"
dir_prep "$screenshots_folder" "/var/data/primehack/ScreenShots"
dir_prep "$states_folder/primehack" "/var/data/primehack/StateSaves"
create_dir /var/data/primehack/Wii/
dir_prep "$saves_folder/wii/primehack" "/var/data/primehack/Wii"
dir_prep "$mods_folder/Primehack" "/var/data/primehack/Load/GraphicMods"
dir_prep "$texture_packs_folder/Primehack" "/var/data/primehack/Load/Textures"
dir_prep "$saves_folder/gc/primehack/EU" "$XDG_DATA_HOME/primehack/GC/EUR"
dir_prep "$saves_folder/gc/primehack/US" "$XDG_DATA_HOME/primehack/GC/USA"
dir_prep "$saves_folder/gc/primehack/JP" "$XDG_DATA_HOME/primehack/GC/JAP"
dir_prep "$screenshots_folder" "$XDG_DATA_HOME/primehack/ScreenShots"
dir_prep "$states_folder/primehack" "$XDG_DATA_HOME/primehack/StateSaves"
create_dir "$XDG_DATA_HOME/primehack/Wii/"
dir_prep "$saves_folder/wii/primehack" "$XDG_DATA_HOME/primehack/Wii"
dir_prep "$mods_folder/Primehack" "$XDG_DATA_HOME/primehack/Load/GraphicMods"
dir_prep "$texture_packs_folder/Primehack" "$XDG_DATA_HOME/primehack/Load/Textures"
if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
cp -fvr "$config/primehack/data/"* "$multi_user_data_folder/$SteamAppUser/data/primehack/" # this must be done after the dirs are prepared as it copying some "mods"
fi
@ -650,14 +650,14 @@ prepare_component() {
set_setting_value "$rd_conf" "primehack" "$(get_setting_value "$rd_defaults" "primehack" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit"
fi
if [[ "$action" == "postmove" ]]; then # Run only post-move commands
dir_prep "$saves_folder/gc/primehack/EU" "/var/data/primehack/GC/EUR"
dir_prep "$saves_folder/gc/primehack/US" "/var/data/primehack/GC/USA"
dir_prep "$saves_folder/gc/primehack/JP" "/var/data/primehack/GC/JAP"
dir_prep "$screenshots_folder" "/var/data/primehack/ScreenShots"
dir_prep "$states_folder/primehack" "/var/data/primehack/StateSaves"
dir_prep "$saves_folder/wii/primehack" "/var/data/primehack/Wii/"
dir_prep "$mods_folder/Primehack" "/var/data/primehack/Load/GraphicMods"
dir_prep "$texture_packs_folder/Primehack" "/var/data/primehack/Load/Textures"
dir_prep "$saves_folder/gc/primehack/EU" "$XDG_DATA_HOME/primehack/GC/EUR"
dir_prep "$saves_folder/gc/primehack/US" "$XDG_DATA_HOME/primehack/GC/USA"
dir_prep "$saves_folder/gc/primehack/JP" "$XDG_DATA_HOME/primehack/GC/JAP"
dir_prep "$screenshots_folder" "$XDG_DATA_HOME/primehack/ScreenShots"
dir_prep "$states_folder/primehack" "$XDG_DATA_HOME/primehack/StateSaves"
dir_prep "$saves_folder/wii/primehack" "$XDG_DATA_HOME/primehack/Wii/"
dir_prep "$mods_folder/Primehack" "$XDG_DATA_HOME/primehack/Load/GraphicMods"
dir_prep "$texture_packs_folder/Primehack" "$XDG_DATA_HOME/primehack/Load/Textures"
set_setting_value "$primehackconf" "ISOPath0" "$roms_folder/gc" "primehack" "General"
fi
fi
@ -674,15 +674,15 @@ prepare_component() {
# This is an unfortunate one-off because set_setting_value does not currently support settings with $ in the name.
sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3/"'^' "$multi_user_data_folder/$SteamAppUser/config/rpcs3/vfs.yml"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/rpcs3/vfs.yml" "/games/" "$roms_folder/ps3/" "rpcs3"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/rpcs3" "/var/config/rpcs3"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/rpcs3" "$XDG_CONFIG_HOME/rpcs3"
else # Single-user actions
create_dir -d /var/config/rpcs3/
cp -fr "$config/rpcs3/"* /var/config/rpcs3/
create_dir -d "$XDG_CONFIG_HOME/rpcs3/"
cp -fr "$config/rpcs3/"* "$XDG_CONFIG_HOME/rpcs3/"
# This is an unfortunate one-off because set_setting_value does not currently support settings with $ in the name.
sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3/"'^' "$rpcs3vfsconf"
set_setting_value "$rpcs3vfsconf" "/games/" "$roms_folder/ps3/" "rpcs3"
dir_prep "$saves_folder/ps3/rpcs3" "$bios_folder/rpcs3/dev_hdd0/home/00000001/savedata"
dir_prep "$states_folder/ps3/rpcs3" "/var/config/rpcs3/savestates"
dir_prep "$states_folder/ps3/rpcs3" "$XDG_CONFIG_HOME/rpcs3/savestates"
fi
# Shared actions
create_dir "$bios_folder/rpcs3/dev_hdd0"
@ -711,16 +711,16 @@ prepare_component() {
if [[ $multi_user_mode == "true" ]]; then
rm -rf "$multi_user_data_folder/$SteamAppUser/config/Ryujinx"
#create_dir "$multi_user_data_folder/$SteamAppUser/config/Ryujinx/system"
cp -fv $config/ryujinx/* "$multi_user_data_folder/$SteamAppUser/config/Ryujinx"
cp -fv "$config/ryujinx/"* "$multi_user_data_folder/$SteamAppUser/config/Ryujinx"
sed -i 's#RETRODECKHOMEDIR#'"$rdhome"'#g' "$multi_user_data_folder/$SteamAppUser/config/Ryujinx/Config.json"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/Ryujinx" "/var/config/Ryujinx"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/Ryujinx" "$XDG_CONFIG_HOME/Ryujinx"
else
# removing config directory to wipe legacy files
log d "Removing \"/var/config/Ryujinx\""
rm -rf "/var/config/Ryujinx"
create_dir "/var/config/Ryujinx/system"
log d "Removing \"$XDG_CONFIG_HOME/Ryujinx\""
rm -rf "$XDG_CONFIG_HOME/Ryujinx"
create_dir "$XDG_CONFIG_HOME/Ryujinx/system"
cp -fv "$config/ryujinx/Config.json" "$ryujinxconf"
cp -fvr "$config/ryujinx/profiles" "/var/config/Ryujinx/"
cp -fvr "$config/ryujinx/profiles" "$XDG_CONFIG_HOME/Ryujinx/"
log d "Replacing placeholders in \"$ryujinxconf\""
sed -i 's#RETRODECKHOMEDIR#'"$rdhome"'#g' "$ryujinxconf"
create_dir "$logs_folder/ryujinx"
@ -729,11 +729,11 @@ prepare_component() {
fi
fi
# if [[ "$action" == "reset" ]] || [[ "$action" == "postmove" ]]; then # Run commands that apply to both resets and moves
# dir_prep "$bios_folder/switch/keys" "/var/config/Ryujinx/system"
# dir_prep "$bios_folder/switch/keys" "$XDG_CONFIG_HOME/Ryujinx/system"
# fi
if [[ "$action" == "postmove" ]]; then # Run only post-move commands
log d "Replacing placeholders in \"$ryujinxconf\""
sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' "$ryujinxconf" # This is an unfortunate one-off because set_setting_value does not currently support JSON
sed -i 's#RETRODECKHOMEDIR#'"$rdhome"'#g' "$ryujinxconf" # This is an unfortunate one-off because set_setting_value does not currently support JSON
fi
fi
@ -751,26 +751,26 @@ prepare_component() {
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "sdmc_directory" "$saves_folder/switch/yuzu/sdmc" "yuzu" "Data%20Storage"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "Paths\gamedirs\4\path" "$roms_folder/switch" "yuzu" "UI"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "Screenshots\screenshot_path" "$screenshots_folder" "yuzu" "UI"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/yuzu" "/var/config/yuzu"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/yuzu" "$XDG_CONFIG_HOME/yuzu"
else # Single-user actions
create_dir -d /var/config/yuzu/
cp -fvr "$config/yuzu/"* /var/config/yuzu/
create_dir -d "$XDG_CONFIG_HOME/yuzu/"
cp -fvr "$config/yuzu/"* "$XDG_CONFIG_HOME/yuzu/"
set_setting_value "$yuzuconf" "nand_directory" "$saves_folder/switch/yuzu/nand" "yuzu" "Data%20Storage"
set_setting_value "$yuzuconf" "sdmc_directory" "$saves_folder/switch/yuzu/sdmc" "yuzu" "Data%20Storage"
set_setting_value "$yuzuconf" "Paths\gamedirs\4\path" "$roms_folder/switch" "yuzu" "UI"
set_setting_value "$yuzuconf" "Screenshots\screenshot_path" "$screenshots_folder" "yuzu" "UI"
fi
# Shared actions
dir_prep "$saves_folder/switch/yuzu/nand" "/var/data/yuzu/nand"
dir_prep "$saves_folder/switch/yuzu/sdmc" "/var/data/yuzu/sdmc"
dir_prep "$bios_folder/switch/keys" "/var/data/yuzu/keys"
dir_prep "$bios_folder/switch/firmware" "/var/data/yuzu/nand/system/Contents/registered"
dir_prep "$logs_folder/yuzu" "/var/data/yuzu/log"
dir_prep "$screenshots_folder" "/var/data/yuzu/screenshots"
dir_prep "$mods_folder/Yuzu" "/var/data/yuzu/load"
dir_prep "$saves_folder/switch/yuzu/nand" "$XDG_DATA_HOME/yuzu/nand"
dir_prep "$saves_folder/switch/yuzu/sdmc" "$XDG_DATA_HOME/yuzu/sdmc"
dir_prep "$bios_folder/switch/keys" "$XDG_DATA_HOME/yuzu/keys"
dir_prep "$bios_folder/switch/firmware" "$XDG_DATA_HOME/yuzu/nand/system/Contents/registered"
dir_prep "$logs_folder/yuzu" "$XDG_DATA_HOME/yuzu/log"
dir_prep "$screenshots_folder" "$XDG_DATA_HOME/yuzu/screenshots"
dir_prep "$mods_folder/Yuzu" "$XDG_DATA_HOME/yuzu/load"
# removing dead symlinks as they were present in a past version
if [ -d $bios_folder/switch ]; then
find $bios_folder/switch -xtype l -exec rm {} \;
if [ -d "$bios_folder/switch" ]; then
find "$bios_folder/switch" -xtype l -exec rm {} \;
fi
# Reset default preset settings
@ -778,13 +778,13 @@ prepare_component() {
set_setting_value "$rd_conf" "yuzu" "$(get_setting_value "$rd_defaults" "yuzu" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit"
fi
if [[ "$action" == "postmove" ]]; then # Run only post-move commands
dir_prep "$bios_folder/switch/keys" "/var/data/yuzu/keys"
dir_prep "$bios_folder/switch/firmware" "/var/data/yuzu/nand/system/Contents/registered"
dir_prep "$saves_folder/switch/yuzu/nand" "/var/data/yuzu/nand"
dir_prep "$saves_folder/switch/yuzu/sdmc" "/var/data/yuzu/sdmc"
dir_prep "$logs_folder/yuzu" "/var/data/yuzu/log"
dir_prep "$screenshots_folder" "/var/data/yuzu/screenshots"
dir_prep "$mods_folder/Yuzu" "/var/data/yuzu/load"
dir_prep "$bios_folder/switch/keys" "$XDG_DATA_HOME/yuzu/keys"
dir_prep "$bios_folder/switch/firmware" "$XDG_DATA_HOME/yuzu/nand/system/Contents/registered"
dir_prep "$saves_folder/switch/yuzu/nand" "$XDG_DATA_HOME/yuzu/nand"
dir_prep "$saves_folder/switch/yuzu/sdmc" "$XDG_DATA_HOME/yuzu/sdmc"
dir_prep "$logs_folder/yuzu" "$XDG_DATA_HOME/yuzu/log"
dir_prep "$screenshots_folder" "$XDG_DATA_HOME/yuzu/screenshots"
dir_prep "$mods_folder/Yuzu" "$XDG_DATA_HOME/yuzu/load"
set_setting_value "$yuzuconf" "nand_directory" "$saves_folder/switch/yuzu/nand" "yuzu" "Data%20Storage"
set_setting_value "$yuzuconf" "sdmc_directory" "$saves_folder/switch/yuzu/sdmc" "yuzu" "Data%20Storage"
set_setting_value "$yuzuconf" "Paths\gamedirs\4\path" "$roms_folder/switch" "yuzu" "UI"
@ -800,8 +800,8 @@ prepare_component() {
log i "Prepearing XEMU"
log i "------------------------"
if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
rm -rf "/var/config/xemu"
rm -rf "/var/data/xemu"
rm -rf "$XDG_CONFIG_HOME/xemu"
rm -rf "$XDG_DATA_HOME/xemu"
create_dir -d "$multi_user_data_folder/$SteamAppUser/config/xemu/"
cp -fv "$config/xemu/xemu.toml" "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "screenshot_dir" "'$screenshots_folder'" "xemu" "General"
@ -809,12 +809,12 @@ prepare_component() {
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "flashrom_path" "'$bios_folder/Complex.bin'" "xemu" "sys.files"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "eeprom_path" "'$saves_folder/xbox/xemu/xbox-eeprom.bin'" "xemu" "sys.files"
set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "hdd_path" "'$bios_folder/xbox_hdd.qcow2'" "xemu" "sys.files"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/xemu" "/var/config/xemu" # Creating config folder in /var/config for consistentcy and linking back to original location where component will look
dir_prep "$multi_user_data_folder/$SteamAppUser/config/xemu" "/var/data/xemu/xemu"
dir_prep "$multi_user_data_folder/$SteamAppUser/config/xemu" "$XDG_CONFIG_HOME/xemu" # Creating config folder in $XDG_CONFIG_HOME for consistentcy and linking back to original location where component will look
dir_prep "$multi_user_data_folder/$SteamAppUser/config/xemu" "$XDG_DATA_HOME/xemu/xemu"
else # Single-user actions
rm -rf "/var/config/xemu"
rm -rf "/var/data/xemu"
dir_prep "/var/config/xemu" "/var/data/xemu/xemu" # Creating config folder in /var/config for consistentcy and linking back to original location where component will look
rm -rf "$XDG_CONFIG_HOME/xemu"
rm -rf "$XDG_DATA_HOME/xemu"
dir_prep "$XDG_CONFIG_HOME/xemu" "$XDG_DATA_HOME/xemu/xemu" # Creating config folder in $XDG_CONFIG_HOME for consistentcy and linking back to original location where component will look
cp -fv "$config/xemu/xemu.toml" "$xemuconf"
set_setting_value "$xemuconf" "screenshot_dir" "'$screenshots_folder'" "xemu" "General"
set_setting_value "$xemuconf" "bootrom_path" "'$bios_folder/mcpx_1.0.bin'" "xemu" "sys.files"
@ -848,8 +848,8 @@ prepare_component() {
log d "Figure out what Vita3k needs for multi-user"
else # Single-user actions
# NOTE: the component is writing in "." so it must be placed in the rw filesystem. A symlink of the binary is already placed in /app/bin/Vita3K
rm -rf "/var/config/Vita3K"
create_dir "/var/config/Vita3K"
rm -rf "$XDG_CONFIG_HOME/Vita3K"
create_dir "$XDG_CONFIG_HOME/Vita3K"
cp -fvr "$config/vita3k/config.yml" "$vita3kconf" # component config
cp -fvr "$config/vita3k/ux0" "$bios_folder/Vita3K/" # User config
set_setting_value "$vita3kconf" "pref-path" "$bios_folder/Vita3K/" "vita3k"
@ -878,45 +878,45 @@ prepare_component() {
create_dir "$rdhome/screenshots/mame-sa"
create_dir "$saves_folder/mame-sa/diff"
create_dir "/var/config/ctrlr"
create_dir "/var/config/mame/ini"
create_dir "/var/config/mame/cfg"
create_dir "/var/config/mame/inp"
create_dir "$XDG_CONFIG_HOME/ctrlr"
create_dir "$XDG_CONFIG_HOME/mame/ini"
create_dir "$XDG_CONFIG_HOME/mame/cfg"
create_dir "$XDG_CONFIG_HOME/mame/inp"
create_dir "/var/data/mame/plugin-data"
create_dir "/var/data/mame/hash"
create_dir "$XDG_DATA_HOME/mame/plugin-data"
create_dir "$XDG_DATA_HOME/mame/hash"
create_dir "$bios_folder/mame-sa/samples"
create_dir "/var/data/mame/assets/artwork"
create_dir "/var/data/mame/assets/fonts"
create_dir "/var/data/mame/assets/crosshair"
create_dir "/var/data/mame/plugins"
create_dir "/var/data/mame/assets/language"
create_dir "/var/data/mame/assets/software"
create_dir "/var/data/mame/assets/comments"
create_dir "/var/data/mame/assets/share"
create_dir "/var/data/mame/dats"
create_dir "/var/data/mame/folders"
create_dir "/var/data/mame/assets/cabinets"
create_dir "/var/data/mame/assets/cpanel"
create_dir "/var/data/mame/assets/pcb"
create_dir "/var/data/mame/assets/flyers"
create_dir "/var/data/mame/assets/titles"
create_dir "/var/data/mame/assets/ends"
create_dir "/var/data/mame/assets/marquees"
create_dir "/var/data/mame/assets/artwork-preview"
create_dir "/var/data/mame/assets/bosses"
create_dir "/var/data/mame/assets/logo"
create_dir "/var/data/mame/assets/scores"
create_dir "/var/data/mame/assets/versus"
create_dir "/var/data/mame/assets/gameover"
create_dir "/var/data/mame/assets/howto"
create_dir "/var/data/mame/assets/select"
create_dir "/var/data/mame/assets/icons"
create_dir "/var/data/mame/assets/covers"
create_dir "/var/data/mame/assets/ui"
create_dir "$XDG_DATA_HOME/mame/assets/artwork"
create_dir "$XDG_DATA_HOME/mame/assets/fonts"
create_dir "$XDG_DATA_HOME/mame/assets/crosshair"
create_dir "$XDG_DATA_HOME/mame/plugins"
create_dir "$XDG_DATA_HOME/mame/assets/language"
create_dir "$XDG_DATA_HOME/mame/assets/software"
create_dir "$XDG_DATA_HOME/mame/assets/comments"
create_dir "$XDG_DATA_HOME/mame/assets/share"
create_dir "$XDG_DATA_HOME/mame/dats"
create_dir "$XDG_DATA_HOME/mame/folders"
create_dir "$XDG_DATA_HOME/mame/assets/cabinets"
create_dir "$XDG_DATA_HOME/mame/assets/cpanel"
create_dir "$XDG_DATA_HOME/mame/assets/pcb"
create_dir "$XDG_DATA_HOME/mame/assets/flyers"
create_dir "$XDG_DATA_HOME/mame/assets/titles"
create_dir "$XDG_DATA_HOME/mame/assets/ends"
create_dir "$XDG_DATA_HOME/mame/assets/marquees"
create_dir "$XDG_DATA_HOME/mame/assets/artwork-preview"
create_dir "$XDG_DATA_HOME/mame/assets/bosses"
create_dir "$XDG_DATA_HOME/mame/assets/logo"
create_dir "$XDG_DATA_HOME/mame/assets/scores"
create_dir "$XDG_DATA_HOME/mame/assets/versus"
create_dir "$XDG_DATA_HOME/mame/assets/gameover"
create_dir "$XDG_DATA_HOME/mame/assets/howto"
create_dir "$XDG_DATA_HOME/mame/assets/select"
create_dir "$XDG_DATA_HOME/mame/assets/icons"
create_dir "$XDG_DATA_HOME/mame/assets/covers"
create_dir "$XDG_DATA_HOME/mame/assets/ui"
create_dir "$shaders_folder/mame/bgfx/"
dir_prep "$saves_folder/mame-sa/hiscore" "/var/config/mame/hiscore"
dir_prep "$saves_folder/mame-sa/hiscore" "$XDG_CONFIG_HOME/mame/hiscore"
cp -fvr "$config/mame/mame.ini" "$mameconf"
cp -fvr "$config/mame/ui.ini" "$mameuiconf"
cp -fvr "$config/mame/default.cfg" "$mamedefconf"
@ -944,17 +944,17 @@ prepare_component() {
log i "Prepearing GZDOOM"
log i "----------------------"
create_dir "/var/config/gzdoom"
create_dir "/var/data/gzdoom/audio/midi"
create_dir "/var/data/gzdoom/audio/fm_banks"
create_dir "/var/data/gzdoom/audio/soundfonts"
create_dir "$XDG_CONFIG_HOME/gzdoom"
create_dir "$XDG_DATA_HOME/gzdoom/audio/midi"
create_dir "$XDG_DATA_HOME/gzdoom/audio/fm_banks"
create_dir "$XDG_DATA_HOME/gzdoom/audio/soundfonts"
create_dir "$bios_folder/gzdoom"
cp -fvr "$config/gzdoom/gzdoom.ini" "/var/config/gzdoom"
cp -fvr "$config/gzdoom/gzdoom.ini" "$XDG_CONFIG_HOME/gzdoom"
sed -i 's#RETRODECKHOMEDIR#'"$rdhome"'#g' "/var/config/gzdoom/gzdoom.ini" # This is an unfortunate one-off because set_setting_value does not currently support JSON
sed -i 's#RETRODECKROMSDIR#'"$roms_folder"'#g' "/var/config/gzdoom/gzdoom.ini" # This is an unfortunate one-off because set_setting_value does not currently support JSON
sed -i 's#RETRODECKSAVESDIR#'"$saves_folder"'#g' "/var/config/gzdoom/gzdoom.ini" # This is an unfortunate one-off because set_setting_value does not currently support JSON
sed -i 's#RETRODECKHOMEDIR#'"$rdhome"'#g' "$XDG_CONFIG_HOME/gzdoom/gzdoom.ini" # This is an unfortunate one-off because set_setting_value does not currently support JSON
sed -i 's#RETRODECKROMSDIR#'"$roms_folder"'#g' "$XDG_CONFIG_HOME/gzdoom/gzdoom.ini" # This is an unfortunate one-off because set_setting_value does not currently support JSON
sed -i 's#RETRODECKSAVESDIR#'"$saves_folder"'#g' "$XDG_CONFIG_HOME/gzdoom/gzdoom.ini" # This is an unfortunate one-off because set_setting_value does not currently support JSON
fi
if [[ "$component" =~ ^(portmaster|all)$ ]]; then
@ -964,14 +964,14 @@ prepare_component() {
log i "Prepearing PortMaster"
log i "----------------------"
rm -rf "/var/data/PortMaster"
unzip "/app/retrodeck/PortMaster.zip" -d "/var/data/"
cp -f "/var/data/PortMaster/retrodeck/PortMaster.txt" "/var/data/PortMaster/PortMaster.sh"
chmod +x "/var/data/PortMaster/PortMaster.sh"
rm -rf "$XDG_DATA_HOME/PortMaster"
unzip "/app/retrodeck/PortMaster.zip" -d "$XDG_DATA_HOME/"
cp -f "$XDG_DATA_HOME/PortMaster/retrodeck/PortMaster.txt" "$XDG_DATA_HOME/PortMaster/PortMaster.sh"
chmod +x "$XDG_DATA_HOME/PortMaster/PortMaster.sh"
rm -f "$roms_folder/portmaster/PortMaster.sh"
install -Dm755 "/var/data/PortMaster/PortMaster.sh" "$roms_folder/portmaster/PortMaster.sh"
create_dir "/var/data/PortMaster/config/"
cp "$config/portmaster/config.json" "/var/data/PortMaster/config/config.json"
install -Dm755 "$XDG_DATA_HOME/PortMaster/PortMaster.sh" "$roms_folder/portmaster/PortMaster.sh"
create_dir "$XDG_DATA_HOME/PortMaster/config/"
cp "$config/portmaster/config.json" "$XDG_DATA_HOME/PortMaster/config/config.json"
fi
@ -981,14 +981,14 @@ prepare_component() {
log i "Prepearing Ruffle"
log i "----------------------"
rm -rf "/var/config/ruffle"
rm -rf "$XDG_CONFIG_HOME/ruffle"
# Ruffle creates a directory with the full rom paths in it, so this is necessary
# TODO: be aware of this when multi user support will be integrated for this component
dir_prep "$saves_folder/flash" "/var/data/ruffle/SharedObjects/localhost/$roms_folder/flash"
dir_prep "$saves_folder/flash" "$XDG_DATA_HOME/ruffle/SharedObjects/localhost/$roms_folder/flash"
if [[ "$action" == "postmove" ]]; then # Run only post-move commands
dir_prep "$saves_folder/flash" "/var/data/ruffle/SharedObjects/localhost/$roms_folder/flash"
dir_prep "$saves_folder/flash" "$XDG_DATA_HOME/ruffle/SharedObjects/localhost/$roms_folder/flash"
fi
fi

View file

@ -114,14 +114,14 @@ build_preset_list_options() {
preset="$1"
pretty_preset_name=${preset//_/ } # Preset name prettification
pretty_preset_name=$(echo $pretty_preset_name | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1') # Preset name prettification
pretty_preset_name=$(echo "$pretty_preset_name" | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1') # Preset name prettification
current_preset_settings=()
current_enabled_systems=()
current_disabled_systems=()
changed_systems=()
changed_presets=()
all_systems=()
local section_results=$(sed -n '/\['"$preset"'\]/, /\[/{ /\['"$preset"'\]/! { /\[/! p } }' $rd_conf | sed '/^$/d')
local section_results=$(sed -n '/\['"$preset"'\]/, /\[/{ /\['"$preset"'\]/! { /\[/! p } }' "$rd_conf" | sed '/^$/d')
while IFS= read -r config_line
do
@ -133,8 +133,8 @@ build_preset_list_options() {
elif [[ "$system_value" == "false" ]]; then
current_disabled_systems=("${current_disabled_systems[@]}" "$system_name")
fi
current_preset_settings=("${current_preset_settings[@]}" "$system_value" "$(make_name_pretty $system_name)" "$system_name")
echo "$system_value"^"$(make_name_pretty $system_name)"^"$system_name" >> "$godot_current_preset_settings"
current_preset_settings=("${current_preset_settings[@]}" "$system_value" "$(make_name_pretty "$system_name")" "$system_name")
echo "$system_value"^"$(make_name_pretty "$system_name")"^"$system_name" >> "$godot_current_preset_settings"
done < <(printf '%s\n' "$section_results")
}
@ -252,7 +252,7 @@ build_preset_config() {
log d "Applying presets: $presets_being_changed for system: $system_being_changed"
for current_preset in $presets_being_changed
do
local preset_section=$(sed -n '/\['"$current_preset"'\]/, /\[/{ /\['"$current_preset"'\]/! { /\[/! p } }' $rd_conf | sed '/^$/d')
local preset_section=$(sed -n '/\['"$current_preset"'\]/, /\[/{ /\['"$current_preset"'\]/! { /\[/! p } }' "$rd_conf" | sed '/^$/d')
while IFS= read -r system_line
do
local read_system_name=$(get_setting_name "$system_line")
@ -376,7 +376,7 @@ build_retrodeck_current_presets() {
do
if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it
if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") ]]; then # If the line is a section header
local current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name
local current_section=$(sed 's^[][]^^g' <<< "$current_setting_line") # Remove brackets from section name
else
if [[ ! ("$current_section" == "" || "$current_section" == "paths" || "$current_section" == "options" || "$current_section" == "cheevos" || "$current_section" == "cheevos_hardcore") ]]; then
local system_name=$(get_setting_name "$current_setting_line" "retrodeck") # Read the variable name from the current line
@ -387,7 +387,7 @@ build_retrodeck_current_presets() {
fi
fi
fi
done < $rd_conf
done < "$rd_conf"
}
fetch_all_presets() {
@ -417,7 +417,7 @@ fetch_all_presets() {
presets+=("$preset")
if $pretty_output; then
pretty_preset_name=${preset//_/ } # Preset name prettification
pretty_preset_name=$(echo $pretty_preset_name | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1') # Preset name prettification
pretty_preset_name=$(echo "$pretty_preset_name" | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1') # Preset name prettification
pretty_presets+=("$pretty_preset_name")
fi
fi
@ -433,7 +433,7 @@ fetch_all_presets() {
presets+=("$preset")
if $pretty_output; then
pretty_preset_name=${preset//_/ } # Preset name prettification
pretty_preset_name=$(echo $pretty_preset_name | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1') # Preset name prettification
pretty_preset_name=$(echo "$pretty_preset_name" | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1') # Preset name prettification
pretty_presets+=("$pretty_preset_name")
fi
fi

View file

@ -389,8 +389,8 @@ find_emulator() {
while IFS= read -r line; do
command_path=$(echo "$line" | sed -n 's/.*<entry>\(.*\)<\/entry>.*/\1/p')
# Check if the command specified by the variable 'command_path' exists and is executable
if [ -x "$(command -v $command_path)" ]; then
found_path=$command_path
if [ -x "$(command -v "$command_path")" ]; then
found_path="$command_path"
break
fi
done <<< "$(echo "$emulator_section" | xmllint --xpath "//rule[@type='systempath']/entry" - 2>/dev/null)"
@ -400,7 +400,7 @@ find_emulator() {
while IFS= read -r line; do
command_path=$(echo "$line" | sed -n 's/.*<entry>\(.*\)<\/entry>.*/\1/p')
if [ -x "$command_path" ]; then
found_path=$command_path
found_path="$command_path"
break
fi
done <<< "$(echo "$emulator_section" | xmllint --xpath "//rule[@type='staticpath']/entry" - 2>/dev/null)"
@ -466,4 +466,4 @@ find_system_by_extension() {
# Return the detected system
echo "$detected_system"
}
}

View file

@ -9,7 +9,7 @@ steam_sync() {
# USAGE: steam_sync
log "i" "Starting Steam Sync"
create_dir $steamsync_folder
create_dir "$steamsync_folder"
if [ ! -f "$srm_path" ]; then
log "e" "Steam ROM Manager configuration not initialized! Initializing now."