mirror of
https://github.com/the-sane/lug-helper.git
synced 2025-01-15 20:40:36 +00:00
Compare commits
No commits in common. "fdfd512bfc93d24293f018ddb707fd0803d0d510" and "1844bfda135ffa02888ccfda9c91ab71e136e485" have entirely different histories.
fdfd512bfc
...
1844bfda13
510
lug-helper.sh
510
lug-helper.sh
@ -118,11 +118,8 @@ shaders_subdir="shaders"
|
||||
|
||||
######## Runners ###########################################################
|
||||
|
||||
# Lutris native wine runners directory
|
||||
runners_dir_native="$data_dir/lutris/runners/wine"
|
||||
# Lutris flatpak wine runners directory
|
||||
runners_dir_flatpak="$HOME/.var/app/net.lutris.Lutris/data/lutris/runners/wine"
|
||||
|
||||
# Lutris wine runners directory
|
||||
runners_dir="$data_dir/lutris/runners/wine"
|
||||
# URLs for downloading Lutris runners
|
||||
# Elements in this array must be added in quoted pairs of: "description" "url"
|
||||
# The first string in the pair is expected to contain the runner description
|
||||
@ -136,11 +133,8 @@ runner_sources=(
|
||||
|
||||
######## DXVK ##############################################################
|
||||
|
||||
# Lutris native dxvk directory
|
||||
dxvk_dir_native="$data_dir/lutris/runtime/dxvk"
|
||||
# Lutris flatpak dxvk directory
|
||||
dxvk_dir_flatpak="$HOME/.var/app/net.lutris.Lutris/data/lutris/runtime/dxvk"
|
||||
|
||||
# Lutris dxvk directory
|
||||
dxvk_dir="$data_dir/lutris/runtime/dxvk"
|
||||
# URLs for downloading dxvk versions
|
||||
# Elements in this array must be added in quoted pairs of: "description" "url"
|
||||
# The first string in the pair is expected to contain the runner description
|
||||
@ -191,7 +185,6 @@ current_version="v1.22"
|
||||
|
||||
############################################################################
|
||||
############################################################################
|
||||
############################################################################
|
||||
|
||||
|
||||
# Echo a formatted debug message to the terminal and optionally exit
|
||||
@ -224,39 +217,6 @@ debug_print() {
|
||||
esac
|
||||
}
|
||||
|
||||
# Try to execute a supplied command as root
|
||||
# Expects one string argument
|
||||
try_exec() {
|
||||
# This function expects one string arguments
|
||||
if [ "$#" -lt 1 ]; then
|
||||
printf "\nScript error: The try_exec() function expects an argument. Aborting.\n"
|
||||
read -n 1 -s -p "Press any key..."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
retval=0
|
||||
# Use pollkit's pkexec for gui authentication with a fallback to sudo
|
||||
if [ -x "$(command -v pkexec)" ]; then
|
||||
pkexec sh -c "$1"
|
||||
|
||||
# Check the return value
|
||||
if [ "$?" -eq 126 ] || [ "$?" -eq 127 ]; then
|
||||
# User cancel or error
|
||||
retval=1
|
||||
fi
|
||||
else
|
||||
sudo sh -c "$1"
|
||||
|
||||
# Check the return value
|
||||
if [ "$?" -eq 1 ]; then
|
||||
# Error
|
||||
retval=1
|
||||
fi
|
||||
fi
|
||||
|
||||
return "$retval"
|
||||
}
|
||||
|
||||
# Display a message to the user.
|
||||
# Expects the first argument to indicate the message type, followed by
|
||||
# a string of arguments that will be passed to zenity or echoed to the user.
|
||||
@ -276,29 +236,16 @@ message() {
|
||||
# info message
|
||||
# call format: message info "text to display"
|
||||
margs=("--info" "--window-icon=\"$lug_logo\"" "--no-wrap" "--text=")
|
||||
shift 1 # drop the message type argument and shift up to the text
|
||||
;;
|
||||
"warning")
|
||||
# warning message
|
||||
# call format: message warning "text to display"
|
||||
margs=("--warning" "--window-icon=\"$lug_logo\"" "--text=")
|
||||
shift 1 # drop the message type argument and shift up to the text
|
||||
;;
|
||||
"question")
|
||||
# question
|
||||
# call format: if message question "question to ask?"; then...
|
||||
margs=("--question" "--window-icon=\"$lug_logo\"" "--text=")
|
||||
shift 1 # drop the message type argument and shift up to the text
|
||||
;;
|
||||
"options")
|
||||
# formats the buttons with two custom options
|
||||
# call format: if message options left_button_name right_button_name "which one do you want?"; then...
|
||||
# The right button returns 0 (ok), the left button returns 1 (cancel)
|
||||
if [ "$#" -lt 4 ]; then
|
||||
debug_print exit "Script error: The options type in the message function expects four arguments. Aborting."
|
||||
fi
|
||||
margs=("--question" "--cancel-label=$2" "--ok-label=$3" "--window-icon=\"$lug_logo\"" "--text=")
|
||||
shift 3 # drop the type and button label arguments and shift up to the text
|
||||
;;
|
||||
*)
|
||||
debug_print exit "Script Error: Invalid message type passed to the message function. Aborting."
|
||||
@ -306,6 +253,7 @@ message() {
|
||||
esac
|
||||
|
||||
# Display the message
|
||||
shift 1 # drop the first argument and shift the remaining up one
|
||||
zenity "${margs[@]}""$@" --width="400" --title="Star Citizen LUG Helper" 2>/dev/null
|
||||
else
|
||||
# Fall back to text-based messages when zenity is not available
|
||||
@ -323,6 +271,7 @@ message() {
|
||||
clear
|
||||
printf "\n$2\n\n"
|
||||
read -n 1 -s -p "Press any key..."
|
||||
return 0
|
||||
;;
|
||||
"question")
|
||||
# question
|
||||
@ -391,7 +340,7 @@ menu() {
|
||||
elif [ -z "$cancel_label" ]; then
|
||||
debug_print exit "Script error: The string 'cancel_label' was not set\nbefore calling the menu function. Aborting."
|
||||
fi
|
||||
|
||||
|
||||
# Use Zenity if it is available
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
# Format the options array for Zenity by adding
|
||||
@ -407,7 +356,7 @@ menu() {
|
||||
zen_options+=("${menu_options[i]}")
|
||||
fi
|
||||
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 --cancel-label "$cancel_label" --window-icon="$lug_logo" --column="" --column="Option" "${zen_options[@]}" 2>/dev/null)"
|
||||
|
||||
@ -596,7 +545,7 @@ getdirs() {
|
||||
|
||||
# Display all directories currently used by this helper and Star Citizen
|
||||
display_dirs() {
|
||||
unset dirs_list
|
||||
declare -a dirs_list
|
||||
|
||||
# Helper configs and keybinds
|
||||
if [ -d "$conf_dir/$conf_subdir" ]; then
|
||||
@ -619,25 +568,13 @@ display_dirs() {
|
||||
fi
|
||||
|
||||
# Lutris runners
|
||||
if [ -d "$runners_dir_native" ] || [ -d "$runners_dir_flatpak" ]; then
|
||||
dirs_list+="\n\nLutris Runners:"
|
||||
if [ -d "$runners_dir_native" ]; then
|
||||
dirs_list+="\n$runners_dir_native"
|
||||
fi
|
||||
if [ -d "$runners_dir_flatpak" ]; then
|
||||
dirs_list+="\n$runners_dir_flatpak"
|
||||
fi
|
||||
if [ -d "$runners_dir" ]; then
|
||||
dirs_list+="\n\nLutris Runners:\n$runners_dir"
|
||||
fi
|
||||
|
||||
# Lutris dxvk
|
||||
if [ -d "$dxvk_dir_native" ] || [ -d "$dxvk_dir_flatpak" ]; then
|
||||
dirs_list+="\n\nLutris DXVK Versions:"
|
||||
if [ -d "$dxvk_dir_native" ]; then
|
||||
dirs_list+="\n$dxvk_dir_native"
|
||||
fi
|
||||
if [ -d "$dxvk_dir_flatpak" ]; then
|
||||
dirs_list+="\n$dxvk_dir_flatpak"
|
||||
fi
|
||||
if [ -d "$runners_dir" ]; then
|
||||
dirs_list+="\n\nLutris DXVK Versions:\n$dxvk_dir"
|
||||
fi
|
||||
|
||||
# Format the info header
|
||||
@ -702,12 +639,8 @@ rm_userdir() {
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
############################################################################
|
||||
######## begin preflight check functions ###################################
|
||||
############################################################################
|
||||
######## begin mapcount functions ##########################################
|
||||
############################################################################
|
||||
#--------------------- begin preflight check functions -----------------------#
|
||||
#------------------------- begin mapcount functions --------------------------#
|
||||
|
||||
# Check if setting vm.max_map_count was successful
|
||||
mapcount_confirm() {
|
||||
@ -728,11 +661,11 @@ mapcount_set() {
|
||||
if [ -d "/etc/sysctl.d" ]; then
|
||||
# Newer versions of sysctl
|
||||
preflight_actions+=('printf "\n# Added by LUG-Helper:\nvm.max_map_count = 16777216\n" > /etc/sysctl.d/20-starcitizen-max_map_count.conf && sysctl --system')
|
||||
preflight_results+=("The vm.max_map_count configuration has been added to:\n/etc/sysctl.d/20-starcitizen-max_map_count.conf")
|
||||
preflight_results+=("The vm.max_map_count configuration has been appended to:\n/etc/sysctl.d/20-starcitizen-max_map_count.conf")
|
||||
else
|
||||
# Older versions of sysctl
|
||||
preflight_actions+=('printf "\n# Added by LUG-Helper:\nvm.max_map_count = 16777216" >> /etc/sysctl.conf && sysctl -p')
|
||||
preflight_results+=("The vm.max_map_count configuration has been added to:\n/etc/sysctl.conf")
|
||||
preflight_results+=("The vm.max_map_count configuration has been appended to:\n/etc/sysctl.conf")
|
||||
fi
|
||||
|
||||
# Verify that the setting took effect
|
||||
@ -771,13 +704,9 @@ mapcount_check() {
|
||||
fi
|
||||
}
|
||||
|
||||
############################################################################
|
||||
######## end mapcount functions ############################################
|
||||
############################################################################
|
||||
#-------------------------- end mapcount functions ---------------------------#
|
||||
|
||||
############################################################################
|
||||
######## begin filelimit functions #########################################
|
||||
############################################################################
|
||||
#------------------------ begin filelimit functions --------------------------#
|
||||
|
||||
# Check if setting the open file descriptors limit was successful
|
||||
filelimit_confirm() {
|
||||
@ -835,9 +764,7 @@ filelimit_check() {
|
||||
fi
|
||||
}
|
||||
|
||||
############################################################################
|
||||
######## end filelimit functions ###########################################
|
||||
############################################################################
|
||||
#------------------------- end filelimit functions ---------------------------#
|
||||
|
||||
# Check if WINE is installed
|
||||
wine_check() {
|
||||
@ -952,11 +879,11 @@ preflight_check() {
|
||||
|
||||
# Execute the actions set by the functions
|
||||
if [ ! -z "$preflight_actions_string" ]; then
|
||||
# Try to execute the actions as root
|
||||
try_exec "$preflight_actions_string"
|
||||
if [ "$?" -eq 1 ]; then
|
||||
message info "Authentication failed or there was an error.\nSee terminal for more information.\n\nReturning to main menu."
|
||||
return 0
|
||||
# Use pollkit's pkexec for gui with a fallback to sudo
|
||||
if [ -x "$(command -v pkexec)" ]; then
|
||||
pkexec sh -c "$preflight_actions_string"
|
||||
else
|
||||
sudo sh -c "$preflight_actions_string"
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -986,30 +913,26 @@ preflight_check() {
|
||||
fi
|
||||
}
|
||||
|
||||
############################################################################
|
||||
######## end preflight check functions #####################################
|
||||
############################################################################
|
||||
#------------------------- end preflight check functions ---------------------#
|
||||
|
||||
############################################################################
|
||||
######## begin download functions ##########################################
|
||||
############################################################################
|
||||
#------------------------- begin download functions ----------------------------#
|
||||
|
||||
# Detect if lutris is installed
|
||||
lutris_detect() {
|
||||
lutris_installed="false"
|
||||
lutris_native="false"
|
||||
lutris_standard="false"
|
||||
lutris_flatpak="false"
|
||||
|
||||
# Detect native lutris
|
||||
# Detect standard lutris
|
||||
if [ -x "$(command -v lutris)" ]; then
|
||||
# Native Lutris is installed
|
||||
# Standard Lutris is installed
|
||||
lutris_installed="true"
|
||||
lutris_native="true"
|
||||
lutris_standard="true"
|
||||
fi
|
||||
|
||||
# Detect flatpak lutris
|
||||
if [ -x "$(command -v flatpak)" ]; then
|
||||
flatpak info net.lutris.Lutris >/dev/null 2>&1
|
||||
flatpak info lutris >/dev/null 2>&1
|
||||
if [ "$?" -eq 0 ]; then
|
||||
lutris_installed="true"
|
||||
lutris_flatpak="true"
|
||||
@ -1019,69 +942,15 @@ lutris_detect() {
|
||||
|
||||
# Restart lutris if necessary
|
||||
lutris_restart() {
|
||||
lutris_detect
|
||||
if [ "$lutris_needs_restart" = "true" ] && [ "$(pgrep -f lutris)" ]; then
|
||||
if message question "Lutris must be restarted to detect the changes.\nWould you like this Helper to restart it for you?"; then
|
||||
# Detect which version of Lutris is running and restart it
|
||||
if [ "$lutris_native" = "true" ] && pgrep -f lutris | xargs ps -fp | grep -q "/usr/bin/lutris"; then
|
||||
# Native Lutris is running
|
||||
debug_print continue "Restarting native Lutris..."
|
||||
pkill -f -SIGTERM lutris && nohup lutris </dev/null &>/dev/null &
|
||||
fi
|
||||
if [ "$lutris_flatpak" = "true" ] && pgrep -f lutris | xargs ps -fp | grep -q "/app/bin/lutris"; then
|
||||
# Flatpak Lutris is running
|
||||
debug_print continue "Restarting flatpak Lutris..."
|
||||
pkill -f -SIGTERM lutris && nohup flatpak run net.lutris.Lutris </dev/null &>/dev/null &
|
||||
fi
|
||||
debug_print continue "Restarting Lutris..."
|
||||
pkill -f -SIGTERM lutris && nohup lutris </dev/null &>/dev/null &
|
||||
fi
|
||||
fi
|
||||
lutris_needs_restart="false"
|
||||
}
|
||||
|
||||
# Get an array of directories used by Lutris
|
||||
# Supports native install and flatpak
|
||||
# Array must be formatted in pairs of ("[type]" "[directory]")
|
||||
# Takes an argument to specify the type to return, ie "runner" or "dxvk"
|
||||
get_lutris_dirs() {
|
||||
# Sanity check
|
||||
if [ "$#" -lt 1 ]; then
|
||||
debug_print exit "Script error: The get_lutris_dirs function expects one argument. Aborting."
|
||||
fi
|
||||
|
||||
# Detect the type of Lutris install
|
||||
lutris_detect
|
||||
|
||||
# Add lutris directories to an array
|
||||
unset lutris_dirs
|
||||
case "$1" in
|
||||
"runner")
|
||||
# Native Lutris install
|
||||
if [ "$lutris_native" = "true" ]; then
|
||||
lutris_dirs+=("native" "$runners_dir_native")
|
||||
fi
|
||||
# Flatpak lutris install
|
||||
if [ "$lutris_flatpak" = "true" ]; then
|
||||
lutris_dirs+=("flatpak" "$runners_dir_flatpak")
|
||||
fi
|
||||
;;
|
||||
"dxvk")
|
||||
# Native Lutris install
|
||||
if [ "$lutris_native" = "true" ]; then
|
||||
lutris_dirs+=("native" "$dxvk_dir_native")
|
||||
fi
|
||||
# Flatpak lutris install
|
||||
if [ "$lutris_flatpak" = "true" ]; then
|
||||
lutris_dirs+=("flatpak" "$dxvk_dir_flatpak")
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
printf "lug-helper.sh: Unknown argument provided to get_lutris_dirs function. Aborting.\n" 1>&2
|
||||
read -n 1 -s -p "Press any key..."
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Perform post-download actions, display messages or instructions
|
||||
# Expects the variables message_heading, post_download_msg_text,
|
||||
# post_download_msg_italics, and downloaded_item_name
|
||||
@ -1120,10 +989,10 @@ post_download() {
|
||||
display_post_download_msg="false"
|
||||
}
|
||||
|
||||
# Uninstall the selected item. Called by download_select_install()
|
||||
# Note: The array installed_items is expected to be set before calling this function
|
||||
# Uninstall the selected item
|
||||
download_delete() {
|
||||
# This function expects an index number for the array installed_items to be passed in as an argument
|
||||
# This function expects an index number for the array
|
||||
# installed_items to be passed in as an argument
|
||||
if [ -z "$1" ]; then
|
||||
debug_print exit "Script error: The download_delete function expects an argument. Aborting."
|
||||
fi
|
||||
@ -1136,7 +1005,7 @@ download_delete() {
|
||||
fi
|
||||
}
|
||||
|
||||
# List installed items for deletion. Called by download_manage()
|
||||
# List installed items for deletion
|
||||
download_select_delete() {
|
||||
# Configure the menu
|
||||
menu_text_zenity="Select the $download_type you want to remove:"
|
||||
@ -1144,31 +1013,19 @@ download_select_delete() {
|
||||
menu_text_height="65"
|
||||
goback="Return to the $download_type management menu"
|
||||
unset installed_items
|
||||
unset installed_item_names
|
||||
unset menu_options
|
||||
unset menu_actions
|
||||
|
||||
# Find all installed items in the download destinations
|
||||
for (( i=1; i<"${#download_dirs[@]}"; i=i+2 )); do
|
||||
# Loop through all download destinations
|
||||
# Odd numbered elements will contain the download destination's path
|
||||
for item in "${download_dirs[i]}"/*; do
|
||||
if [ -d "$item" ]; then
|
||||
if [ "${#download_dirs[@]}" -eq 2 ]; then
|
||||
# We're deleting from one location
|
||||
installed_item_names+=("$(basename "$item")")
|
||||
else
|
||||
# We're deleting from multiple locations so label each one
|
||||
installed_item_names+=("$(basename "$item [${download_dirs[i-1]}]")")
|
||||
fi
|
||||
installed_items+=("$item")
|
||||
fi
|
||||
done
|
||||
|
||||
# Create an array containing all directories in the download_dir
|
||||
for items_list in "$download_dir"/*; do
|
||||
if [ -d "$items_list" ]; then
|
||||
installed_items+=("$items_list")
|
||||
fi
|
||||
done
|
||||
|
||||
# Create menu options for the installed items
|
||||
for (( i=0; i<"${#installed_items[@]}"; i++ )); do
|
||||
menu_options+=("${installed_item_names[i]}")
|
||||
menu_options+=("$(basename "${installed_items[i]}")")
|
||||
menu_actions+=("download_delete $i")
|
||||
done
|
||||
|
||||
@ -1189,8 +1046,9 @@ download_select_delete() {
|
||||
menu
|
||||
}
|
||||
|
||||
# Download and install the selected item. Called by download_select_install()
|
||||
# Note: The variables download_versions, contributor_url, and download_url_type are expected to be set before calling this function
|
||||
# Download and install the selected item
|
||||
# Note: The variables download_versions, contributor_url, and download_url_type
|
||||
# are expected to be set before calling this function
|
||||
download_install() {
|
||||
# This function expects an index number for the array
|
||||
# download_versions to be passed in as an argument
|
||||
@ -1218,10 +1076,16 @@ download_install() {
|
||||
download_name="$(basename "$download_file" .tar.zst)"
|
||||
;;
|
||||
*)
|
||||
debug_print exit "Script error: Unknown archive filetype in download_install function. Aborting."
|
||||
debug_print exit "Unknown archive filetype in download_install function. Aborting."
|
||||
;;
|
||||
esac
|
||||
|
||||
# Check if this file has already been installed
|
||||
if [ -d "$download_dir/$download_name" ]; then
|
||||
message info "The selected $download_type is already installed:\n\n$download_name"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Get the selected download url
|
||||
# To add new sources, handle them here and in the
|
||||
# download_select_install function below
|
||||
@ -1299,25 +1163,14 @@ download_install() {
|
||||
# If the archive contains only one directory, install that directory
|
||||
# We rename it to the name of the archive in case it is different
|
||||
# so we can easily detect installed items in download_select_install()
|
||||
for (( i=1; i<"${#download_dirs[@]}"; i=i+2 )); do
|
||||
# Loop through all download destinations, installing to each one
|
||||
# Odd numbered elements will contain the download destination's path
|
||||
if [ -d "${download_dirs[i]}/$download_name" ]; then
|
||||
# This item has already been installed. Delete it before reinstalling
|
||||
debug_print continue "$download_type exists, deleting ${download_dirs[i]}/$download_name..."
|
||||
rm -r "${download_dirs[i]}/$download_name"
|
||||
debug_print continue "Reinstalling $download_type into ${download_dirs[i]}/$download_name..."
|
||||
else
|
||||
debug_print continue "Installing $download_type into ${download_dirs[i]}/$download_name..."
|
||||
fi
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
# Use Zenity progress bar
|
||||
mkdir -p "${download_dirs[i]}" && cp -r "$tmp_dir/$download_name/$extracted_dir" "${download_dirs[i]}/$download_name" | \
|
||||
zenity --progress --pulsate --no-cancel --auto-close --title="Star Citizen LUG Helper" --text="Installing ${download_type}...\n" 2>/dev/null
|
||||
else
|
||||
mkdir -p "${download_dirs[i]}" && cp -r "$tmp_dir/$download_name/$extracted_dir" "${download_dirs[i]}/$download_name"
|
||||
fi
|
||||
done
|
||||
debug_print continue "Installing $download_type into $download_dir/$download_name..."
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
# Use Zenity progress bar
|
||||
mkdir -p "$download_dir" && cp -r "$tmp_dir/$download_name/$extracted_dir" "$download_dir/$download_name" | \
|
||||
zenity --progress --pulsate --no-cancel --auto-close --title="Star Citizen LUG Helper" --text="Installing ${download_type}...\n" 2>/dev/null
|
||||
else
|
||||
mkdir -p "$download_dir" && cp -r "$tmp_dir/$download_name/$extracted_dir" "$download_dir/$download_name"
|
||||
fi
|
||||
|
||||
# We need to restart Lutris for the download to be detected
|
||||
lutris_needs_restart="true"
|
||||
@ -1328,25 +1181,14 @@ download_install() {
|
||||
elif [ "$num_dirs" -gt 1 ] || [ "$num_files" -gt 0 ]; then
|
||||
# If the archive contains more than one directory or
|
||||
# one or more files, we must create a subdirectory
|
||||
for (( i=1; i<"${#download_dirs[@]}"; i=i+2 )); do
|
||||
# Loop through all download destinations, installing to each one
|
||||
# Odd numbered elements will contain the download destination's path
|
||||
if [ -d "${download_dirs[i]}/$download_name" ]; then
|
||||
# This item has already been installed. Delete it before reinstalling
|
||||
debug_print continue "$download_type exists, deleting ${download_dirs[i]}/$download_name..."
|
||||
rm -r "${download_dirs[i]}/$download_name"
|
||||
debug_print continue "Reinstalling $download_type into ${download_dirs[i]}/$download_name..."
|
||||
else
|
||||
debug_print continue "Installing $download_type into ${download_dirs[i]}/$download_name..."
|
||||
fi
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
# Use Zenity progress bar
|
||||
mkdir -p "${download_dirs[i]}/$download_name" && cp -r "$tmp_dir"/"$download_name"/* "${download_dirs[i]}"/"$download_name" | \
|
||||
zenity --progress --pulsate --no-cancel --auto-close --title="Star Citizen LUG Helper" --text="Installing ${download_type}...\n" 2>/dev/null
|
||||
else
|
||||
mkdir -p "${download_dirs[i]}/$download_name" && cp -r "$tmp_dir"/"$download_name"/* "${download_dirs[i]}"/"$download_name"
|
||||
fi
|
||||
done
|
||||
debug_print continue "Installing $download_type into $download_dir/$download_name..."
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
# Use Zenity progress bar
|
||||
mkdir -p "$download_dir/$download_name" && cp -r "$tmp_dir"/"$download_name"/* "$download_dir"/"$download_name" | \
|
||||
zenity --progress --pulsate --no-cancel --auto-close --title="Star Citizen LUG Helper" --text="Installing ${download_type}...\n" 2>/dev/null
|
||||
else
|
||||
mkdir -p "$download_dir/$download_name" && cp -r "$tmp_dir"/"$download_name"/* "$download_dir"/"$download_name"
|
||||
fi
|
||||
|
||||
# We need to restart Lutris for the download to be detected
|
||||
lutris_needs_restart="true"
|
||||
@ -1357,6 +1199,7 @@ download_install() {
|
||||
else
|
||||
# Some unexpected combination of directories and files
|
||||
debug_print exit "Script error: Unexpected archive contents in download_install function. Aborting"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Cleanup tmp download
|
||||
@ -1365,7 +1208,7 @@ download_install() {
|
||||
rm -r "$tmp_dir/$download_name"
|
||||
}
|
||||
|
||||
# List available items for download. Called by download_manage()
|
||||
# List available items for download
|
||||
download_select_install() {
|
||||
# This function expects an element number for the sources array
|
||||
# to be passed in as an argument
|
||||
@ -1424,7 +1267,7 @@ download_select_install() {
|
||||
goback="Return to the $download_type management menu"
|
||||
unset menu_options
|
||||
unset menu_actions
|
||||
|
||||
|
||||
# Iterate through the versions, check if they are installed,
|
||||
# and add them to the menu options
|
||||
# To add new file extensions, handle them here and in
|
||||
@ -1455,44 +1298,12 @@ download_select_install() {
|
||||
;;
|
||||
esac
|
||||
|
||||
# Create a list of locations where the file is already installed
|
||||
unset installed_types
|
||||
for (( j=0; j<"${#download_dirs[@]}"; j=j+2 )); do
|
||||
# Loop through all download destinations to get installed types
|
||||
# Even numbered elements will contain the download destination type (ie. native/flatpak)
|
||||
if [ -d "${download_dirs[j+1]}/$download_name" ]; then
|
||||
installed_types+=("${download_dirs[j]}")
|
||||
fi
|
||||
done
|
||||
|
||||
# Build the menu item
|
||||
unset menu_option_text
|
||||
if [ "${#download_dirs[@]}" -eq 2 ]; then
|
||||
# We're only installing to one location
|
||||
if [ -d "${download_dirs[1]}/$download_name" ]; then
|
||||
menu_option_text="$download_name [installed]"
|
||||
else
|
||||
# The file is not installed
|
||||
menu_option_text="$download_name"
|
||||
fi
|
||||
else
|
||||
# We're installing to multiple locations
|
||||
if [ "${#installed_types[@]}" -gt 0 ]; then
|
||||
# The file is already installed
|
||||
menu_option_text="$download_name [installed:"
|
||||
for (( j=0; j<"${#installed_types[@]}"; j++ )); do
|
||||
# Add labels for each installed location
|
||||
menu_option_text="$menu_option_text ${installed_types[j]}"
|
||||
done
|
||||
# Complete the menu text
|
||||
menu_option_text="$menu_option_text]"
|
||||
else
|
||||
# The file is not installed
|
||||
menu_option_text="$download_name"
|
||||
fi
|
||||
fi
|
||||
# Add the file names to the menu
|
||||
menu_options+=("$menu_option_text")
|
||||
if [ -d "$download_dir/$download_name" ]; then
|
||||
menu_options+=("$download_name [installed]")
|
||||
else
|
||||
menu_options+=("$download_name")
|
||||
fi
|
||||
menu_actions+=("download_install $i")
|
||||
|
||||
# Increment the added items counter
|
||||
@ -1516,7 +1327,7 @@ download_select_install() {
|
||||
menu
|
||||
}
|
||||
|
||||
# Manage downloads. Called by a dedicated download type manage function, ie runner_manage() below
|
||||
# Manage downloads
|
||||
#
|
||||
# This function expects the following variables to be set:
|
||||
#
|
||||
@ -1524,8 +1335,8 @@ download_select_install() {
|
||||
# of items to download. It should be pointed to the appropriate
|
||||
# array set at the top of the script using indirect expansion.
|
||||
# See runner_sources at the top and runner_manage() below for examples.
|
||||
# - The array download_dirs should contain the locations the downloaded item
|
||||
# will be installed to. Must be formatted in pairs of ("[type]" "[directory]")
|
||||
# - The string download_dir should contain the location the downloaded item
|
||||
# will be installed to.
|
||||
# - The string "download_menu_heading" should contain the type of item
|
||||
# being downloaded. It will appear in the menu heading.
|
||||
# - The string "download_menu_description" should contain a description of
|
||||
@ -1535,12 +1346,22 @@ download_select_install() {
|
||||
# This function also expects one string argument containing the type of item to
|
||||
# be downloaded. ie. runner or dxvk.
|
||||
#
|
||||
# See runner_manage() below for a configuration example.
|
||||
# See runner_manage below for a configuration example.
|
||||
download_manage() {
|
||||
# This function expects a string to be passed as an argument
|
||||
if [ -z "$1" ]; then
|
||||
debug_print exit "Script error: The download_manage function expects a string argument. Aborting."
|
||||
fi
|
||||
# Check if Lutris is installed
|
||||
lutris_detect
|
||||
if [ "$lutris_installed" = "false" ]; then
|
||||
message warning "Lutris is required but does not appear to be installed."
|
||||
return 0
|
||||
fi
|
||||
if [ ! -d "$download_dir" ]; then
|
||||
message info "The following Lutris directory was not found. Unable to continue.\n\n$download_dir"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Get the type of item we're downloading from the function arguments
|
||||
download_type="$1"
|
||||
@ -1560,7 +1381,7 @@ download_manage() {
|
||||
unset menu_actions
|
||||
|
||||
# Loop through the download_sources array and create a menu item
|
||||
# for each one. Even numbered elements will contain the item name
|
||||
# for each one. Even numbered elements will contain the runner name
|
||||
for (( i=0; i<"${#download_sources[@]}"; i=i+2 )); do
|
||||
# Set the options to be displayed in the menu
|
||||
menu_options+=("Install a $download_type from ${download_sources[i]}")
|
||||
@ -1595,28 +1416,7 @@ runner_manage() {
|
||||
# Use indirect expansion to point download_sources
|
||||
# to the runner_sources array set at the top of the script
|
||||
declare -n download_sources=runner_sources
|
||||
|
||||
# Check if Lutris is installed and get relevant directories
|
||||
get_lutris_dirs "runner"
|
||||
if [ "$lutris_installed" = "false" ]; then
|
||||
message warning "Lutris is required but does not appear to be installed."
|
||||
return 0
|
||||
fi
|
||||
# Point download_dirs to the lutris_dirs array set by get_lutris_dirs
|
||||
# Must be formatted in pairs of ("[type]" "[directory]")
|
||||
declare -n download_dirs=lutris_dirs
|
||||
# Verify the directories actually exist
|
||||
missing_dir="false"
|
||||
for (( i=1; i<"${#download_dirs[@]}"; i=i+2 )); do
|
||||
if [ ! -d "${download_dirs[i]}" ]; then
|
||||
message warning "The following Lutris directory was not found. Unable to continue.\n\n${download_dirs[i]}"
|
||||
debug_print continue "The following Lutris directory was not found. Unable to continue.\n\n${download_dirs[i]}"
|
||||
missing_dir="true"
|
||||
fi
|
||||
done
|
||||
if [ "$missing_dir" = "true" ]; then
|
||||
return 0
|
||||
fi
|
||||
download_dir="$runners_dir"
|
||||
|
||||
# Configure the text displayed in the menus
|
||||
download_menu_heading="Lutris Runners"
|
||||
@ -1651,28 +1451,7 @@ dxvk_manage() {
|
||||
# Use indirect expansion to point download_sources
|
||||
# to the dxvk_sources array set at the top of the script
|
||||
declare -n download_sources=dxvk_sources
|
||||
|
||||
# Check if Lutris is installed and get relevant directories
|
||||
get_lutris_dirs "dxvk"
|
||||
if [ "$lutris_installed" = "false" ]; then
|
||||
message warning "Lutris is required but does not appear to be installed."
|
||||
return 0
|
||||
fi
|
||||
# Point download_dirs to the lutris_dirs array set by get_lutris_dirs
|
||||
# Must be formatted in pairs of ("[type]" "[directory]")
|
||||
declare -n download_dirs=lutris_dirs
|
||||
# Verify the directories actually exist
|
||||
missing_dir="false"
|
||||
for (( i=1; i<"${#download_dirs[@]}"; i=i+2 )); do
|
||||
if [ ! -d "${download_dirs[i]}" ]; then
|
||||
message warning "The following Lutris directory was not found. Unable to continue.\n\n${download_dirs[i]}"
|
||||
debug_print continue "The following Lutris directory was not found. Unable to continue.\n\n${download_dirs[i]}"
|
||||
missing_dir="true"
|
||||
fi
|
||||
done
|
||||
if [ "$missing_dir" = "true" ]; then
|
||||
return 0
|
||||
fi
|
||||
download_dir="$dxvk_dir"
|
||||
|
||||
# Configure the text displayed in the menus
|
||||
download_menu_heading="Lutris DXVK Versions"
|
||||
@ -1698,9 +1477,7 @@ dxvk_manage() {
|
||||
download_manage "dxvk"
|
||||
}
|
||||
|
||||
############################################################################
|
||||
######## end download functions ############################################
|
||||
############################################################################
|
||||
#-------------------------- end download functions -----------------------------#
|
||||
|
||||
# Deploy Easy Anti-Cheat Workaround
|
||||
eac_workaround() {
|
||||
@ -1723,7 +1500,7 @@ eac_workaround() {
|
||||
else
|
||||
message info "The Easy Anti-Cheat workaround has already been applied, but may be commented out.\nNo changes have been made, please edit /etc/hosts manually."
|
||||
fi
|
||||
return 0
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Configure message variables
|
||||
@ -1738,12 +1515,12 @@ eac_workaround() {
|
||||
|
||||
if message question "$eac_title\n\nThe following entry will be added to /etc/hosts:\n$eac_hosts_formatted\n\nThe following directory will be deleted:\n$eac_dir_formatted\n\n\nTo revert these changes, delete the above line from\n/etc/hosts and relaunch the game\n\nDo you want to proceed?"; then
|
||||
debug_print continue "Editing hosts file..."
|
||||
|
||||
# Try to modify /etc/hosts as root
|
||||
try_exec "printf '\n$eac_hosts #Star Citizen EAC workaround\n' >> /etc/hosts"
|
||||
if [ "$?" -eq 1 ]; then
|
||||
message info "Something went wrong. Unable to modify /etc/hosts.\n\nReturning to main menu."
|
||||
return 0
|
||||
|
||||
# Use pollkit's pkexec for gui with a fallback to sudo
|
||||
if [ -x "$(command -v pkexec)" ]; then
|
||||
pkexec sh -c "echo $eac_hosts '#Star Citizen EAC workaround' >> /etc/hosts"
|
||||
else
|
||||
sudo sh -c "echo $eac_hosts '#Star Citizen EAC workaround' >> /etc/hosts"
|
||||
fi
|
||||
|
||||
# Delete the EAC directory if it exists
|
||||
@ -1771,36 +1548,7 @@ install_game() {
|
||||
fi
|
||||
|
||||
if message question "Before proceeding, please refer to our Quick Start Guide:\n\n$lug_wiki\n\nAre you ready to continue?"; then
|
||||
# Detect which version of Lutris is installed
|
||||
if [ "$lutris_native" = "true" ] && [ "$lutris_flatpak" = "true" ]; then
|
||||
# Both versions of Lutris are installed so ask the user
|
||||
if message options "Flatpak" "Native" "This Helper has detected both the Native and Flatpak versions of Lutris\nWhich version would you like to use?"; then
|
||||
# Native version
|
||||
install_version="native"
|
||||
else
|
||||
# Flatpak version
|
||||
install_version="flatpak"
|
||||
fi
|
||||
elif [ "$lutris_native" = "true" ]; then
|
||||
# Native version only
|
||||
install_version="native"
|
||||
elif [ "$lutris_flatpak" = "true" ]; then
|
||||
# Flatpak version only
|
||||
install_version="flatpak"
|
||||
else
|
||||
# We shouldn't get here
|
||||
debug_print exit "Script error: Unable to detect Lutris version in install_game function. Aborting."
|
||||
fi
|
||||
|
||||
# Run the appropriate installer
|
||||
if [ "$install_version" = "native" ]; then
|
||||
lutris --install "$install_script" &
|
||||
elif [ "$install_version" = "flatpak" ]; then
|
||||
flatpak run --file-forwarding net.lutris.Lutris --install @@ "$install_script" @@ &
|
||||
else
|
||||
# We shouldn't get here
|
||||
debug_print exit "Script error: Unknown condition for install_version in install_game() function. Aborting."
|
||||
fi
|
||||
lutris --install "$install_script" &
|
||||
message info "The installation will continue in Lutris"
|
||||
fi
|
||||
}
|
||||
@ -1948,7 +1696,7 @@ quit() {
|
||||
|
||||
|
||||
############################################################################
|
||||
######## MAIN ##############################################################
|
||||
# MAIN
|
||||
############################################################################
|
||||
|
||||
# Check if Zenity is available
|
||||
@ -1960,22 +1708,6 @@ fi
|
||||
# Set defaults
|
||||
live_or_ptu="$live_dir"
|
||||
|
||||
# Format some URLs for Zenity
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
releases_url="<a href='$releases_url'>$releases_url</a>"
|
||||
lug_wiki="<a href='$lug_wiki'>$lug_wiki</a>"
|
||||
fi
|
||||
|
||||
# Check if a newer verison of the script is available
|
||||
latest_version="$(get_latest_release "$repo")"
|
||||
|
||||
# Sort the versions and check if the installed Helper is smaller
|
||||
if [ "$latest_version" != "$current_version" ] &&
|
||||
[ "$current_version" = "$(printf "$current_version\n$latest_version" | sort -V | head -n1)" ]; then
|
||||
|
||||
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"
|
||||
fi
|
||||
|
||||
# If invoked with command line arguments, process them and exit
|
||||
if [ "$#" -gt 0 ]; then
|
||||
while [ "$#" -gt 0 ]
|
||||
@ -1987,17 +1719,15 @@ if [ "$#" -gt 0 ]; then
|
||||
Usage: lug-helper <options>
|
||||
-p, --preflight-check Run system optimization checks
|
||||
-i, --install Install Star Citizen
|
||||
-e, --eac Deploy Easy Anti-Cheat Workaround
|
||||
-m, --manage-runners Install or remove Lutris runners
|
||||
-k, --manage-dxvk Install or remove DXVK versions
|
||||
-u, --delete-user-folder Delete Star Citizen USER folder, preserving keybinds
|
||||
-s, --delete-shaders Delete Star Citizen shaders
|
||||
-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 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
|
||||
-w, --show-wiki Show the LUG Wiki
|
||||
-x, --reset-helper Delete saved lug-helper configs
|
||||
"
|
||||
exit 0
|
||||
@ -2008,9 +1738,6 @@ Usage: lug-helper <options>
|
||||
--install | -i )
|
||||
cargs+=("install_game")
|
||||
;;
|
||||
--eac | -e )
|
||||
cargs+=("eac_workaround")
|
||||
;;
|
||||
--manage-runners | -m )
|
||||
cargs+=("runner_manage")
|
||||
;;
|
||||
@ -2058,9 +1785,6 @@ Usage: lug-helper <options>
|
||||
--show-directories | -d )
|
||||
cargs+=("display_dirs")
|
||||
;;
|
||||
--show-wiki | -w )
|
||||
cargs+=("display_wiki")
|
||||
;;
|
||||
--reset-helper | -x )
|
||||
cargs+=("reset_helper")
|
||||
;;
|
||||
@ -2075,13 +1799,29 @@ Usage: lug-helper <options>
|
||||
|
||||
# Call the requested functions and exit
|
||||
if [ "${#cargs[@]}" -gt 0 ]; then
|
||||
for (( x=0; x<"${#cargs[@]}"; x++ )); do
|
||||
${cargs[x]}
|
||||
for (( i=0; i<"${#cargs[@]}"; i++ )); do
|
||||
${cargs[i]}
|
||||
done
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Format some URLs for Zenity
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
releases_url="<a href='$releases_url'>$releases_url</a>"
|
||||
lug_wiki="<a href='$lug_wiki'>$lug_wiki</a>"
|
||||
fi
|
||||
|
||||
# Check if a newer verison of the script is available
|
||||
latest_version="$(get_latest_release "$repo")"
|
||||
|
||||
# Sort the versions and check if the installed Helper is smaller
|
||||
if [ "$latest_version" != "$current_version" ] &&
|
||||
[ "$current_version" = "$(printf "$current_version\n$latest_version" | sort -V | head -n1)" ]; then
|
||||
|
||||
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"
|
||||
fi
|
||||
|
||||
# Loop the main menu until the user selects quit
|
||||
while true; do
|
||||
# Configure the menu
|
||||
|
Loading…
x
Reference in New Issue
Block a user