From d1198b9d045cc0208e508770fd8676e5e6e28d3f Mon Sep 17 00:00:00 2001 From: fkDeath Date: Thu, 28 May 2026 00:41:11 +0200 Subject: [PATCH] chore(Installer-MultiDesktop): Save to be able to work somewhere else --- .../etc/calamares/modules/packagechooser.conf | 33 ++++++++++ .../airootfs/etc/calamares/settings.conf | 2 +- .../etc/systemd/system/calamares.service | 4 +- .../usr/local/bin/fws-desktop-init-cli | 17 ++++++ .../usr/local/bin/fws-desktop-init-common | 60 +++++++++++-------- .../usr/local/bin/fws-desktop-init-gnome | 8 +-- .../usr/local/bin/fws-desktop-init-hyprland | 3 +- .../usr/local/bin/fws-desktop-init-kde | 3 +- .../usr/local/bin/fws-desktop-init-xfce | 3 +- configs/baseline/packages.x86_64 | 6 -- configs/baseline/profiledef.sh | 1 + .../etc/systemd/system/calamares.service | 8 +-- .../usr/local/bin/fws-desktop-init-cli | 15 +++++ .../usr/local/bin/fws-desktop-init-common | 60 ++++++++++++------- .../usr/local/bin/fws-desktop-init-gnome | 10 ++-- .../usr/local/bin/fws-desktop-init-hyprland | 9 ++- .../usr/local/bin/fws-desktop-init-kde | 5 +- .../usr/local/bin/fws-desktop-init-xfce | 5 +- configs/releng/packages.x86_64 | 6 -- configs/releng/profiledef.sh | 6 ++ 20 files changed, 178 insertions(+), 86 deletions(-) create mode 100644 configs/baseline/airootfs/etc/calamares/modules/packagechooser.conf create mode 100644 configs/baseline/airootfs/usr/local/bin/fws-desktop-init-cli create mode 100644 configs/releng/airootfs/usr/local/bin/fws-desktop-init-cli diff --git a/configs/baseline/airootfs/etc/calamares/modules/packagechooser.conf b/configs/baseline/airootfs/etc/calamares/modules/packagechooser.conf new file mode 100644 index 0000000..6aaa7ff --- /dev/null +++ b/configs/baseline/airootfs/etc/calamares/modules/packagechooser.conf @@ -0,0 +1,33 @@ +--- +# packagechooser — un seul choix (radio buttons) +# method: legacy → stocke l'id dans GlobalStorage["packagechooser_packagechooser"] +# Les scripts fws-desktop-init-* gèrent l'installation réelle. + +mode: required +method: legacy + +items: + - id: cli + packages: [] + name: "CLI uniquement" + description: "Installation minimale en ligne de commande, sans interface graphique." + + - id: kde + packages: [] + name: "KDE Plasma" + description: "Bureau moderne, hautement personnalisable et riche en fonctionnalités." + + - id: gnome + packages: [] + name: "GNOME" + description: "Interface épurée et intuitive, centrée sur la productivité." + + - id: xfce + packages: [] + name: "Xfce" + description: "Léger, rapide et stable. Idéal pour tous les systèmes, y compris les machines plus anciennes." + + - id: hyprland + packages: [] + name: "Hyprland" + description: "Compositeur Wayland dynamique avec tiling automatique (utilisateurs avancés)." diff --git a/configs/baseline/airootfs/etc/calamares/settings.conf b/configs/baseline/airootfs/etc/calamares/settings.conf index 7a2bc19..736723c 100644 --- a/configs/baseline/airootfs/etc/calamares/settings.conf +++ b/configs/baseline/airootfs/etc/calamares/settings.conf @@ -12,7 +12,7 @@ sequence: - keyboard - partition - users - - packagechooser@desktop + - packagechooser - summary - exec: - partition diff --git a/configs/baseline/airootfs/etc/systemd/system/calamares.service b/configs/baseline/airootfs/etc/systemd/system/calamares.service index 389e921..b9b58fc 100644 --- a/configs/baseline/airootfs/etc/systemd/system/calamares.service +++ b/configs/baseline/airootfs/etc/systemd/system/calamares.service @@ -1,11 +1,9 @@ [Unit] Description=FWS Installer (Calamares) -After=display-manager.service -Requires=display-manager.service +After=graphical.target [Service] Type=simple -ExecStartPre=/bin/sh -c 'DISPLAY=:0 xhost +local:root 2>/dev/null || true' ExecStart=/usr/bin/calamares [Install] diff --git a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-cli b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-cli new file mode 100644 index 0000000..8df36d6 --- /dev/null +++ b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-cli @@ -0,0 +1,17 @@ +#!/bin/bash +set -euo pipefail + +. /usr/local/bin/fws-desktop-init-common + +# Mode CLI : pas d'interface graphique. +# On installe uniquement les outils serveur + WinBoat + Wine. +fws_install_packages mariadb mariadb-clients wine \ + qemu-base podman podman-compose git + +mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql \ + >/dev/null 2>&1 || true +fws_enable_services mariadb.service podman.socket + +printf 'kvm\nkvm_intel\nkvm_amd\n' > /etc/modules-load.d/kvm.conf + +fws_disable_services lightdm.service sddm.service gdm.service diff --git a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-common b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-common index 9e00ec4..d74207e 100644 --- a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-common +++ b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-common @@ -21,6 +21,15 @@ fws_disable_services() { done } +# Retire Xfce + LightDM présents dans le squashfs du live system. +# Appelé par les scripts KDE / GNOME / Hyprland pour ne pas laisser +# les sessions Xfce apparaître dans le sélecteur du DM. +fws_remove_xfce() { + pacman -Rns --noconfirm xfce4 xfce4-goodies \ + lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings \ + 2>/dev/null || true +} + fws_write_dmrc() { local user_name="$1" local session_name="$2" @@ -30,39 +39,42 @@ fws_write_dmrc() { fi } -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 -} - +# Configure SDDM : session par défaut uniquement, PAS d'autologin. +# L'utilisateur devra entrer son mot de passe à chaque démarrage. fws_write_sddm_config() { - local user_name="$1" - local session_name="$2" - - if [ -z "$user_name" ]; then - return 0 - fi + local session_name="$1" mkdir -p /etc/sddm.conf.d - printf '[Autologin]\nUser=%s\nSession=%s.desktop\nRelogin=false\n' \ - "$user_name" "$session_name" \ + printf '[General]\nDefaultSession=%s.desktop\n\n[Theme]\nCurrent=\n' \ + "$session_name" \ > /etc/sddm.conf.d/50-fws.conf } +# Configure LightDM : session par défaut uniquement, PAS d'autologin. +fws_write_lightdm_config() { + local session_name="$1" + + mkdir -p /etc/lightdm/lightdm.conf.d + printf '[Seat:*]\nuser-session=%s\nallow-guest=false\n' \ + "$session_name" \ + > /etc/lightdm/lightdm.conf.d/50-fws.conf +} + # Paquets installés par défaut sur tous les bureaux fws_install_base_apps() { - fws_install_packages firefox libreoffice-fresh mariadb mariadb-clients - # Initialise la base de données MariaDB + fws_install_packages firefox libreoffice-fresh mariadb mariadb-clients wine + + # MariaDB mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql \ >/dev/null 2>&1 || true fws_enable_services mariadb.service + + # Dépendances WinBoat : KVM, Podman, Podman Compose + fws_install_packages qemu-base podman podman-compose + + # Charge les modules KVM au démarrage + printf 'kvm\nkvm_intel\nkvm_amd\n' > /etc/modules-load.d/kvm.conf + + # Active le socket Podman pour l'utilisateur root + fws_enable_services podman.socket } diff --git a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-gnome b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-gnome index c275eb0..eff0598 100644 --- a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-gnome +++ b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-gnome @@ -5,9 +5,9 @@ set -euo pipefail first_user="$(fws_first_user)" +fws_remove_xfce fws_install_base_apps -fws_install_packages gnome sddm -fws_disable_services lightdm.service gdm.service -fws_enable_services sddm.service -fws_write_sddm_config "$first_user" gnome +fws_install_packages gnome gdm +fws_disable_services lightdm.service sddm.service +fws_enable_services gdm.service fws_write_dmrc "$first_user" gnome diff --git a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-hyprland b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-hyprland index 9eef460..f93c162 100644 --- a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-hyprland +++ b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-hyprland @@ -5,11 +5,12 @@ set -euo pipefail first_user="$(fws_first_user)" +fws_remove_xfce fws_install_base_apps fws_install_packages hyprland xdg-desktop-portal-hyprland xdg-desktop-portal-gtk \ waybar wofi kitty swaybg swayidle swaylock xorg-xwayland wl-clipboard \ grim slurp qt5-wayland qt6-wayland sddm fws_disable_services lightdm.service gdm.service fws_enable_services sddm.service -fws_write_sddm_config "$first_user" hyprland +fws_write_sddm_config hyprland fws_write_dmrc "$first_user" hyprland diff --git a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-kde b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-kde index 0163645..2e4144b 100644 --- a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-kde +++ b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-kde @@ -5,9 +5,10 @@ set -euo pipefail first_user="$(fws_first_user)" +fws_remove_xfce fws_install_base_apps fws_install_packages plasma-meta konsole dolphin sddm fws_disable_services lightdm.service gdm.service fws_enable_services sddm.service -fws_write_sddm_config "$first_user" plasma +fws_write_sddm_config plasma fws_write_dmrc "$first_user" plasma diff --git a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-xfce b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-xfce index 55dbfbc..e7eab11 100644 --- a/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-xfce +++ b/configs/baseline/airootfs/usr/local/bin/fws-desktop-init-xfce @@ -5,9 +5,10 @@ set -euo pipefail first_user="$(fws_first_user)" +# Xfce est déjà dans le squashfs — on s'assure juste qu'il est complet fws_install_base_apps fws_install_packages xfce4 xfce4-goodies lightdm lightdm-gtk-greeter fws_disable_services sddm.service gdm.service fws_enable_services lightdm.service -fws_write_lightdm_config "$first_user" xfce +fws_write_lightdm_config xfce fws_write_dmrc "$first_user" xfce diff --git a/configs/baseline/packages.x86_64 b/configs/baseline/packages.x86_64 index 896e219..e84b61d 100644 --- a/configs/baseline/packages.x86_64 +++ b/configs/baseline/packages.x86_64 @@ -94,12 +94,6 @@ xorg-xsetroot openbox ttf-dejavu -# --- Bureau FWS installé --- -xfce4 -xfce4-goodies -lightdm -lightdm-gtk-greeter - # --- Calamares (fournis par fws-local) --- calamares kpmcore diff --git a/configs/baseline/profiledef.sh b/configs/baseline/profiledef.sh index 06e20f6..b019980 100644 --- a/configs/baseline/profiledef.sh +++ b/configs/baseline/profiledef.sh @@ -22,4 +22,5 @@ file_permissions=( ["/usr/local/bin/fws-desktop-init-kde"]="0:0:755" ["/usr/local/bin/fws-desktop-init-gnome"]="0:0:755" ["/usr/local/bin/fws-desktop-init-hyprland"]="0:0:755" + ["/usr/local/bin/fws-desktop-init-cli"]="0:0:755" ) diff --git a/configs/releng/airootfs/etc/systemd/system/calamares.service b/configs/releng/airootfs/etc/systemd/system/calamares.service index c0898fe..b9b58fc 100644 --- a/configs/releng/airootfs/etc/systemd/system/calamares.service +++ b/configs/releng/airootfs/etc/systemd/system/calamares.service @@ -1,12 +1,10 @@ [Unit] -Description=Calamares Installer -After=display-manager.service -Requires=display-manager.service +Description=FWS Installer (Calamares) +After=graphical.target [Service] Type=simple ExecStart=/usr/bin/calamares -Restart=on-failure [Install] -WantedBy=graphical.target \ No newline at end of file +WantedBy=graphical.target diff --git a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-cli b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-cli new file mode 100644 index 0000000..63926f8 --- /dev/null +++ b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-cli @@ -0,0 +1,15 @@ +#!/bin/bash +set -euo pipefail + +. /usr/local/bin/fws-desktop-init-common + +fws_install_packages mariadb mariadb-clients wine \ + qemu-base podman podman-compose git + +mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql \ + >/dev/null 2>&1 || true +fws_enable_services mariadb.service podman.socket + +printf 'kvm\nkvm_intel\nkvm_amd\n' > /etc/modules-load.d/kvm.conf + +fws_disable_services lightdm.service sddm.service gdm.service diff --git a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-common b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-common index bb3b3cf..d74207e 100644 --- a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-common +++ b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-common @@ -15,13 +15,21 @@ fws_enable_services() { done } - fws_disable_services() { for service in "$@"; do systemctl disable "$service" >/dev/null 2>&1 || true done } +# Retire Xfce + LightDM présents dans le squashfs du live system. +# Appelé par les scripts KDE / GNOME / Hyprland pour ne pas laisser +# les sessions Xfce apparaître dans le sélecteur du DM. +fws_remove_xfce() { + pacman -Rns --noconfirm xfce4 xfce4-goodies \ + lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings \ + 2>/dev/null || true +} + fws_write_dmrc() { local user_name="$1" local session_name="$2" @@ -31,34 +39,42 @@ fws_write_dmrc() { fi } -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 -} - +# Configure SDDM : session par défaut uniquement, PAS d'autologin. +# L'utilisateur devra entrer son mot de passe à chaque démarrage. fws_write_sddm_config() { - local user_name="$1" - local session_name="$2" - - if [ -z "$user_name" ]; then - return 0 - fi + local session_name="$1" 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 + printf '[General]\nDefaultSession=%s.desktop\n\n[Theme]\nCurrent=\n' \ + "$session_name" \ + > /etc/sddm.conf.d/50-fws.conf +} + +# Configure LightDM : session par défaut uniquement, PAS d'autologin. +fws_write_lightdm_config() { + local session_name="$1" + + mkdir -p /etc/lightdm/lightdm.conf.d + printf '[Seat:*]\nuser-session=%s\nallow-guest=false\n' \ + "$session_name" \ + > /etc/lightdm/lightdm.conf.d/50-fws.conf } # Paquets installés par défaut sur tous les bureaux fws_install_base_apps() { - fws_install_packages firefox libreoffice-fresh mariadb mariadb-clients + fws_install_packages firefox libreoffice-fresh mariadb mariadb-clients wine + + # MariaDB mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql \ >/dev/null 2>&1 || true fws_enable_services mariadb.service -} \ No newline at end of file + + # Dépendances WinBoat : KVM, Podman, Podman Compose + fws_install_packages qemu-base podman podman-compose + + # Charge les modules KVM au démarrage + printf 'kvm\nkvm_intel\nkvm_amd\n' > /etc/modules-load.d/kvm.conf + + # Active le socket Podman pour l'utilisateur root + fws_enable_services podman.socket +} diff --git a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-gnome b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-gnome index 784efef..eff0598 100644 --- a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-gnome +++ b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-gnome @@ -5,9 +5,9 @@ set -euo pipefail first_user="$(fws_first_user)" +fws_remove_xfce fws_install_base_apps -fws_install_packages gnome sddm -fws_disable_services lightdm.service gdm.service -fws_enable_services sddm.service -fws_write_sddm_config "$first_user" gnome -fws_write_dmrc "$first_user" gnome \ No newline at end of file +fws_install_packages gnome gdm +fws_disable_services lightdm.service sddm.service +fws_enable_services gdm.service +fws_write_dmrc "$first_user" gnome diff --git a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-hyprland b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-hyprland index a4b80a2..f93c162 100644 --- a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-hyprland +++ b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-hyprland @@ -5,9 +5,12 @@ set -euo pipefail first_user="$(fws_first_user)" +fws_remove_xfce fws_install_base_apps -fws_install_packages hyprland xdg-desktop-portal-hyprland xdg-desktop-portal-gtk waybar wofi kitty swaybg swayidle swaylock xorg-xwayland wl-clipboard grim slurp qt5-wayland qt6-wayland sddm +fws_install_packages hyprland xdg-desktop-portal-hyprland xdg-desktop-portal-gtk \ + waybar wofi kitty swaybg swayidle swaylock xorg-xwayland wl-clipboard \ + grim slurp qt5-wayland qt6-wayland sddm fws_disable_services lightdm.service gdm.service fws_enable_services sddm.service -fws_write_sddm_config "$first_user" hyprland -fws_write_dmrc "$first_user" hyprland \ No newline at end of file +fws_write_sddm_config hyprland +fws_write_dmrc "$first_user" hyprland diff --git a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-kde b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-kde index 4fd4a98..2e4144b 100644 --- a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-kde +++ b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-kde @@ -5,9 +5,10 @@ set -euo pipefail first_user="$(fws_first_user)" +fws_remove_xfce fws_install_base_apps fws_install_packages plasma-meta konsole dolphin sddm fws_disable_services lightdm.service gdm.service fws_enable_services sddm.service -fws_write_sddm_config "$first_user" plasma -fws_write_dmrc "$first_user" plasma \ No newline at end of file +fws_write_sddm_config plasma +fws_write_dmrc "$first_user" plasma diff --git a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-xfce b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-xfce index 6d5f84b..e7eab11 100644 --- a/configs/releng/airootfs/usr/local/bin/fws-desktop-init-xfce +++ b/configs/releng/airootfs/usr/local/bin/fws-desktop-init-xfce @@ -5,9 +5,10 @@ set -euo pipefail first_user="$(fws_first_user)" +# Xfce est déjà dans le squashfs — on s'assure juste qu'il est complet fws_install_base_apps fws_install_packages xfce4 xfce4-goodies lightdm lightdm-gtk-greeter fws_disable_services sddm.service gdm.service fws_enable_services lightdm.service -fws_write_lightdm_config "$first_user" xfce -fws_write_dmrc "$first_user" xfce \ No newline at end of file +fws_write_lightdm_config xfce +fws_write_dmrc "$first_user" xfce diff --git a/configs/releng/packages.x86_64 b/configs/releng/packages.x86_64 index ab2356c..017e8e1 100644 --- a/configs/releng/packages.x86_64 +++ b/configs/releng/packages.x86_64 @@ -93,12 +93,6 @@ xorg-xsetroot openbox ttf-dejavu -# --- Bureau FWS installé --- -xfce4 -xfce4-goodies -lightdm -lightdm-gtk-greeter - # --- Calamares (fournis par fws-local) --- calamares kpmcore diff --git a/configs/releng/profiledef.sh b/configs/releng/profiledef.sh index 429e6f2..0d81634 100644 --- a/configs/releng/profiledef.sh +++ b/configs/releng/profiledef.sh @@ -22,4 +22,10 @@ file_permissions=( ["/usr/local/bin/choose-mirror"]="0:0:755" ["/usr/local/bin/Installation_guide"]="0:0:755" ["/usr/local/bin/livecd-sound"]="0:0:755" + ["/usr/local/bin/fws-desktop-init-common"]="0:0:755" + ["/usr/local/bin/fws-desktop-init-cli"]="0:0:755" + ["/usr/local/bin/fws-desktop-init-xfce"]="0:0:755" + ["/usr/local/bin/fws-desktop-init-kde"]="0:0:755" + ["/usr/local/bin/fws-desktop-init-gnome"]="0:0:755" + ["/usr/local/bin/fws-desktop-init-hyprland"]="0:0:755" )