40 Commits

Author SHA1 Message Date
1844bfda13 Detect flatpak lutris 2022-10-18 11:45:24 -04:00
f78f54ddf7 Put lutris detection in its own function
Preparation for flatpak support
2022-10-18 11:12:14 -04:00
167edab6ec Comment out zstd dependency (TKG runners removed) 2022-10-18 11:10:21 -04:00
1b334db7cc Check if it's already been installed 2022-10-17 17:17:21 -04:00
dc648a8f6f Clean up extracted directories too 2022-10-17 16:48:11 -04:00
7426d0ffb3 Update formatting 2022-10-16 11:20:13 -04:00
1cb9eb6488 Update README.md 2022-10-16 11:16:44 -04:00
a8c4257430 Bump version 2022-10-16 11:04:15 -04:00
b2f542e029 Remove TKG from runner sources
They've switched to CI builds, which we don't currently support
2022-10-16 11:03:44 -04:00
17b1bfe140 Rename function 2022-10-16 11:00:16 -04:00
f19faa8235 Refactor rm_shaders() 2022-10-16 10:57:01 -04:00
7cc4cca62d Fix error message (variable not yet set) 2022-10-16 00:08:02 -04:00
8f857476d0 Quiet grep in eac_workaround() 2022-10-15 16:00:18 -04:00
652c2fa4a0 Add shaders path to display directories feature
...in the maintenance & troubleshooting menu
2022-10-15 15:46:09 -04:00
6e4feecc85 Update phrasing 2022-10-15 15:06:02 -04:00
0e5fe688eb Quote zenity window icon path to handle spaces 2022-10-15 14:57:00 -04:00
8d130668d6 Fix pgrep/pkill commands to auto-restart Lutris 2022-10-15 14:41:31 -04:00
142e09800f Refactor download_select_install() function 2022-10-15 14:24:31 -04:00
1ae94e9b50 Add a referral code
Closes #43
2022-07-10 14:14:17 -06:00
747c799a8b more general message on zstd dependency check 2022-06-23 10:01:59 +02:00
ba907c44bf check if EAC-Workaround is commented out 2022-06-20 15:00:35 +02:00
e7a3b30564 check if zstd is installed 2022-06-20 14:44:42 +02:00
38e646578a format README.md - damn markdown newlines ;) 2022-06-16 09:02:39 +02:00
d0dc44dcd9 format README.md again 2022-06-16 08:57:11 +02:00
9986f1fe8c format README.md 2022-06-16 08:55:46 +02:00
bc11c184d2 Merge branch 'master' of github.com:starcitizen-lug/lug-helper 2022-06-16 08:48:51 +02:00
02a79aa859 added dependencies to Readme and glibc check to TKG 2022-06-16 08:48:02 +02:00
2eabf019a6 Merge pull request #40 from snatella/remove-molotov-releases
Remove snatella/molotov runners for now
2022-06-08 11:12:29 +02:00
bdb71475a8 Remove snatella/molotov runners for now 2022-06-07 09:15:44 +01:00
c627666705 added download option for TKG runners 2022-05-18 12:51:11 +02:00
65ac8ae4cd fixed if statement in rm_shaders 2022-05-16 18:37:32 +02:00
b4d9598fe5 simplified if statement for shader removal 2022-05-16 15:52:51 +02:00
dd81f24be3 Merge pull request #37 from starcitizen-lug/3.17-shaders
3.17 shaders
2022-05-16 15:41:32 +02:00
f99fe9b996 harmonized style 2022-05-16 15:40:12 +02:00
dffa971dc1 quoted lug_logo to avoid zenity bug if space is present in path - issue 36 2022-05-02 08:27:59 +02:00
fe1733542d added info message when no shaders directory is found 2022-04-23 11:12:51 +02:00
d6d28f1481 quoted variable for space safety 2022-04-22 17:15:37 +02:00
eb48d00396 adapted rm_shaders() to the new appdata-location used with 3.17 2022-04-22 17:04:22 +02:00
f072378617 Bump version 2022-04-09 10:53:28 -06:00
d6376ff9fa Prepare for shaders location change in 3.17 2022-04-09 10:51:29 -06:00
2 changed files with 111 additions and 42 deletions

