#!/bin/bash
# Réglages d'Eden imposés UNE FOIS par compte de /home, par le hook
# 99-eden-reglages à l'installation et à chaque mise à jour des paquets eden-*.
# Ils suivent le binaire qui en a besoin : la nightly officielle, sur l'ISO
# publique comme sur la dev (avec ou sans jeux Switch).
#
# confirmStop=2 — PAS DE QUESTION À LA FERMETURE. Eden demande « Are you sure
# you want to close Eden? » dès qu'on le ferme en jeu — y compris quand Steam le
# ferme (« Quitter le jeu » du mode jeu envoie SIGTERM) : en mode jeu, à la
# manette, la fenêtre reste plantée là. Énuméré Ask_Always (0, défaut),
# Ask_Based_On_Game, Ask_Never (2) — settings_enums.h, main_window.cpp.
# check_for_updates=false — PAS D'AVIS DE NOUVELLE NIGHTLY. Le binaire vérifie
# au démarrage si une nightly plus récente existe (il en sort presque une par
# jour) et ouvre alors une fenêtre modale — en mode jeu, par-dessus le jeu
# (main_window.cpp, UpdateDialog, commit bebc19da32). Les mises à jour passent
# par pacman.
#
# UNE SEULE FOIS (marque ~/.config/eden/.affutos-<clé>) : eden écrit
# « default=true » dès que la valeur est celle par défaut, on ne saurait pas
# distinguer un retour volontaire d'un réglage jamais touché. La marque dit
# que le choix appartient désormais à l'utilisateur, et une valeur qu'il a
# déjà choisie (« \default=false ») est respectée.
# Réglages rangés dans [UI] (uisettings.h) ; sans [UI], on la crée, et eden y
# ajoute lui-même ses pseudo-dossiers de jeux au premier lancement. NUMÉRO 99 :
# après 97-switch-eden-gamedir, qui pose le tableau complet des dossiers de
# jeux quand [UI] n'existe pas encore.
REGLAGES=(confirmStop=2 check_for_updates=false)
imposer() {   # $1 = dossier de config d'eden
    local cfg="$1/qt-config.ini" r c
    mkdir -p "$1" || return 1
    grep -q '^\[UI\]' "$cfg" 2>/dev/null || printf '\n[UI]\n' >> "$cfg" || return 1
    for r in "${REGLAGES[@]}"; do
        c=${r%%=*}
        [ -e "$1/.affutos-${c,,}" ] && continue
        if ! awk -v c="$c" '/^\[/ { s = $0 } s == "[UI]" && $0 == c "\\default=false" { f = 1 } END { exit !f }' "$cfg"; then
            awk -v c="$c" -v v="${r#*=}" '
                /^\[/ { s = $0 }
                s == "[UI]" && (index($0, c "=") == 1 || index($0, c "\\default=") == 1) { next }
                { print }
                $0 == "[UI]" { print c "\\default=false"; print c "=" v }
            ' "$cfg" > "$cfg.tmp" && mv "$cfg.tmp" "$cfg" || return 1
        fi
        : > "$1/.affutos-${c,,}"
    done
}

# Chaque compte SOUS SON IDENTITÉ : jamais root dans un dossier que
# l'utilisateur possède (le hook tourne en root).
for home in /home/*/; do
    home=${home%/}; user=${home##*/}
    id -u "$user" >/dev/null 2>&1 || continue
    if [ "$(id -u)" = 0 ]; then
        runuser -u "$user" -- bash -c "$(declare -f imposer; declare -p REGLAGES); imposer $(printf %q "$home/.config/eden")" \
            || echo "eden-reglages : réglages non posés pour $user" >&2
    elif [ "$user" = "$(id -un)" ]; then
        imposer "$home/.config/eden"
    fi
done
exit 0
