diff --git a/lug-helper.sh b/lug-helper.sh index 236935a..1ec5af4 100755 --- a/lug-helper.sh +++ b/lug-helper.sh @@ -118,8 +118,11 @@ shaders_subdir="shaders" ######## Runners ########################################################### -# Lutris wine runners directory -runners_dir="$data_dir/lutris/runners/wine" +# 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" + # 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 @@ -133,8 +136,11 @@ runner_sources=( ######## DXVK ############################################################## -# Lutris dxvk directory -dxvk_dir="$data_dir/lutris/runtime/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" + # 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 @@ -185,6 +191,7 @@ current_version="v1.22" ############################################################################ ############################################################################ +############################################################################ # Echo a formatted debug message to the terminal and optionally exit @@ -236,16 +243,29 @@ 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." @@ -253,7 +273,6 @@ 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 @@ -271,7 +290,6 @@ message() { clear printf "\n$2\n\n" read -n 1 -s -p "Press any key..." - return 0 ;; "question") # question @@ -340,7 +358,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 @@ -356,7 +374,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)" @@ -545,7 +563,7 @@ getdirs() { # Display all directories currently used by this helper and Star Citizen display_dirs() { - declare -a dirs_list + unset dirs_list # Helper configs and keybinds if [ -d "$conf_dir/$conf_subdir" ]; then @@ -568,13 +586,25 @@ display_dirs() { fi # Lutris runners - if [ -d "$runners_dir" ]; then - dirs_list+="\n\nLutris Runners:\n$runners_dir" + 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 fi # Lutris dxvk - if [ -d "$runners_dir" ]; then - dirs_list+="\n\nLutris DXVK Versions:\n$dxvk_dir" + 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 fi # Format the info header @@ -639,8 +669,12 @@ 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() { @@ -704,9 +738,13 @@ 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() { @@ -764,7 +802,9 @@ filelimit_check() { fi } -#------------------------- end filelimit functions ---------------------------# +############################################################################ +######## end filelimit functions ########################################### +############################################################################ # Check if WINE is installed wine_check() { @@ -913,26 +953,30 @@ 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_standard="false" + lutris_native="false" lutris_flatpak="false" - # Detect standard lutris + # Detect native lutris if [ -x "$(command -v lutris)" ]; then - # Standard Lutris is installed + # Native Lutris is installed lutris_installed="true" - lutris_standard="true" + lutris_native="true" fi # Detect flatpak lutris if [ -x "$(command -v flatpak)" ]; then - flatpak info lutris >/dev/null 2>&1 + flatpak info net.lutris.Lutris >/dev/null 2>&1 if [ "$?" -eq 0 ]; then lutris_installed="true" lutris_flatpak="true" @@ -942,15 +986,69 @@ 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 - debug_print continue "Restarting Lutris..." - pkill -f -SIGTERM lutris && nohup lutris /dev/null & + # 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 & + 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 & + fi 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 @@ -989,10 +1087,10 @@ post_download() { display_post_download_msg="false" } -# Uninstall the selected item +# Uninstall the selected item. Called by download_select_install() +# Note: The array installed_items is expected to be set before calling this function 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 @@ -1005,7 +1103,7 @@ download_delete() { fi } -# List installed items for deletion +# List installed items for deletion. Called by download_manage() download_select_delete() { # Configure the menu menu_text_zenity="Select the $download_type you want to remove:" @@ -1013,19 +1111,31 @@ 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 - - # 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 + + # 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 done # Create menu options for the installed items for (( i=0; i<"${#installed_items[@]}"; i++ )); do - menu_options+=("$(basename "${installed_items[i]}")") + menu_options+=("${installed_item_names[i]}") menu_actions+=("download_delete $i") done @@ -1046,9 +1156,8 @@ download_select_delete() { menu } -# 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 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_install() { # This function expects an index number for the array # download_versions to be passed in as an argument @@ -1076,16 +1185,10 @@ download_install() { download_name="$(basename "$download_file" .tar.zst)" ;; *) - debug_print exit "Unknown archive filetype in download_install function. Aborting." + debug_print exit "Script error: 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 @@ -1163,14 +1266,25 @@ 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() - 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 + 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 # We need to restart Lutris for the download to be detected lutris_needs_restart="true" @@ -1181,14 +1295,25 @@ 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 - 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 + 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 # We need to restart Lutris for the download to be detected lutris_needs_restart="true" @@ -1199,7 +1324,6 @@ 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 @@ -1208,7 +1332,7 @@ download_install() { rm -r "$tmp_dir/$download_name" } -# List available items for download +# List available items for download. Called by download_manage() download_select_install() { # This function expects an element number for the sources array # to be passed in as an argument @@ -1267,7 +1391,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 @@ -1298,12 +1422,44 @@ download_select_install() { ;; esac - # Add the file names to the menu - if [ -d "$download_dir/$download_name" ]; then - menu_options+=("$download_name [installed]") + # 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 - menu_options+=("$download_name") + # 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") menu_actions+=("download_install $i") # Increment the added items counter @@ -1327,7 +1483,7 @@ download_select_install() { menu } -# Manage downloads +# Manage downloads. Called by a dedicated download type manage function, ie runner_manage() below # # This function expects the following variables to be set: # @@ -1335,8 +1491,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 string download_dir should contain the location the downloaded item -# will be installed to. +# - 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_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 @@ -1346,22 +1502,12 @@ 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" @@ -1381,7 +1527,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 runner name + # for each one. Even numbered elements will contain the item 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]}") @@ -1416,7 +1562,28 @@ 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 - download_dir="$runners_dir" + + # 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 # Configure the text displayed in the menus download_menu_heading="Lutris Runners" @@ -1451,7 +1618,28 @@ 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 - download_dir="$dxvk_dir" + + # 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 # Configure the text displayed in the menus download_menu_heading="Lutris DXVK Versions" @@ -1477,7 +1665,9 @@ dxvk_manage() { download_manage "dxvk" } -#-------------------------- end download functions -----------------------------# +############################################################################ +######## end download functions ############################################ +############################################################################ # Deploy Easy Anti-Cheat Workaround eac_workaround() { @@ -1500,7 +1690,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 1 + return 0 fi # Configure message variables @@ -1548,7 +1738,36 @@ 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 - lutris --install "$install_script" & + # 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 message info "The installation will continue in Lutris" fi } @@ -1696,7 +1915,7 @@ quit() { ############################################################################ -# MAIN +######## MAIN ############################################################## ############################################################################ # Check if Zenity is available @@ -1708,6 +1927,22 @@ fi # Set defaults live_or_ptu="$live_dir" +# Format some URLs for Zenity +if [ "$use_zenity" -eq 1 ]; then + releases_url="$releases_url" + lug_wiki="$lug_wiki" +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 ] @@ -1719,15 +1954,17 @@ if [ "$#" -gt 0 ]; then Usage: lug-helper -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 directory + -s, --delete-shaders Delete Star Citizen shaders -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 @@ -1738,6 +1975,9 @@ Usage: lug-helper --install | -i ) cargs+=("install_game") ;; + --eac | -e ) + cargs+=("eac_workaround") + ;; --manage-runners | -m ) cargs+=("runner_manage") ;; @@ -1785,6 +2025,9 @@ Usage: lug-helper --show-directories | -d ) cargs+=("display_dirs") ;; + --show-wiki | -w ) + cargs+=("display_wiki") + ;; --reset-helper | -x ) cargs+=("reset_helper") ;; @@ -1799,29 +2042,13 @@ Usage: lug-helper # Call the requested functions and exit if [ "${#cargs[@]}" -gt 0 ]; then - for (( i=0; i<"${#cargs[@]}"; i++ )); do - ${cargs[i]} + for (( x=0; x<"${#cargs[@]}"; x++ )); do + ${cargs[x]} done exit 0 fi fi -# Format some URLs for Zenity -if [ "$use_zenity" -eq 1 ]; then - releases_url="$releases_url" - lug_wiki="$lug_wiki" -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