16 Commits

View File

@ -48,9 +48,9 @@
############################################################################
# Check if script is run as root
if [ "$(id -u)" = 0 ]; then
echo "This script is not supposed to be run as root!"
exit 1
if [ "$(id -u)" -eq 0 ]; then
echo "This script is not supposed to be run as root!"
exit 1
fi
# Check for dependencies
@ -126,6 +126,11 @@ else
lug_logo="info"
fi
# Github repo and script version info
repo="the-sane/lug-helper"
releases_url="https://github.com/the-sane/lug-helper/releases"
current_version="v1.9.2"
############################################################################
############################################################################
@ -258,6 +263,7 @@ message() {
# This text will be displayed above the menu options.
# Zenity supports Pango Markup for text formatting.
# - The integer "menu_height" specifies the height of the zenity menu.
# - The string "cancel_label" should contain the text of the cancel button.
#
# The final element in each array is expected to be a quit option.
#
@ -279,6 +285,8 @@ menu() {
debug_print exit "Script error: The string 'menu_text_terminal' was not set\nbefore calling the menu function. Aborting."
elif [ -z "$menu_height" ]; then
debug_print exit "Script error: The string 'menu_height' was not set\nbefore calling the menu function. Aborting."
elif [ -z "$cancel_label" ]; then
debug_print exit "Script error: The string 'menu_height' was not set\nbefore calling the menu function. Aborting."
fi
# Use Zenity if it is available
@ -298,7 +306,7 @@ menu() {
done
# Display the zenity radio button menu
choice="$(zenity --list --radiolist --width="480" --height="$menu_height" --text="$menu_text_zenity" --title="Star Citizen LUG Helper" --hide-header --window-icon=$lug_logo --column="" --column="Option" "${zen_options[@]}" 2>/dev/null)"
choice="$(zenity --list --radiolist --width="480" --height="$menu_height" --text="$menu_text_zenity" --title="Star Citizen LUG Helper" --hide-header --cancel-label "$cancel_label" --window-icon=$lug_logo --column="" --column="Option" "${zen_options[@]}" 2>/dev/null)"
# Loop through the options array to match the chosen option
matched="false"
@ -472,7 +480,7 @@ getdirs() {
# $live_or_ptu is set in the set_version() function
############################################################################
# The game's user directory
user_dir="$game_path/$live_or_ptu/USER/Client/0/"
user_dir="$game_path/$live_or_ptu/USER/Client/0"
# The location within the USER directory to which the game exports keybinds
keybinds_dir="$user_dir/Controls/Mappings"
# Shaders directory
@ -483,6 +491,32 @@ getdirs() {
backup_path="$conf_dir/$conf_subdir"
}
# Display all directories currently used by this helper and Star Citizen
display_dirs() {
# Helper configs and keybinds
if [ -d "$conf_dir/$conf_subdir" ]; then
dirs_list+=("\n\nHelper configuration:\n$conf_dir/$conf_subdir\n\nKeybind backups:\n$conf_dir/$conf_subdir/keybinds")
fi
# Wine prefix
if [ -f "$conf_dir/$conf_subdir/$wine_conf" ]; then
dirs_list+="\n\nWine prefix:\n$(cat "$conf_dir/$conf_subdir/$wine_conf")"
fi
# Star Citizen installation
if [ -f "$conf_dir/$conf_subdir/$game_conf" ]; then
dirs_list+="\n\nStar Citizen game directory:\n$(cat "$conf_dir/$conf_subdir/$game_conf")"
fi
# Lutris runners
if [ -d "$runners_dir" ]; then
dirs_list+="\n\nLutris Runners:\n$runners_dir"
fi
message info "These directories are currently being used by this Helper and Star Citizen\n${dirs_list[@]}"
}
# Save exported keybinds, wipe the USER directory, and restore keybinds
sanitize() {
# Prompt user to back up the current keybinds in the game
@ -794,6 +828,9 @@ runner_select_delete() {
menu_height="400"
fi
# Set the label for the cancel button
cancel_label="Go Back"
# Call the menu function. It will use the options as configured above
menu
}
@ -824,9 +861,6 @@ runner_install() {
*.tar.xz)
runner_name="$(basename "$runner_file" .tar.xz)"
;;
*.sha512sum)
runner_name="$(basename "$runner_file" .tar.xz)"
;;
*)
debug_print exit "Unknown archive filetype in runner_install function. Aborting."
;;
@ -837,7 +871,6 @@ runner_install() {
# runner_select_install function below
if [ "$runner_url_type" = "github" ]; then
runner_dl_url="$(curl -s "$contributor_url" | grep "browser_download_url.*$runner_file" | cut -d \" -f4)"
debug_print continue "runner_dl_url= $runner_dl_url"
else
debug_print exit "Script error: Unknown api/url format in runner_sources array. Aborting."
fi
@ -882,7 +915,7 @@ runner_install() {
# Get the path of the first item listed in the archive
# This should either be a subdirectory or the path ./
# depending on how the archive was created
first_filepath="$(stdbuf -oL tar -tzf "$tmp_dir/$runner_file" | head -n 1)"
first_filepath="$(stdbuf -oL tar -tf "$tmp_dir/$runner_file" | head -n 1)"
# Extract the runner
case "$first_filepath" in
@ -925,7 +958,8 @@ runner_select_install() {
debug_print exit "Script error: The runner_select_install function expects a numerical argument. Aborting."
fi
# Store the url from the selected contributor
# Store info from the selected contributor
contributor_name="${runner_sources[$1]}"
contributor_url="${runner_sources[$1+1]}"
# Check the provided contributor url to make sure we know how to handle it
@ -940,15 +974,14 @@ runner_select_install() {
;;
esac
# Check for GlibC-Version if TKG is selected, as he requires 2.33
if [ "$contributor_url" = "https://api.github.com/repos/gort818/wine-sc-lug/releases" ]; then
printf "checking for glibc \n"
system_glibc=($(ldd --version | awk '/ldd/{print $NF}'))
printf "system glibc-versuib: $system_glibc \n"
# Check GlibC version against the requirements of the selected runner
if [ "$contributor_name" = "/dev/null" ]; then
required_glibc="2.33"
if [ "$(bc <<< "$required_glibc>$system_glibc")" == "1" ]; then
message warning "Your glibc version is too low, /dev/null requires v$required_glibc "
proton_manage
system_glibc="$(ldd --version | awk '/ldd/{print $NF}')"
if [ "$(bc <<< "$required_glibc > $system_glibc")" = "1" ]; then
message warning "Your glibc version is incompatible with the selected runner.\n\nSystem glibc: v$system_glibc\nMinimum required glibc: v$required_glibc"
return 1
fi
fi
@ -956,7 +989,7 @@ runner_select_install() {
# To add new sources, handle them here, in the if statement
# just above, and the runner_install function above
if [ "$runner_url_type" = "github" ]; then
runner_versions=($(curl -s "$contributor_url" | awk '/browser_download_url/ {print $2}' | xargs basename -a))
runner_versions=($(curl -s "$contributor_url" | awk '/browser_download_url/ {print $2}' | grep -vE "*.sha512sum" | xargs basename -a))
else
debug_print exit "Script error: Unknown api/url format in runner_sources array. Aborting."
fi
@ -992,14 +1025,12 @@ runner_select_install() {
runner_name="$(basename "${runner_versions[i]}" .tar.xz)"
;;
*)
runner_name="skip"
debug_print exit "Unknown archive filetype in runner_select_install function. Aborting."
;;
esac
# Add the runner names to the menu
if [ "$runner_name" = "skip" ]; then
continue
elif [ -d "$runners_dir/$runner_name" ]; then
if [ -d "$runners_dir/$runner_name" ]; then
menu_options+=("$runner_name [installed]")
else
menu_options+=("$runner_name")
@ -1017,6 +1048,9 @@ runner_select_install() {
menu_height="400"
fi
# Set the label for the cancel button
cancel_label="Go Back"
# Call the menu function. It will use the options as configured above
menu
}
@ -1064,6 +1098,9 @@ runner_manage() {
# Calculate the total height the menu should be
menu_height="$(($menu_option_height * ${#menu_options[@]} + $menu_text_height))"
# Set the label for the cancel button
cancel_label="Go Back"
# Call the menu function. It will use the options as configured above
menu
done
@ -1191,17 +1228,21 @@ maintenance_menu() {
sanitize_msg="Delete my Star Citizen USER folder and preserve my keybinds"
shaders_msg="Delete my shaders folder only (Do this after each game update)"
vidcache_msg="Delete my DXVK cache"
dirs_msg="Display Helper and Star Citizen directories"
reset_msg="Reset Helper configs"
quit_msg="Return to the main menu"
# Set the options to be displayed in the menu
menu_options=("$version_msg" "$sanitize_msg" "$shaders_msg" "$vidcache_msg" "$reset_msg" "$quit_msg")
menu_options=("$version_msg" "$sanitize_msg" "$shaders_msg" "$vidcache_msg" "$dirs_msg" "$reset_msg" "$quit_msg")
# Set the corresponding functions to be called for each of the options
menu_actions=("set_version" "sanitize" "rm_shaders" "rm_dxvkcache" "reset_helper" "menu_loop_done")
menu_actions=("set_version" "sanitize" "rm_shaders" "rm_dxvkcache" "display_dirs" "reset_helper" "menu_loop_done")
# Calculate the total height the menu should be
menu_height="$(($menu_option_height * ${#menu_options[@]} + $menu_text_height))"
# Set the label for the cancel button
cancel_label="Go Back"
# Call the menu function. It will use the options as configured above
menu
done
@ -1210,7 +1251,7 @@ maintenance_menu() {
# Get a random Penguin's Star Citizen referral code
referral_randomizer() {
# Populate the referral codes array
referral_codes=("STAR-4TZD-6KMM" "STAR-4XM2-VM99" "STAR-2NPY-FCR2" "STAR-T9Z9-7W6P" "STAR-VLBF-W2QR" "STAR-BYR6-YHMF" "STAR-3X2H-VZMX" "STAR-BRWN-FB9T" "STAR-FG6Y-N4Q4" "STAR-VLD6-VZRG" "STAR-T9KF-LV77" "STAR-4XHB-R7RF" "STAR-9NVF-MRN7" "STAR-3Q4W-9TC3" "STAR-3SBK-7QTT" "STAR-XFBT-9TTK" "STAR-F3H9-YPHN" "STAR-BYK6-RCCL" "STAR-XCKH-W6T7" "STAR-H292-39WK" "STAR-ZRT5-PJB7" "STAR-GMBP-SH9Y" "STAR-PLWB-LMFY" "STAR-TNZN-H4ZT" "STAR-T5G5-L2GJ" "STAR-6TPV-7QH2" "STAR-THHD-TV3Y")
referral_codes=("STAR-4TZD-6KMM" "STAR-4XM2-VM99" "STAR-2NPY-FCR2" "STAR-T9Z9-7W6P" "STAR-VLBF-W2QR" "STAR-BYR6-YHMF" "STAR-3X2H-VZMX" "STAR-BRWN-FB9T" "STAR-FG6Y-N4Q4" "STAR-VLD6-VZRG" "STAR-T9KF-LV77" "STAR-4XHB-R7RF" "STAR-9NVF-MRN7" "STAR-3Q4W-9TC3" "STAR-3SBK-7QTT" "STAR-XFBT-9TTK" "STAR-F3H9-YPHN" "STAR-BYK6-RCCL" "STAR-XCKH-W6T7" "STAR-H292-39WK" "STAR-ZRT5-PJB7" "STAR-GMBP-SH9Y" "STAR-PLWB-LMFY" "STAR-TNZN-H4ZT" "STAR-T5G5-L2GJ" "STAR-6TPV-7QH2" "STAR-THHD-TV3Y" "STAR-7ZFS-PK2L" "STAR-SRQN-43TB" "STAR-9TDG-D4H9" "STAR-BPH3-THJC" "STAR-HL3M-R5KC" "STAR-GBS5-LTVB" "STAR-CJ3Y-KZZ4" "STAR-5GRM-7HBY" "STAR-G2GX-Y2QJ" "STAR-YWY3-H4XX" "STAR-6VGM-PTKC" "STAR-T6MZ-QFHX" "STAR-T2K6-LXFW" "STAR-XN25-9CJJ")
# Pick a random array element. Scale a floating point number for
# a more random distribution than simply calling RANDOM
random_code="${referral_codes[$(awk '{srand($2); print int(rand()*$1)}' <<< "${#referral_codes[@]} $RANDOM")]}"
@ -1242,6 +1283,19 @@ reset_helper() {
fi
}
# Get the latest release version of a repo. Expects "user/repo_name" as input
# Credits for this go to https://gist.github.com/lukechilds/a83e1d7127b78fef38c2914c4ececc3c
get_latest_release() {
# Sanity check
if [ "$#" -lt 1 ]; then
debug_print exit "Script error: The get_latest_release function expects one argument. Aborting."
fi
curl --silent "https://api.github.com/repos/$1/releases/latest" | # Get latest release from GitHub api
grep '"tag_name":' | # Get tag line
sed -E 's/.*"([^"]+)".*/\1/' # Pluck JSON value
}
quit() {
exit 0
}
@ -1261,22 +1315,17 @@ fi
live_or_ptu="$live_dir"
lutris_needs_restart="false"
# Credits for this go to https://gist.github.com/lukechilds/a83e1d7127b78fef38c2914c4ececc3c
get_latest_release() {
curl --silent "https://api.github.com/repos/$1/releases/latest" | # Get latest release from GitHub api
grep '"tag_name":' | # Get tag line
sed -E 's/.*"([^"]+)".*/\1/' # Pluck JSON value
}
# Check if a new Verison of the script is available
repo="the-sane/lug-helper"
current_version="v1.9.1"
# Check if a newer verison of the script is available
latest_version=$(get_latest_release "$repo")
if [ "$latest_version" != "$current_version" ]; then
# Print to stdout and also try warning the user through message
printf "New version available, check https://github.com/the-sane/lug-helper/releases \n"
message info "New version available, check <a href='https://github.com/the-sane/lug-helper/releases'>https://github.com/the-sane/lug-helper/releases</a> \n"
if [ "$use_zenity" -eq 1 ]; then
releases_url_formatted="<a href='$releases_url'>$releases_url</a>"
else
releases_url_formatted="$releases_url"
fi
message info "The latest version of the LUG Helper is $latest_version\nYou are using $current_version\n\nYou can download new releases here:\n$releases_url_formatted"
fi
# If invoked with command line arguments, process them and exit
@ -1294,8 +1343,9 @@ Usage: lug-helper <options>
-s, --delete-shaders Delete Star Citizen shaders directory
-c, --delete-dxvk-cache Delete Star Citizen dxvk cache file
-t, --target=[live|ptu] Target LIVE or PTU (default live)
-g, --use-gui=[yes|no] Use Zenity GUI (default yes)
-g, --use-gui=[yes|no] Use Zenity GUI if available (default yes)
-r, --get-referral Get a random LUG member's Star Citizen referral code
-d, --show-directories Show all Star Citizen and LUG Helper directories
-x, --reset-helper Delete saved lug-helper configs
"
exit 0
@ -1344,6 +1394,9 @@ Usage: lug-helper <options>
--get-referral | -r )
cargs+=("referral_randomizer")
;;
--show-directories | -d )
cargs+=("display_dirs")
;;
--reset-helper | -x )
cargs+=("reset_helper")
;;
@ -1375,7 +1428,7 @@ while true; do
# Configure the menu options
preflight_msg="Preflight Check (System Optimization)"
runners_msg="Manage Lutris Runners"
maintenance_msg="User Folder Maintenance and Troubleshooting"
maintenance_msg="Maintenance and Troubleshooting"
randomizer_msg="Get a random Penguin's Star Citizen referral code"
quit_msg="Quit"
@ -1387,6 +1440,9 @@ while true; do
# Calculate the total height the menu should be
menu_height="$(($menu_option_height * ${#menu_options[@]} + $menu_text_height))"
# Set the label for the cancel button
cancel_label="Quit"
# Call the menu function. It will use the options as configured above
menu
done