Compare commits

..

No commits in common. "fdfd512bfc93d24293f018ddb707fd0803d0d510" and "1844bfda135ffa02888ccfda9c91ab71e136e485" have entirely different histories.

View File

@ -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