#!/bin/sh
# lancer-bureau — choisit et démarre le compositeur du bureau P2i selon le
# réglage « Effets graphiques » (p2i-effets) et selon le matériel :
#
#   effets « modere » ou « complet » + accélération 3D utilisable  → Wayfire
#   effets « aucun », ou pas d'accélération 3D                     → labwc
#
# Si Wayfire ne démarre pas, on repasse aussitôt sur labwc : l'écran ne reste
# jamais noir pour cette raison.

# Témoin posé par p2i-fermer-session : l'arrêt du compositeur est voulu
temoin="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/p2i-fermeture"
rm -f "$temoin"

niveau="$(p2i-effets 2>/dev/null)" || niveau=aucun
sans3d="$(p2i-effets --cle effets_sans_3d non 2>/dev/null)" || sans3d=non
virt="$(systemd-detect-virt 2>/dev/null)" || virt=none

# Accélération 3D utilisable ? Pas sous VirtualBox : avec sa 3D, le bureau
# refuse les images des applications (« importing the supplied dmabufs failed »).
acceleration=oui
ls /dev/dri/renderD* >/dev/null 2>&1 || acceleration=non
[ "$virt" = oracle ] && acceleration=non
export P2I_ACCELERATION="$acceleration" P2I_EFFETS="$niveau"

if [ "$niveau" != aucun ] && { [ "$acceleration" = oui ] || [ "$sans3d" = oui ]; }; then
    ini="${XDG_CONFIG_HOME:-$HOME/.config}/p2i/wayfire.ini"
    mkdir -p "$(dirname "$ini")"
    if /usr/libexec/p2i/wayfire-config "$niveau" > "$ini"; then
        echo "p2i : effets « $niveau », compositeur Wayfire (accélération 3D : $acceleration)" >&2
        debut="$(date +%s)"
        (
            export P2I_COMPOSITEUR=wayfire
            [ "$virt" != none ] && export WLR_NO_HARDWARE_CURSORS=1
            if [ "$acceleration" = non ]; then
                # Essais sans 3D : tout est calculé par le processeur (lent)
                export WLR_RENDERER_ALLOW_SOFTWARE=1 LIBGL_ALWAYS_SOFTWARE=1
            fi
            exec wayfire -c "$ini"
        )
        rc=$?
        duree=$(( $(date +%s) - debut ))
        # Arrêt normal, ou session qui a duré : on s'arrête là. Un échec dans la
        # première minute (pilote graphique défaillant…) relance le bureau sans effets.
        if [ "$rc" -eq 0 ] || [ "$duree" -ge 60 ] || [ -e "$temoin" ]; then
            rm -f "$temoin"
            exit 0
        fi
        echo "p2i : Wayfire s'est arrêté (code $rc après $duree s), bureau sans effets" >&2
    fi
fi

export P2I_COMPOSITEUR=labwc
conf=/usr/share/p2i/bureau/labwc
[ -d "$HOME/.config/p2i/labwc" ] && conf="$HOME/.config/p2i/labwc"
exec /usr/libexec/p2i/lancer-labwc "$conf"
