From e99d7ddf6a62d29543ab66416e94e4795c14d990 Mon Sep 17 00:00:00 2001 From: Olivier <1+olivier@noreply.raspot.in> Date: Thu, 20 Aug 2026 08:52:59 +0200 Subject: [PATCH] =?UTF-8?q?T=C3=A9l=C3=A9verser=20les=20fichiers=20vers=20?= =?UTF-8?q?"modules"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/homed.nix | 14 ++++------ modules/provisioning.nix | 60 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 9 deletions(-) create mode 100644 modules/provisioning.nix diff --git a/modules/homed.nix b/modules/homed.nix index edc4ec9..7fc0444 100644 --- a/modules/homed.nix +++ b/modules/homed.nix @@ -4,8 +4,8 @@ let cfg = config.nixosWorkstations.homedUser; # LAB : le mot de passe initial est volontairement un mot de passe par défaut - # connu. Il ne constitue pas un secret durable : Alice doit le remplacer lors - # de sa première session. Pour une future version production, ce credential + # connu. Il ne constitue pas un secret durable : l’utilisateur doit le remplacer + # lors de sa première session. Pour une future version production, ce credential # devra venir d'une source chiffrée/externe et non du Nix store. initialPasswordCredential = pkgs.writeText "nixos-workstations-${cfg.user}-initial-password" @@ -19,26 +19,22 @@ in user = lib.mkOption { type = lib.types.str; - default = "alice"; description = "Compte systemd-homed à préparer automatiquement."; }; realName = lib.mkOption { type = lib.types.str; - default = "Alice"; description = "Nom complet de l'utilisateur systemd-homed."; }; initialPassword = lib.mkOption { type = lib.types.str; - default = "LaboTest@1980"; description = "Mot de passe temporaire utilisé uniquement pour le premier accès LAB."; }; diskSize = lib.mkOption { type = lib.types.str; - default = "10G"; - description = "Taille initiale du conteneur LUKS2 du home."; + description = "Taille initiale du conteneur LUKS2 de l’espace personnel."; }; }; @@ -52,7 +48,7 @@ in # SDDM doit accepter la plage d'UID systemd-homed et son greeter doit # charger libnss_systemd directement. Cette configuration a été validée en - # LAB : sans ce LD_LIBRARY_PATH, getpwent() n'énumère pas Alice sous NixOS. + # LAB : sans ce LD_LIBRARY_PATH, getpwent() n’énumère pas les comptes homed sous NixOS. services.displayManager.sddm.settings = { Users = { MinimumUid = 1000; @@ -65,7 +61,7 @@ in }; }; - # Précréation automatique d'Alice. localadm ne lance qu'un + # Précréation automatique de l’utilisateur prévu pour le poste. localadm ne lance qu’un # nixos-rebuild switch : ce service est démarré automatiquement et ne fait # rien si le compte homed existe déjà. # diff --git a/modules/provisioning.nix b/modules/provisioning.nix new file mode 100644 index 0000000..0615ebd --- /dev/null +++ b/modules/provisioning.nix @@ -0,0 +1,60 @@ +{ config, lib, ... }: + +let + cfg = config.nixosWorkstations.provisioning; +in +{ + options.nixosWorkstations.provisioning = { + enable = lib.mkEnableOption "provisionnement modulaire de l'utilisateur principal du poste"; + + user = lib.mkOption { + type = lib.types.str; + description = "Identifiant du compte utilisateur à préparer sur ce poste."; + }; + + realName = lib.mkOption { + type = lib.types.str; + description = "Nom affiché de l'utilisateur à préparer sur ce poste."; + }; + + initialPassword = lib.mkOption { + type = lib.types.str; + default = "LaboTest@1980"; + description = "Mot de passe temporaire de première connexion utilisé en LAB."; + }; + + diskSize = lib.mkOption { + type = lib.types.str; + default = "10G"; + description = "Taille initiale de l'espace personnel chiffré."; + }; + }; + + config = lib.mkIf cfg.enable { + assertions = [ + { + assertion = builtins.match "^[a-z_][a-z0-9_-]*$" cfg.user != null; + message = "nixosWorkstations.provisioning.user doit être un identifiant UNIX simple en minuscules."; + } + { + assertion = cfg.realName != ""; + message = "nixosWorkstations.provisioning.realName ne peut pas être vide."; + } + ]; + + # Une seule source de vérité : la fiche utilisateur alimente à la fois + # la création du compte chiffré et l'assistant de première connexion. + nixosWorkstations.homedUser = { + enable = true; + user = cfg.user; + realName = cfg.realName; + initialPassword = cfg.initialPassword; + diskSize = cfg.diskSize; + }; + + nixosWorkstations.workstationSetup = { + enable = true; + user = cfg.user; + }; + }; +}