View File

@ -43,8 +43,8 @@ Keybinds are backed up to *$XDG_CONFIG_HOME/starcitizen-lug/keybinds/*
- To re-import your keybinds from within the game, select them from the list:
- *Options->Keybindings->Control Profiles*
- `Delete my shaders folder only`
- Sometimes all you need to do between major version updates is delete your shaders directory.
- `Delete my shaders`
- It is recommended to delete your shaders directory after each game update.
- `Delete my DXVK cache`
- A troubleshooting step that sometimes helps fix various issues and crashes.
@ -55,6 +55,9 @@ Keybinds are backed up to *$XDG_CONFIG_HOME/starcitizen-lug/keybinds/*
- `Reset Helper configs`
- Delete the configs saved by the helper in *$XDG_CONFIG_HOME/starcitizen-lug/*
- `Show the LUG Wiki`
- Display a link to the LUG Wiki for help with installation and troubleshooting
`Get a random Penguin's Star Citizen referral code`
- Display a referral code for a random member of the Star Citizen Linux Users Group.
@ -69,6 +72,9 @@ From Source:
Arch Linux: https://aur.archlinux.org/packages/lug-helper/
_Dependencies: **bash**, **coreutils**, **curl**, **polkit** (these should be installed by default on most distributions)_
_Optional Dependencies: **zenity** (for GUI), **zstd** (to extract some runners)_
## Contributors:
- https://github.com/Termuellinator
- https://github.com/pstn

View File

@ -65,6 +65,12 @@ if [ ! -x "$(command -v curl)" ]; then
notify-send "lug-helper" "The required package 'curl' was not found on this system.\n" --icon=dialog-warning
exit 1
fi
#if [ ! -x "$(command -v zstd)" ]; then
# Print to stderr and also try warning the user through notify-send
# printf "lug-helper.sh: The package 'zstd' was not found on this system. It is required for extracting some runner packages.\n" 1>&2
# notify-send "lug-helper" "The package 'zstd' was not found on this system. It is required for extracting some runner packages.\n" --icon=dialog-warning
# exit 1
#fi
if [ ! -x "$(command -v mktemp)" ] || [ ! -x "$(command -v sort)" ] || [ ! -x "$(command -v basename)" ] || [ ! -x "$(command -v realpath)" ] || [ ! -x "$(command -v dirname)" ]; then
# Print to stderr and also try warning the user through notify-send
printf "lug-helper.sh: One or more required packages were not found on this system.\nPlease check that the following coreutils packages are installed:\n- mktemp\n- sort\n- basename\n- realpath\n- dirname\n" 1>&2
@ -102,6 +108,12 @@ install_path="drive_c/Program Files/Roberts Space Industries/$sc_base_dir"
live_dir="LIVE"
ptu_dir="PTU"
# Location in the WINE prefix where shaders are stored
appdata_path="drive_c/users/$USER/AppData/Local/Star Citizen"
# The shaders subdirectory name
shaders_subdir="shaders"
# Remaining directory paths are set at the end of the getdirs() function
######## Runners ###########################################################
@ -115,7 +127,6 @@ runners_dir="$data_dir/lutris/runners/wine"
# ie. "RawFox" "https://api.github.com/repos/rawfoxDE/raw-wine/releases"
runner_sources=(
"RawFox" "https://api.github.com/repos/starcitizen-lug/raw-wine/releases"
"Molotov/Snatella" "https://api.github.com/repos/snatella/wine-runner-sc/releases"
"/dev/null" "https://api.github.com/repos/gort818/wine-sc-lug/releases"
"GloriousEggroll" "https://api.github.com/repos/GloriousEggroll/wine-ge-custom/releases"
)
@ -170,7 +181,7 @@ lug_wiki="https://github.com/starcitizen-lug/information-howtos/wiki"
# Github repo and script version info
repo="starcitizen-lug/lug-helper"
releases_url="https://github.com/$repo/releases"
current_version="v1.19"
current_version="v1.22"
############################################################################
############################################################################
@ -224,17 +235,17 @@ message() {
"info")
# info message
# call format: message info "text to display"
margs=("--info" "--window-icon=$lug_logo" "--no-wrap" "--text=")
margs=("--info" "--window-icon=\"$lug_logo\"" "--no-wrap" "--text=")
;;
"warning")
# warning message
# call format: message warning "text to display"
margs=("--warning" "--window-icon=$lug_logo" "--text=")
margs=("--warning" "--window-icon=\"$lug_logo\"" "--text=")
;;
"question")
# question
# call format: if message question "question to ask?"; then...
margs=("--question" "--window-icon=$lug_logo" "--text=")
margs=("--question" "--window-icon=\"$lug_logo\"" "--text=")
;;
*)
debug_print exit "Script Error: Invalid message type passed to the message function. Aborting."
@ -347,7 +358,7 @@ menu() {
done
# Display the zenity radio button menu
choice="$(zenity --list --radiolist --width="480" --height="$menu_height" --text="$menu_text_zenity" --title="Star Citizen LUG Helper" --hide-header --cancel-label "$cancel_label" --window-icon=$lug_logo --column="" --column="Option" "${zen_options[@]}" 2>/dev/null)"
choice="$(zenity --list --radiolist --width="480" --height="$menu_height" --text="$menu_text_zenity" --title="Star Citizen LUG Helper" --hide-header --cancel-label "$cancel_label" --window-icon="$lug_logo" --column="" --column="Option" "${zen_options[@]}" 2>/dev/null)"
# Loop through the options array to match the chosen option
matched="false"
@ -525,7 +536,7 @@ getdirs() {
# The location within the USER directory to which the game exports keybinds
keybinds_dir="$user_dir/Controls/Mappings"
# Shaders directory
shaders_dir="$user_dir/shaders"
shaders_dir="$wine_prefix/$appdata_path"
# dxvk cache file
dxvk_cache="$game_path/$live_or_ptu/StarCitizen.dxvk-cache"
# Where to store backed up keybinds
@ -534,6 +545,8 @@ getdirs() {
# Display all directories currently used by this helper and Star Citizen
display_dirs() {
declare -a dirs_list
# Helper configs and keybinds
if [ -d "$conf_dir/$conf_subdir" ]; then
dirs_list+=("\n\nHelper configuration:\n$conf_dir/$conf_subdir\n\nKeybind backups:\n$conf_dir/$conf_subdir/keybinds")
@ -549,6 +562,11 @@ display_dirs() {
dirs_list+="\n\nStar Citizen game directory:\n$(cat "$conf_dir/$conf_subdir/$game_conf")"
fi
# Star Citizen shaders path
if [ -f "$conf_dir/$conf_subdir/$wine_conf" ]; then
dirs_list+="\n\nStar Citizen shaders:\n$(cat "$conf_dir/$conf_subdir/$wine_conf")/$appdata_path"
fi
# Lutris runners
if [ -d "$runners_dir" ]; then
dirs_list+="\n\nLutris Runners:\n$runners_dir"
@ -559,7 +577,7 @@ display_dirs() {
dirs_list+="\n\nLutris DXVK Versions:\n$dxvk_dir"
fi
# Formatting
# Format the info header
message_heading="These directories are currently being used by this Helper and Star Citizen"
if [ "$use_zenity" -eq 1 ]; then
message_heading="<b>$message_heading</b>"
@ -569,7 +587,7 @@ display_dirs() {
}
# Save exported keybinds, wipe the USER directory, and restore keybinds
sanitize() {
rm_userdir() {
# Prompt user to back up the current keybinds in the game
message info "Before proceeding, please be sure you have exported\nyour Star Citizen keybinds from within the game.\n\nTo do this, launch the game and go to:\nOptions->Keybindings->Control Profiles->Save Control Settings\n\nGo on; I'll wait."
@ -899,12 +917,35 @@ preflight_check() {
#------------------------- begin download functions ----------------------------#
# Detect if lutris is installed
lutris_detect() {
lutris_installed="false"
lutris_standard="false"
lutris_flatpak="false"
# Detect standard lutris
if [ -x "$(command -v lutris)" ]; then
# Standard Lutris is installed
lutris_installed="true"
lutris_standard="true"
fi
# Detect flatpak lutris
if [ -x "$(command -v flatpak)" ]; then
flatpak info lutris >/dev/null 2>&1
if [ "$?" -eq 0 ]; then
lutris_installed="true"
lutris_flatpak="true"
fi
fi
}
# Restart lutris if necessary
lutris_restart() {
if [ "$lutris_needs_restart" = "true" ] && [ "$(pgrep lutris)" ]; then
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 -SIGTERM lutris && nohup lutris </dev/null &>/dev/null &
pkill -f -SIGTERM lutris && nohup lutris </dev/null &>/dev/null &
fi
fi
lutris_needs_restart="false"
@ -1039,6 +1080,12 @@ download_install() {
;;
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
@ -1158,6 +1205,7 @@ download_install() {
# Cleanup tmp download
debug_print continue "Cleaning up $tmp_dir/$download_file..."
rm "$tmp_dir/$download_file"
rm -r "$tmp_dir/$download_name"
}
# List available items for download
@ -1185,7 +1233,7 @@ download_select_install() {
esac
# For runners, check GlibC version against runner requirements
if [ "$download_type" = "runner" ] && [ "$contributor_name" = "/dev/null" ]; then
if [ "$download_type" = "runner" ] && ( [ "$contributor_name" = "/dev/null" ] || [ "$contributor_name" = "TKG" ] ); then
required_glibc="2.33"
system_glibc="$(ldd --version | awk '/ldd/{print $NF}')"
@ -1201,7 +1249,7 @@ download_select_install() {
# To add new sources, handle them here, in the if statement
# 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))
download_versions=($(curl -s "$contributor_url" | awk '/browser_download_url/ {print $2}' | xargs basename -a))
else
debug_print exit "Script error: Unknown api/url format in ${download_type}_sources array. Aborting."
fi
@ -1224,9 +1272,13 @@ download_select_install() {
# and add them to the menu options
# To add new file extensions, handle them here and in
# the download_install function above
for (( i=0; i<"$max_download_items" && i<"${#download_versions[@]}"; i++ )); do
for (( i=0,num_download_items=0; i<"${#download_versions[@]}" && "$num_download_items"<"$max_download_items"; i++ )); do
# Get the file name minus the extension
case "${download_versions[i]}" in
*.sha*sum | *.ini | proton*)
# Ignore hashes, configs, and proton downloads
continue
;;
*.tar.gz)
download_name="$(basename "${download_versions[i]}" .tar.gz)"
;;
@ -1240,7 +1292,9 @@ download_select_install() {
download_name="$(basename "${download_versions[i]}" .tar.zst)"
;;
*)
debug_print exit "Unknown archive filetype in download_select_install function. Aborting."
# Print a warning and move on to the next item
debug_print continue "Warning: Unknown archive filetype in download_select_install() function. Offending String: ${download_versions[i]}"
continue
;;
esac
@ -1251,6 +1305,9 @@ download_select_install() {
menu_options+=("$download_name")
fi
menu_actions+=("download_install $i")
# Increment the added items counter
num_download_items="$(($num_download_items+1))"
done
# Complete the menu by adding the option to go back to the previous menu
@ -1296,12 +1353,13 @@ download_manage() {
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."
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 "Lutris $download_type directory not found. Unable to continue.\n\n$download_dir"
message info "The following Lutris directory was not found. Unable to continue.\n\n$download_dir"
return 0
fi
@ -1436,8 +1494,12 @@ eac_workaround() {
eac_hosts="127.0.0.1 modules-cdn.eac-prod.on.epicgames.com"
# Check if EAC workaround is already applied
if grep "$eac_hosts" /etc/hosts; then
message info "The Easy Anti-Cheat workaround has already been applied.\nYou're all set!"
if grep -q "$eac_hosts" /etc/hosts; then
if grep -q "^$eac_hosts" /etc/hosts; then
message info "The Easy Anti-Cheat workaround has already been applied.\nYou're all set!"
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
fi
@ -1474,7 +1536,8 @@ eac_workaround() {
# Install Star Citizen using Lutris
install_game() {
# Check if Lutris is installed
if [ ! -x "$(command -v lutris)" ]; then
lutris_detect
if [ "$lutris_installed" = "false" ]; then
message warning "Lutris is required but does not appear to be installed."
return 0
fi
@ -1505,18 +1568,18 @@ rm_shaders() {
return 0
fi
# Sanity check
if [ ! -d "$shaders_dir" ]; then
message warning "Shaders directory not found. There is nothing to delete!\n\n$shaders_dir"
return 0
fi
# Loop through all possible shader directories
for appdata_dir in "$shaders_dir"/*; do
if [ -d "$appdata_dir/$shaders_subdir" ]; then
# If a shaders directory is found, delete it
if message question "The following directory will be deleted:\n\n$appdata_dir/$shaders_subdir\n\nDo you want to proceed?"; then
debug_print continue "Deleting $appdata_dir/$shaders_subdir..."
rm -r "$appdata_dir/$shaders_subdir"
fi
fi
done
# Delete the shader directory
if message question "The following directory will be deleted:\n\n$shaders_dir\n\nDo you want to proceed?"; then
debug_print continue "Deleting $shaders_dir..."
rm -r "$shaders_dir"
message info "Your shaders have been deleted!"
fi
message info "All shaders have been deleted"
}
# Delete DXVK cache
@ -1555,8 +1618,8 @@ maintenance_menu() {
# Configure the menu options
version_msg="Switch the Helper between LIVE and PTU (Currently: $live_or_ptu)"
sanitize_msg="Delete my Star Citizen USER folder and preserve my keybinds"
shaders_msg="Delete my shaders folder only (Do this after each game update)"
userdir_msg="Delete my Star Citizen USER folder and preserve my keybinds"
shaders_msg="Delete my shaders (Do this after each game update)"
vidcache_msg="Delete my DXVK cache"
dirs_msg="Display Helper and Star Citizen directories"
wiki_msg="Show the LUG Wiki"
@ -1564,9 +1627,9 @@ maintenance_menu() {
quit_msg="Return to the main menu"
# Set the options to be displayed in the menu
menu_options=("$version_msg" "$sanitize_msg" "$shaders_msg" "$vidcache_msg" "$dirs_msg" "$wiki_msg" "$reset_msg" "$quit_msg")
menu_options=("$version_msg" "$userdir_msg" "$shaders_msg" "$vidcache_msg" "$dirs_msg" "$wiki_msg" "$reset_msg" "$quit_msg")
# Set the corresponding functions to be called for each of the options
menu_actions=("set_version" "sanitize" "rm_shaders" "rm_dxvkcache" "display_dirs" "display_wiki" "reset_helper" "menu_loop_done")
menu_actions=("set_version" "rm_userdir" "rm_shaders" "rm_dxvkcache" "display_dirs" "display_wiki" "reset_helper" "menu_loop_done")
# Calculate the total height the menu should be
menu_height="$(($menu_option_height * ${#menu_options[@]} + $menu_text_height))"
@ -1582,7 +1645,7 @@ maintenance_menu() {
# Get a random Penguin's Star Citizen referral code
referral_randomizer() {
# Populate the referral codes array
referral_codes=("STAR-4TZD-6KMM" "STAR-4XM2-VM99" "STAR-2NPY-FCR2" "STAR-T9Z9-7W6P" "STAR-VLBF-W2QR" "STAR-BYR6-YHMF" "STAR-3X2H-VZMX" "STAR-BRWN-FB9T" "STAR-FG6Y-N4Q4" "STAR-VLD6-VZRG" "STAR-T9KF-LV77" "STAR-4XHB-R7RF" "STAR-9NVF-MRN7" "STAR-3Q4W-9TC3" "STAR-3SBK-7QTT" "STAR-XFBT-9TTK" "STAR-F3H9-YPHN" "STAR-BYK6-RCCL" "STAR-XCKH-W6T7" "STAR-H292-39WK" "STAR-ZRT5-PJB7" "STAR-GMBP-SH9Y" "STAR-PLWB-LMFY" "STAR-TNZN-H4ZT" "STAR-T5G5-L2GJ" "STAR-6TPV-7QH2" "STAR-THHD-TV3Y" "STAR-7ZFS-PK2L" "STAR-SRQN-43TB" "STAR-9TDG-D4H9" "STAR-BPH3-THJC" "STAR-HL3M-R5KC" "STAR-GBS5-LTVB" "STAR-CJ3Y-KZZ4" "STAR-5GRM-7HBY" "STAR-G2GX-Y2QJ" "STAR-YWY3-H4XX" "STAR-6VGM-PTKC" "STAR-T6MZ-QFHX" "STAR-T2K6-LXFW" "STAR-XN25-9CJJ" "STAR-47V3-4QGB" "STAR-YD4Z-TQZV" "STAR-XLN7-9XNJ" "STAR-N62T-2R39" "STAR-3S3D-9HXQ" "STAR-TRZF-NMCV" "STAR-TLLJ-SMG4" "STAR-MFT6-Q44H" "STAR-TZX2-TPWF")
referral_codes=("STAR-4TZD-6KMM" "STAR-4XM2-VM99" "STAR-2NPY-FCR2" "STAR-T9Z9-7W6P" "STAR-VLBF-W2QR" "STAR-BYR6-YHMF" "STAR-3X2H-VZMX" "STAR-BRWN-FB9T" "STAR-FG6Y-N4Q4" "STAR-VLD6-VZRG" "STAR-T9KF-LV77" "STAR-4XHB-R7RF" "STAR-9NVF-MRN7" "STAR-3Q4W-9TC3" "STAR-3SBK-7QTT" "STAR-XFBT-9TTK" "STAR-F3H9-YPHN" "STAR-BYK6-RCCL" "STAR-XCKH-W6T7" "STAR-H292-39WK" "STAR-ZRT5-PJB7" "STAR-GMBP-SH9Y" "STAR-PLWB-LMFY" "STAR-TNZN-H4ZT" "STAR-T5G5-L2GJ" "STAR-6TPV-7QH2" "STAR-THHD-TV3Y" "STAR-7ZFS-PK2L" "STAR-SRQN-43TB" "STAR-9TDG-D4H9" "STAR-BPH3-THJC" "STAR-HL3M-R5KC" "STAR-GBS5-LTVB" "STAR-CJ3Y-KZZ4" "STAR-5GRM-7HBY" "STAR-G2GX-Y2QJ" "STAR-YWY3-H4XX" "STAR-6VGM-PTKC" "STAR-T6MZ-QFHX" "STAR-T2K6-LXFW" "STAR-XN25-9CJJ" "STAR-47V3-4QGB" "STAR-YD4Z-TQZV" "STAR-XLN7-9XNJ" "STAR-N62T-2R39" "STAR-3S3D-9HXQ" "STAR-TRZF-NMCV" "STAR-TLLJ-SMG4" "STAR-MFT6-Q44H" "STAR-TZX2-TPWF" "STAR-WCHN-4ZMX")
# Pick a random array element. Scale a floating point number for
# a more random distribution than simply calling RANDOM
random_code="${referral_codes[$(awk '{srand($2); print int(rand()*$1)}' <<< "${#referral_codes[@]} $RANDOM")]}"
@ -1682,7 +1745,7 @@ Usage: lug-helper <options>
cargs+=("dxvk_manage")
;;
--delete-user-folder | -u )
cargs+=("sanitize")
cargs+=("rm_userdir")
;;
--delete-shaders | -s )
cargs+=("rm_shaders")