Aller au contenu

Modules système

Module noyau de DNF.

Configure le chargeur d’amorçage systemd-boot, le noyau LTS, la police JetBrains Mono Nerd Font (avec kmscon pour le TTY), l’optimisation nocturne du store Nix et le nettoyage hebdomadaire (rétention 30 j, ou keep-last-N via gcKeepGenerations sur les hôtes à espace disque limité), le pare-feu, la politique de suspension (les serveurs peuvent la désactiver complètement via disableSuspend), les règles polkit permettant au groupe wheel d’arrêter/redémarrer, ainsi qu’un groupe/utilisateur partagé common-files pour les dossiers multimédia inter-services.

  • enable bool Framework noyau Darkone (activé par défaut)
  • enableSystemdBoot bool Activer le chargeur d’amorçage par défaut
  • enableFstrim bool Optimisation SSD avec fstrim
  • enableFirewall bool Activer le pare-feu (true par défaut)
  • enableSops bool Activer le module sops DNF (true par défaut)
  • enableFlatpak bool Activer la configuration DNF pour flatpak (environnements graphiques uniquement)
  • enableKmscon bool Activer la police nerd pour le TTY
  • gcKeepGenerations int Quand > 0, réduire le profil système aux N dernières générations avant chaque nettoyage, et collecter quotidiennement sans rétention par âge. Pour les hôtes à partition racine limitée (passerelles).
  • enableBoost bool Activer l’overclocking, corectl
  • enableAutoSuspend bool Activer la suspension automatique (pour les laptops, ignoré si disableSuspend est true)
  • disableSuspend bool Désactiver complètement la suspension (pour les serveurs)
  • enableCommonFilesUser bool Activer l’utilisateur common-files utilisé par plusieurs services
darkone.system.core = {
enable = true;
enableSystemdBoot = true;
enableFstrim = true;
enableFirewall = true;
enableSops = true;
enableFlatpak = true;
enableKmscon = true;
gcKeepGenerations = 5;
enableBoost = false;
enableAutoSuspend = false;
disableSuspend = false;
enableCommonFilesUser = false;
};

Documentation (man) pour les développeurs et les administrateurs.

  • enable bool Activer la documentation technique utile (man, nixos)
darkone.system.documentation.enable = false;

Améliorations de la configuration matérielle.

  • enable bool Activer les optimisations matérielles
  • enableIntel bool Activer les mises à jour du microcode Intel
  • enableAmd bool Activer les mises à jour du microcode AMD
darkone.system.hardware = {
enable = false;
enableIntel = false;
enableAmd = false;
};

Configuration de la localisation et de la langue.

  • enable bool Activer i18n avec la configuration de la zone de réseau par défaut
  • locale strMatching localeRegex Locale réseau, doit correspondre à la forme xx_YY.UTF-8.
  • timeZone str Fuseau horaire réseau
darkone.system.i18n = {
enable = false;
locale = "fr_FR.UTF-8";
timeZone = "Europe/Paris";
};

Durcissement système ANSSI BP-028 v2.0 (GNU/Linux). (wip)

Module recommandé, activé dans certains profils hôtes ou manuellement selon les besoins. Applique progressivement les recommandations ANSSI selon le niveau choisi et la catégorie de machine. Chaque profil hôte définit son niveau et sa catégorie :

darkone.system.security = {
level = "intermediary"; # minimal | intermediary | reinforced | high
category = "server"; # base | client | server
};

Les règles incompatibles avec l’environnement sont exclues par tag :

darkone.system.security.excludes = [ "needs-jit" "needs-hibernation" ];

Une règle spécifique peut être contournée avec une justification obligatoire :

