Aller au contenu

Modules système

Le module DNF principal.

Configure le chargeur systemd-boot, le noyau LTS, la police JetBrains Mono Nerd (avec kmscon pour le TTY), l’optimisation du magasin Nix chaque nuit et la collecte des ordures hebdomadaire (rétention de 30 j), le pare-feu, la politique de suspension (les serveurs peuvent la désactiver complètement via disableSuspend), les règles polkit permettant à wheel d’arrêter/redémarrer, et un groupe common-files partagé/l’utilisateur pour les dossiers médias inter-services.

  • enable bool Système principal du framework 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 (par défaut vrai)
  • enableSops bool Activer le module dnf sops (par défaut vrai)
  • enableFlatpak bool Activer la configuration DNF flatpak (uniquement pour les environnements graphiques)
  • enableKmscon bool Activer la police nerd pour TTY
  • enableBoost bool Activer l’overclocking, corectl
  • enableAutoSuspend bool Activer la suspension automatique (pour les ordinateurs portables, ignoré si disableSuspend est vrai)
  • disableSuspend bool Désactivation complète de 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;
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 du système ANSSI BP-028 v2.0 (GNU/Linux). (en cours)

Module recommandé, activé dans certains profils d’hôte ou manuellement selon les besoins. Applique progressivement les recommandations ANSSI selon le niveau et la catégorie de machine choisis. Chaque profil d’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 Activer le module de durcissement ANSSI BP-028 v2.0.
  • level enum [ "minimal" "intermediary" "reinforced" "high" ] Niveau de durcissement ANSSI cible.
  • 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 de règles entiers.
  • exceptions attrs Exceptions par règle avec justification obligatoire.
  • adminMailbox str Adresse e-mail de l’administrateur (sudo R39, alias MTA R75).
  • useHardenedKernel bool Utiliser linuxPackages_hardened (R60, C1) au lieu du noyau par défaut.
  • allowedActiveUsers listOf str Liste exhaustive des comptes utilisateurs actifs (validation R30).
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 des services globaux <name>
    • enable bool Activer le proxy de service
    • defaultParams submodule Ces options sont calculées par dnfLib.srv.extractServiceParams
      • domain str Nom de domaine du service
      • title str Nom d’affichage sur 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 d’explorer 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 (DNS pointe vers l’IP LAN de la passerelle)
    • uniquePerZone bool Au maximum une instance autorisée par zone (validation du générateur)
    • externalAccess bool Service www-zone accessible depuis le LAN via une adresse IP d’hôte fixe (par exemple 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 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 (journal, cache, etc.)
    • persist.mediaDirs listOf str Répertoires médias du service (images, vidéos, gros fichiers)
    • proxy.enable bool Créer une configuration virtualHost (faux pour les services qui gèrent les leurs)
    • proxy.isProtected bool Service protégé par Oauth2
    • proxy.isInternal bool Lier le service sur l’interface interne uniquement (non accessible 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 du service interne (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.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 pilote de test NixOS.

Lorsqu’il est activé, neutralise les bits irréductiblement externes/runtime pour qu’un nœud puisse être exercé dans une VM : headscale/tailscale deviennent des no-ops et un certificat TLS fixe peut stubifier ACME. Il permet également à la configuration workDir-only (nix.pub, harmonia.pub) d’être ignorée par core/ncps. sops reste RÉEL (haute fidélité).

Objectif : utiliser, déboguer.

  • standalone bool Mode de test autonome — ignorer la configuration workDir-only (nix.pub, harmonia.pub) et neutraliser les services externes
  • tlsCert nullOr path Certificat auto-signé (PEM) fourni par le harnais de test pour stubifier ACME. Jamais un chemin tests/ cuisiné dans le framework.
  • tlsKey nullOr path Clé privée (PEM) couplée à tlsCert.
darkone.system.testing = {
standalone = false;
tlsCert = null;
tlsKey = null;
};