#!/bin/bash
# ============================================================
#  fws-gameboot-bootfix — exécuté à CHAQUE démarrage de FWS (oneshot systemd).
#
#  Réasserte BootOrder[0] = FWS. Filet de sûreté PERMANENT : après un Windows
#  Update qui remet « Windows Boot Manager » en tête de BootOrder, ou après tout
#  crash/reboot non géré, un boot SANS BootNext retombe toujours sur FWS (jamais
#  coincé côté Windows ; l'image d'hibernation reste accessible).
#
#  Inerte sur le live (le service porte ConditionPathExists=!/run/archiso).
# ============================================================
set -u
[ -d /sys/firmware/efi ] || exit 0
command -v efibootmgr >/dev/null 2>&1 || exit 0

fws="$(efibootmgr 2>/dev/null | sed -n 's/^Boot\([0-9A-Fa-f]\{4\}\)\*\? *\(FWS\|GRUB\).*/\1/p' | head -1)"
[ -n "$fws" ] || exit 0

# Nettoyer une entrée « FWS WinPE » résiduelle du déploiement Windows (repli
# bcdboot, one-shot déjà consommé) : sinon elle traîne dans le menu de boot.
for pe in $(efibootmgr 2>/dev/null | sed -n 's/^Boot\([0-9A-Fa-f]\{4\}\)\*\? *FWS WinPE.*/\1/p'); do
    efibootmgr -b "$pe" -B >/dev/null 2>&1 || true
done

# BootOrder[0] = FWS (sans dupliquer, en préservant l'ordre existant derrière).
order="$(efibootmgr 2>/dev/null | sed -n 's/^BootOrder: //p' | tr -d '[:space:]')"
if [ -n "$order" ] && [ "${order%%,*}" != "$fws" ]; then
    rest="$(printf '%s' "$order" | tr ',' '\n' | grep -vx "$fws" | paste -sd, -)"
    efibootmgr -o "${fws}${rest:+,$rest}" >/dev/null 2>&1 || true
fi
exit 0
