MAJOR UPDATE

~Introducing "NSLGameScanner.service" automatically adds your games for you in correct Steam Deck format and keeps them there permanently until you uninstall that game. HOW TO USE: Install a game from your launcher and then restart steam or go to game mode or restart your deck. (Currently Supports Epic Games and Ubisoft Connect) more to come very soon!
~ARTWORK! ARTWORK! ARTWORK! FOR EVERYONE AND EVERYTHING...Launchers...Games... and Supported Streaming Sites
~NonSteamLaunchers NOW SUPPORTS MULTIPLE STEAM ACCOUNTS...hopefully
~Fixed SD card Path to reflect the path now from 3.5+, the script should dynamically find everyones uuid sd card path.
~fixed maxdepth -1 issue in regard to finding the config file
~removed WINE_COPY Command from battle.net
~iforgot what else i changed
This commit is contained in:
Roy 2024-01-17 04:10:45 -08:00 committed by GitHub
parent f03ba94e1c
commit ae6403926a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -22,7 +22,7 @@ download_dir="${logged_in_home}/Downloads/NonSteamLaunchersInstallation"
exec >> "${logged_in_home}/Downloads/NonSteamLaunchers-install.log" 2>&1 exec >> "${logged_in_home}/Downloads/NonSteamLaunchers-install.log" 2>&1
# Version number (major.minor) # Version number (major.minor)
version=v3.00 version=v3.2
# TODO: tighten logic to check whether major/minor version is up-to-date via `-eq`, `-lt`, or `-gt` operators # TODO: tighten logic to check whether major/minor version is up-to-date via `-eq`, `-lt`, or `-gt` operators
# Check repo releases via GitHub API then display current stable version # Check repo releases via GitHub API then display current stable version
@ -525,6 +525,16 @@ function CheckInstallationDirectory {
vkplay_move_value="FALSE" vkplay_move_value="FALSE"
fi } fi }
#Get SD Card Path
get_sd_path() {
# This assumes that the SD card is mounted under /run/media/deck/
local sd_path=$(df | grep '/run/media/deck/' | awk '{print $6}')
echo $sd_path
}
# Check which app IDs are installed # Check which app IDs are installed
CheckInstallations CheckInstallations
CheckInstallationDirectory CheckInstallationDirectory
@ -661,7 +671,7 @@ function StartFreshFunction {
folder_names=("EpicGamesLauncher" "GogGalaxyLauncher" "UplayLauncher" "OriginLauncher" "Battle.netLauncher" "TheEAappLauncher" "AmazonGamesLauncher" "itchioLauncher" "LegacyGamesLauncher" "HumbleGamesLauncher" "IndieGalaLauncher" "RockstarGamesLauncher" "GlyphLauncher" "MinecraftLauncher" "PlaystationPlusLauncher" "DMMGameLauncher" "VKPlayLauncher") folder_names=("EpicGamesLauncher" "GogGalaxyLauncher" "UplayLauncher" "OriginLauncher" "Battle.netLauncher" "TheEAappLauncher" "AmazonGamesLauncher" "itchioLauncher" "LegacyGamesLauncher" "HumbleGamesLauncher" "IndieGalaLauncher" "RockstarGamesLauncher" "GlyphLauncher" "MinecraftLauncher" "PlaystationPlusLauncher" "DMMGameLauncher" "VKPlayLauncher")
# Define an array of app IDs # Define an array of app IDs
app_ids=("3772819390" "4294900670" "4063097571" "3786021133" "3448088735" "3923904787" "3440562512" "2948446662" "3303169468" "3595505624" "4272271078" "3259996605" "2588786779" "4090616647" "3494943831") app_ids=("3772819390" "4294900670" "4063097571" "3786021133" "3448088735" "3923904787" "3440562512" "2948446662" "3303169468" "3595505624" "4272271078" "3259996605" "2588786779" "4090616647" "3494943831" "2390200925" "4253976432" "2221882453" "2296676888" "2486751858" "3974004104" "3811372789" "3788101956" "3782277090" "3640061468" "3216372511" "2882622939" "2800812206" "2580882702")
# Iterate over each folder name in the folder_names array # Iterate over each folder name in the folder_names array
for folder in "${folder_names[@]}"; do for folder in "${folder_names[@]}"; do
@ -758,6 +768,18 @@ function StartFreshFunction {
rm -rf "/run/media/mmcblk0p1/DMMGameLauncher/" rm -rf "/run/media/mmcblk0p1/DMMGameLauncher/"
rm -rf "/run/media/mmcblk0p1/VKPlayLauncher/" rm -rf "/run/media/mmcblk0p1/VKPlayLauncher/"
rm -rf ${logged_in_home}/Downloads/NonSteamLaunchersInstallation rm -rf ${logged_in_home}/Downloads/NonSteamLaunchersInstallation
rm -rf ${logged_in_home}/.config/systemd/user/Modules
rm -rf ${logged_in_home}/.config/systemd/user/env_vars
rm -rf ${logged_in_home}/.config/systemd/user/NSLGameScanner.py
# Delete the service file
rm -rf ${logged_in_home}/.config/systemd/user/nslgamescanner.service
# Remove the symlink
unlink /home/deck/.config/systemd/user/default.target.wants/nslgamescanner.service
# Reload the systemd user instance
systemctl --user daemon-reload
# Exit the script with exit code 0 to indicate success # Exit the script with exit code 0 to indicate success
exit 0 exit 0
@ -768,7 +790,7 @@ if [[ $options == "Start Fresh" ]] || [[ $selected_launchers == "Start Fresh" ]]
# The Start Fresh button was clicked or the Start Fresh option was passed as a command line argument # The Start Fresh button was clicked or the Start Fresh option was passed as a command line argument
if [ ${#args[@]} -eq 0 ]; then if [ ${#args[@]} -eq 0 ]; then
# No command line arguments were provided, so display the zenity window # No command line arguments were provided, so display the zenity window
if zenity --question --text="aaahhh it always feels good to start fresh :) but...This will delete the App ID folders you installed inside the steamapps/compatdata/ directory as well as the Shader Cache associated with them in the steamapps/shadercache directory. This means anything youve installed (launchers or games) WITHIN THIS SCRIPT will be deleted if you have them there. Everything will be wiped. Are you sure?" --width=300 --height=260; then if zenity --question --text="aaahhh it always feels good to start fresh :) but...This will delete the App ID folders you installed inside the steamapps/compatdata/ directory as well as the Shader Cache associated with them in the steamapps/shadercache directory. The nslgamescanner.service will also be terminated at /.config/systemd/user/ This means anything youve installed (launchers or games) WITHIN THIS SCRIPT will be deleted if you have them there. Everything will be wiped. Are you sure?" --width=300 --height=260; then
# The user clicked the "Yes" button, so call the StartFreshFunction # The user clicked the "Yes" button, so call the StartFreshFunction
StartFreshFunction StartFreshFunction
# If the Start Fresh function was called, set an environment variable # If the Start Fresh function was called, set an environment variable
@ -1063,328 +1085,47 @@ if [[ $options == "Uninstall" ]]; then
exit exit
fi fi
if [[ $options == "Move to SD Card" ]]; then
# The Move to SD Card button was clicked
# Check which app IDs are installed
# Add similar checks for other app IDs here
move_to_sd() {
local launcher_id=$1
local original_dir="${logged_in_home}/.local/share/Steam/steamapps/compatdata/${launcher_id}"
local sd_path=$(get_sd_path)
local new_dir="${sd_path}/${launcher_id}"
# Resolve symbolic link to its target
if [[ -L "${original_dir}" ]]; then
original_dir=$(readlink "${original_dir}")
fi
if [[ -d "${original_dir}" ]] && [[ $move_options == *"${launcher_id}"* ]]; then
mv "${original_dir}" "${new_dir}"
ln -s "${new_dir}" "${original_dir}"
fi
}
if [[ $options == "Move to SD Card" ]]; then
CheckInstallationDirectory CheckInstallationDirectory
move_options=$(zenity --list --text="Which app IDs do you want to move to the SD card?" --checklist --column="Select" --column="App ID" $nonsteamlauncher_move_value "NonSteamLaunchers" $epicgameslauncher_move_value "EpicGamesLauncher" $goggalaxylauncher_move_value "GogGalaxyLauncher" $originlauncher_move_value "OriginLauncher" $uplaylauncher_move_value "UplayLauncher" $battlenetlauncher_move_value "Battle.netLauncher" $eaapplauncher_move_value "TheEAappLauncher" $amazongameslauncher_move_value "AmazonGamesLauncher" $itchiolauncher_move_value "itchioLauncher" $legacygameslauncher_move_value "LegacyGamesLauncher" $humblegameslauncher_move_value "HumbleGamesLauncher" $indiegalalauncher_move_value "IndieGalaLauncher" $rockstargameslauncher_move_value "RockstarGamesLauncher" $glyphlauncher_move_value "GlyphLauncher" $minecraftlauncher_move_value "MinecraftLauncher" $dmmlauncher_move_value "DMMGameLauncher" $vkplaylauncher_move_value "VKPlayLauncher" --width=335 --height=524) move_options=$(zenity --list --text="Which launcher IDs do you want to move to the SD card?" --checklist --column="Select" --column="Launcher ID" $nonsteamlauncher_move_value "NonSteamLaunchers" $epicgameslauncher_move_value "EpicGamesLauncher" $goggalaxylauncher_move_value "GogGalaxyLauncher" $originlauncher_move_value "OriginLauncher" $uplaylauncher_move_value "UplayLauncher" $battlenetlauncher_move_value "Battle.netLauncher" $eaapplauncher_move_value "TheEAappLauncher" $amazongameslauncher_move_value "AmazonGamesLauncher" $itchiolauncher_move_value "itchioLauncher" $legacygameslauncher_move_value "LegacyGamesLauncher" $humblegameslauncher_move_value "HumbleGamesLauncher" $indiegalalauncher_move_value "IndieGalaLauncher" $rockstargameslauncher_move_value "RockstarGamesLauncher" $glyphlauncher_move_value "GlyphLauncher" $minecraftlauncher_move_value "MinecraftLauncher" $pspluslauncher_move_value "PlaystationPlusLauncher" $dmmlauncher_move_value "DMMGameLauncher" $vkplaylauncher_move_value "VKPlayLauncher" --width=335 --height=524)
# Check if the cancel button was clicked
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
# The OK button was clicked
# Display a message to the user indicating that the operation was successful
zenity --info --text="The selected directories have been moved to the SD card and symbolic links have been created." --width=200 --height=150 zenity --info --text="The selected directories have been moved to the SD card and symbolic links have been created." --width=200 --height=150
IFS="|" read -ra selected_launchers <<< "$move_options"
for launcher in "${selected_launchers[@]}"; do
move_to_sd "$launcher"
done
fi fi
# Set the path to the new directory on the SD card # TODO: verify non-zero exit is necessary
new_dir="/run/media/mmcblk0p1"
# Check if NonSteamLaunchers is installed
if [[ -d "${logged_in_home}/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers" ]]; then
# NonSteamLaunchers is installed
original_dir="${logged_in_home}/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers"
else
# NonSteamLaunchers is not installed
original_dir=""
fi
# Check if the user selected to move NonSteamLaunchers
if [[ $move_options == *"NonSteamLaunchers"* ]] && [[ -n $original_dir ]]; then
# Move the NonSteamLaunchers directory to the SD card
mv "$original_dir" "$new_dir/NonSteamLaunchers"
# Create a symbolic link to the new directory
ln -s "$new_dir/NonSteamLaunchers" "$original_dir"
fi
# Check if EpicGamesLauncher is installed
if [[ -d "${logged_in_home}/.local/share/Steam/steamapps/compatdata/EpicGamesLauncher" ]]; then
# EpicGamesLauncher is installed
original_dir="${logged_in_home}/.local/share/Steam/steamapps/compatdata/EpicGamesLauncher"
else
# EpicGamesLauncher is not installed
original_dir=""
fi
# Check if the user selected to move EpicGamesLauncher
if [[ $move_options == *"EpicGamesLauncher"* ]] && [[ -n $original_dir ]]; then
# Move the EpicGamesLauncher directory to the SD card
mv "$original_dir" "$new_dir/EpicGamesLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/EpicGamesLauncher" "$original_dir"
fi
# Check if GogGalaxyLauncher is installed
if [[ -d "${logged_in_home}/.local/share/Steam/steamapps/compatdata/GogGalaxyLauncher" ]]; then
# GogGalaxyLauncher is installed
original_dir="${logged_in_home}/.local/share/Steam/steamapps/compatdata/GogGalaxyLauncher"
else
# GogGalaxyLauncher is not installed
original_dir=""
fi
# Check if the user selected to move GogGalaxyLauncher
if [[ $move_options == *"GogGalaxyLauncher"* ]] && [[ -n $original_dir ]]; then
# Move the GogGalaxyLauncher directory to the SD card
mv "$original_dir" "$new_dir/GogGalaxyLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/GogGalaxyLauncher" "$original_dir"
fi
# Check if OriginLauncher is installed
if [[ -d "${logged_in_home}/.local/share/Steam/steamapps/compatdata/OriginLauncher" ]]; then
# OriginLauncher is installed
original_dir="${logged_in_home}/.local/share/Steam/steamapps/compatdata/OriginLauncher"
else
# OriginLauncher is not installed
original_dir=""
fi
# Check if the user selected to move OriginLauncher
if [[ $move_options == *"OriginLauncher"* ]] && [[ -n $original_dir ]]; then
# Move the OriginLauncher directory to the SD card
mv "$original_dir" "$new_dir/OriginLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/OriginLauncher" "$original_dir"
fi
# Check if UplayLauncher is installed
if [[ -d "${logged_in_home}/.local/share/Steam/steamapps/compatdata/UplayLauncher" ]]; then
# UplayLauncher is installed
original_dir="${logged_in_home}/.local/share/Steam/steamapps/compatdata/UplayLauncher"
else
# UplayLauncher is not installed
original_dir=""
fi
# Check if the user selected to move UplayLauncher
if [[ $move_options == *"UplayLauncher"* ]] && [[ -n $original_dir ]]; then
# Move the UplayLauncher directory to the SD card
mv "$original_dir" "$new_dir/UplayLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/UplayLauncher" "$original_dir"
fi
# Check if Battle.netLauncher is installed
if [[ -d "${logged_in_home}/.local/share/Steam/steamapps/compatdata/Battle.netLauncher" ]]; then
# Battle.netLauncher is installed
original_dir="${logged_in_home}/.local/share/Steam/steamapps/compatdata/Battle.netLauncher"
else
# Battle.netLauncher is not installed
original_dir=""
fi
# Check if the user selected to move Battle.netLauncher
if [[ $move_options == *"Battle.netLauncher"* ]] && [[ -n $original_dir ]]; then
# Move the Battle.netLauncher directory to the SD card
mv "$original_dir" "$new_dir/Battle.netLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/Battle.netLauncher" "$original_dir"
fi
# Check if TheEAappLauncher is installed
if [[ -d "${logged_in_home}/.local/share/Steam/steamapps/compatdata/TheEAappLauncher" ]]; then
# TheEAappLauncher is installed
original_dir="${logged_in_home}/.local/share/Steam/steamapps/compatdata/TheEAappLauncher"
else
# TheEAappLauncher is not installed
original_dir=""
fi
# Check if the user selected to move TheEAappLauncher
if [[ $move_options == *"TheEAappLauncher"* ]] && [[ -n $original_dir ]]; then
# Move the TheEAappLauncher directory to the SD card
mv "$original_dir" "$new_dir/TheEAappLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/TheEAappLauncher" "$original_dir"
fi
# Check if AmazonGamesLauncher is installed
if [[ -d "${logged_in_home}/.local/share/Steam/steamapps/compatdata/AmazonGamesLauncher" ]]; then
# AmazonGamesLauncher is installed
original_dir="${logged_in_home}/.local/share/Steam/steamapps/compatdata/AmazonGamesLauncher"
else
# AmazonGamesLauncher is not installed
original_dir=""
fi
# Check if the user selected to move AmazonGamesLauncher
if [[ $move_options == *"AmazonGamesLauncher"* ]] && [[ -n $original_dir ]]; then
# Move the AmazonGamesLauncher directory to the SD card
mv "$original_dir" "$new_dir/AmazonGamesLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/AmazonGamesLauncher" "$original_dir"
fi
# Check if itchioLauncher is installed
if [[ -d "${logged_in_home}/.local/share/Steam/steamapps/compatdata/itchioLauncher" ]]; then
# itchioLauncher is installed
original_dir="${logged_in_home}/.local/share/Steam/steamapps/compatdata/itchioLauncher"
else
# itchioLauncher is not installed
original_dir=""
fi
# Check if the user selected to move itchioLauncher
if [[ $move_options == *"itchioLauncher"* ]] && [[ -n $original_dir ]]; then
# Move the itchioLauncher directory to the SD card
mv "$original_dir" "$new_dir/itchioLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/itchioLauncher" "$original_dir"
fi
# Check if LegacyGamesLauncher is installed
if [[ -d "${logged_in_home}/.local/share/Steam/steamapps/compatdata/LegacyGamesLauncher" ]]; then
# LegacyGamesLauncher is installed
original_dir="${logged_in_home}/.local/share/Steam/steamapps/compatdata/LegacyGamesLauncher"
else
# LegacyGamesLauncher is not installed
original_dir=""
fi
# Check if the user selected to move LegacyGamesLauncher
if [[ $move_options == *"LegacyGamesLauncher"* ]] && [[ -n $original_dir ]]; then
# Move the LegacyGamesLauncher directory to the SD card
mv "$original_dir" "$new_dir/LegacyGamesLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/LegacyGamesLauncher" "$original_dir"
fi
# Check if HumbleGamesLauncher is installed
if [[ -d "${logged_in_home}/.local/share/Steam/steamapps/compatdata/HumbleGamesLauncher" ]]; then
# HumbleGamesLauncher is installed
original_dir="${logged_in_home}/.local/share/Steam/steamapps/compatdata/HumbleGamesLauncher"
else
# HumbleGamesLauncher is not installed
original_dir=""
fi
# Check if the user selected to move HumbleGamesLauncher
if [[ $move_options == *"HumbleGamesLauncher"* ]] && [[ -n $original_dir ]]; then
# Move the HumbleGamesLauncher directory to the SD card
mv "$original_dir" "$new_dir/HumbleGamesLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/HumbleGamesLauncher" "$original_dir"
fi
# Check if IndieGalaLauncher is installed
if [[ -d "${logged_in_home}/.local/share/Steam/steamapps/compatdata/IndieGalaLauncher" ]]; then
# IndieGalaLauncher is installed
original_dir="${logged_in_home}/.local/share/Steam/steamapps/compatdata/IndieGalaLauncher"
else
# Indie Gala Launcher is not installed
original_dir=""
fi
# Check if the user selected to move IndieGalaLauncher
if [[ $move_options == *"IndieGalaLauncher"* ]] && [[ -n $original_dir ]]; then
# Move the Indie GalaLauncher directory to the SD card
mv "$original_dir" "$new_dir/IndieGalaLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/IndieGalaLauncher" "$original_dir"
fi
# Check if RockstarGamesLauncher is installed
if [[ -d "${logged_in_home}/.local/share/Steam/steamapps/compatdata/RockstarGamesLauncher" ]]; then
# RockstarGamesLauncher is installed
original_dir="${logged_in_home}/.local/share/Steam/steamapps/compatdata/RockstarGamesLauncher"
else
# Rockstar Games Launcher is not installed
original_dir=""
fi
# Check if the user selected to move RockstarGamesLauncher
if [[ $move_options == *"RockstarGamesLauncher"* ]] && [[ -n $original_dir ]]; then
# Move the Rockstar Games Launcher directory to the SD card
mv "$original_dir" "$new_dir/RockstarGamesLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/RockstarGamesLauncher" "$original_dir"
fi
# Check if Glyph is installed
if [[ -d "${logged_in_home}/.local/share/Steam/steamapps/compatdata/GlyphLauncher" ]]; then
# Glyph is installed
original_dir="${logged_in_home}/.local/share/Steam/steamapps/compatdata/GlyphLauncher"
else
# Glyph is not installed
original_dir=""
fi
# Check if the user selected to move Glyph
if [[ $move_options == *"GlyphLauncher"* ]] && [[ -n $original_dir ]]; then
# Move the Glyph directory to the SD card
mv "$original_dir" "$new_dir/GlyphLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/GlyphLauncher" "$original_dir"
fi
# Check if Minecraft is installed
if [[ -d "${logged_in_home}/.local/share/Steam/steamapps/compatdata/MinecraftLauncher" ]]; then
# Minecraft is installed
original_dir="${logged_in_home}/.local/share/Steam/steamapps/compatdata/MinecraftLauncher"
else
# Minecraft is not installed
original_dir=""
fi
# Check if the user selected to move Minecraft
if [[ $move_options == *"MinecraftLauncher"* ]] && [[ -n $original_dir ]]; then
# Move the Glyph directory to the SD card
mv "$original_dir" "$new_dir/MinecraftLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/MinecraftLauncher" "$original_dir"
fi
# Check if the user selected to move Playstation
if [[ $move_options == *"Playstation Plus"* ]] && [[ -n $original_dir ]]; then
# Move the Playstation directory to the SD card
mv "$original_dir" "$new_dir/PlaystationPlusLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/PlaystationPlusLauncher" "$original_dir"
fi
# Check if the user selected to move DMM Games
if [[ $move_options == *"DMM Games"* ]] && [[ -n $original_dir ]]; then
# Move the DMM Games directory to the SD card
mv "$original_dir" "$new_dir/DMMGameLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/DMMGameLauncher" "$original_dir"
fi
# Check if the user selected to move VK Play
if [[ $move_options == *"VK Play"* ]] && [[ -n $original_dir ]]; then
# Move the VK Play directory to the SD card
mv "$original_dir" "$new_dir/VKPlayLauncher"
# Create a symbolic link to the new directory
ln -s "$new_dir/VKPlayLauncher" "$original_dir"
fi
# TODO: verfiy non-zero exit is necessary
# ! Why the non-zero return? # ! Why the non-zero return?
# Exit the script # Exit the script
exit 1 exit 1
fi fi
# Check if the user clicked the "Find Games" button # Check if the user clicked the "Find Games" button
if [[ $options == "Find Games" ]]; then if [[ $options == "Find Games" ]]; then
# The Find Games button was clicked # The Find Games button was clicked
@ -2486,17 +2227,25 @@ zenity --progress \
wait wait
# Initialize the env_vars file
> ${logged_in_home}/.config/systemd/user/env_vars
# Checking Files For Shortcuts and Setting Directories For Shortcuts # Checking Files For Shortcuts and Setting Directories For Shortcuts
if [[ -f "$epic_games_launcher_path1" ]]; then if [[ -f "$epic_games_launcher_path1" ]]; then
# Epic Games Launcher is installed at path 1 # Epic Games Launcher is installed at path 1
epicshortcutdirectory="\"$epic_games_launcher_path1\" -opengl" epicshortcutdirectory="\"$epic_games_launcher_path1\" -opengl"
epiclaunchoptions="STEAM_COMPAT_DATA_PATH=\"${logged_in_home}/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/\" %command%" epiclaunchoptions="STEAM_COMPAT_DATA_PATH=\"${logged_in_home}/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/\" %command%"
epicstartingdir="\"$(dirname "$epic_games_launcher_path1")\"" epicstartingdir="\"$(dirname "$epic_games_launcher_path1")\""
echo "export epic_games_launcher=NonSteamLaunchers" >> ${logged_in_home}/.config/systemd/user/env_vars
echo "Epic Games Launcher found at path 1"
elif [[ -f "$epic_games_launcher_path2" ]]; then elif [[ -f "$epic_games_launcher_path2" ]]; then
# Epic Games Launcher is installed at path 2 # Epic Games Launcher is installed at path 2
epicshortcutdirectory="\"$epic_games_launcher_path2\"" epicshortcutdirectory="\"$epic_games_launcher_path2\""
epiclaunchoptions="STEAM_COMPAT_DATA_PATH=\"${logged_in_home}/.local/share/Steam/steamapps/compatdata/EpicGamesLauncher/\" %command%" epiclaunchoptions="STEAM_COMPAT_DATA_PATH=\"${logged_in_home}/.local/share/Steam/steamapps/compatdata/EpicGamesLauncher/\" %command%"
epicstartingdir="\"$(dirname "$epic_games_launcher_path2")\"" epicstartingdir="\"$(dirname "$epic_games_launcher_path2")\""
echo "export epic_games_launcher=EpicGamesLauncher" >> ${logged_in_home}/.config/systemd/user/env_vars
echo "Epic Games Launcher found at path 2"
fi fi
if [[ -f "$gog_galaxy_path1" ]]; then if [[ -f "$gog_galaxy_path1" ]]; then
@ -2528,22 +2277,26 @@ if [[ -f "$uplay_path1" ]]; then
uplayshortcutdirectory="\"$uplay_path1\"" uplayshortcutdirectory="\"$uplay_path1\""
uplaylaunchoptions="STEAM_COMPAT_DATA_PATH=\"${logged_in_home}/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/\" %command%" uplaylaunchoptions="STEAM_COMPAT_DATA_PATH=\"${logged_in_home}/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/\" %command%"
uplaystartingdir="\"$(dirname "$uplay_path1")\"" uplaystartingdir="\"$(dirname "$uplay_path1")\""
echo "export ubisoft_connect_launcher=NonSteamLaunchers" >> ${logged_in_home}/.config/systemd/user/env_vars
echo "Ubisoft Connect Launcher found at path 1"
elif [[ -f "$uplay_path2" ]]; then elif [[ -f "$uplay_path2" ]]; then
# Uplay Launcher is installed at path 2 # Uplay Launcher is installed at path 2
uplayshortcutdirectory="\"$uplay_path2\"" uplayshortcutdirectory="\"$uplay_path2\""
uplaylaunchoptions="STEAM_COMPAT_DATA_PATH=\"${logged_in_home}/.local/share/Steam/steamapps/compatdata/UplayLauncher/\" %command%" uplaylaunchoptions="STEAM_COMPAT_DATA_PATH=\"${logged_in_home}/.local/share/Steam/steamapps/compatdata/UplayLauncher/\" %command%"
uplaystartingdir="\"$(dirname "$uplay_path2")\"" uplaystartingdir="\"$(dirname "$uplay_path2")\""
echo "export ubisoft_connect_launcher=UplayLauncher" >> ${logged_in_home}/.config/systemd/user/env_vars
echo "Ubisoft Connect Launcher found at path 1"
fi fi
if [[ -f "$battlenet_path1" ]]; then if [[ -f "$battlenet_path1" ]]; then
# Battlenet Launcher is installed at path 1 # Battlenet Launcher is installed at path 1
battlenetshortcutdirectory="\"$battlenet_path1\"" battlenetshortcutdirectory="\"$battlenet_path1\""
battlenetlaunchoptions="WINE_SIMULATE_WRITECOPY=1 %command% STEAM_COMPAT_DATA_PATH=\"${logged_in_home}/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/\" %command%" battlenetlaunchoptions="STEAM_COMPAT_DATA_PATH=\"${logged_in_home}/.local/share/Steam/steamapps/compatdata/NonSteamLaunchers/\" %command%"
battlenetstartingdir="\"$(dirname "$battlenet_path1")\"" battlenetstartingdir="\"$(dirname "$battlenet_path1")\""
elif [[ -f "$battlenet_path2" ]]; then elif [[ -f "$battlenet_path2" ]]; then
# Battlenet Launcher is installed at path 2 # Battlenet Launcher is installed at path 2
battlenetshortcutdirectory="\"$battlenet_path2\"" battlenetshortcutdirectory="\"$battlenet_path2\""
battlenetlaunchoptions="WINE_SIMULATE_WRITECOPY=1 %command% STEAM_COMPAT_DATA_PATH=\"${logged_in_home}/.local/share/Steam/steamapps/compatdata/Battle.netLauncher/\" %command%" battlenetlaunchoptions="STEAM_COMPAT_DATA_PATH=\"${logged_in_home}/.local/share/Steam/steamapps/compatdata/Battle.netLauncher/\" %command%"
battlenetstartingdir="\"$(dirname "$battlenet_path2")\"" battlenetstartingdir="\"$(dirname "$battlenet_path2")\""
fi fi
@ -2801,13 +2554,13 @@ export PYTHONPATH="${download_dir}/lib/python${python_version}/site-packages/:$P
# Set the default Steam directory # Set the default Steam directory
steam_dir="${logged_in_home}/.local/share/Steam" steam_dir="${logged_in_home}/.local/share/Steam"
# Check if the config.vdf file exists # Check if the loginusers.vdf file exists
if [[ -f "${steam_dir}/config/config.vdf" ]]; then if [[ -f "${logged_in_home}/.steam/root/config/loginusers.vdf" ]]; then
# Get the steamid of the currently logged in user # Extract the block of text for the most recent user
steamid=$(grep -oP 'SteamID"\s+"\K[0-9]+' "${steam_dir}/config/config.vdf" | head -n 1) most_recent_user=$(sed -n '/"users"/,/"MostRecent" "1"/p' "${logged_in_home}/.steam/root/config/loginusers.vdf")
# Print out the value of steamid for debugging purposes # Extract the SteamID from the block of text for the most recent user
echo "steamid: $steamid" steamid=$(echo "$most_recent_user" | grep -o '[0-9]\{17\}')
# Convert steamid to steamid3 # Convert steamid to steamid3
steamid3=$((steamid - 76561197960265728)) steamid3=$((steamid - 76561197960265728))
@ -2815,35 +2568,21 @@ if [[ -f "${steam_dir}/config/config.vdf" ]]; then
# Initialize the userdata_folder variable # Initialize the userdata_folder variable
userdata_folder="" userdata_folder=""
# Initialize the most_recent variable # Directly map steamid3 to userdata folder
most_recent=0 userdata_folder="/home/deck/.steam/root/userdata/${steamid3}"
# TODO: `find` would likely be safer than globbing # Check if userdata_folder exists
# Loop through all the userdata folders if [[ -d "$userdata_folder" ]]; then
for USERDATA_FOLDER in "${logged_in_home}"/.steam/root/userdata/*; do echo "Found userdata folder for current user: $userdata_folder"
# Check if the current userdata folder is not the "0" or "anonymous" folder else
if [[ "$USERDATA_FOLDER" != *"/0" ]] && [[ "$USERDATA_FOLDER" != *"/anonymous" ]]; then echo "Could not find userdata folder for current user"
# Get the access time of the current userdata folder fi
access_time=$(stat -c %X "$USERDATA_FOLDER")
# Extract steamid3 from userdata folder name
userdata_steamid3=$(basename "$USERDATA_FOLDER")
# Check if userdata_steamid3 matches steamid3 and if access time is more recent than most recent access time
if [[ $userdata_steamid3 -eq $steamid3 ]] && [[ $access_time -gt $most_recent ]]; then
# The access time of current userdata folder is more recent and steamid3 matches
# Set userdata_folder variable
userdata_folder="$USERDATA_FOLDER"
# Update most_recent variable
most_recent=$access_time
fi
fi
done
else else
echo "Could not find config.vdf file" echo "Could not find loginusers.vdf file"
fi fi
# Check if userdata folder was found # Check if userdata folder was found
if [[ -n "$userdata_folder" ]]; then if [[ -n "$userdata_folder" ]]; then
# Userdata folder was found # Userdata folder was found
@ -2858,7 +2597,7 @@ if [[ -n "$userdata_folder" ]]; then
cp "$shortcuts_vdf_path" "$shortcuts_vdf_path.bak" cp "$shortcuts_vdf_path" "$shortcuts_vdf_path.bak"
else else
# Find config directory for current user # Find config directory for current user
config_dir=$(find "$userdata_folder" -type d -name config) config_dir=$(find "$userdata_folder" -maxdepth 1 -type d -name config)
# Check if config_dir is not empty # Check if config_dir is not empty
if [[ -n "$config_dir" ]]; then if [[ -n "$config_dir" ]]; then
@ -2922,6 +2661,9 @@ else
echo "Could not find $controller_config_path" echo "Could not find $controller_config_path"
fi fi
# TODO: relocate to standalone python script # TODO: relocate to standalone python script
# ! editorconfig will likely break this since bash uses tabs and python needs 4 spaces # ! editorconfig will likely break this since bash uses tabs and python needs 4 spaces
# Run the Python script to create a new entry for a Steam shortcut # Run the Python script to create a new entry for a Steam shortcut
@ -2980,6 +2722,7 @@ websites_str = '$custom_websites_str'
custom_websites = websites_str.split(', ') custom_websites = websites_str.split(', ')
START_FRESH = '$START_FRESH' START_FRESH = '$START_FRESH'
app_ids = [] app_ids = []
@ -2995,12 +2738,10 @@ app_id_to_name = {}
def create_new_entry(shortcutdirectory, appname, launchoptions, startingdir): def create_new_entry(shortcutdirectory, appname, launchoptions, startingdir):
if shortcutdirectory != '' and launchoptions != '': if shortcutdirectory != '' and launchoptions != '':
exe = f'"{shortcutdirectory}"' exe = f'"{shortcutdirectory}"'
if shortcutdirectory != chromedirectory: appid = get_steam_shortcut_id(exe, appname)
appid = get_steam_shortcut_id(exe, appname) app_ids.append(appid)
app_ids.append(appid) app_id_to_name[appid] = appname
app_id_to_name[appid] = appname
else:
appid = None
# Create a new entry for the Steam shortcut # Create a new entry for the Steam shortcut
new_entry = { new_entry = {
@ -3008,7 +2749,7 @@ def create_new_entry(shortcutdirectory, appname, launchoptions, startingdir):
'appname': appname, 'appname': appname,
'exe': shortcutdirectory, 'exe': shortcutdirectory,
'StartDir': startingdir, 'StartDir': startingdir,
'icon': '', 'icon': f'${logged_in_home}/.steam/root/userdata/$steamid3/config/grid/{str(appid)}-icon.ico',
'ShortcutPath': '', 'ShortcutPath': '',
'LaunchOptions': launchoptions, 'LaunchOptions': launchoptions,
'IsHidden': 0, 'IsHidden': 0,
@ -3023,6 +2764,7 @@ def create_new_entry(shortcutdirectory, appname, launchoptions, startingdir):
} }
} }
# Add the new entry to the shortcuts dictionary # Add the new entry to the shortcuts dictionary
entry_exists = False entry_exists = False
if type(shortcuts['shortcuts']) == list: if type(shortcuts['shortcuts']) == list:
@ -3069,7 +2811,7 @@ create_new_entry('$minecraftshortcutdirectory', 'Minecraft: Java Edition', '$min
create_new_entry('$psplusshortcutdirectory', 'Playstation Plus', '$pspluslaunchoptions', '$psplusstartingdir') create_new_entry('$psplusshortcutdirectory', 'Playstation Plus', '$pspluslaunchoptions', '$psplusstartingdir')
create_new_entry('$dmmshortcutdirectory', 'DMM Games', '$dmmlaunchoptions', '$dmmstartingdir') create_new_entry('$dmmshortcutdirectory', 'DMM Games', '$dmmlaunchoptions', '$dmmstartingdir')
create_new_entry('$vkplayhortcutdirectory', 'VK Play', '$vkplaylaunchoptions', '$vkplaystartingdir') create_new_entry('$vkplayhortcutdirectory', 'VK Play', '$vkplaylaunchoptions', '$vkplaystartingdir')
create_new_entry('$chromedirectory', 'Xbox Games Pass', '$xboxchromelaunchoptions', '$chrome_startdir') create_new_entry('$chromedirectory', 'Xbox Game Pass', '$xboxchromelaunchoptions', '$chrome_startdir')
create_new_entry('$chromedirectory', 'GeForce Now', '$geforcechromelaunchoptions', '$chrome_startdir') create_new_entry('$chromedirectory', 'GeForce Now', '$geforcechromelaunchoptions', '$chrome_startdir')
create_new_entry('$chromedirectory', 'Netflix', '$netlfixchromelaunchoptions', '$chrome_startdir') create_new_entry('$chromedirectory', 'Netflix', '$netlfixchromelaunchoptions', '$chrome_startdir')
create_new_entry('$chromedirectory', 'Hulu', '$huluchromelaunchoptions', '$chrome_startdir') create_new_entry('$chromedirectory', 'Hulu', '$huluchromelaunchoptions', '$chrome_startdir')
@ -3079,6 +2821,7 @@ create_new_entry('$chromedirectory', 'Youtube', '$youtubechromelaunchoptions', '
create_new_entry('$chromedirectory', 'Amazon Luna', '$lunachromelaunchoptions', '$chrome_startdir') create_new_entry('$chromedirectory', 'Amazon Luna', '$lunachromelaunchoptions', '$chrome_startdir')
create_new_entry('$chromedirectory', 'Twitch', '$twitchchromelaunchoptions', '$chrome_startdir') create_new_entry('$chromedirectory', 'Twitch', '$twitchchromelaunchoptions', '$chrome_startdir')
# Iterate over each custom website # Iterate over each custom website
for custom_website in custom_websites: for custom_website in custom_websites:
# Check if the custom website is not an empty string # Check if the custom website is not an empty string
@ -3124,6 +2867,19 @@ with open('$shortcuts_vdf_path', 'wb') as f:
# Writes to the config.vdf File # Writes to the config.vdf File
excluded_appids = [] excluded_appids = []
streaming_sites = ['Netflix', 'Hulu', 'Disney+', 'Amazon Prime Video', 'Youtube', 'Amazon Luna', 'Twitch', 'Xbox Game Pass', 'GeForce Now']
for app_id, name in app_id_to_name.items():
if name in streaming_sites:
excluded_appids.append(app_id)
# Remove the app IDs of the streaming sites from the app_ids list
app_ids = [app_id for app_id in app_ids if app_id_to_name[app_id] not in streaming_sites]
# Remove the app IDs of the streaming sites from the app_id_to_name dictionary
app_id_to_name = {app_id: name for app_id, name in app_id_to_name.items() if name not in streaming_sites}
# Update the config.vdf file # Update the config.vdf file
with open('$config_vdf_path', 'r') as f: with open('$config_vdf_path', 'r') as f:
@ -3288,6 +3044,7 @@ for launcher_name, folder in folder_names.items():
else: else:
print(f'{launcher_name}: {folder} does not exist') print(f'{launcher_name}: {folder} does not exist')
# Check if the NonSteamLaunchers folder exists # Check if the NonSteamLaunchers folder exists
if os.path.exists(os.path.join(compatdata_dir, 'NonSteamLaunchers')): if os.path.exists(os.path.join(compatdata_dir, 'NonSteamLaunchers')):
# Get the first app ID from the app_ids list # Get the first app ID from the app_ids list
@ -3316,3 +3073,44 @@ if os.path.exists(os.path.join(compatdata_dir, 'NonSteamLaunchers')):
# TODO: might be better to relocate temp files to `/tmp` or even use `mktemp -d` since `rm -rf` is potentially dangerous without the `-i` flag # TODO: might be better to relocate temp files to `/tmp` or even use `mktemp -d` since `rm -rf` is potentially dangerous without the `-i` flag
# Delete NonSteamLaunchersInstallation subfolder in Downloads folder # Delete NonSteamLaunchersInstallation subfolder in Downloads folder
rm -rf "$download_dir" rm -rf "$download_dir"
#Setup NSLGameScanner.service
# Write variables to a file
echo "export steamid3=$steamid3" >> ${logged_in_home}/.config/systemd/user/env_vars
echo "export logged_in_home=$logged_in_home" >> ${logged_in_home}/.config/systemd/user/env_vars
echo "export compat_tool_name=$compat_tool_name" >> ${logged_in_home}/.config/systemd/user/env_vars
# Define your Python script path
python_script_path="${logged_in_home}/.config/systemd/user/NSLGameScanner.py"
# Check if the Python script exists
if [ -f "$python_script_path" ]
then
# Check if the service is already running
service_status=$(systemctl --user is-active nslgamescanner.service)
if [ "$service_status" = "active" ] || [ "$service_status" = "activating" ]
then
echo "Service is already running or activating."
else
echo "Service is not active. Starting the service..."
# Call your Python script
python3 $python_script_path
fi
else
# Define your GitHub link
github_link="https://raw.githubusercontent.com/moraroy/NonSteamLaunchers-On-Steam-Deck/main/NSLGameScanner.py"
echo "Python script does not exist. Downloading from GitHub..."
# Download the Python script from GitHub
curl -o $python_script_path $github_link
echo "Starting the service..."
# Call your Python script
python3 $python_script_path
fi