From b59b48b567fc9136a3263e04d4572f2f91383719 Mon Sep 17 00:00:00 2001 From: mactan Date: Mon, 19 May 2025 18:56:38 -0500 Subject: [PATCH 1/3] preflight check and correction for lutris global runner --- lug-helper.sh | 73 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 71 insertions(+), 2 deletions(-) diff --git a/lug-helper.sh b/lug-helper.sh index a2d71b5..53eab78 100755 --- a/lug-helper.sh +++ b/lug-helper.sh @@ -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,20 @@ 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 fi # Check the flatpak lutris version number @@ -935,25 +958,71 @@ 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 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:/,/^[^[:space:]]/ { /^[[:space:]]*version:/s/^[[:space:]]*version:[[:space:]]*//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:/,/^[^[:space:]]/ { /^[[:space:]]*version:/s/^[[:space:]]*version:[[:space:]]*//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" ] || [ -z "$(sed -En '/^wine:/,/^[^[:blank:]]/p' "$1")" ]; then + # the file doesn't exist yet, make it with the wine version content + preflight_user_actions+=("mkdir -p \$(dirname \"\$1\"); printf 'wine:\n version: $lutris_runner_required\n' > '$1'") + else + # If it doesn't exist, add it at the start of the wine: grouping + if [ -z "$(sed -En '/^wine:/,/^[^[:space:]]/ { /^[[:space:]]*version:/p }' "$1")" ]; then + # This assumes an indent of two spaces before the key:value pair + 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 fi } From 3877567cd7ddcf371c847d2e6eee9e8f858235b9 Mon Sep 17 00:00:00 2001 From: mactan Date: Thu, 22 May 2025 07:12:30 -0500 Subject: [PATCH 2/3] lutris preflight verify runtimes populated --- lug-helper.sh | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/lug-helper.sh b/lug-helper.sh index 53eab78..d28214f 100755 --- a/lug-helper.sh +++ b/lug-helper.sh @@ -932,7 +932,7 @@ lutris_check() { preflight_pass+=("Lutris is installed and sufficiently up to date.") fi - if [[ "$lutris_native_runner" == "$lutris_runner_required" ]]; then + if ["$lutris_native_runner" == "$lutris_runner_required" ]; then # All good preflight_pass+=("Lutris runner is set to $lutris_runner.") else @@ -945,6 +945,14 @@ lutris_check() { # 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 @@ -959,7 +967,7 @@ lutris_check() { preflight_pass+=("Flatpak Lutris is installed and sufficiently up to date.") fi - if [[ "$lutris_flatpak_runner" == "$lutris_runner_required" ]]; then + if [ "$lutris_flatpak_runner" == "$lutris_runner_required" ]; then # All good preflight_pass+=("Flatpak Lutris runner is set to $lutris_runner.") else @@ -972,6 +980,14 @@ lutris_check() { # 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 } @@ -1011,18 +1027,19 @@ lutris_set_runner() { fi version_sed_string="version: " - if [ ! -f "$1" ] || [ -z "$(sed -En '/^wine:/,/^[^[:blank:]]/p' "$1")" ]; then - # the file doesn't exist yet, make it with the wine version content + 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 'wine:\n version: $lutris_runner_required\n' >> '$1'") + elif [ -z "$(sed -En '/^wine:/,/^[^[:space:]]/ { /^[[:space:]]*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 - # If it doesn't exist, add it at the start of the wine: grouping - if [ -z "$(sed -En '/^wine:/,/^[^[:space:]]/ { /^[[:space:]]*version:/p }' "$1")" ]; then - # This assumes an indent of two spaces before the key:value pair - 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 + # 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 } From 334d80d65e3c82075de4f4882e3ca393954f9021 Mon Sep 17 00:00:00 2001 From: mactan Date: Fri, 30 May 2025 13:24:08 -0500 Subject: [PATCH 3/3] blank instead of space --- lug-helper.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lug-helper.sh b/lug-helper.sh index d28214f..974f533 100755 --- a/lug-helper.sh +++ b/lug-helper.sh @@ -932,7 +932,7 @@ lutris_check() { preflight_pass+=("Lutris is installed and sufficiently up to date.") fi - if ["$lutris_native_runner" == "$lutris_runner_required" ]; then + if ["$lutris_native_runner" = "$lutris_runner_required" ]; then # All good preflight_pass+=("Lutris runner is set to $lutris_runner.") else @@ -967,7 +967,7 @@ lutris_check() { preflight_pass+=("Flatpak Lutris is installed and sufficiently up to date.") fi - if [ "$lutris_flatpak_runner" == "$lutris_runner_required" ]; then + if [ "$lutris_flatpak_runner" = "$lutris_runner_required" ]; then # All good preflight_pass+=("Flatpak Lutris runner is set to $lutris_runner.") else @@ -1006,7 +1006,7 @@ lutris_detect() { lutris_installed="true" lutris_native="true" if [ -f "$lutris_native_wine_yml" ]; then - lutris_native_runner="$(sed -En '/^wine:/,/^[^[:space:]]/ { /^[[:space:]]*version:/s/^[[:space:]]*version:[[:space:]]*//p }' "$lutris_native_wine_yml")" + lutris_native_runner="$(sed -En '/^wine:/,/^[^[:blank:]]/ { /^[[:blank:]]*version:/s/^[[:blank:]]*version:[[:blank:]]*//p }' "$lutris_native_wine_yml")" fi fi @@ -1015,7 +1015,7 @@ lutris_detect() { lutris_installed="true" lutris_flatpak="true" if [ -f "$lutris_flatpak_wine_yml" ]; then - lutris_flatpak_runner="$(sed -En '/^wine:/,/^[^[:space:]]/ { /^[[:space:]]*version:/s/^[[:space:]]*version:[[:space:]]*//p }' "$lutris_flatpak_wine_yml")" + lutris_flatpak_runner="$(sed -En '/^wine:/,/^[^[:blank:]]/ { /^[[:blank:]]*version:/s/^[[:blank:]]*version:[[:blank:]]*//p }' "$lutris_flatpak_wine_yml")" fi fi } @@ -1033,8 +1033,8 @@ lutris_set_runner() { # 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 'wine:\n version: $lutris_runner_required\n' >> '$1'") - elif [ -z "$(sed -En '/^wine:/,/^[^[:space:]]/ { /^[[:space:]]*version:/p }' "$1")" ]; then + 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