#!/bin/bash chmod +x "$0" set -x version=v1.5 check_for_updates() { # Set the URL to the GitHub API for the repository local api_url="https://api.github.com/repos/moraroy/NonSteamLaunchers-On-Steam-Deck/releases/latest" # Get the latest release tag from the GitHub API local latest_version=$(curl -s "$api_url" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') # Compare the version number in the script against the latest release tag if [ "$version" != "$latest_version" ]; then echo "A new version is available: $latest_version" # Download and replace the current script with the updated version from GitHub local download_url="https://github.com/moraroy/NonSteamLaunchers-On-Steam-Deck/archive/refs/tags/$latest_version.zip" wget "$download_url" -O /tmp/update.zip unzip -o /tmp/update.zip -d /tmp/ cp /tmp/NonSteamLaunchers-On-Steam-Deck-$latest_version/script.sh $HOME/Downloads/NonSteamLauncher.sh echo "Script updated to version $latest_version" # Terminate the outdated script pkill -f NonSteamLauncher.sh # Run the new script sh $HOME/Downloads/NonSteamLauncher.sh else echo "You are already running the latest version: $version" fi } check_for_updates # Set the paths to the launcher executables epic_games_launcher_path1="$HOME/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/pfx/drive_c/Program Files (x86)/Epic Games/Launcher/Portal/Binaries/Win32/EpicGamesLauncher.exe" epic_games_launcher_path2="$HOME/.local/share/Steam/steamapps/compatdata/EpicGamesLauncher/pfx/drive_c/Program Files (x86)/Epic Games/Launcher/Portal/Binaries/Win32/EpicGamesLauncher.exe" gog_galaxy_path1="$HOME/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/pfx/drive_c/Program Files (x86)/GOG Galaxy/GalaxyClient.exe" gog_galaxy_path2="$HOME/.local/share/Steam/steamapps/compatdata/GogGalaxyLauncher/pfx/drive_c/Program Files (x86)/GOG Galaxy/GalaxyClient.exe" origin_path1="$HOME/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/pfx/drive_c/Program Files (x86)/Origin/Origin.exe" origin_path2="$HOME/.local/share/Steam/steamapps/compatdata/OriginLauncher/pfx/drive_c/Program Files (x86)/Origin/Origin.exe" uplay_path1="$HOME/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/pfx/drive_c/Program Files (x86)/Ubisoft/Ubisoft Game Launcher/upc.exe" uplay_path2="$HOME/.local/share/Steam/steamapps/compatdata/UplayLauncher/pfx/drive_c/Program Files (x86)/Ubisoft/Ubisoft Game Launcher/upc.exe" battlenet_path1="$HOME/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/pfx/drive_c/Program Files (x86)/Battle.net/Battle.net Launcher.exe" battlenet_path2="$HOME/.local/share/Steam/steamapps/compatdata/Battle.netLauncher/pfx/drive_c/Program Files (x86)/Battle.net/Battle.net Launcher.exe" eaapp_path1="$HOME/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/pfx/drive_c/Program Files/Electronic Arts/EA Desktop/EA Desktop/EADesktop.exe" eaapp_path2="$HOME/.local/share/Steam/steamapps/compatdata/TheEAappLauncher/pfx/drive_c/Program Files/Electronic Arts/EA Desktop/EA Desktop/EADesktop.exe" amazongames_path1="$HOME/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/pfx/drive_c/users/steamuser/AppData/Local/Amazon Games/App/Amazon Games.exe" amazongames_path2="$HOME/.local/share/Steam/steamapps/compatdata/AmazonGamesLauncher/pfx/drive_c/users/steamuser/AppData/Local/Amazon Games/App/Amazon Games.exe" itchio_path1="$HOME/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/pfx/drive_c/users/steamuser/AppData/Local/itch/app-25.6.2/itch.exe" itchio_path2="$HOME/.local/share/Steam/steamapps/compatdata/itchioLauncher/pfx/drive_c/users/steamuser/AppData/Local/itch/app-25.6.2/itch.exe" legacygames_path1="$HOME/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/pfx/drive_c/Program Files/Legacy Games/Legacy Games Launcher/Legacy Games Launcher.exe" legacygames_path2="$HOME/.local/share/Steam/steamapps/compatdata/LegacyGamesLauncher/pfx/drive_c/Program Files/Legacy Games/Legacy Games Launcher/Legacy Games Launcher.exe" # Check if Epic Games Launcher is installed if [[ -f "$epic_games_launcher_path1" ]] || [[ -f "$epic_games_launcher_path2" ]]; then # Epic Games Launcher is installed epic_games_value="FALSE" epic_games_text="Epic Games ===> Installed" else # Epic Games Launcher is not installed epic_games_value="TRUE" epic_games_text="Epic Games" fi # Check if GOG Galaxy is installed if [[ -f "$gog_galaxy_path1" ]] || [[ -f "$gog_galaxy_path2" ]]; then # GOG Galaxy is installed gog_galaxy_value="FALSE" gog_galaxy_text="GOG Galaxy ===> Installed" else # GOG Galaxy is not installed gog_galaxy_value="TRUE" gog_galaxy_text="GOG Galaxy" fi # Check if Origin is installed if [[ -f "$origin_path1" ]] || [[ -f "$origin_path2" ]]; then # Origin is installed origin_value="FALSE" origin_text="Origin ===> Installed" else # Origin is not installed origin_value="TRUE" origin_text="Origin" fi # Check if Uplay is installed if [[ -f "$uplay_path1" ]] || [[ -f "$uplay_path2" ]]; then # Uplay is installed uplay_value="FALSE" uplay_text="Uplay ===> Installed" else # Uplay is not installed uplay_value="TRUE" uplay_text="Uplay" fi # Check if Battle.net is installed if [[ -f "$battlenet_path1" ]] || [[ -f "$battlenet_path2" ]]; then # Battle.net is installed battlenet_value="FALSE" battlenet_text="Battle.net ===> Installed" else # Battle.net is not installed battlenet_value="TRUE" battlenet_text="Battle.net" fi # Check if EA App is installed if [[ -f "$eaapp_path1" ]] || [[ -f "$eaapp_path2" ]]; then # EA App is installed eaapp_value="FALSE" eaapp_text="EA App ===> Installed" else # EA App is not installed eaapp_value="FALSE" eaapp_text="EA App" fi # Check if Amazon Games is installed if [[ -f "$amazongames_path1" ]] || [[ -f "$amazongames_path2" ]]; then # Amazon Games is installed amazongames_value="FALSE" amazongames_text="Amazon Games ===> Installed" else # Amazon Games is not installed amazongames_value="TRUE" amazongames_text="Amazon Games" fi # Check if itch.io is installed if [[ -f "$itchio_path1" ]] || [[ -f "$itchio_path2" ]]; then # itch.io is installed itchio_value="FALSE" itchio_text="itch.io ===> Installed" else # itch.io is not installed itchio_value="TRUE" itchio_text="itch.io" fi # Check if Legacy Games Launcher is installed if [[ -f "$legacygames_path1" ]] || [[ -f "$legacygames_path2" ]]; then # itch.io is installed legacygames_value="FALSE" legacygames_text="Legacy Games ===> Installed" else # itch.io is not installed legacygames_value="TRUE" legacygames_text="Legacy Games" fi # Display a list of options using zenity options=$(zenity --list --text="Which launchers do you want to download and install?" --checklist --column="$version" --column="The default is one App ID Installation" FALSE "Separate App IDs" $epic_games_value "$epic_games_text" $gog_galaxy_value "$gog_galaxy_text" $uplay_value "$uplay_text" $origin_value "$origin_text" $battlenet_value "$battlenet_text" $amazongames_value "$amazongames_text" $eaapp_value "$eaapp_text" $legacygames_value "$legacygames_text" $itchio_value "$itchio_text" --width=400 --height=388) # Check if the cancel button was clicked if [ $? -eq 1 ]; then # The cancel button was clicked echo "The cancel button was clicked" exit 1 fi # Check if no options were selected if [ -z "$options" ]; then # No options were selected zenity --error --text="No options were selected. The script will now exit." --width=200 --height=150 exit 1 fi # Check if the user selected to use separate app IDs if [[ $options == *"Separate App IDs"* ]]; then # User selected to use separate app IDs use_separate_appids=true else # User did not select to use separate app IDs use_separate_appids=false fi # Check if the user selected both Origin and EA App if [[ $options == *"Origin"* ]] && [[ $options == *"EA App"* ]] && [ "$use_separate_appids" = false ]; then # User selected both Origin and EA App without selecting separate app IDs zenity --error --text="You cannot select both Origin and EA App at the same time unless you select separate app IDs." --width=200 --height=150 exit 1 fi # Check if Origin is already installed if [[ -f "$origin_path1" ]] || [[ -f "$origin_path2" ]]; then # Origin is installed if [[ $options == *"EA App"* ]] && [ "$use_separate_appids" = false ]; then # User selected EA App without selecting separate app IDs zenity --error --text="You cannot install EA App because Origin is already installed. Please select separate app IDs if you want to install both." --width=200 --height=150 exit 1 fi fi # Check if EA App is already installed if [[ -f "$eaapp_path1" ]] || [[ -f "$eaapp_path2" ]]; then # EA App is installed if [[ $options == *"Origin"* ]] && [ "$use_separate_appids" = false ]; then # User selected Origin without selecting separate app IDs zenity --error --text="You cannot install Origin because EA App is already installed. Please select separate app IDs if you want to install both." --width=200 --height=150 exit 1 fi fi echo "0" echo "# Detecting and Installing GE-Proton" # check to make sure compatabilitytools.d exists and makes it if it doesnt if [ ! -d "$HOME/.steam/root/compatibilitytools.d" ]; then mkdir -p "$HOME/.steam/root/compatibilitytools.d" fi ( # Create NonSteamLaunchersInstallation subfolder in Downloads folder mkdir -p ~/Downloads/NonSteamLaunchersInstallation # Set the path to the Proton directory proton_dir=$(find ~/.steam/root/compatibilitytools.d -maxdepth 1 -type d -name "GE-Proton*" | sort -V | tail -n1) # Set the URLs to download GE-Proton from ge_proton_url1=https://github.com/GloriousEggroll/proton-ge-custom/releases/latest/download/GE-Proton.tar.gz ge_proton_url2=https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton8-1/GE-Proton8-1.tar.gz # Check if GE-Proton is installed if [ -z "$proton_dir" ]; then # Download GE-Proton using the first URL echo "Downloading GE-Proton using the first URL" wget $ge_proton_url1 -O ~/Downloads/NonSteamLaunchersInstallation/GE-Proton.tar.gz # Check if the download succeeded if [ $? -ne 0 ]; then # Download GE-Proton using the second URL echo "Downloading GE-Proton using the second URL" wget $ge_proton_url2 -O ~/Downloads/NonSteamLaunchersInstallation/GE-Proton.tar.gz fi # Check if either download succeeded if [ $? -eq 0 ]; then # Install GE-Proton echo "Installing GE-Proton" tar -xvf ~/Downloads/NonSteamLaunchersInstallation/GE-Proton.tar.gz -C ~/.steam/root/compatibilitytools.d/ proton_dir=$(find ~/.steam/root/compatibilitytools.d -maxdepth 1 -type d -name "GE-Proton*" | sort -V | tail -n1) else # Handle download failure echo "Failed to download GE-Proton" fi else # Check if installed version is the latest version installed_version=$(basename $proton_dir | sed 's/GE-Proton-//') latest_version=$(curl -s https://api.github.com/repos/GloriousEggroll/proton-ge-custom/releases/latest | grep tag_name | cut -d '"' -f 4) if [ "$installed_version" != "$latest_version" ]; then # Download GE-Proton using the first URL echo "Downloading GE-Proton using the first URL" wget $ge_proton_url1 -O ~/Downloads/NonSteamLaunchersInstallation/GE-Proton.tar.gz # Check if the download succeeded if [ $? -ne 0 ]; then # Download GE-Proton using the second URL echo "Downloading GE-Proton using the second URL" wget $ge_proton_url2 -O ~/Downloads/NonSteamLaunchersInstallation/GE-Proton.tar.gz fi # Check if either download succeeded if [ $? -eq 0 ]; then # Install GE-Proton echo "Installing GE-Proton" tar -xvf ~/Downloads/NonSteamLaunchersInstallation/GE-Proton.tar.gz -C ~/.steam/root/compatibilitytools.d/ proton_dir=$(find ~/.steam/root/compatibilitytools.d -maxdepth 1 -type d -name "GE-Proton*" | sort -V | tail -n1) else # Handle download failure echo "Failed to download GE-Proton" fi fi fi echo "10" echo "# Setting files in their place" # Set the appid for the non-Steam game appid=NonSteamLaunchers # Set the URL to download the MSI file from msi_url=https://launcher-public-service-prod06.ol.epicgames.com/launcher/api/installer/download/EpicGamesLauncherInstaller.msi # Set the path to save the MSI file to msi_file=~/Downloads/NonSteamLaunchersInstallation/EpicGamesLauncherInstaller.msi # Set the URL to download the second file from exe_url=https://webinstallers.gog-statics.com/download/GOG_Galaxy_2.0.exe # Set the path to save the second file to exe_file=~/Downloads/NonSteamLaunchersInstallation/GOG_Galaxy_2.0.exe # Set the URL to download the third file from ubi_url=https://ubi.li/4vxt9 # Set the path to save the third file to ubi_file=~/Downloads/NonSteamLaunchersInstallation/UplayInstaller.exe # Set the URL to download the fourth file from origin_url=https://taskinoz.com/downloads/OriginSetup-10.5.119.52718.exe # Set the path to save the fourth file to origin_file=~/Downloads/NonSteamLaunchersInstallation/OriginSetup-10.5.119.52718.exe # Set the URL to download the fifth file from battle_url=https://www.battle.net/download/getInstallerForGame?os=win # Set the path to save the fifth file to battle_file=~/Downloads/NonSteamLaunchersInstallation/BattleNetInstaller.exe # Set the URL to download the sixth file from amazon_url=https://download.amazongames.com/AmazonGamesSetup.exe # Set the path to save the sixth file to amazon_file=~/Downloads/NonSteamLaunchersInstallation/AmazonGamesSetup.exe # Set the URL to download the seventh file from eaapp_url=https://origin-a.akamaihd.net/EA-Desktop-Client-Download/installer-releases/EAappInstaller.exe # Set the path to save the seventh file to eaapp_file=~/Downloads/NonSteamLaunchersInstallation/EAappInstaller.exe # Set the URL to download the eighth file from itchio_url=https://itch.io/app/download?platform=windows # Set the path to save the eighth file to itchio_file=~/Downloads/NonSteamLaunchersInstallation/itch-setup.exe # Set the URL to download the ninth file from legacygames_url=https://cdn.legacygames.com/LegacyGamesLauncher/legacy-games-launcher-setup-1.10.0-x64-full.exe # Set the path to save the ninth file to legacygames_file=~/Downloads/NonSteamLaunchersInstallation/legacy-games-launcher-setup-1.10.0-x64-full.exe echo "20" echo "# Creating folders" # Create app id folder in compatdata folder if it doesn't exist and if the user selected to use a single app ID folder if [ "$use_separate_appids" = false ] && [ ! -d "$HOME/.local/share/Steam/steamapps/compatdata/$appid" ]; then mkdir -p "$HOME/.local/share/Steam/steamapps/compatdata/$appid" fi # Change working directory to Proton's cd $proton_dir # Set the STEAM_RUNTIME environment variable export STEAM_RUNTIME="$HOME/.steam/root/ubuntu12_32/steam-runtime/run.sh" # Set the STEAM_COMPAT_CLIENT_INSTALL_PATH environment variable export STEAM_COMPAT_CLIENT_INSTALL_PATH="~/.local/share/Steam" # Set the STEAM_COMPAT_DATA_PATH environment variable for the first file export STEAM_COMPAT_DATA_PATH=~/.local/share/Steam/steamapps/compatdata/$appid wait echo "30" echo "# Downloading/Installing Epic Games" # Check if the user selected Epic Games Launcher if [[ $options == *"Epic Games"* ]]; then # User selected Epic Games Launcher echo "User selected Epic Games" if [[ ! -f "$epic_games_launcher_path1" ]] && [[ ! -f "$epic_games_launcher_path2" ]]; then # Epic Games Launcher is not installed # Set the appid for the Epic Games Launcher if [ "$use_separate_appids" = true ]; then appid=EpicGamesLauncher else appid=NonSteamLaunchers fi # Create app id folder in compatdata folder if it doesn't exist if [ ! -d "$HOME/.local/share/Steam/steamapps/compatdata/$appid" ]; then mkdir -p "$HOME/.local/share/Steam/steamapps/compatdata/$appid" fi # Change working directory to Proton's cd $proton_dir # Set the STEAM_COMPAT_CLIENT_INSTALL_PATH environment variable export STEAM_COMPAT_CLIENT_INSTALL_PATH="~/.local/share/Steam" # Set the STEAM_COMPAT_DATA_PATH environment variable for Epic Games Launcher export STEAM_COMPAT_DATA_PATH=~/.local/share/Steam/steamapps/compatdata/$appid # Download MSI file if [ ! -f "$msi_file" ]; then echo "Downloading MSI file" wget $msi_url -O $msi_file fi # Run the MSI file using Proton with the /passive option echo "Running MSI file using Proton with the /passive option" "$STEAM_RUNTIME" "$proton_dir/proton" run MsiExec.exe /i "$msi_file" /qn fi fi # Wait for the MSI file to finish running wait echo "40" echo "# Downloading/Installing Gog Galaxy" # Check if the user selected GOG Galaxy if [[ $options == *"GOG Galaxy"* ]]; then # User selected GOG Galaxy echo "User selected GOG Galaxy" # Check if Gog Galaxy Launcher is already installed if [[ ! -f "$gog_galaxy_path1" ]] || [[ ! -f "$gog_galaxy_path2" ]]; then # Gog Galaxy Launcher is already installed echo "Gog Galaxy Launcher is already installed" # Gog Galaxy Launcher is not installed # Set the appid for the Gog Galaxy 2.0 if [ "$use_separate_appids" = true ]; then appid=GogGalaxyLauncher else appid=NonSteamLaunchers fi # Create app id folder in compatdata folder if it doesn't exist if [ ! -d "$HOME/.local/share/Steam/steamapps/compatdata/$appid" ]; then mkdir -p "$HOME/.local/share/Steam/steamapps/compatdata/$appid" fi # Change working directory to Proton's cd $proton_dir # Set the STEAM_COMPAT_CLIENT_INSTALL_PATH environment variable export STEAM_COMPAT_CLIENT_INSTALL_PATH="~/.local/share/Steam" # Set the STEAM_COMPAT_DATA_PATH environment variable for Epic Games Launcher export STEAM_COMPAT_DATA_PATH=~/.local/share/Steam/steamapps/compatdata/$appid # Download EXE file if [ ! -f "$exe_file" ]; then echo "Downloading EXE file" wget $exe_url -O $exe_file fi # Run the EXE file using Proton without the /passive option echo "Running EXE file using Proton without the /passive option" "$STEAM_RUNTIME" "$proton_dir/proton" run "$exe_file" & fi echo "45" echo "# Downloading/Installing Gog Galaxy" # Cancel & Exit the GOG Galaxy Setup Wizard while true; do if pgrep -f "GalaxySetup.tmp" > /dev/null; then pkill -f "GalaxySetup.tmp" break fi sleep 1 done # Navigate to %LocalAppData%\Temp cd "$HOME/.local/share/Steam/steamapps/compatdata/$appid/pfx/drive_c/users/steamuser/Temp" # Find the GalaxyInstaller_XXXXX folder and copy it to C:\Downloads galaxy_installer_folder=$(find . -maxdepth 1 -type d -name "GalaxyInstaller_*" | head -n1) cp -r "$galaxy_installer_folder" ~/Downloads/NonSteamLaunchersInstallation/ # Navigate to the C:\Downloads\GalaxyInstaller_XXXXX folder cd ~/Downloads/NonSteamLaunchersInstallation/"$(basename $galaxy_installer_folder)" # Run GalaxySetup.exe with the /VERYSILENT and /NORESTART options echo "Running GalaxySetup.exe with the /VERYSILENT and /NORESTART options" "$STEAM_RUNTIME" "$proton_dir/proton" run GalaxySetup.exe /VERYSILENT /NORESTART # Wait for the EXE file to finish running wait fi wait echo "50" echo "# Downloading/Installing Uplay" # Check if user selected Uplay if [[ $options == *"Uplay"* ]]; then # User selected Uplay echo "User selected Uplay" # Check if Uplay Launcher is installed if [[ ! -f "$uplay_path1" ]] || [[ ! -f "$uplay_path2" ]]; then # Set the appid for the Ubisoft Launcher if [ "$use_separate_appids" = true ]; then appid=UplayLauncher else appid=NonSteamLaunchers fi # Create app id folder in compatdata folder if it doesn't exist if [ ! -d "$HOME/.local/share/Steam/steamapps/compatdata/$appid" ]; then mkdir -p "$HOME/.local/share/Steam/steamapps/compatdata/$appid" fi # Change working directory to Proton's cd $proton_dir # Set the STEAM_COMPAT_CLIENT_INSTALL_PATH environment variable export STEAM_COMPAT_CLIENT_INSTALL_PATH="~/.local/share/Steam" # Set the STEAM_COMPAT_DATA_PATH environment variable for Epic Games Launcher export STEAM_COMPAT_DATA_PATH=~/.local/share/Steam/steamapps/compatdata/$appid # Download UBI file if [ ! -f "$ubi_file" ]; then echo "Downloading UBI file" wget $ubi_url -O $ubi_file fi fi # Run the UBI file using Proton with the /passive option echo "Running UBI file using Proton with the /passive option" "$STEAM_RUNTIME" "$proton_dir/proton" run "$ubi_file" /S fi # Wait for the UBI file to finish running wait echo "60" echo "# Downloading/Installing Origin" # Check if user selected Origin if [[ $options == *"Origin"* ]]; then # User selected Origin echo "User selected Origin" # Check if Origin Launcher is installed if [[ ! -f "$origin_path1" ]] || [[ ! -f "$origin_path2" ]]; then # Set the appid for the Origin Launcher if [ "$use_separate_appids" = true ]; then appid=OriginLauncher else appid=NonSteamLaunchers fi # Create app id folder in compatdata folder if it doesn't exist if [ ! -d "$HOME/.local/share/Steam/steamapps/compatdata/$appid" ]; then mkdir -p "$HOME/.local/share/Steam/steamapps/compatdata/$appid" fi # Change working directory to Proton's cd $proton_dir # Set the STEAM_COMPAT_CLIENT_INSTALL_PATH environment variable export STEAM_COMPAT_CLIENT_INSTALL_PATH="~/.local/share/Steam" # Set the STEAM_COMPAT_DATA_PATH environment variable for Epic Games Launcher export STEAM_COMPAT_DATA_PATH=~/.local/share/Steam/steamapps/compatdata/$appid # Download ORIGIN file if [ ! -f "$origin_file" ]; then echo "Downloading ORIGIN file" wget $origin_url -O $origin_file fi # Run the ORIGIN file using Proton with the /passive option echo "Running ORIGIN file using Proton with the /passive option" "$STEAM_RUNTIME" "$proton_dir/proton" run "$origin_file" /SILENT # Edit local.xml sed -i 's|| \n \n \n \n|' "$HOME/.local/share/Steam/steamapps/compatdata/$appid/pfx/drive_c/ProgramData/Origin/local.xml" # Terminate any processes with the name Origin.exe pkill Origin.exe # Wait for the ORIGIN file to finish running wait fi fi wait echo "70" echo "# Downloading/Installing Battle.net" # Check if user selected Battle.net if [[ $options == *"Battle.net"* ]]; then # User selected Battle.net echo "User selected Battle.net" # Check if Battlenet Launcher is installed if [[ ! -f "$battlenet_path1" ]] || [[ ! -f "$battlenet_path2" ]]; then # Set the appid for the Battlenet Launcher if [ "$use_separate_appids" = true ]; then appid=Battle.netLauncher else appid=NonSteamLaunchers fi # Create app id folder in compatdata folder if it doesn't exist if [ ! -d "$HOME/.local/share/Steam/steamapps/compatdata/$appid" ]; then mkdir -p "$HOME/.local/share/Steam/steamapps/compatdata/$appid" fi # Change working directory to Proton's cd $proton_dir # Set the STEAM_COMPAT_CLIENT_INSTALL_PATH environment variable export STEAM_COMPAT_CLIENT_INSTALL_PATH="~/.local/share/Steam" # Set the STEAM_COMPAT_DATA_PATH environment variable for Epic Games Launcher export STEAM_COMPAT_DATA_PATH=~/.local/share/Steam/steamapps/compatdata/$appid # Download BATTLE file if [ ! -f "$battle_file" ]; then echo "Downloading BATTLE file" wget $battle_url -O $battle_file fi # Run the BATTLE file using Proton with the /passive option echo "Running BATTLE file using Proton with the /passive option" "$STEAM_RUNTIME" "$proton_dir/proton" run "$battle_file" Battle.net-Setup.exe --lang=enUS --installpath="C:\Program Files (x86)\Battle.net" & while true; do if pgrep -f "Battle.net.exe" > /dev/null; then pkill -f "Battle.net.exe" break fi sleep 1 done fi fi wait echo "80" echo "# Downloading/Installing Amazon Games" # Check if user selected Amazon Games if [[ $options == *"Amazon Games"* ]]; then # User selected Amazon Games echo "User selected Amazon Games" # Check if Amazon Games Launcher is installed if [[ ! -f "$amazongames_path1" ]] || [[ ! -f "$amazongames_path2" ]]; then # Set the appid for the Amazon Games Launcher if [ "$use_separate_appids" = true ]; then appid=AmazonGamesLauncher else appid=NonSteamLaunchers fi # Create app id folder in compatdata folder if it doesn't exist if [ ! -d "$HOME/.local/share/Steam/steamapps/compatdata/$appid" ]; then mkdir -p "$HOME/.local/share/Steam/steamapps/compatdata/$appid" fi # Change working directory to Proton's cd $proton_dir # Set the STEAM_COMPAT_CLIENT_INSTALL_PATH environment variable export STEAM_COMPAT_CLIENT_INSTALL_PATH="~/.local/share/Steam" # Set the STEAM_COMPAT_DATA_PATH environment variable for Amazon Games Launcher export STEAM_COMPAT_DATA_PATH=~/.local/share/Steam/steamapps/compatdata/$appid # Download Amazon file if [ ! -f "$amazon_file" ]; then echo "Downloading Amazon file" wget $amazon_url -O $amazon_file fi # Run the Amazon file using Proton with the /passive option echo "Running Amazon file using Proton with the /passive option" "$STEAM_RUNTIME" "$proton_dir/proton" run "$amazon_file" & while true; do if pgrep -f "Amazon Games.exe" > /dev/null; then pkill -f "Amazon Games.exe" break fi sleep 1 done fi # Wait for the Amazon file to finish running wait fi wait echo "90" echo "# Downloading/Installing EA App" # Check if user selected EA App if [[ $options == *"EA App"* ]]; then # User selected EA App echo "User selected EA App" # Check if The EA App Launcher is installed if [[ ! -f "$eaapp_path1" ]] || [[ ! -f "$eaapp_path2" ]]; then # Set the appid for the EA App Launcher if [ "$use_separate_appids" = true ]; then appid=TheEAappLauncher else appid=NonSteamLaunchers fi # Create app id folder in compatdata folder if it doesn't exist if [ ! -d "$HOME/.local/share/Steam/steamapps/compatdata/$appid" ]; then mkdir -p "$HOME/.local/share/Steam/steamapps/compatdata/$appid" fi # Change working directory to Proton's cd $proton_dir # Set the STEAM_COMPAT_CLIENT_INSTALL_PATH environment variable export STEAM_COMPAT_CLIENT_INSTALL_PATH="~/.local/share/Steam" # Set the STEAM_COMPAT_DATA_PATH environment variable for Epic Games Launcher export STEAM_COMPAT_DATA_PATH=~/.local/share/Steam/steamapps/compatdata/$appid # Download EA App file if [ ! -f "$eaapp_file" ]; then echo "Downloading EA App file" wget $eaapp_url -O $eaapp_file fi # Run the EA App file using Proton with the /passive option echo "Running EA App file using Proton with the /passive option" "$STEAM_RUNTIME" "$proton_dir/proton" run "$eaapp_file" /quiet counter=0 while true; do if pgrep -f "EABackgroundService.exe" > /dev/null; then pkill -f "EABackgroundService.exe" break fi if pgrep -f "EALocalHostSvc.exe" > /dev/null; then pkill -f "EALocalHostSvc.exe" break fi sleep 1 counter=$((counter + 1)) if [ $counter -ge 10 ]; then break fi done # Wait for the EA App file to finish running wait fi fi wait echo "95" echo "# Downloading/Installing itch.io" # Check if the user selected itchio Launcher if [[ $options == *"itch.io"* ]]; then # User selected itchio Launcher echo "User selected itch.io" # Check if itchio Launcher is installed if [[ ! -f "$itchio_path1" ]] || [[ ! -f "$itchio_path2" ]]; then # Set the appid for the itchio Launcher if [ "$use_separate_appids" = true ]; then appid=itchioLauncher else appid=NonSteamLaunchers fi # Create app id folder in compatdata folder if it doesn't exist if [ ! -d "$HOME/.local/share/Steam/steamapps/compatdata/$appid" ]; then mkdir -p "$HOME/.local/share/Steam/steamapps/compatdata/$appid" fi # Change working directory to Proton's cd $proton_dir # Set the STEAM_COMPAT_CLIENT_INSTALL_PATH environment variable export STEAM_COMPAT_CLIENT_INSTALL_PATH="~/.local/share/Steam" # Set the STEAM_COMPAT_DATA_PATH environment variable for Epic Games Launcher export STEAM_COMPAT_DATA_PATH=~/.local/share/Steam/steamapps/compatdata/$appid # Download itchio file if [ ! -f "$itchio_file" ]; then echo "Downloading itchio file" wget $itchio_url -O $itchio_file fi fi # Run the itchio file using Proton with the /passive option echo "Running itchio file using Proton with the /passive option" "$STEAM_RUNTIME" "$proton_dir/proton" run "$itchio_file" fi wait echo "98" echo "# Downloading/Installing Legacy Games" # Check if user selected Legacy Games if [[ $options == *"Legacy Games"* ]]; then # User selected Legacy Games echo "User selected Legacy Games" if [[ ! -f "$legacygames_path1" ]] && [[ ! -f "$legacygames_path2" ]]; then # Legacy Games Launcher is not installed # Set the appid for the Legacy Games Launcher if [ "$use_separate_appids" = true ]; then appid=LegacyGamesLauncher else appid=NonSteamLaunchers fi # Create app id folder in compatdata folder if it doesn't exist if [ ! -d "$HOME/.local/share/Steam/steamapps/compatdata/$appid" ]; then mkdir -p "$HOME/.local/share/Steam/steamapps/compatdata/$appid" fi # Change working directory to Proton's cd $proton_dir # Set the STEAM_COMPAT_CLIENT_INSTALL_PATH environment variable export STEAM_COMPAT_CLIENT_INSTALL_PATH="~/.local/share/Steam" # Set the STEAM_COMPAT_DATA_PATH environment variable for Legacy Games Launcher export STEAM_COMPAT_DATA_PATH=~/.local/share/Steam/steamapps/compatdata/$appid # Download Legacy file if [ ! -f "$legacygames_file" ]; then echo "Downloading Legacy file" wget $legacygames_url -O $legacygames_file fi fi # Run the Legacy file using Proton with the /passive option echo "Running Legacy file using Proton with the /passive option" "$STEAM_RUNTIME" "$proton_dir/proton" run "$legacygames_file" /S fi # Wait for the Legacy file to finish running wait # Delete NonSteamLaunchersInstallation subfolder in Downloads folder rm -rf ~/Downloads/NonSteamLaunchersInstallation echo "100" echo "# Installation Complete - Steam will now restart. Your launchers will be in your library." ) | zenity --progress \ --title="Update Status" \ --text="Starting update..." --width=450 --height=350\ --percentage=0 if [ "$?" = -1 ] ; then zenity --error \ --text="Update canceled." fi wait #Checking Files For Shortcuts and Setting Directories For Shortcuts if [[ -f "$epic_games_launcher_path1" ]]; then # Epic Games Launcher is installed at path 1 epicshortcutdirectory="\"$epic_games_launcher_path1\"" epiclaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/\" %command%" elif [[ -f "$epic_games_launcher_path2" ]]; then # Epic Games Launcher is installed at path 2 epicshortcutdirectory="\"$epic_games_launcher_path2\"" epiclaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/EpicGamesLauncher/\" %command%" fi if [[ -f "$gog_galaxy_path1" ]]; then # Gog Galaxy Launcher is installed at path 1 gogshortcutdirectory="\"$gog_galaxy_path1\"" goglaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/\" %command%" elif [[ -f "$epic_games_launcher_path2" ]]; then # Gog Galaxy Launcher is installed at path 2 gogshortcutdirectory="\"$gog_galaxy_path2\"" goglaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/EpicGamesLauncher/\" %command%" fi if [[ -f "$origin_path1" ]]; then # Origin Launcher is installed at path 1 originshortcutdirectory="\"$origin_path1\"" originlaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/\" %command%" elif [[ -f "$origin_path2" ]]; then # Origin Launcher is installed at path 2 originshortcutdirectory="\"$origin_path2\"" originlaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/EpicGamesLauncher/\" %command%" fi if [[ -f "$uplay_path1" ]]; then # Uplay Launcher is installed at path 1 uplayshortcutdirectory="\"$uplay_path1\"" uplaylaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/\" %command%" elif [[ -f "$origin_path2" ]]; then # Uplay Launcher is installed at path 2 uplayshortcutdirectory="\"$uplay_path2\"" uplaylaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/EpicGamesLauncher/\" %command%" fi if [[ -f "$battlenet_path1" ]]; then # Battlenet Launcher is installed at path 1 battlenetshortcutdirectory="\"$battlenet_path1\"" battlenetlaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/\" %command%" elif [[ -f "$battlenet_path2" ]]; then # Battlenet Launcher is installed at path 2 battlenetshortcutdirectory="\"$battlenet_path2\"" battlenetlaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/EpicGamesLauncher/\" %command%" fi if [[ -f "$eaapp_path1" ]]; then # EA App Launcher is installed at path 1 eaappshortcutdirectory="\"$eaapp_path1\"" eaapplaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/\" %command%" elif [[ -f "$eaapp_path2" ]]; then # EA App Launcher is installed at path 2 eaappshortcutdirectory="\"$eaapp_path2\"" eaapplaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/EpicGamesLauncher/\" %command%" fi if [[ -f "$amazongames_path1" ]]; then # Amazon Games Launcher is installed at path 1 amazonshortcutdirectory="\"$amazongames_path1\"" amazonlaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/\" %command%" elif [[ -f "$amazongames_path2" ]]; then # Amazon Games Launcher is installed at path 2 amazonshortcutdirectory="\"$amazongames_path2\"" amazonlaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/EpicGamesLauncher/\" %command%" fi if [[ -f "$itchio_path1" ]]; then # itchio Launcher is installed at path 1 itchioshortcutdirectory="\"$itchio_path1\"" itchiolaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/\" %command%" elif [[ -f "$itchio_path2" ]]; then # itchio Launcher is installed at path 2 itchioshortcutdirectory="\"$itchio_path2\"" itchiolaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/EpicGamesLauncher/\" %command%" fi if [[ -f "$legacygames_path1" ]]; then # Legacy Games Launcher is installed at path 1 legacyshortcutdirectory="\"$legacygames_path1\"" legacylaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/\" %command%" elif [[ -f "$legacygames_path2" ]]; then # Legacy Games Launcher is installed at path 2 legacyshortcutdirectory="\"$legacygames_path2\"" legacylaunchoptions="STEAM_COMPAT_DATA_PATH=\"/home/deck/.local/share/Steam/steamapps/compatdata/EpicGamesLauncher/\" %command%" fi # Set the download directory download_dir=~/Downloads/NonSteamLaunchersInstallation # Download the latest release of the vdf library from the Python Package Index download_url="https://files.pythonhosted.org/packages/44/7f/74192f47d67c8bf3c47bf0d8487b3457614c2c98d58b6617721d217f3f79/vdf-3.4.tar.gz" wget -P "$download_dir" "$download_url" # Extract the downloaded tar.gz file tar -xvf "$download_dir"/vdf-*.tar.gz -C "$download_dir" # Change to the extracted directory cd "$download_dir"/vdf-*/ export PYTHONPATH="$download_dir/lib/python3.10/site-packages:$PYTHONPATH" # Install the vdf library python setup.py install --prefix=~/Downloads/NonSteamLaunchersInstallation # Set the PYTHONPATH environment variable export PYTHONPATH="$download_dir/lib/python3.10/site-packages:$PYTHONPATH" shortcuts_vdf_path=$(find ~/.steam/root/userdata -type d -name config -not -path "*/0/*" -not -path "*/anonymous/*" -exec find {} -name shortcuts.vdf \;) # Create a backup of the shortcuts.vdf file cp "$shortcuts_vdf_path" "$shortcuts_vdf_path.bak" # Run the Python script to create a new entry for a Steam shortcut python -c " import vdf import subprocess import os # Load the shortcuts.vdf file with open('$shortcuts_vdf_path', 'rb') as f: shortcuts = vdf.binary_load(f) # Define the path of the Launchers epicshortcutdirectory = '$epicshortcutdirectory' gogshortcutdirectory = '$gogshortcutdirectory' originshortcutdirectory = '$originshortcutdirectory' uplayshortcutdirectory = '$uplayshortcutdirectory' battlenetshortcutdirectory = '$battlenetshortcutdirectory' eaappshortcutdirectory = '$eaappshortcutdirectory' amazonshortcutdirectory = '$amazonshortcutdirectory' itchioshortcutdirectory = '$itchioshortcutdirectory' legacyshortcutdirectory = '$legacyshortcutdirectory' if epicshortcutdirectory != '': # Create a new entry for the Steam shortcut new_entry = { 'appid': '', 'AppName': 'Epic Games', 'Exe': '$epicshortcutdirectory', 'StartDir': '$epicshortcutdirectory', 'icon': '', 'ShortcutPath': '', 'LaunchOptions': '$epiclaunchoptions', 'IsHidden': 0, 'AllowDesktopConfig': 1, 'AllowOverlay': 1, 'OpenVR': 0, 'Devkit': 0, 'DevkitGameID': '', 'LastPlayTime': 0, 'tags': { '0': 'favorite' } } # Add the new entry to the shortcuts dictionary entry_exists = False if type(shortcuts['shortcuts']) == list: for entry in shortcuts['shortcuts']: if entry['AppName'] == new_entry['AppName'] and entry['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: shortcuts['shortcuts'].append(new_entry) elif type(shortcuts['shortcuts']) == dict: for key in shortcuts['shortcuts'].keys(): if shortcuts['shortcuts'][key]['AppName'] == new_entry['AppName'] and shortcuts['shortcuts'][key]['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: # Find the highest key value max_key = max(int(key) for key in shortcuts['shortcuts'].keys()) # Add the new entry with a key value one higher than the current maximum shortcuts['shortcuts'][str(max_key + 1)] = new_entry if gogshortcutdirectory != '': # Create a new entry for the Steam shortcut new_entry = { 'appid': '', 'AppName': 'Gog Galaxy', 'Exe': '$gogshortcutdirectory', 'StartDir': '$gogshortcutdirectory', 'icon': '', 'ShortcutPath': '', 'LaunchOptions': '$goglaunchoptions', 'IsHidden': 0, 'AllowDesktopConfig': 1, 'AllowOverlay': 1, 'OpenVR': 0, 'Devkit': 0, 'DevkitGameID': '', 'LastPlayTime': 0, 'tags': { '0': 'favorite' } } # Add the new entry to the shortcuts dictionary entry_exists = False if type(shortcuts['shortcuts']) == list: for entry in shortcuts['shortcuts']: if entry['AppName'] == new_entry['AppName'] and entry['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: shortcuts['shortcuts'].append(new_entry) elif type(shortcuts['shortcuts']) == dict: for key in shortcuts['shortcuts'].keys(): if shortcuts['shortcuts'][key]['AppName'] == new_entry['AppName'] and shortcuts['shortcuts'][key]['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: # Find the highest key value max_key = max(int(key) for key in shortcuts['shortcuts'].keys()) # Add the new entry with a key value one higher than the current maximum shortcuts['shortcuts'][str(max_key + 1)] = new_entry if uplayshortcutdirectory != '': # Create a new entry for the Steam shortcut new_entry = { 'appid': '', 'AppName': 'Ubisoft Connect', 'Exe': '$uplayshortcutdirectory', 'StartDir': '$uplayshortcutdirectory', 'icon': '', 'ShortcutPath': '', 'LaunchOptions': '$uplaylaunchoptions', 'IsHidden': 0, 'AllowDesktopConfig': 1, 'AllowOverlay': 1, 'OpenVR': 0, 'Devkit': 0, 'DevkitGameID': '', 'LastPlayTime': 0, 'tags': { '0': 'favorite' } } # Add the new entry to the shortcuts dictionary entry_exists = False if type(shortcuts['shortcuts']) == list: for entry in shortcuts['shortcuts']: if entry['AppName'] == new_entry['AppName'] and entry['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: shortcuts['shortcuts'].append(new_entry) elif type(shortcuts['shortcuts']) == dict: for key in shortcuts['shortcuts'].keys(): if shortcuts['shortcuts'][key]['AppName'] == new_entry['AppName'] and shortcuts['shortcuts'][key]['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: # Find the highest key value max_key = max(int(key) for key in shortcuts['shortcuts'].keys()) # Add the new entry with a key value one higher than the current maximum shortcuts['shortcuts'][str(max_key + 1)] = new_entry if originshortcutdirectory != '': # Create a new entry for the Steam shortcut new_entry = { 'appid': '', 'AppName': 'Origin', 'Exe': '$originshortcutdirectory', 'StartDir': '$originshortcutdirectory', 'icon': '', 'ShortcutPath': '', 'LaunchOptions': '$originlaunchoptions', 'IsHidden': 0, 'AllowDesktopConfig': 1, 'AllowOverlay': 1, 'OpenVR': 0, 'Devkit': 0, 'DevkitGameID': '', 'LastPlayTime': 0, 'tags': { '0': 'favorite' } } # Add the new entry to the shortcuts dictionary entry_exists = False if type(shortcuts['shortcuts']) == list: for entry in shortcuts['shortcuts']: if entry['AppName'] == new_entry['AppName'] and entry['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: shortcuts['shortcuts'].append(new_entry) elif type(shortcuts['shortcuts']) == dict: for key in shortcuts['shortcuts'].keys(): if shortcuts['shortcuts'][key]['AppName'] == new_entry['AppName'] and shortcuts['shortcuts'][key]['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: # Find the highest key value max_key = max(int(key) for key in shortcuts['shortcuts'].keys()) # Add the new entry with a key value one higher than the current maximum shortcuts['shortcuts'][str(max_key + 1)] = new_entry if battlenetshortcutdirectory != '': # Create a new entry for the Steam shortcut new_entry = { 'appid': '', 'AppName': 'Battle.net', 'Exe': '$battlenetshortcutdirectory', 'StartDir': '$battlenetshortcutdirectory', 'icon': '', 'ShortcutPath': '', 'LaunchOptions': '$battlenetlaunchoptions', 'IsHidden': 0, 'AllowDesktopConfig': 1, 'AllowOverlay': 1, 'OpenVR': 0, 'Devkit': 0, 'DevkitGameID': '', 'LastPlayTime': 0, 'tags': { '0': 'favorite' } } # Add the new entry to the shortcuts dictionary entry_exists = False if type(shortcuts['shortcuts']) == list: for entry in shortcuts['shortcuts']: if entry['AppName'] == new_entry['AppName'] and entry['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: shortcuts['shortcuts'].append(new_entry) elif type(shortcuts['shortcuts']) == dict: for key in shortcuts['shortcuts'].keys(): if shortcuts['shortcuts'][key]['AppName'] == new_entry['AppName'] and shortcuts['shortcuts'][key]['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: # Find the highest key value max_key = max(int(key) for key in shortcuts['shortcuts'].keys()) # Add the new entry with a key value one higher than the current maximum shortcuts['shortcuts'][str(max_key + 1)] = new_entry if eaappshortcutdirectory != '': # Create a new entry for the Steam shortcut new_entry = { 'appid': '', 'AppName': 'The EA App', 'Exe': '$eaappshortcutdirectory', 'StartDir': '$eaappshortcutdirectory', 'icon': '', 'ShortcutPath': '', 'LaunchOptions': '$eaapplaunchoptions', 'IsHidden': 0, 'AllowDesktopConfig': 1, 'AllowOverlay': 1, 'OpenVR': 0, 'Devkit': 0, 'DevkitGameID': '', 'LastPlayTime': 0, 'tags': { '0': 'favorite' } } # Add the new entry to the shortcuts dictionary entry_exists = False if type(shortcuts['shortcuts']) == list: for entry in shortcuts['shortcuts']: if entry['AppName'] == new_entry['AppName'] and entry['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: shortcuts['shortcuts'].append(new_entry) elif type(shortcuts['shortcuts']) == dict: for key in shortcuts['shortcuts'].keys(): if shortcuts['shortcuts'][key]['AppName'] == new_entry['AppName'] and shortcuts['shortcuts'][key]['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: # Find the highest key value max_key = max(int(key) for key in shortcuts['shortcuts'].keys()) # Add the new entry with a key value one higher than the current maximum shortcuts['shortcuts'][str(max_key + 1)] = new_entry if amazonshortcutdirectory != '': # Create a new entry for the Steam shortcut new_entry = { 'appid': '', 'AppName': 'Amazon Games', 'Exe': '$amazonshortcutdirectory', 'StartDir': '$amazonshortcutdirectory', 'icon': '', 'ShortcutPath': '', 'LaunchOptions': '$amazonlaunchoptions', 'IsHidden': 0, 'AllowDesktopConfig': 1, 'AllowOverlay': 1, 'OpenVR': 0, 'Devkit': 0, 'DevkitGameID': '', 'LastPlayTime': 0, 'tags': { '0': 'favorite' } } # Add the new entry to the shortcuts dictionary entry_exists = False if type(shortcuts['shortcuts']) == list: for entry in shortcuts['shortcuts']: if entry['AppName'] == new_entry['AppName'] and entry['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: shortcuts['shortcuts'].append(new_entry) elif type(shortcuts['shortcuts']) == dict: for key in shortcuts['shortcuts'].keys(): if shortcuts['shortcuts'][key]['AppName'] == new_entry['AppName'] and shortcuts['shortcuts'][key]['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: # Find the highest key value max_key = max(int(key) for key in shortcuts['shortcuts'].keys()) # Add the new entry with a key value one higher than the current maximum shortcuts['shortcuts'][str(max_key + 1)] = new_entry if itchioshortcutdirectory != '': # Create a new entry for the Steam shortcut new_entry = { 'appid': '', 'AppName': 'Itch.io', 'Exe': '$itchioshortcutdirectory', 'StartDir': '$itchioshortcutdirectory', 'icon': '', 'ShortcutPath': '', 'LaunchOptions': '$itchiolaunchoptions', 'IsHidden': 0, 'AllowDesktopConfig': 1, 'AllowOverlay': 1, 'OpenVR': 0, 'Devkit': 0, 'DevkitGameID': '', 'LastPlayTime': 0, 'tags': { '0': 'favorite' } } # Add the new entry to the shortcuts dictionary entry_exists = False if type(shortcuts['shortcuts']) == list: for entry in shortcuts['shortcuts']: if entry['AppName'] == new_entry['AppName'] and entry['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: shortcuts['shortcuts'].append(new_entry) elif type(shortcuts['shortcuts']) == dict: for key in shortcuts['shortcuts'].keys(): if shortcuts['shortcuts'][key]['AppName'] == new_entry['AppName'] and shortcuts['shortcuts'][key]['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: # Find the highest key value max_key = max(int(key) for key in shortcuts['shortcuts'].keys()) # Add the new entry with a key value one higher than the current maximum shortcuts['shortcuts'][str(max_key + 1)] = new_entry if legacyshortcutdirectory != '': # Create a new entry for the Steam shortcut new_entry = { 'appid': '', 'AppName': 'Legacy Games', 'Exe': '$legacyshortcutdirectory', 'StartDir': '$legacyshortcutdirectory', 'icon': '', 'ShortcutPath': '', 'LaunchOptions': '$legacylaunchoptions', 'IsHidden': 0, 'AllowDesktopConfig': 1, 'AllowOverlay': 1, 'OpenVR': 0, 'Devkit': 0, 'DevkitGameID': '', 'LastPlayTime': 0, 'tags': { '0': 'favorite' } } # Add the new entry to the shortcuts dictionary entry_exists = False if type(shortcuts['shortcuts']) == list: for entry in shortcuts['shortcuts']: if entry['AppName'] == new_entry['AppName'] and entry['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: shortcuts['shortcuts'].append(new_entry) elif type(shortcuts['shortcuts']) == dict: for key in shortcuts['shortcuts'].keys(): if shortcuts['shortcuts'][key]['AppName'] == new_entry['AppName'] and shortcuts['shortcuts'][key]['Exe'] == new_entry['Exe']: entry_exists = True break if not entry_exists: # Find the highest key value max_key = max(int(key) for key in shortcuts['shortcuts'].keys()) # Add the new entry with a key value one higher than the current maximum shortcuts['shortcuts'][str(max_key + 1)] = new_entry # Save the updated shortcuts dictionary to the shortcuts.vdf file with open('$shortcuts_vdf_path', 'wb') as f: vdf.binary_dump(shortcuts, f)" # Delete NonSteamLaunchersInstallation subfolder in Downloads folder rm -rf ~/Downloads/NonSteamLaunchersInstallation # Detach script from Steam process nohup sh -c 'sleep 10; /usr/bin/steam' & # Close all instances of Steam killall steam