98d47d497c
- The installer is still W.I.P
96 lines
3.8 KiB
Bash
Executable File
96 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
fws_first_user() {
|
|
awk -F: '$3 >= 1000 && $1 != "nobody" { print $1; exit }' /etc/passwd
|
|
}
|
|
|
|
FWS_LOG=/var/log/fws-desktop-init.log
|
|
|
|
# Paquets communs à TOUS les bureaux graphiques. La cible de base n'installe
|
|
# rien de tout ça (packages.conf ne fait que des « remove »), donc chaque
|
|
# bureau doit les tirer explicitement : audio (PipeWire), applet réseau NM,
|
|
# accès volumes (gvfs), dossiers utilisateur, trousseau, polices (dont emoji).
|
|
# (Xfce a déjà sa propre liste complète et n'utilise pas ce tableau.)
|
|
FWS_BASE_PACKAGES=(
|
|
pipewire pipewire-alsa pipewire-pulse wireplumber pavucontrol
|
|
networkmanager network-manager-applet
|
|
gvfs gvfs-mtp gvfs-gphoto2 gvfs-smb
|
|
xdg-user-dirs xdg-user-dirs-gtk xdg-utils
|
|
gnome-keyring libsecret polkit
|
|
noto-fonts noto-fonts-emoji ttf-dejavu ttf-liberation
|
|
)
|
|
|
|
fws_install_packages() {
|
|
# NE PAS faire « pacman -Sy <paquets> » : rafraîchir les bases sans
|
|
# upgrader le système (partial upgrade) provoque des « conflicting
|
|
# files » / dépendances cassées → pacman sort en code 1.
|
|
#
|
|
# 1) Rafraîchit d'abord archlinux-keyring (seule exception admise au
|
|
# partial upgrade) : son hook relance pacman-key --populate et évite
|
|
# les erreurs de signature dans le chroot.
|
|
pacman -Sy --noconfirm --needed archlinux-keyring 2>&1 | tee -a "$FWS_LOG" || true
|
|
|
|
# 2) -Syu COMPLET. On désactive CheckSpace à la volée via une conf
|
|
# temporaire (process substitution) : le calcul d'espace est non
|
|
# fiable pendant une install en chroot et peut faire échouer pacman.
|
|
# La conf du système installé (/etc/pacman.conf) reste intacte.
|
|
# --noconfirm sélectionne le provider par défaut (ex.
|
|
# qt6-multimedia-ffmpeg) sans bloquer sur une saisie.
|
|
if ! pacman --config <(sed 's/^[[:space:]]*CheckSpace/#CheckSpace/' /etc/pacman.conf) \
|
|
-Syu --noconfirm --needed "$@" 2>&1 | tee -a "$FWS_LOG"; then
|
|
# Surface l'erreur réelle (sinon noyée/tronquée dans la boîte
|
|
# Calamares). Tout est aussi conservé dans $FWS_LOG sur la cible.
|
|
echo "" >&2
|
|
echo "######## ÉCHEC pacman — log complet : $FWS_LOG (système installé) ########" >&2
|
|
echo "######## Lignes d'erreur détectées : ########" >&2
|
|
grep -iE "error|conflicting|exists in filesystem|no space|impossible|introuvable|failed" \
|
|
"$FWS_LOG" | tail -n 25 >&2
|
|
echo "#########################################################################" >&2
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
fws_enable_services() {
|
|
for service in "$@"; do
|
|
systemctl enable "$service" >/dev/null 2>&1 || true
|
|
done
|
|
}
|
|
|
|
|
|
fws_disable_services() {
|
|
for service in "$@"; do
|
|
systemctl disable "$service" >/dev/null 2>&1 || true
|
|
done
|
|
}
|
|
|
|
fws_set_graphical_default() {
|
|
# Système installé : démarrer en mode graphique (lance le display manager).
|
|
# Idempotent ; le défaut systemd est déjà graphical.target mais on le rend
|
|
# explicite pour ne dépendre d'aucun héritage du squashfs archiso.
|
|
systemctl set-default graphical.target >/dev/null 2>&1 || true
|
|
}
|
|
|
|
fws_write_lightdm_config() {
|
|
local user_name="$1"
|
|
local session_name="$2"
|
|
|
|
if [ -z "$user_name" ]; then
|
|
return 0
|
|
fi
|
|
|
|
mkdir -p /etc/lightdm/lightdm.conf.d
|
|
printf '[Seat:*]\nautologin-user=%s\nautologin-user-timeout=0\nuser-session=%s\nautologin-session=%s\ngreeter-hide-users=true\nallow-guest=false\n' "$user_name" "$session_name" "$session_name" > /etc/lightdm/lightdm.conf.d/50-fws.conf
|
|
}
|
|
|
|
fws_write_sddm_config() {
|
|
local user_name="$1"
|
|
local session_name="$2"
|
|
|
|
if [ -z "$user_name" ]; then
|
|
return 0
|
|
fi
|
|
|
|
mkdir -p /etc/sddm.conf.d
|
|
printf '[Autologin]\nUser=%s\nSession=%s.desktop\nRelogin=false\n' "$user_name" "$session_name" > /etc/sddm.conf.d/50-fws.conf
|
|
} |