33 Commits
v1.5 ... v1.7

Author SHA1 Message Date
b6eea7b224 Fix the fix 2021-02-20 18:07:08 -05:00
c9c3c07866 Fix formatting 2021-02-20 18:06:49 -05:00
2e883423d3 Spacing 2021-02-20 18:05:02 -05:00
12a3a51eb4 Add preflight check section comments 2021-02-20 18:04:34 -05:00
aec6ffbfc0 Fix floating point math 2021-02-20 18:01:13 -05:00
96b15262f5 You saw nothing.
*jedi mind wipe*
2021-02-16 14:49:45 -05:00
9986f62566 Merge pull request #16 from the-sane/avx
Add preflight check for AVX
2021-02-16 14:48:06 -05:00
a2397c28f0 Add preflight check for AVX 2021-02-16 14:23:14 -05:00
e8891b42e6 Add referral code 2021-02-12 19:34:12 -05:00
52f602498e Update README.md 2021-01-31 14:15:18 -05:00
9279c68d69 Update README.md 2021-01-31 14:14:07 -05:00
45e5f586dd Update README.md 2021-01-31 14:12:19 -05:00
9d532f3ac5 Update README.md 2021-01-31 14:11:03 -05:00
ce7031e873 Update README.md 2021-01-31 14:10:00 -05:00
8492cdc3a2 Update README.md 2021-01-31 14:09:28 -05:00
b22e84887e Improve argument handling 2021-01-31 11:33:31 -05:00
bfc2822a35 Rename variable for clarity 2021-01-31 11:11:38 -05:00
dfe15f8e78 Improve command line argument processing 2021-01-31 11:10:23 -05:00
8a27a77579 Merge pull request #15 from gort818/master
Add short options to arguments
2021-01-31 09:46:31 -05:00
28edb3393e Add short options to arguments 2021-01-30 20:01:06 -08:00
978e0adc92 Remove unused variable 2021-01-30 15:00:20 -05:00
1ae2d6e4b4 zsh compatibility 2021-01-30 14:45:38 -05:00
ae7c407b19 Add referral code 2021-01-30 14:37:41 -05:00
5caea10a6b Add more contributors <3 2021-01-30 14:35:54 -05:00
c6b56ac98b Update README.md 2021-01-30 14:35:30 -05:00
407db0bbcf Rename function 2021-01-30 14:32:41 -05:00
70f282d012 Add command line arguments 2021-01-30 14:32:16 -05:00
0018591192 Merge pull request #13 from victort/argumentative
added --help, help verbage, and structure for future argument handling.
2021-01-30 13:49:41 -05:00
e3d6e4db68 Merge pull request #14 from gort818/master
Remove superfluous if/then statments for XDG base dirs
2021-01-30 13:47:54 -05:00
ca2ce556aa Re-add comment 2021-01-30 13:45:35 -05:00
8e922ae0ef Remove superfluous if/then statments for XDG base dits 2021-01-28 21:26:17 -08:00
1d4ff8375e subtraction of abstraction 2021-01-28 17:50:58 -08:00
8bd3a165de added --help, help verbage, and structure for future argument handling. 2021-01-28 17:11:03 -08:00
2 changed files with 129 additions and 34 deletions

View File

