Update NSLPluginInstaller.sh

This commit is contained in:
Roy
2025-04-23 03:55:49 -07:00
committed by GitHub
parent f7bdca5540
commit 90dc8c5bdd
+43 -57
View File
@@ -1,20 +1,9 @@
#!/bin/bash
# ENVIRONMENT VARIABLES
# $USER
logged_in_user=$(logname 2>/dev/null || whoami)
# $HOME
logged_in_home=$(eval echo "~${logged_in_user}")
# Function to switch to Game Mode
switch_to_game_mode() {
echo "Switching to Game Mode..."
rm -rf ${logged_in_home}/.config/systemd/user/nslgamescanner.service
unlink ${logged_in_home}/.config/systemd/user/default.target.wants/nslgamescanner.service
systemctl --user daemon-reload
qdbus org.kde.Shutdown /Shutdown org.kde.Shutdown.logout
}
# Function to display a Zenity message
show_message() {
zenity --notification --text="$1" --timeout=1
@@ -31,6 +20,14 @@ REPO_URL="https://github.com/moraroy/NonSteamLaunchersDecky/archive/refs/heads/m
# Set the local directory path
LOCAL_DIR="${logged_in_home}/homebrew/plugins/NonSteamLaunchers"
# Ask the user if they want to install/update the plugin
user_input=$(zenity --question --text="Would you like to install or update the NonSteamLaunchers Decky Plugin?" --title="Install/Update Plugin" --ok-label="Yes" --cancel-label="No")
if [ $? -eq 1 ]; then
echo "User canceled the installation/update."
exit 0
fi
# Check if the Decky Loader and NSL Plugin exist
DECKY_LOADER_EXISTS=false
NSL_PLUGIN_EXISTS=false
@@ -54,7 +51,6 @@ fetch_github_version() {
if [ "$github_version" != "null" ]; then
echo "$github_version"
else
echo "Error: Could not fetch or parse GitHub version"
return 1
fi
}
@@ -67,100 +63,92 @@ fetch_local_version() {
if [ "$local_version" != "null" ]; then
echo "$local_version"
else
echo "Error: Failed to parse local version"
return 1
fi
else
echo "Error: Local package.json not found!"
return 1
fi
}
# Function to compare versions
compare_versions() {
# Only compare versions if both local and GitHub versions are available
if [ ! -d "$LOCAL_DIR" ] || [ ! -f "$LOCAL_DIR/package.json" ]; then
echo "Local plugin not found or no package.json. Skipping version comparison."
return 1 # Skip version comparison and proceed to install/update
return 1
fi
# Fetch local and GitHub versions
local_version=$(fetch_local_version)
github_version=$(fetch_github_version)
if [ "$local_version" == "Error:" ] || [ "$github_version" == "Error:" ]; then
echo "Error: Could not fetch version information"
return 1
fi
echo "Local Version: $local_version, GitHub Version: $github_version"
if [ "$local_version" == "$github_version" ]; then
echo "Status: Up-to-date"
return 0
else
echo "Status: Update available"
return 1
fi
}
# Check permissions for directories
check_permissions() {
ls -ld "${logged_in_home}/homebrew" "${logged_in_home}/homebrew/plugins" "${logged_in_home}/homebrew/plugins/NonSteamLaunchers"
}
# Adjust permissions temporarily to allow the installation
adjust_permissions() {
chmod u+w "${logged_in_home}/homebrew/plugins" "${logged_in_home}/homebrew/plugins/NonSteamLaunchers"
}
# Restore original permissions
restore_permissions() {
chmod u-w "${logged_in_home}/homebrew/plugins" "${logged_in_home}/homebrew/plugins/NonSteamLaunchers"
}
# Main logic
set +x
check_permissions
if $DECKY_LOADER_EXISTS; then
while true; do
USER_INPUT=$(zenity --forms --title="Authentication Required" --text="Decky Loader detected! $(if $NSL_PLUGIN_EXISTS; then echo 'NSL Plugin also detected and will be updated to the latest version 🚀.'; else echo 'But no NSL plugin :( This is not an ERROR. Would you like to inject it and go to Game Mode?'; fi) Please enter your sudo password to proceed:" --separator="|" --add-password="Password")
USER_PASSWORD=$(echo $USER_INPUT | cut -d'|' -f1)
if [ -z "$USER_PASSWORD" ]; then
zenity --error --text="No password entered. Exiting." --timeout=5
exit 1
fi
echo "$USER_PASSWORD" | sudo -S echo "Password accepted" 2>/dev/null
if [ $? -eq 0 ]; then
break
else
zenity --error --text="Incorrect password. Please try again."
fi
done
if ! $NSL_PLUGIN_EXISTS; then
zenity --info --text="Decky Loader is detected but no NSL plugin found. It will now be injected into Game Mode."
fi
else
zenity --error --text="This is not an error but Decky Loader was not detected. Please download and install it from their website first and re-run this script to get the NSL Plugin."
rm -rf "$download_dir"
zenity --error --text="Decky Loader not found. Please install it and re-run the script."
exit 1
fi
# Compare versions before proceeding with installation
compare_versions
if [ $? -eq 0 ]; then
echo "No update needed. The plugin is already up-to-date."
show_message "No update needed. The plugin is already up-to-date."
else
# Get local and GitHub versions
local_version=$(fetch_local_version)
github_version=$(fetch_github_version)
# Show update message in Zenity notification
show_update_message "$local_version" "$github_version"
if $NSL_PLUGIN_EXISTS; then
show_message "NSL Plugin detected. Deleting and updating..."
echo "Plugin directory exists. Removing..."
echo "$USER_PASSWORD" | sudo -S rm -rf "$LOCAL_DIR"
rm -rf "$LOCAL_DIR"
fi
sudo systemctl stop plugin_loader.service
show_message "Creating base directory and setting permissions..."
echo "$USER_PASSWORD" | sudo -S mkdir -p "$LOCAL_DIR"
echo "$USER_PASSWORD" | sudo -S chmod -R u+rw "$LOCAL_DIR"
echo "$USER_PASSWORD" | sudo -S chown -R $USER:$USER "$LOCAL_DIR"
echo "Downloading and extracting the repository..."
adjust_permissions
mkdir -p "$LOCAL_DIR"
chmod -R u+rw "$LOCAL_DIR"
chown -R $logged_in_user:$logged_in_user "$LOCAL_DIR"
curl -L "$REPO_URL" -o /tmp/NonSteamLaunchersDecky.zip
echo "$USER_PASSWORD" | sudo -S unzip -o /tmp/NonSteamLaunchersDecky.zip -d /tmp/
echo "$USER_PASSWORD" | sudo -S cp -r /tmp/NonSteamLaunchersDecky-main/* "$LOCAL_DIR"
unzip -o /tmp/NonSteamLaunchersDecky.zip -d /tmp/
cp -r /tmp/NonSteamLaunchersDecky-main/* "$LOCAL_DIR"
echo "$USER_PASSWORD" | sudo -S rm -rf /tmp/NonSteamLaunchersDecky*
rm -rf /tmp/NonSteamLaunchersDecky*
restore_permissions
fi
set -x
@@ -168,5 +156,3 @@ cd "$LOCAL_DIR"
show_message "Plugin installed. Switching to Game Mode..."
switch_to_game_mode
sudo systemctl restart plugin_loader.service