darkone.system.security.exceptions = {
R9.rationale = "Docker rootless required during development.";
};
  • enable bool Active le module de durcissement ANSSI BP-028 v2.0.
  • level enum [ "minimal" "intermediary" "reinforced" "high" ] Niveau de durcissement ANSSI ciblé.
  • category enum [ "base" "client" "server" ] Catégorie de machine qui sélectionne les sous-ensembles de règles.
  • excludes listOf str Tags qui désactivent des groupes entiers de règles.
  • exceptions attrs Exceptions par règle avec justification obligatoire.
  • adminMailbox str Adresse e-mail de l’administrateur (sudo R39, alias MTA R75).
  • useHardenedKernel bool Utilise linuxPackages_hardened (R60, C1) au lieu du noyau par défaut.
  • allowedActiveUsers listOf str Comptes humains autorisés à s’authentifier (R30). Par défaut, chaque utilisateur déclaré dans config.yaml (host.users) plus le compte de déploiement de l’infrastructure nix. Les comptes désactivés (sans identifiant de mot de passe) et les comptes de service (pas des utilisateurs normaux) n’ont pas besoin d’être listés.
darkone.system.security = {
enable = false;
level = "minimal";
category = "base";
excludes = [ ];
exceptions = { };
adminMailbox = "admin@exemple.fr";
useHardenedKernel = false;
allowedActiveUsers = [ ];
};

Enregistrement et configuration des services DNF.

  • enable bool Activer le gestionnaire de services DNF pour enregistrer et exposer les services
  • service attrs Configuration globale des services <name>
    • enable bool Activer le proxy du service
    • defaultParams submodule Ces options sont calculées par dnfLib.srv.extractServiceParams
      • domain str Nom de domaine pour le service
      • title str Nom affiché dans la page d’accueil
      • description str Description du service pour la page d’accueil
      • icon str Nom de l’icône pour la page d’accueil 🡕
      • global bool Le service global est accessible sur Internet
      • noRobots bool Empêcher les robots de scanner si global est vrai
      • fqdn str FQDN calculé du service avant le proxy inverse
      • href str URL calculée du service avant le proxy inverse
      • ip str IP calculée pour contacter le service
    • displayOnHomepage bool Afficher un lien sur la page d’accueil
    • reverseProxy bool Accessible via le proxy inverse de la passerelle de zone (le DNS pointe vers l’IP LAN de la passerelle)
    • uniquePerZone bool Au plus une instance autorisée par zone (validation du générateur)
    • externalAccess bool Service de zone www accessible depuis le LAN via une IP d’hôte fixe (ex. headscale, turn)
    • persist.dirs listOf str Répertoires persistants du service
    • persist.files listOf str Fichiers persistants du service
    • persist.dbDirs listOf str Répertoires persistants du service avec base(s) de données
    • persist.dbFiles listOf str Fichier(s) de base de données du service
    • persist.varDirs listOf str Fichiers secondaires variables (log, cache, etc.)
    • persist.mediaDirs listOf str Répertoires média du service (images, vidéos, gros fichiers)
    • proxy.enable bool Créer ou non la configuration virtualHost (false pour les services qui gèrent la leur)
    • proxy.isProtected bool Service protégé par Oauth2
    • proxy.allowedGroups listOf str Groupes Kanidm autorisés sur ce service protégé (vide = tout utilisateur authentifié)
    • proxy.protectExternalOnly bool N’exiger l’auth que pour les clients externes ; les appelants LAN/tailnet internes contournent la connexion
    • proxy.isInternal bool Lier le service sur l’interface interne uniquement (pas accessible depuis Internet)
    • proxy.hasReverseProxy bool Ceci est un proxy inverse (ou une autre configuration virtualHost via extraConfig)
    • proxy.defaultService bool Est le service par défaut
    • proxy.servicePort nullOr port Port interne du service
    • proxy.preExtraConfig lines Configuration virtualHost Caddy supplémentaire (préfixe)
    • proxy.extraConfig lines Configuration virtualHost Caddy supplémentaire
    • proxy.extraGlobalConfig lines Configuration Caddy supplémentaire
    • proxy.scheme str Schéma interne du service (http / https)
