29 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
2 changed files with 107 additions and 51 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,8 +108,12 @@ install_path="drive_c/Program Files/Roberts Space Industries/$sc_base_dir"
live_dir="LIVE"
ptu_dir="PTU"
# AppData directory
# 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 ###########################################################
@ -117,10 +127,8 @@ 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"
"TKG" "https://api.github.com/repos/Frogging-Family/wine-tkg-git/releases"
)
######## DXVK ##############################################################
@ -173,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.21"
current_version="v1.22"
############################################################################
############################################################################
@ -227,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."
@ -528,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="$wine_prefix/$appdata_path/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
@ -537,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")
@ -552,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"
@ -562,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>"
@ -572,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."
@ -902,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"
@ -1042,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
@ -1161,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
@ -1188,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}')"
@ -1204,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
@ -1227,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)"
;;
@ -1243,20 +1292,22 @@ download_select_install() {
download_name="$(basename "${download_versions[i]}" .tar.zst)"
;;
*)
download_name="skip"
debug_print continue "Unknown archive filetype in download_select_install function. Offending String: ${download_versions[i]}"
# 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
# Add the file names to the menu
if [[ "$download_name" = "skip" ]] || [[ "${download_versions[i]}" = "proton"* ]] ; then # filter out other file types or proton-downloads (needed for TKG)
continue
elif [ -d "$download_dir/$download_name" ]; then
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
num_download_items="$(($num_download_items+1))"
done
# Complete the menu by adding the option to go back to the previous menu
@ -1302,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
@ -1442,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
@ -1480,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
@ -1511,25 +1568,18 @@ rm_shaders() {
return 0
fi
# Create an array containing all directories in the appdata_path
for appdata_list in "$wine_prefix/$appdata_path"/*; do
if [ -d "$appdata_list" ]; then
appdata_items+=("$appdata_list")
# 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 shaders directory in every directory beginning with "sc-alpha"
for (( i=0; i<"${#appdata_items[@]}"; i++ )); do
if [[ "${appdata_items[i]}" = "$wine_prefix/$appdata_path"/sc-alpha* ]] && [[ -d "${appdata_items[i]}"/shaders ]]; then # check if the item in the array begins with sc-alpha
if message question "The following directory will be deleted:\n\n${appdata_items[i]}/shaders\n\nDo you want to proceed?"; then
debug_print continue "Deleting ${appdata_items[i]}/shaders..."
rm -r "${appdata_items[i]}/shaders"
message info "Your shaders have been deleted!"
fi
elif [ $i = $(( "${#appdata_items[@]}" - 1 )) ]; then # display message when end of array is reached and no shaders or sc-alpha directories were found
message info "No more shader directories found"
fi
done
message info "All shaders have been deleted"
}
# Delete DXVK cache
@ -1568,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"
@ -1577,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))"
@ -1595,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")]}"
@ -1695,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")