From 15e33ac14acb5d823e0e474c6cc73ea2a97640b2 Mon Sep 17 00:00:00 2001 From: Party Wumpus <48649272+PartyWumpus@users.noreply.github.com> Date: Wed, 11 Jan 2023 17:00:44 +0000 Subject: Rename decky_installer.desktop to gui/decky_installer.desktop --- decky_installer.desktop | 8 -------- gui/decky_installer.desktop | 8 ++++++++ 2 files changed, 8 insertions(+), 8 deletions(-) delete mode 100644 decky_installer.desktop create mode 100644 gui/decky_installer.desktop diff --git a/decky_installer.desktop b/decky_installer.desktop deleted file mode 100644 index 2a90683..0000000 --- a/decky_installer.desktop +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env xdg-open -[Desktop Entry] -Name=Install Decky -Exec=sh -c 'curl -L -O --output-dir /tmp/ https://github.com/SteamDeckHomebrew/decky-installer/releases/latest/download/user_install_script.sh 2> /dev/null && bash /tmp/user_install_script.sh' -Icon=steamdeck-gaming-return -Terminal=true -Type=Application -StartupNotify=false diff --git a/gui/decky_installer.desktop b/gui/decky_installer.desktop new file mode 100644 index 0000000..2a90683 --- /dev/null +++ b/gui/decky_installer.desktop @@ -0,0 +1,8 @@ +#!/usr/bin/env xdg-open +[Desktop Entry] +Name=Install Decky +Exec=sh -c 'curl -L -O --output-dir /tmp/ https://github.com/SteamDeckHomebrew/decky-installer/releases/latest/download/user_install_script.sh 2> /dev/null && bash /tmp/user_install_script.sh' +Icon=steamdeck-gaming-return +Terminal=true +Type=Application +StartupNotify=false -- cgit v1.2.3 From 70cfe663424c9ad368f2a5293fb5e59f1286a6df Mon Sep 17 00:00:00 2001 From: Party Wumpus <48649272+PartyWumpus@users.noreply.github.com> Date: Wed, 11 Jan 2023 17:00:56 +0000 Subject: Rename user_install_script.sh to gui/user_install_script.sh --- gui/user_install_script.sh | 168 +++++++++++++++++++++++++++++++++++++++++++++ user_install_script.sh | 168 --------------------------------------------- 2 files changed, 168 insertions(+), 168 deletions(-) create mode 100644 gui/user_install_script.sh delete mode 100644 user_install_script.sh diff --git a/gui/user_install_script.sh b/gui/user_install_script.sh new file mode 100644 index 0000000..18ef7fe --- /dev/null +++ b/gui/user_install_script.sh @@ -0,0 +1,168 @@ +#!/bin/bash + +# if a password was set by decky, this will run when the program closes +temp_pass_cleanup() { + echo $PASS | sudo -S -k passwd -d deck +} + +# if the script is not root yet, get the password and rerun as root +if (( $EUID != 0 )); then + PASS_STATUS=$(passwd -S deck 2> /dev/null) + if [ "$PASS_STATUS" = "" ]; then + echo "Deck user not found. Continuing anyway, as it probably just means user is on a non-steamos system." + fi + + if [ "${PASS_STATUS:5:2}" = "NP" ]; then # if no password is set + if ( zenity --title="Decky Installer" --width=300 --height=200 --question --text="You appear to have not set an admin password.\nDecky can still install by temporarily setting your password to 'Decky!' and continuing, then removing it when the installer finishes\nAre you okay with that?" ); then + yes "Decky!" | passwd deck + trap temp_pass_cleanup EXIT # make sure password is removed when application closes + PASS="Decky!" + else exit 1; fi + else + # get password + FINISHED="false" + while [ "$FINISHED" != "true" ]; do + PASS=$(zenity --title="Decky Installer" --width=300 --height=100 --entry --hide-text --text="Enter your sudo/admin password") + if [[ $? -eq 1 ]] || [[ $? -eq 5 ]]; then + exit 1 + fi + if ( echo "$PASS" | sudo -S -k true ); then + FINISHED="true" + else + zenity --title="Decky Installer" --width=150 --height=40 --info --text "Incorrect Password" + fi + done + fi + + if ! [ $USER = "deck" ]; then + zenity --title="Decky Installer" --width=300 --height=100 --warning --text "You appear to not be on a deck.\nDecky should still mostly work, but you may not get full functionality." + fi + + # get user dir before rerunning as root, otherwise it'll just be 'home/root' + + echo "$PASS" | sudo -S -k bash "$0" "$@" # rerun script as root + exit 1 +fi + +# all code below should be run as root +USER_DIR="$(getent passwd $SUDO_USER | cut -d: -f6)" +HOMEBREW_FOLDER="${USER_DIR}/homebrew" + +# if decky is already installed, then also add an 'uninstall' prompt +if [[ -f "${USER_DIR}/homebrew/services/PluginLoader" ]] ; then + BRANCH=$(zenity --title="Decky Installer" --width=360 --height=170 --list --radiolist --text "Select Option:" --hide-header --column "Buttons" --column "Choice" --column "Info" TRUE "release" "(Recommended option)" FALSE "prerelease" "(May be unstable)" FALSE "uninstall decky loader" "") +else + BRANCH=$(zenity --title="Decky Installer" --width=300 --height=100 --list --radiolist --text "Select Branch:" --hide-header --column "Buttons" --column "Choice" --column "Info" TRUE "release" "(Recommended option)" FALSE "prerelease" "(May be unstable)" ) +fi +if [[ $? -eq 1 ]] || [[ $? -eq 5 ]]; then + exit 1 +fi + +# uninstall if uninstall option was selected +if [ "$BRANCH" == "uninstall decky loader" ] ; then + ( + echo "20" ; echo "# Disabling and removing services" ; + sudo systemctl disable --now plugin_loader.service > /dev/null + sudo rm -f "${USER_DIR}/.config/systemd/user/plugin_loader.service" + sudo rm -f "/etc/systemd/system/plugin_loader.service" + + echo "40" ; echo "# Removing Temporary Files" ; + rm -rf "/tmp/plugin_loader" + rm -rf "/tmp/user_install_script.sh" + + echo "60" ; echo "# Cleaning services folder" ; + sudo rm "${HOMEBREW_FOLDER}/services/PluginLoader" + + echo "80" ; echo "# Disabling CEF debugging" ; + sudo rm "${USER_DIR}/.steam/steam/.cef-enable-remote-debugging" + + echo "100" ; echo "# Uninstall finished, installer can now be closed"; + ) | + zenity --progress \ + --title="Decky Installer" \ + --width=300 --height=100 \ + --text="Uninstalling..." \ + --percentage=0 \ + --no-cancel + exit 1 +fi + +# otherwise install decky loader +( +echo "15" ; echo "# Creating file structure" ; +rm -rf "${HOMEBREW_FOLDER}/services" +sudo -u $SUDO_USER mkdir -p "${HOMEBREW_FOLDER}/services" +sudo -u $SUDO_USER mkdir -p "${HOMEBREW_FOLDER}/plugins" +sudo -u $SUDO_USER touch "${USER_DIR}/.steam/steam/.cef-enable-remote-debugging" + +echo "30" ; echo "# Finding latest $BRANCH"; +if [ $BRANCH = 'prerelease' ] ; then + RELEASE=$(curl -s 'https://api.github.com/repos/SteamDeckHomebrew/decky-loader/releases' | jq -r "first(.[] | select(.prerelease == "true"))") +else + RELEASE=$(curl -s 'https://api.github.com/repos/SteamDeckHomebrew/decky-loader/releases' | jq -r "first(.[] | select(.prerelease == "false"))") +fi +VERSION=$(jq -r '.tag_name' <<< ${RELEASE} ) +DOWNLOADURL=$(jq -r '.assets[].browser_download_url | select(endswith("PluginLoader"))' <<< ${RELEASE}) + +echo "45" ; echo "# Installing version $VERSION" ; +curl -L $DOWNLOADURL -o ${HOMEBREW_FOLDER}/services/PluginLoader 2>&1 | stdbuf -oL tr '\r' '\n' | sed -u 's/^ *\([0-9][0-9]*\).*\( [0-9].*$\)/\1\n#Download Speed\:\2/' | zenity --progress --title "Downloading Decky" --text="Download Speed: 0" --width=300 --height=100 --auto-close --no-cancel 2>/dev/null +chmod +x ${HOMEBREW_FOLDER}/services/PluginLoader +echo $VERSION > ${HOMEBREW_FOLDER}/services/.loader.version + +echo "70" ; echo "# Kiling plugin_loader if it exists" ; +systemctl --user stop plugin_loader 2> /dev/null +systemctl --user disable plugin_loader 2> /dev/null +systemctl stop plugin_loader 2> /dev/null +systemctl disable plugin_loader 2> /dev/null + +echo "85" ; echo "# Setting up systemd" ; +curl -L https://raw.githubusercontent.com/SteamDeckHomebrew/decky-loader/main/dist/plugin_loader-${BRANCH}.service --output ${HOMEBREW_FOLDER}/services/plugin_loader-${BRANCH}.service +cat > "${HOMEBREW_FOLDER}/services/plugin_loader-backup.service" <<- EOM +[Unit] +Description=SteamDeck Plugin Loader +After=network-online.target +Wants=network-online.target +[Service] +Type=simple +User=root +Restart=always +ExecStart=${HOMEBREW_FOLDER}/services/PluginLoader +WorkingDirectory=${HOMEBREW_FOLDER}/services +KillSignal=SIGKILL +Environment=PLUGIN_PATH=${HOMEBREW_FOLDER}/plugins +Environment=LOG_LEVEL=INFO +[Install] +WantedBy=multi-user.target +EOM + +# if .service file doesn't exist for whatever reason, use backup file instead +if [[ -f "${HOMEBREW_FOLDER}/services/plugin_loader-${BRANCH}.service" ]]; then + printf "Grabbed latest ${BRANCH} service.\n" + sed -i -e "s|\${HOMEBREW_FOLDER}|${HOMEBREW_FOLDER}|" "${HOMEBREW_FOLDER}/services/plugin_loader-${BRANCH}.service" + cp -f "${HOMEBREW_FOLDER}/services/plugin_loader-${BRANCH}.service" "/etc/systemd/system/plugin_loader.service" +else + printf "Could not curl latest ${BRANCH} systemd service, using built-in service as a backup!\n" + rm -f "/etc/systemd/system/plugin_loader.service" + cp "${HOMEBREW_FOLDER}/services/plugin_loader-backup.service" "/etc/systemd/system/plugin_loader.service" +fi + +mkdir -p ${HOMEBREW_FOLDER}/services/.systemd +cp ${HOMEBREW_FOLDER}/services/plugin_loader-${BRANCH}.service ${HOMEBREW_FOLDER}/services/.systemd/plugin_loader-${BRANCH}.service +cp ${HOMEBREW_FOLDER}/services/plugin_loader-backup.service ${HOMEBREW_FOLDER}/services/.systemd/plugin_loader-backup.service +rm ${HOMEBREW_FOLDER}/services/plugin_loader-backup.service ${HOMEBREW_FOLDER}/services/plugin_loader-${BRANCH}.service + +systemctl daemon-reload +systemctl start plugin_loader +systemctl enable plugin_loader +echo "100" ; echo "# Install finished, installer can now be closed"; +) | +zenity --progress \ + --title="Decky Installer" \ + --width=300 --height=100 \ + --text="Installing..." \ + --percentage=0 \ + --no-cancel # not actually sure how to make the cancel work properly, so it's just not there unless someone else can figure it out + +if [ "$?" = -1 ] ; then + zenity --title="Decky Installer" --width=150 --height=70 --error --text="Download interrupted." +fi diff --git a/user_install_script.sh b/user_install_script.sh deleted file mode 100644 index 18ef7fe..0000000 --- a/user_install_script.sh +++ /dev/null @@ -1,168 +0,0 @@ -#!/bin/bash - -# if a password was set by decky, this will run when the program closes -temp_pass_cleanup() { - echo $PASS | sudo -S -k passwd -d deck -} - -# if the script is not root yet, get the password and rerun as root -if (( $EUID != 0 )); then - PASS_STATUS=$(passwd -S deck 2> /dev/null) - if [ "$PASS_STATUS" = "" ]; then - echo "Deck user not found. Continuing anyway, as it probably just means user is on a non-steamos system." - fi - - if [ "${PASS_STATUS:5:2}" = "NP" ]; then # if no password is set - if ( zenity --title="Decky Installer" --width=300 --height=200 --question --text="You appear to have not set an admin password.\nDecky can still install by temporarily setting your password to 'Decky!' and continuing, then removing it when the installer finishes\nAre you okay with that?" ); then - yes "Decky!" | passwd deck - trap temp_pass_cleanup EXIT # make sure password is removed when application closes - PASS="Decky!" - else exit 1; fi - else - # get password - FINISHED="false" - while [ "$FINISHED" != "true" ]; do - PASS=$(zenity --title="Decky Installer" --width=300 --height=100 --entry --hide-text --text="Enter your sudo/admin password") - if [[ $? -eq 1 ]] || [[ $? -eq 5 ]]; then - exit 1 - fi - if ( echo "$PASS" | sudo -S -k true ); then - FINISHED="true" - else - zenity --title="Decky Installer" --width=150 --height=40 --info --text "Incorrect Password" - fi - done - fi - - if ! [ $USER = "deck" ]; then - zenity --title="Decky Installer" --width=300 --height=100 --warning --text "You appear to not be on a deck.\nDecky should still mostly work, but you may not get full functionality." - fi - - # get user dir before rerunning as root, otherwise it'll just be 'home/root' - - echo "$PASS" | sudo -S -k bash "$0" "$@" # rerun script as root - exit 1 -fi - -# all code below should be run as root -USER_DIR="$(getent passwd $SUDO_USER | cut -d: -f6)" -HOMEBREW_FOLDER="${USER_DIR}/homebrew" - -# if decky is already installed, then also add an 'uninstall' prompt -if [[ -f "${USER_DIR}/homebrew/services/PluginLoader" ]] ; then - BRANCH=$(zenity --title="Decky Installer" --width=360 --height=170 --list --radiolist --text "Select Option:" --hide-header --column "Buttons" --column "Choice" --column "Info" TRUE "release" "(Recommended option)" FALSE "prerelease" "(May be unstable)" FALSE "uninstall decky loader" "") -else - BRANCH=$(zenity --title="Decky Installer" --width=300 --height=100 --list --radiolist --text "Select Branch:" --hide-header --column "Buttons" --column "Choice" --column "Info" TRUE "release" "(Recommended option)" FALSE "prerelease" "(May be unstable)" ) -fi -if [[ $? -eq 1 ]] || [[ $? -eq 5 ]]; then - exit 1 -fi - -# uninstall if uninstall option was selected -if [ "$BRANCH" == "uninstall decky loader" ] ; then - ( - echo "20" ; echo "# Disabling and removing services" ; - sudo systemctl disable --now plugin_loader.service > /dev/null - sudo rm -f "${USER_DIR}/.config/systemd/user/plugin_loader.service" - sudo rm -f "/etc/systemd/system/plugin_loader.service" - - echo "40" ; echo "# Removing Temporary Files" ; - rm -rf "/tmp/plugin_loader" - rm -rf "/tmp/user_install_script.sh" - - echo "60" ; echo "# Cleaning services folder" ; - sudo rm "${HOMEBREW_FOLDER}/services/PluginLoader" - - echo "80" ; echo "# Disabling CEF debugging" ; - sudo rm "${USER_DIR}/.steam/steam/.cef-enable-remote-debugging" - - echo "100" ; echo "# Uninstall finished, installer can now be closed"; - ) | - zenity --progress \ - --title="Decky Installer" \ - --width=300 --height=100 \ - --text="Uninstalling..." \ - --percentage=0 \ - --no-cancel - exit 1 -fi - -# otherwise install decky loader -( -echo "15" ; echo "# Creating file structure" ; -rm -rf "${HOMEBREW_FOLDER}/services" -sudo -u $SUDO_USER mkdir -p "${HOMEBREW_FOLDER}/services" -sudo -u $SUDO_USER mkdir -p "${HOMEBREW_FOLDER}/plugins" -sudo -u $SUDO_USER touch "${USER_DIR}/.steam/steam/.cef-enable-remote-debugging" - -echo "30" ; echo "# Finding latest $BRANCH"; -if [ $BRANCH = 'prerelease' ] ; then - RELEASE=$(curl -s 'https://api.github.com/repos/SteamDeckHomebrew/decky-loader/releases' | jq -r "first(.[] | select(.prerelease == "true"))") -else - RELEASE=$(curl -s 'https://api.github.com/repos/SteamDeckHomebrew/decky-loader/releases' | jq -r "first(.[] | select(.prerelease == "false"))") -fi -VERSION=$(jq -r '.tag_name' <<< ${RELEASE} ) -DOWNLOADURL=$(jq -r '.assets[].browser_download_url | select(endswith("PluginLoader"))' <<< ${RELEASE}) - -echo "45" ; echo "# Installing version $VERSION" ; -curl -L $DOWNLOADURL -o ${HOMEBREW_FOLDER}/services/PluginLoader 2>&1 | stdbuf -oL tr '\r' '\n' | sed -u 's/^ *\([0-9][0-9]*\).*\( [0-9].*$\)/\1\n#Download Speed\:\2/' | zenity --progress --title "Downloading Decky" --text="Download Speed: 0" --width=300 --height=100 --auto-close --no-cancel 2>/dev/null -chmod +x ${HOMEBREW_FOLDER}/services/PluginLoader -echo $VERSION > ${HOMEBREW_FOLDER}/services/.loader.version - -echo "70" ; echo "# Kiling plugin_loader if it exists" ; -systemctl --user stop plugin_loader 2> /dev/null -systemctl --user disable plugin_loader 2> /dev/null -systemctl stop plugin_loader 2> /dev/null -systemctl disable plugin_loader 2> /dev/null - -echo "85" ; echo "# Setting up systemd" ; -curl -L https://raw.githubusercontent.com/SteamDeckHomebrew/decky-loader/main/dist/plugin_loader-${BRANCH}.service --output ${HOMEBREW_FOLDER}/services/plugin_loader-${BRANCH}.service -cat > "${HOMEBREW_FOLDER}/services/plugin_loader-backup.service" <<- EOM -[Unit] -Description=SteamDeck Plugin Loader -After=network-online.target -Wants=network-online.target -[Service] -Type=simple -User=root -Restart=always -ExecStart=${HOMEBREW_FOLDER}/services/PluginLoader -WorkingDirectory=${HOMEBREW_FOLDER}/services -KillSignal=SIGKILL -Environment=PLUGIN_PATH=${HOMEBREW_FOLDER}/plugins -Environment=LOG_LEVEL=INFO -[Install] -WantedBy=multi-user.target -EOM - -# if .service file doesn't exist for whatever reason, use backup file instead -if [[ -f "${HOMEBREW_FOLDER}/services/plugin_loader-${BRANCH}.service" ]]; then - printf "Grabbed latest ${BRANCH} service.\n" - sed -i -e "s|\${HOMEBREW_FOLDER}|${HOMEBREW_FOLDER}|" "${HOMEBREW_FOLDER}/services/plugin_loader-${BRANCH}.service" - cp -f "${HOMEBREW_FOLDER}/services/plugin_loader-${BRANCH}.service" "/etc/systemd/system/plugin_loader.service" -else - printf "Could not curl latest ${BRANCH} systemd service, using built-in service as a backup!\n" - rm -f "/etc/systemd/system/plugin_loader.service" - cp "${HOMEBREW_FOLDER}/services/plugin_loader-backup.service" "/etc/systemd/system/plugin_loader.service" -fi - -mkdir -p ${HOMEBREW_FOLDER}/services/.systemd -cp ${HOMEBREW_FOLDER}/services/plugin_loader-${BRANCH}.service ${HOMEBREW_FOLDER}/services/.systemd/plugin_loader-${BRANCH}.service -cp ${HOMEBREW_FOLDER}/services/plugin_loader-backup.service ${HOMEBREW_FOLDER}/services/.systemd/plugin_loader-backup.service -rm ${HOMEBREW_FOLDER}/services/plugin_loader-backup.service ${HOMEBREW_FOLDER}/services/plugin_loader-${BRANCH}.service - -systemctl daemon-reload -systemctl start plugin_loader -systemctl enable plugin_loader -echo "100" ; echo "# Install finished, installer can now be closed"; -) | -zenity --progress \ - --title="Decky Installer" \ - --width=300 --height=100 \ - --text="Installing..." \ - --percentage=0 \ - --no-cancel # not actually sure how to make the cancel work properly, so it's just not there unless someone else can figure it out - -if [ "$?" = -1 ] ; then - zenity --title="Decky Installer" --width=150 --height=70 --error --text="Download interrupted." -fi -- cgit v1.2.3 From c501bdbf7fbacb2076c6e374304779cf5a48b284 Mon Sep 17 00:00:00 2001 From: Party Wumpus <48649272+PartyWumpus@users.noreply.github.com> Date: Wed, 11 Jan 2023 17:01:34 +0000 Subject: Create install_prerelease.sh --- cli/install_prerelease.sh | 69 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 cli/install_prerelease.sh diff --git a/cli/install_prerelease.sh b/cli/install_prerelease.sh new file mode 100644 index 0000000..d38f0d5 --- /dev/null +++ b/cli/install_prerelease.sh @@ -0,0 +1,69 @@ +#!/bin/sh + +[ "$UID" -eq 0 ] || exec sudo "$0" "$@" + +echo "Installing Steam Deck Plugin Loader pre-release..." + +USER_DIR="$(getent passwd $SUDO_USER | cut -d: -f6)" +HOMEBREW_FOLDER="${USER_DIR}/homebrew" + +# Create folder structure +rm -rf "${HOMEBREW_FOLDER}/services" +sudo -u $SUDO_USER mkdir -p "${HOMEBREW_FOLDER}/services" +sudo -u $SUDO_USER mkdir -p "${HOMEBREW_FOLDER}/plugins" +touch "${USER_DIR}/.steam/steam/.cef-enable-remote-debugging" + +# Download latest release and install it +RELEASE=$(curl -s 'https://api.github.com/repos/SteamDeckHomebrew/decky-loader/releases' | jq -r "first(.[] | select(.prerelease == "true"))") +VERSION=$(jq -r '.tag_name' <<< ${RELEASE} ) +DOWNLOADURL=$(jq -r '.assets[].browser_download_url | select(endswith("PluginLoader"))' <<< ${RELEASE}) + +printf "Installing version %s...\n" "${VERSION}" +curl -L $DOWNLOADURL --output ${HOMEBREW_FOLDER}/services/PluginLoader +chmod +x ${HOMEBREW_FOLDER}/services/PluginLoader +echo $VERSION > ${HOMEBREW_FOLDER}/services/.loader.version + +systemctl --user stop plugin_loader 2> /dev/null +systemctl --user disable plugin_loader 2> /dev/null + +systemctl stop plugin_loader 2> /dev/null +systemctl disable plugin_loader 2> /dev/null + +curl -L https://raw.githubusercontent.com/SteamDeckHomebrew/decky-loader/main/dist/plugin_loader-prerelease.service --output ${HOMEBREW_FOLDER}/services/plugin_loader-prerelease.service + +cat > "${HOMEBREW_FOLDER}/services/plugin_loader-backup.service" <<- EOM +[Unit] +Description=SteamDeck Plugin Loader +After=network-online.target +Wants=network-online.target +[Service] +Type=simple +User=root +Restart=always +ExecStart=${HOMEBREW_FOLDER}/services/PluginLoader +WorkingDirectory=${HOMEBREW_FOLDER}/services +KillSignal=SIGKILL +Environment=PLUGIN_PATH=${HOMEBREW_FOLDER}/plugins +Environment=LOG_LEVEL=DEBUG +[Install] +WantedBy=multi-user.target +EOM + +if [[ -f "${HOMEBREW_FOLDER}/services/plugin_loader-prerelease.service" ]]; then + printf "Grabbed latest prerelease service.\n" + sed -i -e "s|\${HOMEBREW_FOLDER}|${HOMEBREW_FOLDER}|" "${HOMEBREW_FOLDER}/services/plugin_loader-prerelease.service" + cp -f "${HOMEBREW_FOLDER}/services/plugin_loader-prerelease.service" "/etc/systemd/system/plugin_loader.service" +else + printf "Could not curl latest prerelease systemd service, using built-in service as a backup!\n" + rm -f "/etc/systemd/system/plugin_loader.service" + cp "${HOMEBREW_FOLDER}/services/plugin_loader-backup.service" "/etc/systemd/system/plugin_loader.service" +fi + +mkdir -p ${HOMEBREW_FOLDER}/services/.systemd +cp ${HOMEBREW_FOLDER}/services/plugin_loader-prerelease.service ${HOMEBREW_FOLDER}/services/.systemd/plugin_loader-prerelease.service +cp ${HOMEBREW_FOLDER}/services/plugin_loader-backup.service ${HOMEBREW_FOLDER}/services/.systemd/plugin_loader-backup.service +rm ${HOMEBREW_FOLDER}/services/plugin_loader-backup.service ${HOMEBREW_FOLDER}/services/plugin_loader-prerelease.service + +systemctl daemon-reload +systemctl start plugin_loader +systemctl enable plugin_loader -- cgit v1.2.3 From aa5aa0dcdebfc8e720abb3efa4da1cde283d7f60 Mon Sep 17 00:00:00 2001 From: Party Wumpus <48649272+PartyWumpus@users.noreply.github.com> Date: Wed, 11 Jan 2023 17:02:10 +0000 Subject: Create install_release.sh --- cli/install_release.sh | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 cli/install_release.sh diff --git a/cli/install_release.sh b/cli/install_release.sh new file mode 100644 index 0000000..57150f2 --- /dev/null +++ b/cli/install_release.sh @@ -0,0 +1,69 @@ +#!/bin/sh + +[ "$UID" -eq 0 ] || exec sudo "$0" "$@" + +echo "Installing Steam Deck Plugin Loader release..." + +USER_DIR="$(getent passwd $SUDO_USER | cut -d: -f6)" +HOMEBREW_FOLDER="${USER_DIR}/homebrew" + +# Create folder structure +rm -rf "${HOMEBREW_FOLDER}/services" +sudo -u $SUDO_USER mkdir -p "${HOMEBREW_FOLDER}/services" +sudo -u $SUDO_USER mkdir -p "${HOMEBREW_FOLDER}/plugins" +touch "${USER_DIR}/.steam/steam/.cef-enable-remote-debugging" + +# Download latest release and install it +RELEASE=$(curl -s 'https://api.github.com/repos/SteamDeckHomebrew/decky-loader/releases' | jq -r "first(.[] | select(.prerelease == "false"))") +VERSION=$(jq -r '.tag_name' <<< ${RELEASE} ) +DOWNLOADURL=$(jq -r '.assets[].browser_download_url | select(endswith("PluginLoader"))' <<< ${RELEASE}) + +printf "Installing version %s...\n" "${VERSION}" +curl -L $DOWNLOADURL --output ${HOMEBREW_FOLDER}/services/PluginLoader +chmod +x ${HOMEBREW_FOLDER}/services/PluginLoader +echo $VERSION > ${HOMEBREW_FOLDER}/services/.loader.version + +systemctl --user stop plugin_loader 2> /dev/null +systemctl --user disable plugin_loader 2> /dev/null + +systemctl stop plugin_loader 2> /dev/null +systemctl disable plugin_loader 2> /dev/null + +curl -L https://raw.githubusercontent.com/SteamDeckHomebrew/decky-loader/main/dist/plugin_loader-release.service --output ${HOMEBREW_FOLDER}/services/plugin_loader-release.service + +cat > "${HOMEBREW_FOLDER}/services/plugin_loader-backup.service" <<- EOM +[Unit] +Description=SteamDeck Plugin Loader +After=network-online.target +Wants=network-online.target +[Service] +Type=simple +User=root +Restart=always +ExecStart=${HOMEBREW_FOLDER}/services/PluginLoader +WorkingDirectory=${HOMEBREW_FOLDER}/services +KillSignal=SIGKILL +Environment=PLUGIN_PATH=${HOMEBREW_FOLDER}/plugins +Environment=LOG_LEVEL=INFO +[Install] +WantedBy=multi-user.target +EOM + +if [[ -f "${HOMEBREW_FOLDER}/services/plugin_loader-release.service" ]]; then + printf "Grabbed latest release service.\n" + sed -i -e "s|\${HOMEBREW_FOLDER}|${HOMEBREW_FOLDER}|" "${HOMEBREW_FOLDER}/services/plugin_loader-release.service" + cp -f "${HOMEBREW_FOLDER}/services/plugin_loader-release.service" "/etc/systemd/system/plugin_loader.service" +else + printf "Could not curl latest release systemd service, using built-in service as a backup!\n" + rm -f "/etc/systemd/system/plugin_loader.service" + cp "${HOMEBREW_FOLDER}/services/plugin_loader-backup.service" "/etc/systemd/system/plugin_loader.service" +fi + +mkdir -p ${HOMEBREW_FOLDER}/services/.systemd +cp ${HOMEBREW_FOLDER}/services/plugin_loader-release.service ${HOMEBREW_FOLDER}/services/.systemd/plugin_loader-release.service +cp ${HOMEBREW_FOLDER}/services/plugin_loader-backup.service ${HOMEBREW_FOLDER}/services/.systemd/plugin_loader-backup.service +rm ${HOMEBREW_FOLDER}/services/plugin_loader-backup.service ${HOMEBREW_FOLDER}/services/plugin_loader-release.service + +systemctl daemon-reload +systemctl start plugin_loader +systemctl enable plugin_loader -- cgit v1.2.3 From 04935c3af2432f8a8fdbe0d6fb95f6e43713896e Mon Sep 17 00:00:00 2001 From: Party Wumpus <48649272+PartyWumpus@users.noreply.github.com> Date: Wed, 11 Jan 2023 17:02:35 +0000 Subject: Create uninstall.sh --- cli/uninstall.sh | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 cli/uninstall.sh diff --git a/cli/uninstall.sh b/cli/uninstall.sh new file mode 100644 index 0000000..988cf63 --- /dev/null +++ b/cli/uninstall.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +[ "$UID" -eq 0 ] || exec sudo "$0" "$@" + +echo "Uninstalling Steam Deck Plugin Loader..." + +USER_DIR="$(getent passwd $SUDO_USER | cut -d: -f6)" +HOMEBREW_FOLDER="${USER_DIR}/homebrew" + +# Disable and remove services +sudo systemctl disable --now plugin_loader.service > /dev/null +sudo rm -f "${USER_DIR}/.config/systemd/user/plugin_loader.service" +sudo rm -f "/etc/systemd/system/plugin_loader.service" + +# Remove temporary folder if it exists from the install process +rm -rf "/tmp/plugin_loader" + +# Cleanup services folder +sudo rm "${HOMEBREW_FOLDER}/services/PluginLoader" -- cgit v1.2.3 From 3730a2e2e25933869075ca4c61586e9736d89c6d Mon Sep 17 00:00:00 2001 From: Party Wumpus <48649272+PartyWumpus@users.noreply.github.com> Date: Wed, 11 Jan 2023 17:03:53 +0000 Subject: make cefdebugging file as user --- cli/install_release.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/install_release.sh b/cli/install_release.sh index 57150f2..71d2415 100644 --- a/cli/install_release.sh +++ b/cli/install_release.sh @@ -11,7 +11,7 @@ HOMEBREW_FOLDER="${USER_DIR}/homebrew" rm -rf "${HOMEBREW_FOLDER}/services" sudo -u $SUDO_USER mkdir -p "${HOMEBREW_FOLDER}/services" sudo -u $SUDO_USER mkdir -p "${HOMEBREW_FOLDER}/plugins" -touch "${USER_DIR}/.steam/steam/.cef-enable-remote-debugging" +sudo -u $SUDO_USER touch "${USER_DIR}/.steam/steam/.cef-enable-remote-debugging" # Download latest release and install it RELEASE=$(curl -s 'https://api.github.com/repos/SteamDeckHomebrew/decky-loader/releases' | jq -r "first(.[] | select(.prerelease == "false"))") -- cgit v1.2.3 From 811453aa72c9e5f38666911d511e6fbb07315db7 Mon Sep 17 00:00:00 2001 From: Party Wumpus <48649272+PartyWumpus@users.noreply.github.com> Date: Wed, 11 Jan 2023 17:04:15 +0000 Subject: make cefdebugging file as user --- cli/install_prerelease.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/install_prerelease.sh b/cli/install_prerelease.sh index d38f0d5..1713357 100644 --- a/cli/install_prerelease.sh +++ b/cli/install_prerelease.sh @@ -11,7 +11,7 @@ HOMEBREW_FOLDER="${USER_DIR}/homebrew" rm -rf "${HOMEBREW_FOLDER}/services" sudo -u $SUDO_USER mkdir -p "${HOMEBREW_FOLDER}/services" sudo -u $SUDO_USER mkdir -p "${HOMEBREW_FOLDER}/plugins" -touch "${USER_DIR}/.steam/steam/.cef-enable-remote-debugging" +sudo -u $SUDO_USER touch "${USER_DIR}/.steam/steam/.cef-enable-remote-debugging" # Download latest release and install it RELEASE=$(curl -s 'https://api.github.com/repos/SteamDeckHomebrew/decky-loader/releases' | jq -r "first(.[] | select(.prerelease == "true"))") -- cgit v1.2.3 From 30c86a9688ccb47060ec8fec01e82db67db10f52 Mon Sep 17 00:00:00 2001 From: Party Wumpus <48649272+PartyWumpus@users.noreply.github.com> Date: Wed, 11 Jan 2023 17:06:36 +0000 Subject: disable CEF debugging on uninstall --- cli/uninstall.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cli/uninstall.sh b/cli/uninstall.sh index 988cf63..e2c7f15 100644 --- a/cli/uninstall.sh +++ b/cli/uninstall.sh @@ -17,3 +17,6 @@ rm -rf "/tmp/plugin_loader" # Cleanup services folder sudo rm "${HOMEBREW_FOLDER}/services/PluginLoader" + +# disable CEF debugging +sudo rm "${USER_DIR}/.steam/steam/.cef-enable-remote-debugging" -- cgit v1.2.3 From abe465b26b73eab3b339fdaebeeedde604a8ce1b Mon Sep 17 00:00:00 2001 From: Party Wumpus <48649272+PartyWumpus@users.noreply.github.com> Date: Wed, 11 Jan 2023 17:17:42 +0000 Subject: fix root ownership bug if people rerun installer --- gui/user_install_script.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/gui/user_install_script.sh b/gui/user_install_script.sh index 18ef7fe..376a7dd 100644 --- a/gui/user_install_script.sh +++ b/gui/user_install_script.sh @@ -94,7 +94,7 @@ rm -rf "${HOMEBREW_FOLDER}/services" sudo -u $SUDO_USER mkdir -p "${HOMEBREW_FOLDER}/services" sudo -u $SUDO_USER mkdir -p "${HOMEBREW_FOLDER}/plugins" sudo -u $SUDO_USER touch "${USER_DIR}/.steam/steam/.cef-enable-remote-debugging" - +$SUDO_USER echo "30" ; echo "# Finding latest $BRANCH"; if [ $BRANCH = 'prerelease' ] ; then RELEASE=$(curl -s 'https://api.github.com/repos/SteamDeckHomebrew/decky-loader/releases' | jq -r "first(.[] | select(.prerelease == "true"))") @@ -154,6 +154,14 @@ rm ${HOMEBREW_FOLDER}/services/plugin_loader-backup.service ${HOMEBREW_FOLDER}/s systemctl daemon-reload systemctl start plugin_loader systemctl enable plugin_loader + +# this (retroactively) fixes a bug where users who ran the installer would have homebrew owned by root instead of their user +# will likely be removed at some point in the future +if [ "$SUDO_USER" = "deck" ]; then + sudo chown -R deck:deck /home/deck/homebrew + sudo chown -R root:root /home/wumpus/homebrew/services/* +fi + echo "100" ; echo "# Install finished, installer can now be closed"; ) | zenity --progress \ -- cgit v1.2.3