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
**Star Citizen's Linux Users Group Helper Script**
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:
@ -58,4 +60,6 @@ Arch Linux: https://aur.archlinux.org/packages/lug-helper/
## Contributors:
- https://github.com/Termuellinator
- https://github.com/pstn
- https://github.com/gort818
- https://github.com/victort
- Runner Downloader inspired by https://github.com/richardtatum/sc-runner-updater

View File

@ -41,6 +41,8 @@
# Author: https://github.com/the-sane
# Contributor: https://github.com/Termuellinator
# Contributor: https://github.com/pstn
# Contributor: https://github.com/gort818
# Contributor: https://github.com/victort
# Runner Downloader inspired by:
# https://github.com/richardtatum/sc-runner-updater
############################################################################
@ -61,19 +63,10 @@ fi
wine_conf="winedir.conf"
game_conf="gamedir.conf"
backup_conf="backupdir.conf"
# Use XDG base directories if defined
if [ -z "$XDG_CONFIG_HOME" ]; then
conf_dir="$HOME/.config"
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
conf_dir="${XDG_CONFIG_HOME:-$HOME/.config}"
data_dir="${XDG_DATA_HOME:-$HOME/.local/share}"
# .config subdirectory
conf_subdir="starcitizen-lug"
@ -164,7 +157,7 @@ message() {
fi
# Use zenity messages if available
if [ "$has_zen" -eq 1 ]; then
if [ "$use_zenity" -eq 1 ]; then
case "$1" in
"info")
# info message
@ -273,7 +266,7 @@ menu() {
fi
# 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
# TRUE or FALSE to indicate default selections
# ie: "TRUE" "List item 1" "FALSE" "List item 2" "FALSE" "List item 3"
@ -377,7 +370,7 @@ getdirs() {
# ask the user to provide them
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."
if [ "$has_zen" -eq 1 ]; then
if [ "$use_zenity" -eq 1 ]; then
# Using Zenity file selection menus
# Get the wine prefix directory
if [ -z "$wine_prefix" ]; then
@ -518,6 +511,7 @@ sanitize() {
fi
}
#--------------------- begin preflight check functions -----------------------#
#------------------------- begin mapcount functions --------------------------#
# Check if setting vm.max_map_count was successful
@ -644,17 +638,27 @@ filelimit_check() {
#------------------------- end filelimit functions ---------------------------#
# Check total system memory
memory_check() {
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.")
else
preflight_fail+=("Your system has $memtotal GB of memory.\nWe recommend at least 16 GB to avoid crashes.")
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
rm_shaders() {
# Get/Set directory paths
@ -681,7 +685,7 @@ rm_shaders() {
}
# Delete DXVK cache
rm_vidcache() {
rm_dxvkcache() {
# Get/Set directory paths
getdirs
if [ "$?" -eq 1 ]; then
@ -764,7 +768,7 @@ runner_select_delete() {
menu_actions+=(":") # no-op
# 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
menu_height="400"
fi
@ -818,7 +822,7 @@ runner_install() {
# Download the runner to the tmp directory
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
mkfifo "$tmp_dir/lugpipe"
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
./*)
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
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
@ -869,7 +873,7 @@ runner_install() {
*)
# Runners with a subdirectory in the archive
debug_print continue "Installing runner into $runners_dir..."
if [ "$has_zen" -eq 1 ]; then
if [ "$use_zenity" -eq 1 ]; then
# Use Zenity progress bar
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
@ -963,7 +967,7 @@ runner_select_install() {
menu_actions+=(":") # no-op
# 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
menu_height="400"
fi
@ -1013,7 +1017,7 @@ runner_manage() {
menu_actions+=("runner_select_delete" "menu_loop_done")
# 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
menu
@ -1038,6 +1042,7 @@ preflight_check() {
# Call the optimization functions to perform the checks
memory_check
avx_check
mapcount_check
filelimit_check
@ -1147,10 +1152,10 @@ maintenance_menu() {
# Set the options to be displayed in the menu
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
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
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
menu
@ -1160,7 +1165,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")
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
# a more random distribution than simply calling 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
has_zen=0
use_zenity=0
if [ -x "$(command -v zenity)" ]; then
has_zen=1
use_zenity=1
fi
# Set some defaults
live_or_ptu="LIVE"
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
while true; do
# Configure the menu
@ -1231,7 +1322,7 @@ while true; do
menu_actions=("preflight_check" "runner_manage" "maintenance_menu" "referral_randomizer" "quit")
# 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
menu