{ 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; }; }; }