refactor(anaconda): clarify payload mechanism and enhance desktop environment configurations
Update interactive-defaults.ks kickstart file with: - Clarified documentation on LiveOS payload detection and mounting via /run/rootfsbase bind-mount instead of direct liveimg directive - Added comprehensive comments explaining why liveimg directive is intentionally omitted and how anaconda --liveinst handles payload creation - Enhanced XFCE and Hyprland package sets with noto-fonts for proper TTF rendering and additional tools (thunar, hyprlock, grim, slurp, wl-clipboard, playerctl) - Implemented SDDM theme configuration with FWS theme support and accent colors per desktop environment (teal for XFCE, Catppuccin blue for Hyprland, Breeze blue for KDE) - Added GDM (GNOME) configuration via dconf with welcome banner, clock enhancements, and numlock settings - Expanded Waybar configuration installation for Hyprland with config and style files - Added comprehensive documentation for greeter customization and Hyprland VM compatibility - Included details about FWS recap spoke (standalone GUI summary screen) replacing zenity-based pre-install approach
This commit is contained in:
@@ -5,33 +5,36 @@
|
|||||||
# lancée en mode interactif (chemin fixe codé en dur dans Anaconda :
|
# lancée en mode interactif (chemin fixe codé en dur dans Anaconda :
|
||||||
# /usr/share/anaconda/interactive-defaults.ks). Aucun inst.ks= n'est requis.
|
# /usr/share/anaconda/interactive-defaults.ks). Aucun inst.ks= n'est requis.
|
||||||
#
|
#
|
||||||
# RÔLE : empêcher Anaconda d'installer Fedora.
|
# RÔLE : finaliser une install « copie du live » (surtout pas Fedora).
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# Sans payload défini, Anaconda utilise DNF → des RPM depuis les dépôts
|
# Anaconda n'a AUCUN backend pacman ; son payload par défaut (DNF) poserait
|
||||||
# Fedora = il installe Fedora. Anaconda n'a AUCUN backend pacman. La seule
|
# des RPM Fedora. Ici le payload est LiveOS, imposé par « anaconda --liveinst »
|
||||||
# façon de poser FWS/Arch est le payload « liveimg » : il recopie une image
|
# (cf. bloc « Source d'installation » ci-dessous) : il recopie le squashfs du
|
||||||
# de système de fichiers (ici le squashfs du live = FWS) sur le disque, puis
|
# live (= FWS) sur le disque, puis on finalise nous-mêmes (grub, mkinitcpio,
|
||||||
# on finalise nous-mêmes (grub, mkinitcpio, bureau) en %post. C'est le modèle
|
# bureau) en %post. C'est le modèle « Sabayon » : le système installé EST une
|
||||||
# « Sabayon » : le système installé EST une copie du live.
|
# copie du live.
|
||||||
#
|
#
|
||||||
# L'utilisateur garde la main dans le GUI sur tout ce qui N'EST PAS fixé ici :
|
# L'utilisateur garde la main dans le GUI sur tout ce qui N'EST PAS fixé ici :
|
||||||
# partitionnement, fuseau, clavier, langue, création d'utilisateur, mot de
|
# partitionnement, fuseau, clavier, langue, création d'utilisateur, mot de
|
||||||
# passe root, etc.
|
# passe root, etc.
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
|
|
||||||
# --- Source d'installation : l'image du live (FWS), surtout pas Fedora -------
|
# --- Source d'installation : le payload LiveOS (surtout pas Fedora/DNF) ------
|
||||||
# Squashfs archiso sur le média booté :
|
# AUCUNE directive de payload ici, et c'est VOULU. liveinst lance
|
||||||
# /run/archiso/bootmnt/<install_dir>/<arch>/airootfs.sfs
|
# « anaconda --liveinst » et anaconda.py teste opts.liveinst AVANT le type du
|
||||||
# install_dir=fws, arch=x86_64, airootfs_image_type=squashfs (cf. profiledef.sh).
|
# payload DBus → il crée TOUJOURS un payload LiveOS et IGNORE tout payload du
|
||||||
# Anaconda loop-monte ce .sfs et rsync son contenu vers la cible.
|
# kickstart (un « liveimg » ici serait du code mort — vérifié dans
|
||||||
|
# pyanaconda/anaconda.py, propriété payload, et reproduit hors VM).
|
||||||
#
|
#
|
||||||
# ⚠ À VALIDER sur ISO réelle : certaines versions d'Anaconda attendent une
|
# Le payload LiveOS détecte l'image live via /dev/mapper/live-base ou
|
||||||
# structure « LiveOS/rootfs.img » à l'intérieur du squashfs (format Fedora
|
# /run/rootfsbase (chemins Fedora/dracut, absents d'archiso → c'était le crash
|
||||||
# Live) et non un squashfs « plat » comme celui d'archiso. Si l'install
|
# « SourceSetupError: No Live OS image found! » au démarrage). Le .xinitrc du
|
||||||
# échoue à monter la source, basculer sur un tarball de rootfs dédié :
|
# live bind-monte donc /run/archiso/airootfs (squashfs FWS, ro) sur
|
||||||
# liveimg --url=file:///run/archiso/bootmnt/fws/x86_64/fws-rootfs.tar.gz
|
# /run/rootfsbase AVANT de lancer liveinst : Anaconda monte le loop device et
|
||||||
# (un build-rootfs.sh produirait alors ce tar via pacstrap).
|
# rsync son contenu vers la cible = le système installé EST une copie du live,
|
||||||
liveimg --url=file:///run/archiso/bootmnt/fws/x86_64/airootfs.sfs
|
# puis on finalise en %post (grub, mkinitcpio, bureau, matériel).
|
||||||
|
# DNF/libdnf5 n'est jamais importé : le module DNF n'est chargé QUE si le
|
||||||
|
# payload actif est DNF (import lazy dans modules/payloads/payload/factory.py).
|
||||||
|
|
||||||
# --- Disque : repartir d'un disque PROPRE, même s'il a déjà servi ------------
|
# --- Disque : repartir d'un disque PROPRE, même s'il a déjà servi ------------
|
||||||
# Sans ça, une réinstallation sur un disque déjà partitionné (typiquement une
|
# Sans ça, une réinstallation sur un disque déjà partitionné (typiquement une
|
||||||
@@ -69,9 +72,21 @@ clearpart --all --initlabel --disklabel=msdos
|
|||||||
# partitionnement (auto ou manuel) car la plateforme l'impose.
|
# partitionnement (auto ou manuel) car la plateforme l'impose.
|
||||||
bootloader --disabled
|
bootloader --disabled
|
||||||
|
|
||||||
# Pas de section %packages : le payload liveimg n'installe aucun paquet
|
# Pas de section %packages : le payload LiveOS n'installe aucun paquet
|
||||||
# (il copie une image). Toute installation de paquets se fait en %post.
|
# (il copie une image). Toute installation de paquets se fait en %post.
|
||||||
|
|
||||||
|
# --- Récapitulatif avant installation : PAGE GUI dédiée (pas de %pre-install) -
|
||||||
|
# L'écran « RÉCAPITULATIF AVANT INSTALLATION » est une standalone spoke
|
||||||
|
# Anaconda (overlay airootfs : pyanaconda/ui/gui/spokes/fws_recap.py,
|
||||||
|
# postForHub=SummaryHub, priority -10) intercalée ENTRE le hub et l'écran de
|
||||||
|
# progression : l'utilisateur clique « Commencer l'installation », voit le
|
||||||
|
# récap (bureau choisi, hostname, disques, GPU, réseau — AUCUNE écriture
|
||||||
|
# disque à ce stade), et l'installation ne démarre qu'à son clic « Lancer
|
||||||
|
# l'installation ». L'ancien récap zenity en %pre-install a été abandonné :
|
||||||
|
# le module scripts tourne avec LC_ALL=C et un env X incertain (zenity 4
|
||||||
|
# refuse les libellés UTF-8 en locale C → rc=255 pris pour « Annuler » →
|
||||||
|
# poweroff en plein install au 1er test réel).
|
||||||
|
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# %post --nochroot — s'exécute dans le LIVE, la cible montée sous /mnt/sysroot
|
# %post --nochroot — s'exécute dans le LIVE, la cible montée sous /mnt/sysroot
|
||||||
@@ -250,8 +265,13 @@ DM=""
|
|||||||
case "$DESK" in
|
case "$DESK" in
|
||||||
kde) PKGS="plasma-meta sddm konsole dolphin"; DM="sddm" ;;
|
kde) PKGS="plasma-meta sddm konsole dolphin"; DM="sddm" ;;
|
||||||
gnome) PKGS="gnome gdm"; DM="gdm" ;;
|
gnome) PKGS="gnome gdm"; DM="gdm" ;;
|
||||||
xfce) PKGS="xfce4 xfce4-goodies sddm"; DM="sddm" ;;
|
# noto-fonts : KDE l'a via plasma-meta et GNOME a cantarell, mais XFCE et
|
||||||
hyprland) PKGS="hyprland kitty wofi waybar sddm"; DM="sddm" ;;
|
# Hyprland ne garantissent AUCUNE police TTF → greeter SDDM/apps illisibles.
|
||||||
|
# Hyprland : la stack des raccourcis FWS (mêmes touches que la config
|
||||||
|
# i3/sway maison) — thunar (Super+E), hyprlock (Super+L), grim+slurp+
|
||||||
|
# wl-clipboard (captures), playerctl (touches multimédia).
|
||||||
|
xfce) PKGS="xfce4 xfce4-goodies sddm noto-fonts"; DM="sddm" ;;
|
||||||
|
hyprland) PKGS="hyprland kitty wofi waybar sddm noto-fonts thunar hyprlock grim slurp wl-clipboard playerctl"; DM="sddm" ;;
|
||||||
cli|*) PKGS="" ;;
|
cli|*) PKGS="" ;;
|
||||||
esac
|
esac
|
||||||
# Navigateur de base ajouté DÈS QU'un bureau est choisi (jamais en CLI).
|
# Navigateur de base ajouté DÈS QU'un bureau est choisi (jamais en CLI).
|
||||||
@@ -262,10 +282,60 @@ if [ -n "$PKGS" ]; then
|
|||||||
if pacman -Sy --noconfirm $PKGS; then
|
if pacman -Sy --noconfirm $PKGS; then
|
||||||
[ -n "$DM" ] && systemctl enable "$DM" || true
|
[ -n "$DM" ] && systemctl enable "$DM" || true
|
||||||
systemctl set-default graphical.target || true
|
systemctl set-default graphical.target || true
|
||||||
# SDDM (KDE / XFCE / Hyprland) : pavé numérique allumé au login.
|
# SDDM (KDE / XFCE / Hyprland) : pavé numérique + écran de connexion FWS.
|
||||||
|
# Le thème « fws » (livré par l'airootfs → recopié par le payload dans
|
||||||
|
# /usr/share/sddm/themes/fws) est en pur QtQuick/Controls Basic :
|
||||||
|
# qt6-declarative, dépendance de sddm, suffit → même écran soigné pour
|
||||||
|
# les 3 DE SANS paquet de thème supplémentaire (Breeze n'existe qu'avec
|
||||||
|
# plasma). Accent adapté au bureau via theme.conf.user (mécanisme de
|
||||||
|
# surcharge standard de SDDM, lu par-dessus theme.conf du thème).
|
||||||
if [ "$DM" = "sddm" ]; then
|
if [ "$DM" = "sddm" ]; then
|
||||||
install -d /etc/sddm.conf.d
|
install -d /etc/sddm.conf.d
|
||||||
printf '[General]\nNumlock=on\n' > /etc/sddm.conf.d/10-fws.conf
|
cat > /etc/sddm.conf.d/10-fws.conf <<'SDDMEOF'
|
||||||
|
[General]
|
||||||
|
Numlock=on
|
||||||
|
|
||||||
|
[Theme]
|
||||||
|
Current=fws
|
||||||
|
SDDMEOF
|
||||||
|
case "$DESK" in
|
||||||
|
xfce) _ACCENT="#16a085" ;; # sarcelle (assorti à XFCE)
|
||||||
|
hyprland) _ACCENT="#89b4fa" ;; # bleu Catppuccin (assorti à Hyprland)
|
||||||
|
*) _ACCENT="#3daee9" ;; # bleu Breeze (KDE, défaut)
|
||||||
|
esac
|
||||||
|
if [ -d /usr/share/sddm/themes/fws ]; then
|
||||||
|
printf '[General]\naccent=%s\n' "$_ACCENT" \
|
||||||
|
> /usr/share/sddm/themes/fws/theme.conf.user
|
||||||
|
else
|
||||||
|
echo "[FWS] thème SDDM fws introuvable — thème par défaut conservé"
|
||||||
|
sed -i '/^Current=fws$/d' /etc/sddm.conf.d/10-fws.conf
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# GDM (GNOME) : « la même chose » autant que possible — le greeter de
|
||||||
|
# GDM EST GNOME Shell, il ne se thème pas comme SDDM. On passe par
|
||||||
|
# dconf (base système « gdm ») : bannière d'accueil FWS, horloge avec
|
||||||
|
# date complète, pavé numérique allumé — même confort qu'avec SDDM.
|
||||||
|
if [ "$DM" = "gdm" ]; then
|
||||||
|
install -d /etc/dconf/profile /etc/dconf/db/gdm.d
|
||||||
|
cat > /etc/dconf/profile/gdm <<'GDMEOF'
|
||||||
|
user-db:user
|
||||||
|
system-db:gdm
|
||||||
|
file-db:/usr/share/gdm/greeter-dconf-defaults
|
||||||
|
GDMEOF
|
||||||
|
cat > /etc/dconf/db/gdm.d/10-fws <<'GDMEOF'
|
||||||
|
[org/gnome/login-screen]
|
||||||
|
banner-message-enable=true
|
||||||
|
banner-message-text='Bienvenue sur FWS'
|
||||||
|
|
||||||
|
[org/gnome/desktop/interface]
|
||||||
|
clock-show-date=true
|
||||||
|
clock-show-weekday=true
|
||||||
|
|
||||||
|
[org/gnome/desktop/peripherals/keyboard]
|
||||||
|
numlock-state=true
|
||||||
|
remember-numlock-state=false
|
||||||
|
GDMEOF
|
||||||
|
dconf update || echo "[FWS] dconf update a échoué (bannière GDM à refaire)"
|
||||||
fi
|
fi
|
||||||
# Hyprland en VM : sur GPU virtuel (VMware/VirtualBox) le compositeur
|
# Hyprland en VM : sur GPU virtuel (VMware/VirtualBox) le compositeur
|
||||||
# crashe au lancement → SDDM « remet au login ». On le lance via un
|
# crashe au lancement → SDDM « remet au login ». On le lance via un
|
||||||
@@ -317,11 +387,18 @@ if [ "$DESK" = "hyprland" ] && [ -f /usr/local/share/fws/hyprland.conf.tmpl ]; t
|
|||||||
sed -e "s/__KB_LAYOUT__/${XL:-us}/" -e "s/__KB_VARIANT__/${XV}/" \
|
sed -e "s/__KB_LAYOUT__/${XL:-us}/" -e "s/__KB_VARIANT__/${XV}/" \
|
||||||
/usr/local/share/fws/hyprland.conf.tmpl > /tmp/fws-hyprland.conf
|
/usr/local/share/fws/hyprland.conf.tmpl > /tmp/fws-hyprland.conf
|
||||||
install -Dm644 /tmp/fws-hyprland.conf /etc/skel/.config/hypr/hyprland.conf
|
install -Dm644 /tmp/fws-hyprland.conf /etc/skel/.config/hypr/hyprland.conf
|
||||||
|
# Waybar FWS : barre assortie + bouton « ⌨ Raccourcis » (fws-hypr-keys,
|
||||||
|
# aussi sur SUPER+K) qui liste les binds RÉELS chargés par Hyprland
|
||||||
|
# (hyprctl binds -j) — les descriptions viennent des bindd de la config.
|
||||||
|
install -Dm644 /usr/local/share/fws/waybar-config.json /etc/skel/.config/waybar/config
|
||||||
|
install -Dm644 /usr/local/share/fws/waybar-style.css /etc/skel/.config/waybar/style.css
|
||||||
while IFS=: read -r _u _x _uid _g _gec _home _sh; do
|
while IFS=: read -r _u _x _uid _g _gec _home _sh; do
|
||||||
[ "$_uid" -ge 1000 ] && [ "$_uid" -le 60000 ] && [ -d "$_home" ] || continue
|
[ "$_uid" -ge 1000 ] && [ "$_uid" -le 60000 ] && [ -d "$_home" ] || continue
|
||||||
install -Dm644 /tmp/fws-hyprland.conf "$_home/.config/hypr/hyprland.conf"
|
install -Dm644 /tmp/fws-hyprland.conf "$_home/.config/hypr/hyprland.conf"
|
||||||
|
install -Dm644 /usr/local/share/fws/waybar-config.json "$_home/.config/waybar/config"
|
||||||
|
install -Dm644 /usr/local/share/fws/waybar-style.css "$_home/.config/waybar/style.css"
|
||||||
chown "$_u": "$_home/.config" 2>/dev/null || true
|
chown "$_u": "$_home/.config" 2>/dev/null || true
|
||||||
chown -R "$_u": "$_home/.config/hypr" 2>/dev/null || true
|
chown -R "$_u": "$_home/.config/hypr" "$_home/.config/waybar" 2>/dev/null || true
|
||||||
done < /etc/passwd
|
done < /etc/passwd
|
||||||
rm -f /tmp/fws-hyprland.conf
|
rm -f /tmp/fws-hyprland.conf
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user