@ -1,13 +1,15 @@
# LUG-Helper # LUG-Helper
**Star Citizen's Linux Users Group Helper Script** **Star Citizen's Linux Users Group Helper Script**
https://robertsspaceindustries.com/orgs/LUG https://robertsspaceindustries.com/orgs/LUG
*Greetings, fellow Penguin!* ### *Greetings, fellow Penguin!*
_**This script is designed to help you manage and optimize Star Citizen on Linux.**_
This script is designed to help you manage and optimize Star Citizen on Linux. Zenity menus are used for a GUI experience with a fallback to terminal-based menus where Zenity is unavailable.
Command line arguments are available for quickly launching functions from the terminal.
Zenity menus are used for a GUI experience with a fallback to terminal-based menus where Zenity is unavailable. The game directory paths provided by the user on first run are saved in *$XDG_CONFIG_HOME/starcitizen-lug/*. Keybinds are backed up to *$XDG_CONFIG_HOME/starcitizen-lug/keybinds/* Configuration is saved in *$XDG_CONFIG_HOME/starcitizen-lug/*.
Keybinds are backed up to *$XDG_CONFIG_HOME/starcitizen-lug/keybinds/*
## Options: ## Options:
@ -58,4 +60,6 @@ Arch Linux: https://aur.archlinux.org/packages/lug-helper/
## Contributors: ## Contributors:
- https://github.com/Termuellinator - https://github.com/Termuellinator
- https://github.com/pstn - https://github.com/pstn
- https://github.com/gort818
- https://github.com/victort
- Runner Downloader inspired by https://github.com/richardtatum/sc-runner-updater - Runner Downloader inspired by https://github.com/richardtatum/sc-runner-updater

View File

@ -41,6 +41,8 @@
# Author: https://github.com/the-sane # Author: https://github.com/the-sane
# Contributor: https://github.com/Termuellinator # Contributor: https://github.com/Termuellinator
# Contributor: https://github.com/pstn # Contributor: https://github.com/pstn
# Contributor: https://github.com/gort818
# Contributor: https://github.com/victort
# Runner Downloader inspired by: # Runner Downloader inspired by:
# https://github.com/richardtatum/sc-runner-updater # https://github.com/richardtatum/sc-runner-updater
############################################################################ ############################################################################
@ -61,19 +63,10 @@ fi
wine_conf="winedir.conf" wine_conf="winedir.conf"
game_conf="gamedir.conf" game_conf="gamedir.conf"
backup_conf="backupdir.conf"
# Use XDG base directories if defined # Use XDG base directories if defined
if [ -z "$XDG_CONFIG_HOME" ]; then conf_dir="${XDG_CONFIG_HOME:-$HOME/.config}"
conf_dir="$HOME/.config" data_dir="${XDG_DATA_HOME:-$HOME/.local/share}"
else
conf_dir="$XDG_CONFIG_HOME"
fi
if [ -z "$XDG_DATA_HOME" ]; then
data_dir="$HOME/.local/share"
else
data_dir="$XDG_DATA_HOME"
fi
# .config subdirectory # .config subdirectory
conf_subdir="starcitizen-lug" conf_subdir="starcitizen-lug"
@ -164,7 +157,7 @@ message() {
fi fi
# Use zenity messages if available # Use zenity messages if available
if [ "$has_zen" -eq 1 ]; then if [ "$use_zenity" -eq 1 ]; then
case "$1" in case "$1" in
"info") "info")
# info message # info message
@ -273,7 +266,7 @@ menu() {
fi fi
# Use Zenity if it is available # Use Zenity if it is available
if [ "$has_zen" -eq 1 ]; then if [ "$use_zenity" -eq 1 ]; then
# Format the options array for Zenity by adding # Format the options array for Zenity by adding
# TRUE or FALSE to indicate default selections # TRUE or FALSE to indicate default selections
# ie: "TRUE" "List item 1" "FALSE" "List item 2" "FALSE" "List item 3" # ie: "TRUE" "List item 1" "FALSE" "List item 2" "FALSE" "List item 3"
@ -377,7 +370,7 @@ getdirs() {
# ask the user to provide them # ask the user to provide them
if [ -z "$wine_prefix" ] || [ -z "$game_path" ]; then if [ -z "$wine_prefix" ] || [ -z "$game_path" ]; then
message info "At the next screen, please select your Star Citizen WINE prefix.\nIt will be remembered for future use." message info "At the next screen, please select your Star Citizen WINE prefix.\nIt will be remembered for future use."
if [ "$has_zen" -eq 1 ]; then if [ "$use_zenity" -eq 1 ]; then
# Using Zenity file selection menus # Using Zenity file selection menus
# Get the wine prefix directory # Get the wine prefix directory
if [ -z "$wine_prefix" ]; then if [ -z "$wine_prefix" ]; then
@ -518,6 +511,7 @@ sanitize() {
fi fi
} }
#--------------------- begin preflight check functions -----------------------#
#------------------------- begin mapcount functions --------------------------# #------------------------- begin mapcount functions --------------------------#
# Check if setting vm.max_map_count was successful # Check if setting vm.max_map_count was successful
@ -644,17 +638,27 @@ filelimit_check() {
#------------------------- end filelimit functions ---------------------------# #------------------------- end filelimit functions ---------------------------#
# Check total system memory # Check total system memory
memory_check() { memory_check() {
memtotal="$(awk '/MemTotal/ {printf "%.1f \n", $2/1024/1024}' /proc/meminfo)" memtotal="$(awk '/MemTotal/ {printf "%.1f \n", $2/1024/1024}' /proc/meminfo)"
if awk 'BEGIN {exit !("$memtotal" < 15)}'; then if [ ${memtotal%.*} -ge "15" ]; then
preflight_pass+=("Your system has $memtotal GB of memory.") preflight_pass+=("Your system has $memtotal GB of memory.")
else else
preflight_fail+=("Your system has $memtotal GB of memory.\nWe recommend at least 16 GB to avoid crashes.") preflight_fail+=("Your system has $memtotal GB of memory.\nWe recommend at least 16 GB to avoid crashes.")
fi fi
} }
# Check CPU for the required AVX extension
avx_check() {
if grep -q "avx" /proc/cpuinfo; then
preflight_pass+=("Your CPU supports the necessary AVX instruction set.")
else
preflight_fail+=("Your CPU does not appear to support AVX instructions.\nThis requirement was added to Star Citizen in version 3.11")
fi
}
#------------------------- end preflight check functions ---------------------#
# Delete the shaders directory # Delete the shaders directory
rm_shaders() { rm_shaders() {
# Get/Set directory paths # Get/Set directory paths
@ -681,7 +685,7 @@ rm_shaders() {
} }
# Delete DXVK cache # Delete DXVK cache
rm_vidcache() { rm_dxvkcache() {
# Get/Set directory paths # Get/Set directory paths
getdirs getdirs
if [ "$?" -eq 1 ]; then if [ "$?" -eq 1 ]; then
@ -764,7 +768,7 @@ runner_select_delete() {
menu_actions+=(":") # no-op menu_actions+=(":") # no-op
# Calculate the total height the menu should be # Calculate the total height the menu should be
menu_height="$(("$menu_option_height" * "${#menu_options[@]}" + "$menu_text_height"))" menu_height="$(($menu_option_height * ${#menu_options[@]} + $menu_text_height))"
if [ "$menu_height" -gt "400" ]; then if [ "$menu_height" -gt "400" ]; then
menu_height="400" menu_height="400"
fi fi
@ -818,7 +822,7 @@ runner_install() {
# Download the runner to the tmp directory # Download the runner to the tmp directory
debug_print continue "Downloading $runner_dl_url into $tmp_dir/$runner_file..." debug_print continue "Downloading $runner_dl_url into $tmp_dir/$runner_file..."
if [ "$has_zen" -eq 1 ]; then if [ "$use_zenity" -eq 1 ]; then
# Format the curl progress bar for zenity # Format the curl progress bar for zenity
mkfifo "$tmp_dir/lugpipe" mkfifo "$tmp_dir/lugpipe"
cd "$tmp_dir" && curl -#LO "$runner_dl_url" > "$tmp_dir/lugpipe" 2>&1 & curlpid="$!" cd "$tmp_dir" && curl -#LO "$runner_dl_url" > "$tmp_dir/lugpipe" 2>&1 & curlpid="$!"
@ -857,7 +861,7 @@ runner_install() {
# If the files in the archive begin with ./ there is no subdirectory # If the files in the archive begin with ./ there is no subdirectory
./*) ./*)
debug_print continue "Installing runner into $runners_dir/$runner_name..." debug_print continue "Installing runner into $runners_dir/$runner_name..."
if [ "$has_zen" -eq 1 ]; then if [ "$use_zenity" -eq 1 ]; then
# Use Zenity progress bar # Use Zenity progress bar
mkdir -p "$runners_dir/$runner_name" && tar -xzf "$tmp_dir/$runner_file" -C "$runners_dir/$runner_name" | \ mkdir -p "$runners_dir/$runner_name" && tar -xzf "$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 zenity --progress --pulsate --no-cancel --auto-close --title="Star Citizen LUG Helper" --text="Installing runner...\n" 2>/dev/null
@ -869,7 +873,7 @@ runner_install() {
*) *)
# Runners with a subdirectory in the archive # Runners with a subdirectory in the archive
debug_print continue "Installing runner into $runners_dir..." debug_print continue "Installing runner into $runners_dir..."
if [ "$has_zen" -eq 1 ]; then if [ "$use_zenity" -eq 1 ]; then
# Use Zenity progress bar # Use Zenity progress bar
mkdir -p "$runners_dir" && tar -xzf "$tmp_dir/$runner_file" -C "$runners_dir" | \ mkdir -p "$runners_dir" && tar -xzf "$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 zenity --progress --pulsate --no-cancel --auto-close --title="Star Citizen LUG Helper" --text="Installing runner...\n" 2>/dev/null
@ -963,7 +967,7 @@ runner_select_install() {
menu_actions+=(":") # no-op menu_actions+=(":") # no-op
# Calculate the total height the menu should be # Calculate the total height the menu should be
menu_height="$(("$menu_option_height" * "${#menu_options[@]}" + "$menu_text_height"))" menu_height="$(($menu_option_height * ${#menu_options[@]} + $menu_text_height))"
if [ "$menu_height" -gt "400" ]; then if [ "$menu_height" -gt "400" ]; then
menu_height="400" menu_height="400"
fi fi
@ -1013,7 +1017,7 @@ runner_manage() {
menu_actions+=("runner_select_delete" "menu_loop_done") menu_actions+=("runner_select_delete" "menu_loop_done")
# Calculate the total height the menu should be # Calculate the total height the menu should be
menu_height="$(("$menu_option_height" * "${#menu_options[@]}" + "$menu_text_height"))" menu_height="$(($menu_option_height * ${#menu_options[@]} + $menu_text_height))"
# Call the menu function. It will use the options as configured above # Call the menu function. It will use the options as configured above
menu menu
@ -1038,6 +1042,7 @@ preflight_check() {
# Call the optimization functions to perform the checks # Call the optimization functions to perform the checks
memory_check memory_check
avx_check
mapcount_check mapcount_check
filelimit_check filelimit_check
@ -1147,10 +1152,10 @@ maintenance_menu() {
# Set the options to be displayed in the menu # Set the options to be displayed in the menu
menu_options=("$version_msg" "$sanitize_msg" "$shaders_msg" "$vidcache_msg" "$reset_msg" "$quit_msg") menu_options=("$version_msg" "$sanitize_msg" "$shaders_msg" "$vidcache_msg" "$reset_msg" "$quit_msg")
# Set the corresponding functions to be called for each of the options # Set the corresponding functions to be called for each of the options
menu_actions=("set_version" "sanitize" "rm_shaders" "rm_vidcache" "reset_helper" "menu_loop_done") menu_actions=("set_version" "sanitize" "rm_shaders" "rm_dxvkcache" "reset_helper" "menu_loop_done")
# Calculate the total height the menu should be # Calculate the total height the menu should be
menu_height="$(("$menu_option_height" * "${#menu_options[@]}" + "$menu_text_height"))" menu_height="$(($menu_option_height * ${#menu_options[@]} + $menu_text_height))"
# Call the menu function. It will use the options as configured above # Call the menu function. It will use the options as configured above
menu menu
@ -1160,7 +1165,7 @@ maintenance_menu() {
# Get a random Penguin's Star Citizen referral code # Get a random Penguin's Star Citizen referral code
referral_randomizer() { referral_randomizer() {
# Populate the referral codes array # 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") 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")
# Pick a random array element. Scale a floating point number for # Pick a random array element. Scale a floating point number for
# a more random distribution than simply calling RANDOM # a more random distribution than simply calling RANDOM
random_code="${referral_codes[$(awk '{srand($2); print int(rand()*$1)}' <<< "${#referral_codes[@]} $RANDOM")]}" random_code="${referral_codes[$(awk '{srand($2); print int(rand()*$1)}' <<< "${#referral_codes[@]} $RANDOM")]}"
@ -1202,15 +1207,101 @@ quit() {
############################################################################ ############################################################################
# Check if Zenity is available # Check if Zenity is available
has_zen=0 use_zenity=0
if [ -x "$(command -v zenity)" ]; then if [ -x "$(command -v zenity)" ]; then
has_zen=1 use_zenity=1
fi fi
# Set some defaults # Set some defaults
live_or_ptu="LIVE" live_or_ptu="LIVE"
lutris_needs_restart="false" lutris_needs_restart="false"
# If invoked with command line arguments, process them and exit
if [ "$#" -gt 0 ]; then
while [ "$#" -gt 0 ]
do
# Victor_Tramp expects the spanish inquisition.
case "$1" in
--help | -h )
printf "Star Citizen Linux Users Group Helper Script
Usage: lug-helper <options>
-p, --preflight-check Run system optimization checks
-m, --manage-runners Install or remove Lutris runners
-u, --delete-user-folder Delete Star Citizen USER folder, preserving keybinds
-s, --delete-shaders Delete Star Citizen shaders directory
-c, --delete-dxvk-cache Delete Star Citizen dxvk cache file
-t, --target=[live|ptu] Target LIVE or PTU (default live)
-g, --use-gui=[yes|no] Use Zenity GUI (default yes)
-r, --get-referral Get a random LUG member's Star Citizen referral code
-x, --reset-helper Delete saved lug-helper configs
"
exit 0
;;
--preflight-check | -p )
cargs+=("preflight_check")
;;
--manage-runners | -m )
cargs+=("runner_manage")
;;
--delete-user-folder | -u )
cargs+=("sanitize")
;;
--delete-shaders | -s )
cargs+=("rm_shaders")
;;
--delete-dxvk-cache | -c )
cargs+=("rm_dxvkcache")
;;
--target=* | -t=* )
live_or_ptu="$(echo "$1" | cut -d'=' -f2)"
if [ "$live_or_ptu" = "live" ] || [ "$live_or_ptu" = "LIVE" ]; then
live_or_ptu="LIVE"
elif [ "$live_or_ptu" = "ptu" ] || [ "$live_or_ptu" = "PTU" ]; then
live_or_ptu="PTU"
else
printf "$0: Invalid option '$1'\n"
exit 0
fi
;;
--use-gui=* | -g=* )
# If zenity is unavailable, it has already been set to 0
# and this setting has no effect
if [ -x "$(command -v zenity)" ]; then
use_zenity="$(echo "$1" | cut -d'=' -f2)"
if [ "$use_zenity" = "yes" ] || [ "$use_zenity" = "YES" ] || [ "$use_zenity" = "1" ]; then
use_zenity=1
elif [ "$use_zenity" = "no" ] || [ "$use_zenity" = "NO" ] || [ "$use_zenity" = "0" ]; then
use_zenity=0
else
printf "$0: Invalid option '$1'\n"
exit 0
fi
fi
;;
--get-referral | -r )
cargs+=("referral_randomizer")
;;
--reset-helper | -x )
cargs+=("reset_helper")
;;
* )
printf "$0: Invalid option '$1'\n"
exit 0
;;
esac
# Shift forward to the next argument and loop again
shift
done
# Call the requested functions and exit
if [ "${#cargs[@]}" -gt 0 ]; then
for (( i=0; i<"${#cargs[@]}"; i++ )); do
${cargs[i]}
done
exit 0
fi
fi
# Loop the main menu until the user selects quit # Loop the main menu until the user selects quit
while true; do while true; do
# Configure the menu # Configure the menu
@ -1231,7 +1322,7 @@ while true; do
menu_actions=("preflight_check" "runner_manage" "maintenance_menu" "referral_randomizer" "quit") menu_actions=("preflight_check" "runner_manage" "maintenance_menu" "referral_randomizer" "quit")
# Calculate the total height the menu should be # Calculate the total height the menu should be
menu_height="$(("$menu_option_height" * "${#menu_options[@]}" + "$menu_text_height"))" menu_height="$(($menu_option_height * ${#menu_options[@]} + $menu_text_height))"
# Call the menu function. It will use the options as configured above # Call the menu function. It will use the options as configured above
menu menu