darkone.system.services = {
enable = false;
service.enable = false;
service.defaultParams.domain = "";
service.defaultParams.title = "";
service.defaultParams.description = "";
service.defaultParams.icon = "";
service.defaultParams.global = false;
service.defaultParams.noRobots = true;
service.defaultParams.fqdn = "";
service.defaultParams.href = "";
service.defaultParams.ip = "";
service.displayOnHomepage = true;
service.reverseProxy = true;
service.uniquePerZone = false;
service.externalAccess = false;
service.persist.dirs = [ ];
service.persist.files = [ ];
service.persist.dbDirs = [ ];
service.persist.dbFiles = [ ];
service.persist.varDirs = [ ];
service.persist.mediaDirs = [ ];
service.proxy.enable = true;
service.proxy.isProtected = false;
service.proxy.allowedGroups = [ ];
service.proxy.protectExternalOnly = false;
service.proxy.isInternal = false;
service.proxy.hasReverseProxy = true;
service.proxy.defaultService = false;
service.proxy.servicePort = null;
service.proxy.preExtraConfig = "";
service.proxy.extraConfig = "";
service.proxy.extraGlobalConfig = "";
service.proxy.scheme = "https";
};

Gestion des mots de passe et secrets DNF sops.

Connecte sops-nix à usr/secrets/secrets.yaml et le déverrouille avec la clé SSH de l’hôte (ssh_host_ed25519_key) plus la clé d’infrastructure dédiée age (/etc/sops/age/infra.key). Pré-déclare un groupe sops partagé, les secrets default-password / default-password-hash (lisible par le groupe sops), et un secret user/<login>/password-hash par utilisateur d’hôte (avec neededForUsers = true pour que le hash soit disponible avant la création des comptes utilisateur).

  • enable bool Activer la configuration automatique sops pour DNF
darkone.system.sops.enable = false;

Service de gestion des répertoires partagés.

  • enable bool Activer les répertoires srv, créer le répertoire racine (par défaut /srv)
  • enableNfs bool Activer les chemins de service nfs (nfs/common, nfs/homes)
  • enableMedias bool Activer les chemins des services médias (medias/[videos|music|incomming/…])
  • root str Répertoire racine pour les données persistantes (/srv)
  • nfs str Répertoire racine NFS (/srv/nfs)
  • homes str Répertoire pour les domiciles partagés (/srv/nfs/homes)
  • common str Répertoire commun partagé (/srv/nfs/common lié à ~/Public)
  • medias str Répertoire racine des médias (/srv/medias)
  • music str Répertoire partagé des fichiers musicaux (/srv/medias/music)
  • videos str Répertoire partagé des fichiers vidéo (/srv/medias/videos)
  • incoming str Répertoire partagé entrant (/srv/medias/incoming accès écriture)
  • incomingMusic str Répertoire partagé entrant (/srv/medias/incoming/music accès écriture)
  • incomingVideos str Répertoire partagé entrant (/srv/medias/incoming/videos accès écriture)
darkone.system.srv-dirs = {
enable = cfg.enableNfs || cfg.enableMedias;
enableNfs = false;
enableMedias = false;
root = "/srv";
nfs = null;
homes = null;
common = null;
medias = null;
music = null;
videos = null;
incoming = null;
incomingMusic = null;
incomingVideos = null;
};

Mode de test autonome pour le NixOS Test Driver.

Quand activé, neutralise les parties incompressiblement externes/d’exécution pour qu’un nœud puisse être testé dans une VM : headscale/tailscale deviennent des no-op et un certificat TLS fixe peut stuber ACME. Il permet aussi à core/ncps d’ignorer la config propre à workDir (nix.pub, harmonia.pub). sops reste REAL (grande fidélité).

  • standalone bool Mode test autonome — ignore la config propre à workDir (nix.pub, harmonia.pub) et neutralise les services externes
  • tlsCert nullOr path Certificat auto-signé (PEM) fourni par le harnais de test pour stuber ACME. Jamais un chemin tests/ intégré au framework.
  • tlsKey nullOr path Clé privée (PEM) associée à tlsCert.
darkone.system.testing = {
standalone = false;
tlsCert = null;
tlsKey = null;
};