mirror of
https://github.com/the-sane/lug-helper.git
synced 2025-07-01 13:50:35 +00:00
Compare commits
15 Commits
Author | SHA1 | Date | |
---|---|---|---|
9f2c72042e | |||
25b122e891 | |||
a76c3d0a1a | |||
25a773602e | |||
d5d7f75dde | |||
44bcbf8161 | |||
acad90a0a5 | |||
77c6fd46bb | |||
5c112831e0 | |||
274c674681 | |||
cf491f9151 | |||
199e548767 | |||
8087ffe564 | |||
b2b2312ce9 | |||
4ad9603aa3 |
@ -23,6 +23,9 @@ Keybinds are backed up to *$XDG_CONFIG_HOME/starcitizen-lug/keybinds/*
|
||||
`Manage Lutris Runners`
|
||||
- Quickly install and delete Lutris wine runners
|
||||
|
||||
`Manage DXVK Versions`
|
||||
- Quickly install and delete DXVK versions for Lutris
|
||||
|
||||
`Maintenance and Troubleshooting`
|
||||
- `Switch the helper between LIVE and PTU`
|
||||
- Toggle between targeting LIVE or PTU for all of the above options. Defaults to LIVE on each run.
|
||||
|
444
lug-helper.sh
444
lug-helper.sh
@ -15,7 +15,7 @@
|
||||
# - Check your system for optimal settings and
|
||||
# change them as needed to prevent crashes.
|
||||
#
|
||||
# - Easily install and remove Lutris wine Runners.
|
||||
# - Easily install and remove Lutris wine Runners and DXVK versions.
|
||||
#
|
||||
# - Qickly wipe your Star Citizen USER folder as is recommended
|
||||
# by CIG after major version updates.
|
||||
@ -95,7 +95,7 @@ ptu_dir="PTU"
|
||||
|
||||
# Remaining directory paths are set at the end of the getdirs() function
|
||||
|
||||
############################################################################
|
||||
######## Runners ###########################################################
|
||||
|
||||
# Lutris wine runners directory
|
||||
runners_dir="$data_dir/lutris/runners/wine"
|
||||
@ -110,13 +110,30 @@ runner_sources=(
|
||||
"/dev/null" "https://api.github.com/repos/gort818/wine-sc-lug/releases"
|
||||
"GloriousEggroll" "https://api.github.com/repos/GloriousEggroll/wine-ge-custom/releases"
|
||||
)
|
||||
# Set a maximum number of runner versions to display from each url
|
||||
max_runners=20
|
||||
|
||||
######## 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
|
||||
# The second is expected to contain the github api releases url
|
||||
# ie. "Sporif Async" "https://api.github.com/repos/Sporif/dxvk-async/releases"
|
||||
dxvk_sources=(
|
||||
"Sporif Async" "https://api.github.com/repos/Sporif/dxvk-async/releases"
|
||||
"/dev/null" "https://api.github.com/repos/gort818/dxvk/releases"
|
||||
)
|
||||
|
||||
# Set a maximum number of versions to display from each download url
|
||||
max_download_items=20
|
||||
|
||||
# Pixels to add for each Zenity menu option
|
||||
# used to dynamically determine the height of menus
|
||||
menu_option_height="25"
|
||||
|
||||
############################################################################
|
||||
|
||||
# Use logo installed by a packaged version of this script if available
|
||||
# Otherwise, default to the logo in the same directory
|
||||
if [ -f "/usr/share/pixmaps/lug-logo.png" ]; then
|
||||
@ -130,7 +147,7 @@ fi
|
||||
# Github repo and script version info
|
||||
repo="the-sane/lug-helper"
|
||||
releases_url="https://github.com/the-sane/lug-helper/releases"
|
||||
current_version="v1.10"
|
||||
current_version="v1.11.1"
|
||||
|
||||
############################################################################
|
||||
############################################################################
|
||||
@ -514,6 +531,11 @@ display_dirs() {
|
||||
dirs_list+="\n\nLutris Runners:\n$runners_dir"
|
||||
fi
|
||||
|
||||
# Lutris dxvk
|
||||
if [ -d "$runners_dir" ]; then
|
||||
dirs_list+="\n\nLutris DXVK Versions:\n$dxvk_dir"
|
||||
fi
|
||||
|
||||
# Formatting
|
||||
message_heading="These directories are currently being used by this Helper and Star Citizen"
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
@ -771,12 +793,10 @@ rm_dxvkcache() {
|
||||
fi
|
||||
}
|
||||
|
||||
#------------------------- begin runner functions ----------------------------#
|
||||
|
||||
# Restart lutris
|
||||
lutris_restart() {
|
||||
if [ "$lutris_needs_restart" = "true" ] && [ "$(pgrep lutris)" ]; then
|
||||
if message question "Lutris must be restarted to detect runner changes.\nWould you like this Helper to restart it for you?"; 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 -SIGTERM lutris && nohup lutris </dev/null &>/dev/null &
|
||||
fi
|
||||
@ -784,44 +804,62 @@ lutris_restart() {
|
||||
lutris_needs_restart="false"
|
||||
}
|
||||
|
||||
# Delete the selected runner
|
||||
runner_delete() {
|
||||
#------------------------- begin download functions ----------------------------#
|
||||
|
||||
# Display post download message or instructions if needed
|
||||
# Expects the variables message_heading, post_download_msg1,
|
||||
# post_download_msg2, and downloaded_item_name
|
||||
post_download() {
|
||||
if [ "$trigger_post_download" = "true" ]; then
|
||||
message_heading="Download Complete"
|
||||
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
message_heading="<b>$message_heading</b>"
|
||||
post_download_msg2="<i>$post_download_msg2</i>"
|
||||
fi
|
||||
message info "$message_heading\n\n$post_download_msg1\n\n$post_download_msg2\n$downloaded_item_name"
|
||||
fi
|
||||
trigger_post_download="false"
|
||||
}
|
||||
|
||||
# Uninstall the selected item
|
||||
download_delete() {
|
||||
# This function expects an index number for the array
|
||||
# installed_runners to be passed in as an argument
|
||||
# installed_items to be passed in as an argument
|
||||
if [ -z "$1" ]; then
|
||||
debug_print exit "Script error: The runner_delete function expects an argument. Aborting."
|
||||
debug_print exit "Script error: The download_delete function expects an argument. Aborting."
|
||||
fi
|
||||
|
||||
runner_to_delete="$1"
|
||||
if message question "Are you sure you want to delete the following runner?\n\n${installed_runners[$runner_to_delete]}"; then
|
||||
rm -r "${installed_runners[$runner_to_delete]}"
|
||||
debug_print continue "Deleted ${installed_runners[$runner_to_delete]}"
|
||||
item_to_delete="$1"
|
||||
if message question "Are you sure you want to delete the following ${download_type}?\n\n${installed_items[$item_to_delete]}"; then
|
||||
rm -r "${installed_items[$item_to_delete]}"
|
||||
debug_print continue "Deleted ${installed_items[$item_to_delete]}"
|
||||
lutris_needs_restart="true"
|
||||
fi
|
||||
}
|
||||
|
||||
# List installed runners for deletion
|
||||
runner_select_delete() {
|
||||
# List installed items for deletion
|
||||
download_select_delete() {
|
||||
# Configure the menu
|
||||
menu_text_zenity="Select the Lutris runner you want to remove:"
|
||||
menu_text_terminal="Select the Lutris runner you want to remove:"
|
||||
menu_text_zenity="Select the $download_type you want to remove:"
|
||||
menu_text_terminal="Select the $download_type you want to remove:"
|
||||
menu_text_height="65"
|
||||
goback="Return to the runner management menu"
|
||||
unset installed_runners
|
||||
goback="Return to the $download_type management menu"
|
||||
unset installed_items
|
||||
unset menu_options
|
||||
unset menu_actions
|
||||
|
||||
# Create an array containing all directories in the runners_dir
|
||||
for runners_list in "$runners_dir"/*; do
|
||||
if [ -d "$runners_list" ]; then
|
||||
installed_runners+=("$runners_list")
|
||||
# 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 runners
|
||||
for (( i=0; i<"${#installed_runners[@]}"; i++ )); do
|
||||
menu_options+=("$(basename "${installed_runners[i]}")")
|
||||
menu_actions+=("runner_delete $i")
|
||||
# Create menu options for the installed items
|
||||
for (( i=0; i<"${#installed_items[@]}"; i++ )); do
|
||||
menu_options+=("$(basename "${installed_items[i]}")")
|
||||
menu_actions+=("download_delete $i")
|
||||
done
|
||||
|
||||
# Complete the menu by adding the option to go back to the previous menu
|
||||
@ -841,147 +879,187 @@ runner_select_delete() {
|
||||
menu
|
||||
}
|
||||
|
||||
# Download and install the selected runner
|
||||
# Note: The variables runner_versions, contributor_url, and runner_url_type
|
||||
# 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
|
||||
runner_install() {
|
||||
download_install() {
|
||||
# This function expects an index number for the array
|
||||
# runner_versions to be passed in as an argument
|
||||
# download_versions to be passed in as an argument
|
||||
if [ -z "$1" ]; then
|
||||
debug_print exit "Script error: The runner_install function expects a numerical argument. Aborting."
|
||||
debug_print exit "Script error: The download_install function expects a numerical argument. Aborting."
|
||||
fi
|
||||
|
||||
# Get the runner filename including file extension
|
||||
runner_file="${runner_versions[$1]}"
|
||||
# Get the filename including file extension
|
||||
download_file="${download_versions[$1]}"
|
||||
|
||||
# Get the selected runner name minus the file extension
|
||||
# Get the selected item name minus the file extension
|
||||
# To add new file extensions, handle them here and in
|
||||
# the runner_select_install function below
|
||||
case "$runner_file" in
|
||||
# the download_select_install function below
|
||||
case "$download_file" in
|
||||
*.tar.gz)
|
||||
runner_name="$(basename "$runner_file" .tar.gz)"
|
||||
download_name="$(basename "$download_file" .tar.gz)"
|
||||
;;
|
||||
*.tgz)
|
||||
runner_name="$(basename "$runner_file" .tgz)"
|
||||
download_name="$(basename "$download_file" .tgz)"
|
||||
;;
|
||||
*.tar.xz)
|
||||
runner_name="$(basename "$runner_file" .tar.xz)"
|
||||
download_name="$(basename "$download_file" .tar.xz)"
|
||||
;;
|
||||
*)
|
||||
debug_print exit "Unknown archive filetype in runner_install function. Aborting."
|
||||
debug_print exit "Unknown archive filetype in download_install function. Aborting."
|
||||
;;
|
||||
esac
|
||||
|
||||
# Get the selected runner url
|
||||
# Get the selected download url
|
||||
# To add new sources, handle them here and in the
|
||||
# runner_select_install function below
|
||||
if [ "$runner_url_type" = "github" ]; then
|
||||
runner_dl_url="$(curl -s "$contributor_url" | grep "browser_download_url.*$runner_file" | cut -d \" -f4)"
|
||||
# download_select_install function below
|
||||
if [ "$download_url_type" = "github" ]; then
|
||||
download_url="$(curl -s "$contributor_url" | grep "browser_download_url.*$download_file" | cut -d \" -f4)"
|
||||
else
|
||||
debug_print exit "Script error: Unknown api/url format in runner_sources array. Aborting."
|
||||
debug_print exit "Script error: Unknown api/url format in ${download_type}_sources array. Aborting."
|
||||
fi
|
||||
|
||||
# Sanity check
|
||||
if [ -z "$runner_dl_url" ]; then
|
||||
message warning "Could not find the requested runner. The source API may be down or rate limited."
|
||||
if [ -z "$download_url" ]; then
|
||||
message warning "Could not find the requested ${download_type}. The source API may be down or rate limited."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Download the runner to the tmp directory
|
||||
debug_print continue "Downloading $runner_dl_url into $tmp_dir/$runner_file..."
|
||||
# Download the item to the tmp directory
|
||||
debug_print continue "Downloading $download_url into $tmp_dir/$download_file..."
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
# Format the curl progress bar for zenity
|
||||
mkfifo "$tmp_dir/lugpipe"
|
||||
cd "$tmp_dir" && curl -#LO "$runner_dl_url" > "$tmp_dir/lugpipe" 2>&1 & curlpid="$!"
|
||||
cd "$tmp_dir" && curl -#LO "$download_url" > "$tmp_dir/lugpipe" 2>&1 & curlpid="$!"
|
||||
stdbuf -oL tr '\r' '\n' < "$tmp_dir/lugpipe" | \
|
||||
grep --line-buffered -ve "100" | grep --line-buffered -o "[0-9]*\.[0-9]" | \
|
||||
(
|
||||
trap 'kill "$curlpid"' ERR
|
||||
zenity --progress --auto-close --title="Star Citizen LUG Helper" --text="Downloading Runner. This might take a moment.\n" 2>/dev/null
|
||||
zenity --progress --auto-close --title="Star Citizen LUG Helper" --text="Downloading ${download_type}. This might take a moment.\n" 2>/dev/null
|
||||
)
|
||||
|
||||
if [ "$?" -eq 1 ]; then
|
||||
# User clicked cancel
|
||||
debug_print continue "Download aborted. Removing $tmp_dir/$runner_file..."
|
||||
rm "$tmp_dir/$runner_file"
|
||||
debug_print continue "Download aborted. Removing $tmp_dir/$download_file..."
|
||||
rm "$tmp_dir/$download_file"
|
||||
rm "$tmp_dir/lugpipe"
|
||||
return 1
|
||||
fi
|
||||
rm "$tmp_dir/lugpipe"
|
||||
else
|
||||
# Standard curl progress bar
|
||||
(cd "$tmp_dir" && curl -LO "$runner_dl_url")
|
||||
(cd "$tmp_dir" && curl -LO "$download_url")
|
||||
fi
|
||||
|
||||
# Sanity check
|
||||
if [ ! -f "$tmp_dir/$runner_file" ]; then
|
||||
debug_print exit "Script error: The requested runner file was not downloaded. Aborting"
|
||||
if [ ! -f "$tmp_dir/$download_file" ]; then
|
||||
debug_print exit "Script error: The requested $download_type file was not downloaded. Aborting"
|
||||
fi
|
||||
|
||||
# Get the path of the first item listed in the archive
|
||||
# This should either be a subdirectory or the path ./
|
||||
# depending on how the archive was created
|
||||
first_filepath="$(stdbuf -oL tar -tf "$tmp_dir/$runner_file" | head -n 1)"
|
||||
# Extract the archive to the tmp directory
|
||||
debug_print continue "Extracting $download_type into $tmp_dir/$download_name..."
|
||||
if [ "$use_zenity" -eq 1 ]; then
|
||||
# Use Zenity progress bar
|
||||
mkdir "$tmp_dir/$download_name" && tar -xf "$tmp_dir/$download_file" -C "$tmp_dir/$download_name" | \
|
||||
zenity --progress --pulsate --no-cancel --auto-close --title="Star Citizen LUG Helper" --text="Extracting ${download_type}...\n" 2>/dev/null
|
||||
else
|
||||
mkdir "$tmp_dir/$download_name" && tar -xf "$tmp_dir/$download_file" -C "$tmp_dir/$download_name"
|
||||
fi
|
||||
|
||||
# Extract the runner
|
||||
case "$first_filepath" in
|
||||
# If the files in the archive begin with ./ there is no subdirectory
|
||||
./*)
|
||||
debug_print continue "Installing runner into $runners_dir/$runner_name..."
|
||||
# Check the contents of the extracted archive to determine the
|
||||
# directory structure we must create upon installation
|
||||
num_dirs=0
|
||||
num_files=0
|
||||
for extracted_item in "$tmp_dir/$download_name"/*; do
|
||||
if [ -d "$extracted_item" ]; then
|
||||
num_dirs="$((num_dirs+1))"
|
||||
extracted_dir="$(basename "$extracted_item")"
|
||||
elif [ -f "$extracted_item" ]; then
|
||||
num_files="$((num_files+1))"
|
||||
fi
|
||||
done
|
||||
|
||||
# Create the correct directory structure and install the item
|
||||
if [ "$num_dirs" -eq 0 ] && [ "$num_files" -eq 0 ]; then
|
||||
# Sanity check
|
||||
message warning "The downloaded archive is empty. There is nothing to do."
|
||||
elif [ "$num_dirs" -eq 1 ] && [ "$num_files" -eq 0 ]; then
|
||||
# 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 "$runners_dir/$runner_name" && tar -xf "$tmp_dir/$runner_file" -C "$runners_dir/$runner_name" | \
|
||||
zenity --progress --pulsate --no-cancel --auto-close --title="Star Citizen LUG Helper" --text="Installing runner...\n" 2>/dev/null
|
||||
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 "$runners_dir/$runner_name" && tar -xf "$tmp_dir/$runner_file" -C "$runners_dir/$runner_name"
|
||||
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"
|
||||
;;
|
||||
*)
|
||||
# Runners with a subdirectory in the archive
|
||||
debug_print continue "Installing runner into $runners_dir..."
|
||||
# Store the final name of the downloaded directory
|
||||
downloaded_item_name="$download_name"
|
||||
# Trigger the post_download() function
|
||||
trigger_post_download="true"
|
||||
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 "$runners_dir" && tar -xf "$tmp_dir/$runner_file" -C "$runners_dir" | \
|
||||
zenity --progress --pulsate --no-cancel --auto-close --title="Star Citizen LUG Helper" --text="Installing runner...\n" 2>/dev/null
|
||||
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 "$runners_dir" && tar -xf "$tmp_dir/$runner_file" -C "$runners_dir"
|
||||
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"
|
||||
;;
|
||||
esac
|
||||
# Store the final name of the downloaded directory
|
||||
downloaded_item_name="$download_name"
|
||||
# Trigger the post_download() function
|
||||
trigger_post_download="true"
|
||||
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
|
||||
debug_print continue "Removing $tmp_dir/$runner_file..."
|
||||
rm "$tmp_dir/$runner_file"
|
||||
debug_print continue "Cleaning up $tmp_dir/$download_file..."
|
||||
rm "$tmp_dir/$download_file"
|
||||
|
||||
# Display any post-download messages or instructions
|
||||
post_download
|
||||
}
|
||||
|
||||
# List available runners for download
|
||||
runner_select_install() {
|
||||
# This function expects an element number for the array
|
||||
# runner_sources to be passed in as an argument
|
||||
# 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
|
||||
if [ -z "$1" ]; then
|
||||
debug_print exit "Script error: The runner_select_install function expects a numerical argument. Aborting."
|
||||
debug_print exit "Script error: The download_select_install function expects a numerical argument. Aborting."
|
||||
fi
|
||||
|
||||
# Store info from the selected contributor
|
||||
contributor_name="${runner_sources[$1]}"
|
||||
contributor_url="${runner_sources[$1+1]}"
|
||||
contributor_name="${download_sources[$1]}"
|
||||
contributor_url="${download_sources[$1+1]}"
|
||||
|
||||
# Check the provided contributor url to make sure we know how to handle it
|
||||
# To add new sources, add them here and handle in the if statement
|
||||
# just below and the runner_install function above
|
||||
# just below and the download_install function above
|
||||
case "$contributor_url" in
|
||||
https://api.github.com*)
|
||||
runner_url_type="github"
|
||||
download_url_type="github"
|
||||
;;
|
||||
*)
|
||||
debug_print exit "Script error: Unknown api/url format in runner_sources array. Aborting."
|
||||
debug_print exit "Script error: Unknown api/url format in ${download_type}_sources array. Aborting."
|
||||
;;
|
||||
esac
|
||||
|
||||
# Check GlibC version against the requirements of the selected runner
|
||||
if [ "$contributor_name" = "/dev/null" ]; then
|
||||
# For runners, check GlibC version against runner requirements
|
||||
if [ "download_type" = "runner" ] && [ "$contributor_name" = "/dev/null" ]; then
|
||||
required_glibc="2.33"
|
||||
system_glibc="$(ldd --version | awk '/ldd/{print $NF}')"
|
||||
|
||||
@ -991,57 +1069,57 @@ runner_select_install() {
|
||||
fi
|
||||
fi
|
||||
|
||||
# Fetch a list of runner versions from the selected contributor
|
||||
# Fetch a list of versions from the selected contributor
|
||||
# To add new sources, handle them here, in the if statement
|
||||
# just above, and the runner_install function above
|
||||
if [ "$runner_url_type" = "github" ]; then
|
||||
runner_versions=($(curl -s "$contributor_url" | awk '/browser_download_url/ {print $2}' | grep -vE "*.sha512sum" | xargs basename -a))
|
||||
# just above, and the download_install function above
|
||||
if [ "$download_url_type" = "github" ]; then
|
||||
download_versions=($(curl -s "$contributor_url" | awk '/browser_download_url/ {print $2}' | grep -vE "*.sha512sum" | xargs basename -a))
|
||||
else
|
||||
debug_print exit "Script error: Unknown api/url format in runner_sources array. Aborting."
|
||||
debug_print exit "Script error: Unknown api/url format in ${download_type}_sources array. Aborting."
|
||||
fi
|
||||
|
||||
# Sanity check
|
||||
if [ "${#runner_versions[@]}" -eq 0 ]; then
|
||||
message warning "No runner versions were found. The source API may be down or rate limited."
|
||||
if [ "${#download_versions[@]}" -eq 0 ]; then
|
||||
message warning "No $download_type versions were found. The source API may be down or rate limited."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Configure the menu
|
||||
menu_text_zenity="Select the Lutris runner you want to install:"
|
||||
menu_text_terminal="Select the Lutris runner you want to install:"
|
||||
menu_text_zenity="Select the $download_type you want to install:"
|
||||
menu_text_terminal="Select the $download_type you want to install:"
|
||||
menu_text_height="65"
|
||||
goback="Return to the runner management menu"
|
||||
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
|
||||
# the runner_install function above
|
||||
for (( i=0; i<"$max_runners" && i<"${#runner_versions[@]}"; i++ )); do
|
||||
# Get the runner name minus the file extension
|
||||
case "${runner_versions[i]}" in
|
||||
# the download_install function above
|
||||
for (( i=0; i<"$max_download_items" && i<"${#download_versions[@]}"; i++ )); do
|
||||
# Get the file name minus the extension
|
||||
case "${download_versions[i]}" in
|
||||
*.tar.gz)
|
||||
runner_name="$(basename "${runner_versions[i]}" .tar.gz)"
|
||||
download_name="$(basename "${download_versions[i]}" .tar.gz)"
|
||||
;;
|
||||
*.tgz)
|
||||
runner_name="$(basename "${runner_versions[i]}" .tgz)"
|
||||
download_name="$(basename "${download_versions[i]}" .tgz)"
|
||||
;;
|
||||
*.tar.xz)
|
||||
runner_name="$(basename "${runner_versions[i]}" .tar.xz)"
|
||||
download_name="$(basename "${download_versions[i]}" .tar.xz)"
|
||||
;;
|
||||
*)
|
||||
debug_print exit "Unknown archive filetype in runner_select_install function. Aborting."
|
||||
debug_print exit "Unknown archive filetype in download_select_install function. Aborting."
|
||||
;;
|
||||
esac
|
||||
|
||||
# Add the runner names to the menu
|
||||
if [ -d "$runners_dir/$runner_name" ]; then
|
||||
menu_options+=("$runner_name [installed]")
|
||||
# Add the file names to the menu
|
||||
if [ -d "$download_dir/$download_name" ]; then
|
||||
menu_options+=("$download_name [installed]")
|
||||
else
|
||||
menu_options+=("$runner_name")
|
||||
menu_options+=("$download_name")
|
||||
fi
|
||||
menu_actions+=("runner_install $i")
|
||||
menu_actions+=("download_install $i")
|
||||
done
|
||||
|
||||
# Complete the menu by adding the option to go back to the previous menu
|
||||
@ -1061,45 +1139,71 @@ runner_select_install() {
|
||||
menu
|
||||
}
|
||||
|
||||
# Manage Lutris runners
|
||||
runner_manage() {
|
||||
# Manage downloads
|
||||
#
|
||||
# This function expects the following variables to be set:
|
||||
#
|
||||
# - The string download_sources is a formatted array containing the URLs
|
||||
# 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 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
|
||||
# the item being downloaded. It will appear in the menu subheading.
|
||||
# - The integer "download_menu_height" specifies the height of the zenity menu.
|
||||
#
|
||||
# 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.
|
||||
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
|
||||
if [ ! -x "$(command -v lutris)" ]; then
|
||||
message info "Lutris does not appear to be installed."
|
||||
return 0
|
||||
fi
|
||||
if [ ! -d "$runners_dir" ]; then
|
||||
message info "Lutris runners directory not found. Unable to continue.\n\n$runners_dir"
|
||||
if [ ! -d "$download_dir" ]; then
|
||||
message info "Lutris $download_type directory not found. Unable to continue.\n\n$download_dir"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# The runner management menu will loop until the user cancels
|
||||
# Get the type of item we're downloading from the function arguments
|
||||
download_type="$1"
|
||||
|
||||
# The download management menu will loop until the user cancels
|
||||
looping_menu="true"
|
||||
while [ "$looping_menu" = "true" ]; do
|
||||
# Configure the menu
|
||||
menu_text_zenity="<b><big>Manage Your Lutris Runners</big>\n\nThe runners listed below are wine builds created for Star Citizen</b>\n\nYou may choose from the following options:"
|
||||
menu_text_terminal="Manage Your Lutris Runners\n\nThe runners listed below are wine builds created for Star Citizen\nYou may choose from the following options:"
|
||||
menu_text_height="140"
|
||||
menu_text_zenity="<b><big>Manage Your $download_menu_heading</big>\n\n$download_menu_description</b>\n\nYou may choose from the following options:"
|
||||
menu_text_terminal="Manage Your $download_menu_heading\n\n$download_menu_description\nYou may choose from the following options:"
|
||||
menu_text_height="$download_menu_height"
|
||||
|
||||
# Configure the menu options
|
||||
delete="Remove an installed runner"
|
||||
delete="Remove an installed $download_type"
|
||||
back="Return to the main menu"
|
||||
unset menu_options
|
||||
unset menu_actions
|
||||
|
||||
# Loop through the runner_sources array and create a menu item
|
||||
# Loop through the download_sources array and create a menu item
|
||||
# for each one. Even numbered elements will contain the runner name
|
||||
for (( i=0; i<"${#runner_sources[@]}"; i=i+2 )); do
|
||||
for (( i=0; i<"${#download_sources[@]}"; i=i+2 )); do
|
||||
# Set the options to be displayed in the menu
|
||||
menu_options+=("Install a runner from ${runner_sources[i]}")
|
||||
menu_options+=("Install a $download_type from ${download_sources[i]}")
|
||||
# Set the corresponding functions to be called for each of the options
|
||||
menu_actions+=("runner_select_install $i")
|
||||
menu_actions+=("download_select_install $i")
|
||||
done
|
||||
|
||||
# Complete the menu by adding options to remove a runner
|
||||
# Complete the menu by adding options to uninstall an item
|
||||
# or go back to the previous menu
|
||||
menu_options+=("$delete" "$back")
|
||||
menu_actions+=("runner_select_delete" "menu_loop_done")
|
||||
menu_actions+=("download_select_delete" "menu_loop_done")
|
||||
|
||||
# Calculate the total height the menu should be
|
||||
menu_height="$(($menu_option_height * ${#menu_options[@]} + $menu_text_height))"
|
||||
@ -1115,7 +1219,71 @@ runner_manage() {
|
||||
lutris_restart
|
||||
}
|
||||
|
||||
#-------------------------- end runner functions -----------------------------#
|
||||
#-------------------------- end download functions -----------------------------#
|
||||
|
||||
# Configure the download_manage function for runners
|
||||
runner_manage() {
|
||||
# Set some defaults
|
||||
lutris_needs_restart="false"
|
||||
trigger_post_download="false"
|
||||
|
||||
# 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"
|
||||
|
||||
# Configure the text displayed in the menus
|
||||
download_menu_heading="Lutris Runners"
|
||||
download_menu_description="The runners listed below are wine builds created for Star Citizen"
|
||||
download_menu_height="140"
|
||||
|
||||
# Set the post download instructions
|
||||
# Format:
|
||||
# A header is automatically displayed that reads: Download Complete
|
||||
# msg1 is displayed below the header
|
||||
# msg2 is displayed below that in italics when zenity is in use
|
||||
# Lastly, the downloaded directory name is automatically displayed
|
||||
post_download_msg1="Select the runner in Lutris from the dropdown menu"
|
||||
post_download_msg2="Configure->Runner Options->Wine version"
|
||||
|
||||
# Call the download_manage function with the above configuration
|
||||
# The argument passed to the function is used for special handling
|
||||
# and displayed in the menus and dialogs.
|
||||
download_manage "runner"
|
||||
}
|
||||
|
||||
# Configure the download_manage function for dxvks
|
||||
dxvk_manage() {
|
||||
# Set some defaults
|
||||
lutris_needs_restart="false"
|
||||
trigger_post_download="false"
|
||||
|
||||
# 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"
|
||||
|
||||
# Configure the text displayed in the menus
|
||||
download_menu_heading="DXVK Versions"
|
||||
download_menu_description="The DXVK versions below may help improve game performance"
|
||||
download_menu_height="140"
|
||||
|
||||
# Set the post download instructions
|
||||
# Format:
|
||||
# A header is automatically displayed that reads: Download Complete
|
||||
# msg1 is displayed below the header
|
||||
# msg2 is displayed below that in italics when zenity is in use
|
||||
# Lastly, the downloaded directory name is automatically displayed
|
||||
post_download_msg1="Type the DXVK folder name in your Lutris settings"
|
||||
post_download_msg2="Configure->Runner Options->DXVK version"
|
||||
|
||||
# Call the download_manage function with the above configuration
|
||||
# The argument passed to the function is used for special handling
|
||||
# and displayed in the menus and dialogs.
|
||||
download_manage "dxvk"
|
||||
}
|
||||
|
||||
#-------------------------- end dxvk functions -----------------------------#
|
||||
|
||||
# Check that the system is optimized for Star Citizen
|
||||
preflight_check() {
|
||||
@ -1323,9 +1491,8 @@ if [ -x "$(command -v zenity)" ]; then
|
||||
use_zenity=1
|
||||
fi
|
||||
|
||||
# Set some defaults
|
||||
# Set defaults
|
||||
live_or_ptu="$live_dir"
|
||||
lutris_needs_restart="false"
|
||||
|
||||
# Check if a newer verison of the script is available
|
||||
latest_version="$(get_latest_release "$repo")"
|
||||
@ -1440,14 +1607,15 @@ while true; do
|
||||
# Configure the menu options
|
||||
preflight_msg="Preflight Check (System Optimization)"
|
||||
runners_msg="Manage Lutris Runners"
|
||||
dxvk_msg="Manage DXVK Versions"
|
||||
maintenance_msg="Maintenance and Troubleshooting"
|
||||
randomizer_msg="Get a random Penguin's Star Citizen referral code"
|
||||
quit_msg="Quit"
|
||||
|
||||
# Set the options to be displayed in the menu
|
||||
menu_options=("$preflight_msg" "$runners_msg" "$maintenance_msg" "$randomizer_msg" "$quit_msg")
|
||||
menu_options=("$preflight_msg" "$runners_msg" "$dxvk_msg" "$maintenance_msg" "$randomizer_msg" "$quit_msg")
|
||||
# Set the corresponding functions to be called for each of the options
|
||||
menu_actions=("preflight_check" "runner_manage" "maintenance_menu" "referral_randomizer" "quit")
|
||||
menu_actions=("preflight_check" "runner_manage" "dxvk_manage" "maintenance_menu" "referral_randomizer" "quit")
|
||||
|
||||
# Calculate the total height the menu should be
|
||||
menu_height="$(($menu_option_height * ${#menu_options[@]} + $menu_text_height))"
|
||||
|
Reference in New Issue
Block a user