Merge pull request #111 from mactan-sc/main

preflight lutris runner check
This commit is contained in:
the Sane. 2025-05-30 14:33:43 -04:00 committed by GitHub
commit d5219c5ce7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -92,9 +92,15 @@ lutris_flatpak_dir="$HOME/.var/app/net.lutris.Lutris"
# Lutris native game configs directory
lutris_native_conf_dir="$conf_dir/lutris/games"
# Lutris native wine config
lutris_native_wine_yml="$conf_dir/lutris/runners/wine.yml"
# Lutris flatpak game configs directory
lutris_flatpak_conf_dir="$lutris_flatpak_dir/config/lutris/games"
# Lutris flatpak wine config
lutris_flatpak_wine_yml="$lutris_flatpak_dir/data/lutris/runners/wine.yml"
# Helper directory
helper_dir="$(realpath "$0" | xargs -0 dirname)"
@ -200,6 +206,9 @@ wine_required="9.4"
# Lutris minimum version
lutris_required="0.5.18"
# Lutris runner minimum version
lutris_runner_required="ge-proton"
# Minimum amount of RAM in GiB
memory_required="16"
# Minimum amount of combined RAM + swap in GiB
@ -922,6 +931,28 @@ lutris_check() {
else
preflight_pass+=("Lutris is installed and sufficiently up to date.")
fi
if ["$lutris_native_runner" = "$lutris_runner_required" ]; then
# All good
preflight_pass+=("Lutris runner is set to $lutris_runner.")
else
# The setting should be changed
preflight_fail+=("Lutris runner should be set to $lutris_runner_required")
preflight_action_funcs+=("lutris_set_runner $conf_dir/lutris/runners/wine.yml")
preflight_fix_results+=("The Lutris global wine runner has been configured.")
# Add info for manually changing the setting
preflight_manual+=("To change Lutris global Wine runner, edit global preferences in Lutris")
fi
if [ ! -z "$(ls -A $data_dir/lutris/runtime)" ]; then
preflight_pass+=("Lutris has run at least once.")
else
preflight_fail+=("Lutris has not been run yet.")
preflight_manual+=("Run Lutris before installing the game.")
fi
fi
# Check the flatpak lutris version number
@ -935,25 +966,80 @@ lutris_check() {
else
preflight_pass+=("Flatpak Lutris is installed and sufficiently up to date.")
fi
if [ "$lutris_flatpak_runner" = "$lutris_runner_required" ]; then
# All good
preflight_pass+=("Flatpak Lutris runner is set to $lutris_runner.")
else
# The setting should be changed
preflight_fail+=("Flatpak Lutris runner should be set to $lutris_runner_required")
preflight_action_funcs+=("lutris_set_runner $lutris_flatpak_dir/data/lutris/runners/wine.yml")
preflight_fix_results+=("The Flatpak Lutris global wine runner has been configured.")
# Add info for manually changing the setting
preflight_manual+=("To change Flatpak Lutris global Wine runner, edit global preferences in Flatpak Lutris")
fi
if [ ! -z "$(ls -A $lutris_flatpak_dir/data/lutris/runtime)" ]; then
preflight_pass+=("Flatpak Lutris has run at least once.")
else
preflight_fail+=("Flatpak Lutris has not been run yet.")
preflight_manual+=("Run Flatpak Lutris before installing the game.")
fi
fi
}
# Detect if lutris is installed
lutris_detect() {
lutris_installed="false"
lutris_native="false"
lutris_native_runner=""
lutris_flatpak="false"
lutris_flatpak_runner=""
# Detect native lutris
if [ -x "$(command -v lutris)" ]; then
lutris_installed="true"
lutris_native="true"
if [ -f "$lutris_native_wine_yml" ]; then
lutris_native_runner="$(sed -En '/^wine:/,/^[^[:blank:]]/ { /^[[:blank:]]*version:/s/^[[:blank:]]*version:[[:blank:]]*//p }' "$lutris_native_wine_yml")"
fi
fi
# Detect flatpak lutris
if [ -x "$(command -v flatpak)" ] && flatpak list --app | grep -q Lutris; then
lutris_installed="true"
lutris_flatpak="true"
lutris_installed="true"
lutris_flatpak="true"
if [ -f "$lutris_flatpak_wine_yml" ]; then
lutris_flatpak_runner="$(sed -En '/^wine:/,/^[^[:blank:]]/ { /^[[:blank:]]*version:/s/^[[:blank:]]*version:[[:blank:]]*//p }' "$lutris_flatpak_wine_yml")"
fi
fi
}
lutris_set_runner() {
# This function expects a string to be passed as an argument
if [ -z "$1" ]; then
debug_print exit "Script error: The lutris_set_runner() function expects an argument. Aborting."
fi
version_sed_string="version: "
if [ ! -f "$1" ] || [ "$(cat "$1")" = "{}" ]; then
# If the file doesn't exist yet or has at most one line, make it with the wine version content
preflight_user_actions+=("mkdir -p \$(dirname \"\$1\"); printf 'wine:\n version: $lutris_runner_required\n' > '$1'")
# This assumes an indent of two spaces before the key:value pair
elif ! grep -q "^wine:" "$1"; then
# If wine: group doesnt exist append it with the version: node
preflight_user_actions+=("printf '\nwine:\n version: $lutris_runner_required\n' >> '$1'")
elif [ -z "$(sed -En '/^wine:/,/^[^[:blank:]]/ { /^[[:blank:]]*version:/p }' "$1")" ]; then
# If system: node doesn't exist, add it at the start of the wine: grouping
preflight_user_actions+=("sed -i -e '/^wine:/a\' -e \" ${version_sed_string}${lutris_runner_required}\" '$1'")
else
# Replace the appropriate key:value line if it exists
preflight_user_actions+=("sed -Ei '/^wine:/,/^[^[:blank:]]/ {/^[[:blank:]]*${version_sed_string}/s/${version_sed_string}.*/${version_sed_string}${lutris_runner_required}/}' '$1'")
fi
}