mirror of
https://github.com/Omni-guides/Jackify.git
synced 2026-06-17 20:17:46 +02:00
feat: add Legacy directory with original guides and scripts
- Added complete Legacy directory with all original content - Includes binaries, docs, files, images, and README - Removed .git directory from Legacy to keep repository clean - Legacy content now accessible via navigation links
This commit is contained in:
838
Legacy/binaries/WabbajackProton-testing.sh
Normal file
838
Legacy/binaries/WabbajackProton-testing.sh
Normal file
@@ -0,0 +1,838 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
##################################################################
|
||||
# #
|
||||
# Attempt to automate installing Wabbajack on Linux Steam/Proton #
|
||||
# #
|
||||
# Alpha v0.19 - Omni, from 25/01/25 #
|
||||
# #
|
||||
##################################################################
|
||||
|
||||
# - v0.01 - Initial script structure.
|
||||
# - v0.02 - Added functions for most features
|
||||
# - v0.03 - Completed initial functions
|
||||
# - v0.04 - Added handling of WebP Installer
|
||||
# - v0.05 - Switched out installing WebP in favour of dll + .reg files
|
||||
# - v0.06 - Tidied up some ordering of commands, plus output style differences.
|
||||
# - v0.07 - Replaced troublesome win7/win10 protontricks setting with swapping out .reg files. Also much faster.
|
||||
# - v0.08 - Added listing of Wabbajack Steam entries, with selection, if more than one "Wabbajack" named entry found.
|
||||
# - v0.09 - Initial support for Flatpak Steam libraries
|
||||
# - v0.10 - Better detection of flatpak protontricks (Bazzite has a wrapper that made it look like native protontricks)
|
||||
# - v0.11 - Better handling of the Webview Installer
|
||||
# - v0.12 - Added further support for Flatpak Steam, including override requirement message.
|
||||
# - v0.13 - Fixed incorrect protontricks-launch command for installing Webview using native protontricks.
|
||||
# - v0.14 - Fallback support to curl if wget is not found on the system.
|
||||
# - v0.15 - Add a check/creation of protontricks alias entries, for troubleshooting and future use.
|
||||
# - v0.16 - Replaced Wabbajack.exe and Steam Library detection to instead use shortcuts.vdf and libraryfolders.vdf to extrapolate, removing ambiguity and user input requirement.
|
||||
# - v0.17 - Modified the path related functions to handle spaces in the path name.
|
||||
# - v0.18 - Fixed Wabbajack.exe detection that was causing "blank" options being displayed (e.g if the entry in Steam was left as "Wabbajack.exe" then it would wrongly show up as a blank line.)
|
||||
# - v0.19 - Changed WebView instller download URL.
|
||||
|
||||
# Current Script Version (alpha)
|
||||
script_ver=0.19
|
||||
|
||||
# Today's date
|
||||
date=$(date +"%d%m%y")
|
||||
|
||||
# Set up and blank logs
|
||||
LOGFILE=$HOME/wabbajack-via-proton-sh.log
|
||||
echo "" >$LOGFILE
|
||||
#set -x
|
||||
|
||||
######################
|
||||
# Fancy banner thing #
|
||||
######################
|
||||
|
||||
if [ -f "/usr/bin/toilet" ]; then
|
||||
toilet -t -f smmono12 -F border:metal "Omni-Guides (alpha)"
|
||||
else
|
||||
echo "=================================================================================================="
|
||||
echo "| ####### ## ## ## ## #### ###### ## ## #### ######## ######## ###### |"
|
||||
echo "| ## ## ### ### ### ## ## ## ## ## ## ## ## ## ## ## ## |"
|
||||
echo "| ## ## #### #### #### ## ## ## ## ## ## ## ## ## ## |"
|
||||
echo "| ## ## ## ### ## ## ## ## ## ####### ## #### ## ## ## ## ## ###### ###### |"
|
||||
echo "| ## ## ## ## ## #### ## ## ## ## ## ## ## ## ## ## |"
|
||||
echo "| ## ## ## ## ## ### ## ## ## ## ## ## ## ## ## ## ## |"
|
||||
echo "| ####### ## ## ## ## #### ###### ####### #### ######## ######## ###### |"
|
||||
echo "============================================================================~~--(alpha)--~~======="
|
||||
fi
|
||||
|
||||
#########
|
||||
# Intro #
|
||||
#########
|
||||
|
||||
echo ""
|
||||
echo -e "This is an experimental script - an attempt to automate as much as possible of the process of getting"
|
||||
echo -e "Wabbajack running on Linux via Proton through Steam. Please be aware that stability of the Wabbajack "
|
||||
echo -e "application is not guaranteed. Please use at your own risk and accept that in the worst case, you may "
|
||||
echo -e "have to remove and re-add the WabbaJack entry in Steam. You can report back to me via GitHub or the "
|
||||
echo -e "Official Wabbajack Discord if you discover an issue with this script. Any other feedback, positive"
|
||||
echo -e "or negative, is also most welcome."
|
||||
|
||||
echo -e "\e[32m\nPress any key to continue...\e[0m"
|
||||
echo
|
||||
read -n 1 -s -r -p ""
|
||||
|
||||
#############
|
||||
# Functions #
|
||||
#############
|
||||
|
||||
#############################
|
||||
# Detect if running on deck #
|
||||
#############################
|
||||
|
||||
detect_steamdeck() {
|
||||
# Steamdeck or nah?
|
||||
|
||||
if [ -f "/etc/os-release" ] && grep -q "steamdeck" "/etc/os-release"; then
|
||||
steamdeck=1
|
||||
echo "Running on Steam Deck" >>$LOGFILE 2>&1
|
||||
else
|
||||
steamdeck=0
|
||||
echo "NOT A steamdeck" >>$LOGFILE 2>&1
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
###########################################
|
||||
# Detect Protontricks (flatpak or native) #
|
||||
###########################################
|
||||
|
||||
detect_protontricks() {
|
||||
echo -ne "\nDetecting if protontricks is installed..." >>$LOGFILE 2>&1
|
||||
|
||||
# Check if "which protontricks" outputs a valid path
|
||||
if command -v protontricks >/dev/null 2>&1; then
|
||||
protontricks_path=$(command -v protontricks)
|
||||
|
||||
# Check if the detected binary is actually a Flatpak wrapper
|
||||
if [[ -f "$protontricks_path" ]] && grep -q "flatpak run" "$protontricks_path"; then
|
||||
echo -e "Detected Protontricks is actually a Flatpak wrapper at $protontricks_path." >>$LOGFILE 2>&1
|
||||
which_protontricks=flatpak
|
||||
else
|
||||
echo -e "Native Protontricks found at $protontricks_path." | tee -a $LOGFILE
|
||||
which_protontricks=native
|
||||
return 0 # Exit function since we confirmed native protontricks
|
||||
fi
|
||||
else
|
||||
echo -e "Non-Flatpak Protontricks not found. Checking flatpak..." >>$LOGFILE 2>&1
|
||||
if flatpak list | grep -iq protontricks; then
|
||||
echo -e "Flatpak Protontricks is already installed." >>$LOGFILE 2>&1
|
||||
which_protontricks=flatpak
|
||||
else
|
||||
echo -e "\e[31m\n** Protontricks not found. Do you wish to install it? (y/n): **\e[0m"
|
||||
read -p " " answer
|
||||
if [[ $answer =~ ^[Yy]$ ]]; then
|
||||
if [[ $steamdeck -eq 1 ]]; then
|
||||
flatpak install -u -y --noninteractive flathub com.github.Matoking.protontricks
|
||||
which_protontricks=flatpak
|
||||
else
|
||||
read -p "Choose installation method: 1) Flatpak (preferred) 2) Native: " choice
|
||||
if [[ $choice =~ 1 ]]; then
|
||||
flatpak install -u -y --noninteractive flathub com.github.Matoking.protontricks
|
||||
which_protontricks=flatpak
|
||||
else
|
||||
echo -e "\nSorry, there are too many distros to automate this!" | tee -a $LOGFILE
|
||||
echo -e "Please check how to install Protontricks using your OS package manager (yum, dnf, apt, pacman, etc.)" | tee -a $LOGFILE
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
#############################
|
||||
# Create protontricks alias #
|
||||
#############################
|
||||
|
||||
protontricks_alias() {
|
||||
if [[ "$which_protontricks" = "flatpak" ]]; then
|
||||
local protontricks_alias_exists=$(grep "^alias protontricks=" ~/.bashrc)
|
||||
local launch_alias_exists=$(grep "^alias protontricks-launch" ~/.bashrc)
|
||||
|
||||
if [[ -z "$protontricks_alias_exists" ]]; then
|
||||
echo -e "\nAdding protontricks alias to ~/.bashrc"
|
||||
echo "alias protontricks='flatpak run com.github.Matoking.protontricks'" >>~/.bashrc
|
||||
source ~/.bashrc
|
||||
else
|
||||
echo "protontricks alias already exists in ~/.bashrc" >>"$LOGFILE" 2>&1
|
||||
fi
|
||||
|
||||
if [[ -z "$launch_alias_exists" ]]; then
|
||||
echo -e "\nAdding protontricks-launch alias to ~/.bashrc"
|
||||
echo "alias protontricks-launch='flatpak run --command=protontricks-launch com.github.Matoking.protontricks'" >>~/.bashrc
|
||||
source ~/.bashrc
|
||||
else
|
||||
echo "protontricks-launch alias already exists in ~/.bashrc" >>"$LOGFILE" 2>&1
|
||||
fi
|
||||
else
|
||||
echo "Protontricks is not installed via flatpak, skipping alias creation." >>"$LOGFILE" 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
#############################
|
||||
# Run protontricks commands #
|
||||
#############################
|
||||
|
||||
run_protontricks() {
|
||||
# Determine the protontricks binary path
|
||||
if [ "$which_protontricks" = "flatpak" ]; then
|
||||
protontricks_bin="flatpak run com.github.Matoking.protontricks"
|
||||
else
|
||||
protontricks_bin="protontricks"
|
||||
fi
|
||||
|
||||
# Construct and execute the command using eval to preserve quotes
|
||||
$protontricks_bin "$@"
|
||||
}
|
||||
|
||||
###############################
|
||||
# Detect Protontricks Version #
|
||||
###############################
|
||||
|
||||
protontricks_version() {
|
||||
|
||||
# Get the current version of protontricks
|
||||
protontricks_version=$(run_protontricks -V | cut -d ' ' -f 2 | sed 's/[()]//g' | sed 's/\.[0-9]$//')
|
||||
|
||||
# Remove any non-numeric characters from the version number
|
||||
protontricks_version_cleaned=$(echo "$protontricks_version" | sed 's/[^0-9.]//g')
|
||||
|
||||
echo "Protontricks Version Cleaned = $protontricks_version_cleaned" >>$LOGFILE 2>&1
|
||||
|
||||
# Compare version strings directly using simple string comparison
|
||||
if [[ "$protontricks_version_cleaned" < "1.12" ]]; then
|
||||
echo "Your protontricks version is too old! Update to version 1.12 or newer and rerun this script. If 'flatpak run com.github.Matoking.protontricks -V' returns 'unknown', then please update via flatpak." | tee -a $LOGFILE
|
||||
cleaner_exit
|
||||
fi
|
||||
}
|
||||
|
||||
#############################
|
||||
# Create protontricks alias #
|
||||
#############################
|
||||
|
||||
protontricks_alias() {
|
||||
if [[ "$which_protontricks" = "flatpak" ]]; then
|
||||
local protontricks_alias_exists=$(grep "^alias protontricks=" ~/.bashrc)
|
||||
local launch_alias_exists=$(grep "^alias protontricks-launch" ~/.bashrc)
|
||||
|
||||
if [[ -z "$protontricks_alias_exists" ]]; then
|
||||
echo -e "\nAdding protontricks alias to ~/.bashrc"
|
||||
echo "alias protontricks='flatpak run com.github.Matoking.protontricks'" >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
else
|
||||
echo "protontricks alias already exists in ~/.bashrc" >> "$LOGFILE" 2>&1
|
||||
fi
|
||||
|
||||
if [[ -z "$launch_alias_exists" ]]; then
|
||||
echo -e "\nAdding protontricks-launch alias to ~/.bashrc"
|
||||
echo "alias protontricks-launch='flatpak run --command=protontricks-launch com.github.Matoking.protontricks'" >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
else
|
||||
echo "protontricks-launch alias already exists in ~/.bashrc" >> "$LOGFILE" 2>&1
|
||||
fi
|
||||
else
|
||||
echo "Protontricks is not installed via flatpak, skipping alias creation." >> "$LOGFILE" 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
###########################
|
||||
# Get Wabbajack Directory #
|
||||
###########################
|
||||
|
||||
get_wabbajack_path() {
|
||||
local wabbajack_path=""
|
||||
local wabbajack_entries=()
|
||||
local selected_entry=""
|
||||
|
||||
echo -e "\e[33m \nDetecting Wabbajack Install Directory..\e[0m" | tee -a "$LOGFILE"
|
||||
|
||||
# Find all entries with Wabbajack.exe
|
||||
local entries_string=$(strings ~/.steam/steam/userdata/*/config/shortcuts.vdf | grep "/Wabbajack.exe")
|
||||
|
||||
if [[ -z "$entries_string" ]]; then
|
||||
echo "No Wabbajack.exe entries found in shortcuts.vdf."
|
||||
echo "Please ensure Steam is installed and you have added Wabbajack.exe as a non-Steam game." | tee -a "$LOGFILE"
|
||||
echo "Please run Wabbajack.exe once via Steam to register it." | tee -a "$LOGFILE"
|
||||
return 1 # Indicate failure
|
||||
fi
|
||||
|
||||
# Store each entry in an array to handle spaces
|
||||
while IFS= read -r entry; do
|
||||
local path=$(echo "$entry" | grep -oE '"[^"]+"' | head -n 1 | tr -d '"')
|
||||
wabbajack_entries+=("$path")
|
||||
done <<<"$entries_string"
|
||||
|
||||
local entry_count=${#wabbajack_entries[@]}
|
||||
if [[ "$entry_count" -gt 1 ]]; then
|
||||
echo -e "\e[31m \nMultiple Wabbajack.exe paths found, please select which one you wish to configure: \e[0m" | tee -a "$LOGFILE"
|
||||
local i=1
|
||||
for path in "${wabbajack_entries[@]}"; do
|
||||
echo "$i) $path" | tee -a "$LOGFILE"
|
||||
((i++))
|
||||
done
|
||||
|
||||
# Prompt user to select an entry
|
||||
read -p "Enter the number of the desired entry: " selected_entry
|
||||
|
||||
if [[ ! "$selected_entry" =~ ^[0-9]+$ || "$selected_entry" -lt 1 || "$selected_entry" -gt "$((entry_count))" ]]; then
|
||||
echo "Invalid selection." | tee -a "$LOGFILE"
|
||||
return 1 # Indicate failure
|
||||
fi
|
||||
|
||||
# Extract the selected entry
|
||||
wabbajack_path="${wabbajack_entries[$((selected_entry - 1))]}"
|
||||
else
|
||||
# Single matching entry
|
||||
wabbajack_path="${wabbajack_entries[0]}"
|
||||
fi
|
||||
|
||||
if [[ -n "$wabbajack_path" ]]; then
|
||||
echo "Wabbajack path: $wabbajack_path" >>"$LOGFILE" 2>&1
|
||||
application_directory=$(dirname "$wabbajack_path")
|
||||
echo "Application Directory: $application_directory" >>"$LOGFILE" 2>&1
|
||||
return 0 # Indicate success
|
||||
else
|
||||
echo "Failed to determine Wabbajack path." | tee -a "$LOGFILE"
|
||||
return 1 # Indicate failure
|
||||
fi
|
||||
|
||||
echo "Wabbajack Path: $wabbajack_path"
|
||||
echo "Application Directory: $application_directory"
|
||||
}
|
||||
|
||||
##################################################
|
||||
# Detect Wabbajack entry in steam and get App ID #
|
||||
##################################################
|
||||
|
||||
set_appid() {
|
||||
wabbajack_entries=$(run_protontricks -l | grep -i 'Non-Steam shortcut' | grep -i wabbajack)
|
||||
|
||||
if [[ -z "$wabbajack_entries" ]]; then
|
||||
echo "No Wabbajack entries found. Please ensure your entry in steam contains 'Wabbajack' in some way.." | tee -a $LOGFILE
|
||||
exit 1
|
||||
fi
|
||||
|
||||
IFS=$'\n' read -d '' -r -a entries_array <<<"$wabbajack_entries"
|
||||
|
||||
if [[ ${#entries_array[@]} -gt 1 ]]; then
|
||||
echo -e "\e[31m \nMultiple Wabbajack entries found in Steam, please select which one you wish to configure: \e[0m"
|
||||
|
||||
for i in "${!entries_array[@]}"; do
|
||||
stripped_entry=$(echo "${entries_array[i]}" | sed 's/^Non-Steam shortcut: //i')
|
||||
echo "$((i + 1)). $stripped_entry"
|
||||
done
|
||||
|
||||
echo "Please select the entry you want to use (1-${#entries_array[@]}):"
|
||||
read -r selection
|
||||
|
||||
if ! [[ "$selection" =~ ^[0-9]+$ ]] || ((selection < 1 || selection > ${#entries_array[@]})); then
|
||||
echo "Invalid selection." | tee -a $LOGFILE
|
||||
exit 1
|
||||
fi
|
||||
|
||||
selected_entry="${entries_array[$((selection - 1))]}"
|
||||
else
|
||||
selected_entry="${entries_array[0]}"
|
||||
fi
|
||||
|
||||
APPID=$(echo "$selected_entry" | awk {'print $NF'} | sed 's:^.\(.*\).$:\1:')
|
||||
|
||||
echo "Wabbajack App ID:" $APPID >>$LOGFILE 2>&1
|
||||
|
||||
# If $APPID is empty, produce an error
|
||||
if [[ -z "$APPID" ]]; then
|
||||
echo "APPID empty, something went wrong.." | tee -a $LOGFILE
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
####################################
|
||||
# Detect compatdata Directory Path #
|
||||
####################################
|
||||
|
||||
detect_compatdata_path() {
|
||||
|
||||
# Check common Steam library locations first
|
||||
for path in "$HOME/.local/share/Steam/steamapps/compatdata" "$HOME/.steam/steam/steamapps/compatdata" "$HOME/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/compatdata"; do
|
||||
if [[ -d "$path/$APPID" ]]; then
|
||||
compat_data_path="$path/$APPID"
|
||||
echo -e "compatdata Path detected: $compat_data_path" >>$LOGFILE 2>&1
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# If not found in common locations, use find command
|
||||
if [[ -z "$compat_data_path" ]]; then
|
||||
find / -type d -name "compatdata" 2>/dev/null | while read -r compatdata_dir; do
|
||||
if [[ -d "$compatdata_dir/$APPID" ]]; then
|
||||
compat_data_path="$compatdata_dir/$appid"
|
||||
echo -e "compatdata Path detected: $compat_data_path" >>$LOGFILE 2>&1
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ -z "$compat_data_path" ]]; then
|
||||
echo "Directory named '$APPID' not found in any compatdata directories."
|
||||
echo -e "Please ensure you have started the Steam entry for the modlist at least once, even if it fails.."
|
||||
else
|
||||
echo "Found compatdata directory with '$APPID': $compat_data_path" >>$LOGFILE 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
#####################################################
|
||||
# Set protontricks permissions on Wabbajack Directory #
|
||||
#####################################################
|
||||
|
||||
set_protontricks_perms() {
|
||||
|
||||
if [ "$which_protontricks" = "flatpak" ]; then
|
||||
echo -e "\e[33m \nSetting Protontricks permissions... \e[0m" | tee -a "$LOGFILE"
|
||||
|
||||
# Set flatpak permission override, quoting the path
|
||||
flatpak override --user com.github.Matoking.protontricks --filesystem="$application_directory"
|
||||
|
||||
if [[ "$steamdeck" = 1 ]]; then
|
||||
echo -e "\e[33m \nChecking for SDCard and setting permissions appropriately..\e[0m" | tee -a "$LOGFILE"
|
||||
# Set protontricks SDCard permissions early to suppress warning
|
||||
sdcard_path=$(df -h | grep "/run/media" | awk '{print $NF}')
|
||||
echo "$sdcard_path" >>"$LOGFILE" 2>&1
|
||||
# Quote the SD card path
|
||||
flatpak override --user --filesystem="$sdcard_path" com.github.Matoking.protontricks
|
||||
echo -e " Done." >>"$LOGFILE" 2>&1
|
||||
fi
|
||||
else
|
||||
echo -e "Using Native protontricks, skip setting permissions" >>"$LOGFILE" 2>&1
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
#####################################
|
||||
# Enable Visibility of (.)dot files #
|
||||
#####################################
|
||||
|
||||
enable_dotfiles() {
|
||||
|
||||
echo $APPID >>$LOGFILE 2>&1
|
||||
echo -ne "\e[33m \nEnabling visibility of (.)dot files... \e[0m" | tee -a $LOGFILE
|
||||
|
||||
# Check if already settings
|
||||
dotfiles_check=$(run_protontricks -c 'WINEDEBUG=-all wine reg query "HKEY_CURRENT_USER\Software\Wine" /v ShowDotFiles' $APPID 2>/dev/null | grep ShowDotFiles | awk '{gsub(/\r/,""); print $NF}')
|
||||
|
||||
printf '%s\n' "$dotfiles_check" >>$LOGFILE 2>&1
|
||||
|
||||
if [[ "$dotfiles_check" = "Y" ]]; then
|
||||
printf '%s\n' "DotFiles already enabled... skipping" | tee -a $LOGFILE
|
||||
else
|
||||
|
||||
if run_protontricks -c 'WINEDEBUG=-all wine reg add "HKEY_CURRENT_USER\Software\Wine" /v ShowDotFiles /d Y /f' $APPID 2>/dev/null; then
|
||||
echo "Done!" >>$LOGFILE 2>&1
|
||||
else
|
||||
echo -e "\e[31mError: Failed to enable dot files visibility.\e[0m" | tee -a $LOGFILE
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
##############################
|
||||
# Download WebView Installer #
|
||||
##############################
|
||||
|
||||
webview_installer() {
|
||||
echo -e "\e[33m\nDownloading WebView Installer...\e[0m"
|
||||
|
||||
local installer_path="$application_directory/MicrosoftEdgeWebView2RuntimeInstallerX64-WabbajackProton.exe"
|
||||
local download_url="https://node10.sokloud.com/filebrowser/api/public/dl/yqVTbUT8/rwatch/WebView/MicrosoftEdgeWebView2RuntimeInstallerX64-WabbajackProton.exe"
|
||||
|
||||
# Check if installer already exists
|
||||
if [ -f "$installer_path" ]; then
|
||||
echo "WebView Installer already exists, skipping download."
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Check for wget and use it if available
|
||||
if command -v wget &>/dev/null; then
|
||||
if wget "$download_url" -O "$installer_path" >>"$LOGFILE" 2>&1; then
|
||||
echo "Download completed successfully."
|
||||
return 0
|
||||
else
|
||||
echo -e "\e[31mError: Failed to download WebView Installer with wget.\e[0m"
|
||||
return 1
|
||||
fi
|
||||
# Check for curl and use it if wget is not available
|
||||
elif command -v curl &>/dev/null; then
|
||||
if curl -sLo "$installer_path" "$download_url" >>"$LOGFILE" 2>&1; then
|
||||
echo "Download completed successfully."
|
||||
return 0
|
||||
else
|
||||
echo -e "\e[31mError: Failed to download WebView Installer with curl.\e[0m"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
echo -e "\e[31mError: Neither wget nor curl is available. Cannot download WebView Installer.\e[0m"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
####################
|
||||
# Configure Prefix #
|
||||
####################
|
||||
|
||||
configure_prefix() {
|
||||
echo -e "\e[33m\nChanging the default renderer used..\e[0m" | tee -a "$LOGFILE"
|
||||
if run_protontricks "$APPID" settings renderer=vulkan >>"$LOGFILE" 2>&1; then
|
||||
echo "Renderer changed to Vulkan." >>"$LOGFILE" 2>&1
|
||||
else
|
||||
echo -e "\e[31mError: Failed to change renderer.\e[0m" | tee -a "$LOGFILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Copy in place win10 based system.reg
|
||||
echo -e "\e[33m\nChange the default prefix version to win10..\e[0m" | tee -a "$LOGFILE"
|
||||
local system_reg_win10_url="https://github.com/Omni-guides/Wabbajack-Modlist-Linux/raw/refs/heads/main/files/system.reg.win10"
|
||||
local system_reg_win10_path="$compat_data_path/pfx/system.reg"
|
||||
|
||||
if command -v wget &>/dev/null; then
|
||||
wget "$system_reg_win10_url" -O "$system_reg_win10_path" >>"$LOGFILE" 2>&1
|
||||
elif command -v curl &>/dev/null; then
|
||||
curl -sLo "$system_reg_win10_path" "$system_reg_win10_url" >>"$LOGFILE" 2>&1
|
||||
else
|
||||
echo -e "\e[31mError: Neither wget nor curl is available. Cannot download system.reg.win10.\e[0m" | tee -a "$LOGFILE"
|
||||
exit 1
|
||||
fi
|
||||
echo "Prefix version changed to win10." >>"$LOGFILE" 2>&1
|
||||
|
||||
# Install WebView
|
||||
echo -e "\e[33m\nInstalling Webview, this can take a while, please be patient..\e[0m" | tee -a "$LOGFILE"
|
||||
if [ "$which_protontricks" = "flatpak" ]; then
|
||||
/usr/bin/flatpak run --command=protontricks-launch com.github.Matoking.protontricks --appid "$APPID" "$application_directory/MicrosoftEdgeWebView2RuntimeInstallerX64-WabbajackProton.exe" /silent /install >>"$LOGFILE" 2>&1
|
||||
else
|
||||
protontricks-launch --appid "$APPID" "$application_directory/MicrosoftEdgeWebView2RuntimeInstallerX64-WabbajackProton.exe" /silent /install >>"$LOGFILE" 2>&1
|
||||
fi
|
||||
|
||||
# Copy in place WebP .dll
|
||||
echo -e "\e[33m\nConfiguring WebP..\e[0m" | tee -a "$LOGFILE"
|
||||
local webp_32_url="https://github.com/Omni-guides/Wabbajack-Modlist-Linux/raw/refs/heads/main/files/WebpWICCodec.dll-32"
|
||||
local webp_64_url="https://github.com/Omni-guides/Wabbajack-Modlist-Linux/raw/refs/heads/main/files/WebpWICCodec.dll-64"
|
||||
local webp_32_path="$compat_data_path/pfx/drive_c/Program Files (x86)/WebP Codec/WebpWICCodec.dll"
|
||||
local webp_64_path="$compat_data_path/pfx/drive_c/Program Files/WebP Codec/WebpWICCodec.dll"
|
||||
|
||||
if mkdir -p "$compat_data_path/pfx/drive_c/Program Files (x86)/WebP Codec" && mkdir -p "$compat_data_path/pfx/drive_c/Program Files/WebP Codec"; then
|
||||
if command -v wget &>/dev/null; then
|
||||
wget "$webp_32_url" -O "$webp_32_path" >>"$LOGFILE" 2>&1 && wget "$webp_64_url" -O "$webp_64_path" >>"$LOGFILE" 2>&1
|
||||
elif command -v curl &>/dev/null; then
|
||||
curl -sLo "$webp_32_path" "$webp_32_url" >>"$LOGFILE" 2>&1 && curl -sLo "$webp_64_path" "$webp_64_url" >>"$LOGFILE" 2>&1
|
||||
else
|
||||
echo -e "\e[31mError: Neither wget nor curl is available. Cannot download WebP dlls.\e[0m" | tee -a "$LOGFILE"
|
||||
exit 1
|
||||
fi
|
||||
echo "WebP configured successfully." | tee -a "$LOGFILE"
|
||||
else
|
||||
echo -e "\e[31mError: Failed to configure WebP.\e[0m" | tee -a "$LOGFILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Backup system.reg and user.reg
|
||||
cp "$compat_data_path/pfx/system.reg" "$compat_data_path/pfx/system.reg.orig"
|
||||
cp "$compat_data_path/pfx/user.reg" "$compat_data_path/pfx/user.reg.orig"
|
||||
|
||||
# Copy in system.reg and user.reg
|
||||
echo -e "\e[33m\nConfiguring Registry..\e[0m" | tee -a "$LOGFILE"
|
||||
local system_reg_url="https://github.com/Omni-guides/Wabbajack-Modlist-Linux/raw/refs/heads/main/files/system.reg.github"
|
||||
local user_reg_url="https://github.com/Omni-guides/Wabbajack-Modlist-Linux/raw/refs/heads/main/files/user.reg.github"
|
||||
local system_reg_path="$compat_data_path/pfx/system.reg"
|
||||
local user_reg_path="$compat_data_path/pfx/user.reg"
|
||||
|
||||
if command -v wget &>/dev/null; then
|
||||
wget "$system_reg_url" -O "$system_reg_path" >>"$LOGFILE" 2>&1 && wget "$user_reg_url" -O "$user_reg_path" >>"$LOGFILE" 2>&1
|
||||
elif command -v curl &>/dev/null; then
|
||||
curl -sLo "$system_reg_path" "$system_reg_url" >>"$LOGFILE" 2>&1 && curl -sLo "$user_reg_path" "$user_reg_url" >>"$LOGFILE" 2>&1
|
||||
else
|
||||
echo -e "\e[31mError: Neither wget nor curl is available. Cannot download registry files.\e[0m" | tee -a "$LOGFILE"
|
||||
exit 1
|
||||
fi
|
||||
echo "Registry configured successfully." | tee -a "$LOGFILE"
|
||||
}
|
||||
|
||||
#################################
|
||||
# Detect and Link Steam Library #
|
||||
#################################
|
||||
|
||||
detect_link_steam_library() {
|
||||
local steam_library_paths=()
|
||||
local chosen_library=""
|
||||
local libraryfolders_vdf=""
|
||||
|
||||
echo -e "\e[33m\nDiscovering Steam libraries..\e[0m"
|
||||
|
||||
# Find libraryfolders.vdf and extract library paths
|
||||
if [[ -f "$HOME/.steam/steam/steamapps/libraryfolders.vdf" ]]; then
|
||||
libraryfolders_vdf="$HOME/.steam/steam/steamapps/libraryfolders.vdf"
|
||||
elif [[ -f "$HOME/.local/share/Steam/steamapps/libraryfolders.vdf" ]]; then
|
||||
libraryfolders_vdf="$HOME/.local/share/Steam/steamapps/libraryfolders.vdf"
|
||||
elif [[ -f "$HOME/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/libraryfolders.vdf" ]]; then
|
||||
libraryfolders_vdf="$HOME/.var/app/com.valvesoftware.Steam/.local/share/Steam/steamapps/libraryfolders.vdf"
|
||||
else
|
||||
echo -e "\e[31m\nSteam libraryfolders.vdf not found. Please check the installation.\e[0m" | tee -a "$LOGFILE"
|
||||
read -e -p "Enter the path to your main Steam directory: " steam_library_path
|
||||
while true; do
|
||||
if [[ ! -d "$steam_library_path" ]]; then
|
||||
echo -e "\e[31m\nInvalid path.\e[0m Please enter a valid directory." | tee -a "$LOGFILE"
|
||||
elif [[ ! -f "$steam_library_path/steamapps/libraryfolders.vdf" ]]; then
|
||||
echo -e "\e[31m\nThe specified path does not appear to be a Steam directory. Please check the path and try again. Do not enter the path for a secondary Steam Library, only the path for your actual Steam install.\e[0m" | tee -a "$LOGFILE"
|
||||
else
|
||||
read -p "Confirm using '$steam_library_path' as the Steam directory path? (y/n): " -r choice
|
||||
if [[ "$choice" =~ ^[Yy]$ ]]; then
|
||||
libraryfolders_vdf="$steam_library_path/steamapps/libraryfolders.vdf"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
read -e -p "Enter the path to your Steam library: " steam_library_path
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ -n "$libraryfolders_vdf" ]]; then
|
||||
# Parse libraryfolders.vdf
|
||||
while IFS= read -r line; do
|
||||
if [[ "$line" =~ \"path\" ]]; then
|
||||
local path=$(echo "$line" | sed 's/.*"\(.*\)".*/\1/')
|
||||
steam_library_paths+=("$path")
|
||||
fi
|
||||
done < <(grep "\"path\"" "$libraryfolders_vdf")
|
||||
|
||||
if [[ ${#steam_library_paths[@]} -gt 0 ]]; then
|
||||
# Use the first library path found as the chosen library
|
||||
chosen_library="${steam_library_paths[0]}"
|
||||
echo "Steam library found at: $chosen_library" >>"$LOGFILE" 2>&1
|
||||
configure_steam_libraries || {
|
||||
echo -e "\e[31m\nFailed to configure Steam libraries. Exiting.\e[0m" | tee -a "$LOGFILE"
|
||||
exit 1
|
||||
}
|
||||
else
|
||||
echo -e "\e[31m\nNo Steam library paths found in libraryfolders.vdf.\e[0m" | tee -a "$LOGFILE"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo -e "\e[31m\nSteam library not found. Please check the installation.\e[0m" | tee -a "$LOGFILE"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
configure_steam_libraries() {
|
||||
echo -e "\e[33m\nConfiguring Steam libraries..\e[0m"
|
||||
|
||||
# Make directories
|
||||
steam_config_directory="$chosen_library/steamapps/compatdata/$APPID/pfx/drive_c/Program Files (x86)/Steam/config"
|
||||
echo -e "Creating directory $steam_config_directory" >>$LOGFILE 2>&1
|
||||
mkdir -p "$steam_config_directory" || {
|
||||
echo -e "\e[31m\nFailed to create directory $steam_config_directory. Exiting.\e[0m" | tee -a $LOGFILE
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Copy or symlink libraryfolders.vdf to config directory
|
||||
if [[ "$chosen_library" == "$HOME/.var/app/com.valvesoftware.Steam/.local/share/Steam" ]]; then
|
||||
steam_is_flatpak=1
|
||||
# For Flatpak Steam, adjust the paths accordingly
|
||||
echo -e "Symlinking libraryfolders.vdf to config directory for Flatpak" >>$LOGFILE 2>&1
|
||||
ln -s "$chosen_library/config/libraryfolders.vdf" "$steam_config_directory/libraryfolders.vdf" >>$LOGFILE 2>&1 || {
|
||||
echo -e "\e[31m\nFailed to symlink libraryfolders.vdf (Flatpak Steam).\e[0m" >>$LOGFILE 2>&1 | tee -a $LOGFILE
|
||||
}
|
||||
else
|
||||
echo -e "Symlinking libraryfolders.vdf to config directory" >>$LOGFILE 2>&1
|
||||
ln -s "$chosen_library/config/libraryfolders.vdf" "$steam_config_directory/libraryfolders.vdf" >>$LOGFILE 2>&1 || {
|
||||
echo -e "\e[31m\nFailed to symlink libraryfolders.vdf.\e[0m" >>$LOGFILE 2>&1 | tee -a $LOGFILE
|
||||
}
|
||||
fi
|
||||
|
||||
mv "$chosen_library/steamapps/compatdata/$APPID/pfx/drive_c/Program Files (x86)/Steam/steamapps/libraryfolders.vdf" \
|
||||
"$chosen_library/steamapps/compatdata/$APPID/pfx/drive_c/Program Files (x86)/Steam/steamapps/libraryfolders.vdf.bak" >>$LOGFILE 2>&1 || {
|
||||
echo -e "\e[31m\nFailed to backup libraryfolders.vdf.\e[0m" >>$LOGFILE 2>&1
|
||||
}
|
||||
}
|
||||
|
||||
##########################################
|
||||
# Create dotnet_bundle_extract directory #
|
||||
##########################################
|
||||
|
||||
create_dotnet_cache_dir() {
|
||||
local user_name=$(whoami)
|
||||
local cache_dir="$application_directory/home/$user_name/.cache/dotnet_bundle_extract"
|
||||
|
||||
# Check if the directory already exists
|
||||
if [ -d "$cache_dir" ]; then
|
||||
echo "Directory already exists: $cache_dir, skipping..." >>"$LOGFILE" 2>&1
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Create the directory
|
||||
mkdir -p "$cache_dir"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: Failed to create directory: $cache_dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Directory successfully created: $cache_dir" >>"$LOGFILE" 2>&1
|
||||
}
|
||||
|
||||
##########################
|
||||
# Cleanup Wine Processes #
|
||||
##########################
|
||||
|
||||
cleanup_wine_procs() {
|
||||
|
||||
# Find and kill processes containing "WabbajackProton.exe" or "renderer"
|
||||
processes=$(pgrep -f "WabbajackProton.exe|renderer=vulkan|win7|win10|ShowDotFiles|MicrosoftEdgeWebView2RuntimeInstallerX64-WabbajackProton.exe")
|
||||
if [[ -n "$processes" ]]; then
|
||||
echo "$processes" | xargs -r kill -9
|
||||
echo "Processes killed successfully." >>$LOGFILE 2>&1
|
||||
else
|
||||
echo "No matching wine processes found." >>$LOGFILE 2>&1
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
#####################
|
||||
# Exit more cleanly #
|
||||
#####################
|
||||
|
||||
cleaner_exit() {
|
||||
|
||||
if [[ "$steamdeck" != "1" ]]; then
|
||||
if [ -f /usr/binwineserver ]; then
|
||||
wineserver -k
|
||||
exit 1
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
####################
|
||||
# END OF FUNCTIONS #
|
||||
####################
|
||||
|
||||
#######################
|
||||
# Note Script Version #
|
||||
#######################
|
||||
|
||||
echo -e "Script Version $script_ver" >>$LOGFILE 2>&1
|
||||
|
||||
######################
|
||||
# Note Date and Time #
|
||||
######################
|
||||
|
||||
echo -e "Script started at: $(date +'%Y-%m-%d %H:%M:%S')" >>$LOGFILE 2>&1
|
||||
|
||||
#########################################
|
||||
# pre-emptively clean up wine processes #
|
||||
#########################################
|
||||
|
||||
cleanup_wine_procs
|
||||
|
||||
#############################
|
||||
# Detect if running on deck #
|
||||
#############################
|
||||
|
||||
detect_steamdeck
|
||||
|
||||
###########################################
|
||||
# Detect Protontricks (flatpak or native) #
|
||||
###########################################
|
||||
|
||||
detect_protontricks
|
||||
|
||||
#############################
|
||||
# Create protontricks alias #
|
||||
#############################
|
||||
|
||||
protontricks_alias
|
||||
|
||||
###############################
|
||||
# Detect Protontricks Version #
|
||||
###############################
|
||||
|
||||
protontricks_version
|
||||
|
||||
##########################################
|
||||
# Create protontricks alias in ~/.bashrc #
|
||||
##########################################
|
||||
|
||||
protontricks_alias
|
||||
|
||||
###########################
|
||||
# Get Wabbajack Directory #
|
||||
###########################
|
||||
|
||||
get_wabbajack_path
|
||||
|
||||
###########################
|
||||
# Set APPID and run steps #
|
||||
###########################
|
||||
|
||||
set_appid
|
||||
|
||||
####################################
|
||||
# Detect compatdata Directory Path #
|
||||
####################################
|
||||
|
||||
detect_compatdata_path
|
||||
|
||||
#####################################################
|
||||
# Set protontricks permissions on Modlist Directory #
|
||||
#####################################################
|
||||
|
||||
set_protontricks_perms
|
||||
|
||||
#####################################
|
||||
# Enable Visibility of (.)dot files #
|
||||
#####################################
|
||||
|
||||
enable_dotfiles
|
||||
|
||||
##########################################
|
||||
# Download and install WebView Installer #
|
||||
##########################################
|
||||
|
||||
webview_installer
|
||||
|
||||
####################
|
||||
# Configure Prefix #
|
||||
####################
|
||||
|
||||
configure_prefix
|
||||
|
||||
#################################
|
||||
# Detect and Link Steam Library #
|
||||
#################################
|
||||
|
||||
detect_link_steam_library
|
||||
|
||||
##########################################
|
||||
# Create dotnet_bundle_extract directory #
|
||||
##########################################
|
||||
|
||||
create_dotnet_cache_dir
|
||||
|
||||
##########################
|
||||
# Cleanup Wine Processes #
|
||||
##########################
|
||||
|
||||
cleanup_wine_procs
|
||||
|
||||
########
|
||||
# Exit #
|
||||
########
|
||||
|
||||
echo -e "\e[32m\nSet up complete.\e[0m"
|
||||
|
||||
if [[ $steam_is_flatpak -eq 1 ]]; then
|
||||
echo -e "\e[33m\nFlatpak Steam is in use, you may need to add a permissions override so that Wabbajack can access the directories.\e[0m"
|
||||
echo -e "\e[33m\nFor example, if you wanted to install the modlist to /home/user/Games/Skyrim/Modlistname, then you would need to run something like:\e[0m"
|
||||
echo -e "\e[33m\nflatpak override --user com.valvesoftware.Steam --filesystem="/home/user/Games"\e[0m"
|
||||
fi
|
||||
cleaner_exit
|
||||
Reference in New Issue
Block a user