Modules système
⚙ darkone.system.core
Section intitulée « ⚙ darkone.system.core »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
boolFramework noyau Darkone (activé par défaut) - enableSystemdBoot
boolActiver le chargeur d’amorçage par défaut - enableFstrim
boolOptimisation SSD avec fstrim - enableFirewall
boolActiver le pare-feu (true par défaut) - enableSops
boolActiver le module sops DNF (true par défaut) - enableFlatpak
boolActiver la configuration DNF pour flatpak (environnements graphiques uniquement) - enableKmscon
boolActiver la police nerd pour le TTY - gcKeepGenerations
intQuand > 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
boolActiver l’overclocking, corectl - enableAutoSuspend
boolActiver la suspension automatique (pour les laptops, ignoré si disableSuspend est true) - disableSuspend
boolDésactiver complètement la suspension (pour les serveurs) - enableCommonFilesUser
boolActiver 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;};⚙ darkone.system.documentation
Section intitulée « ⚙ darkone.system.documentation »Documentation (man) pour les développeurs et les administrateurs.
- enable
boolActiver la documentation technique utile (man, nixos)
darkone.system.documentation.enable = false;⚙ darkone.system.hardware
Section intitulée « ⚙ darkone.system.hardware »Améliorations de la configuration matérielle.
- enable
boolActiver les optimisations matérielles - enableIntel
boolActiver les mises à jour du microcode Intel - enableAmd
boolActiver les mises à jour du microcode AMD
darkone.system.hardware = { enable = false; enableIntel = false; enableAmd = false;};⚙ darkone.system.i18n
Section intitulée « ⚙ darkone.system.i18n »Configuration de la localisation et de la langue.
- enable
boolActiver i18n avec la configuration de la zone de réseau par défaut - locale
strMatching localeRegexLocale réseau, doit correspondre à la formexx_YY.UTF-8. - timeZone
strFuseau horaire réseau
darkone.system.i18n = { enable = false; locale = "fr_FR.UTF-8"; timeZone = "Europe/Paris";};⚙ darkone.system.security
Section intitulée « ⚙ darkone.system.security »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
boolActive 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 strTags qui désactivent des groupes entiers de règles. - exceptions
attrsExceptions par règle avec justification obligatoire. - adminMailbox
strAdresse e-mail de l’administrateur (sudo R39, alias MTA R75). - useHardenedKernel
boolUtilise linuxPackages_hardened (R60, C1) au lieu du noyau par défaut. - allowedActiveUsers
listOf strComptes 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’infrastructurenix. 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 = [ ];};⚙ darkone.system.services
Section intitulée « ⚙ darkone.system.services »Enregistrement et configuration des services DNF.
- enable
boolActiver le gestionnaire de services DNF pour enregistrer et exposer les services - service
attrsConfiguration globale des services <name>- enable
boolActiver le proxy du service - defaultParams
submoduleCes options sont calculées par dnfLib.srv.extractServiceParams- domain
strNom de domaine pour le service - title
strNom affiché dans la page d’accueil - description
strDescription du service pour la page d’accueil - icon
strNom de l’icône pour la page d’accueil 🡕 - global
boolLe service global est accessible sur Internet - noRobots
boolEmpêcher les robots de scanner si global est vrai - fqdn
strFQDN calculé du service avant le proxy inverse - href
strURL calculée du service avant le proxy inverse - ip
strIP calculée pour contacter le service
- domain
- displayOnHomepage
boolAfficher un lien sur la page d’accueil - reverseProxy
boolAccessible via le proxy inverse de la passerelle de zone (le DNS pointe vers l’IP LAN de la passerelle) - uniquePerZone
boolAu plus une instance autorisée par zone (validation du générateur) - externalAccess
boolService de zone www accessible depuis le LAN via une IP d’hôte fixe (ex. headscale, turn) - persist.dirs
listOf strRépertoires persistants du service - persist.files
listOf strFichiers persistants du service - persist.dbDirs
listOf strRépertoires persistants du service avec base(s) de données - persist.dbFiles
listOf strFichier(s) de base de données du service - persist.varDirs
listOf strFichiers secondaires variables (log, cache, etc.) - persist.mediaDirs
listOf strRépertoires média du service (images, vidéos, gros fichiers) - proxy.enable
boolCréer ou non la configuration virtualHost (false pour les services qui gèrent la leur) - proxy.isProtected
boolService protégé par Oauth2 - proxy.allowedGroups
listOf strGroupes Kanidm autorisés sur ce service protégé (vide = tout utilisateur authentifié) - proxy.protectExternalOnly
boolN’exiger l’auth que pour les clients externes ; les appelants LAN/tailnet internes contournent la connexion - proxy.isInternal
boolLier le service sur l’interface interne uniquement (pas accessible depuis Internet) - proxy.hasReverseProxy
boolCeci est un proxy inverse (ou une autre configuration virtualHost via extraConfig) - proxy.defaultService
boolEst le service par défaut - proxy.servicePort
nullOr portPort interne du service - proxy.preExtraConfig
linesConfiguration virtualHost Caddy supplémentaire (préfixe) - proxy.extraConfig
linesConfiguration virtualHost Caddy supplémentaire - proxy.extraGlobalConfig
linesConfiguration Caddy supplémentaire - proxy.scheme
strSchéma interne du service (http / https)
- enable
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";};⚙ darkone.system.sops
Section intitulée « ⚙ darkone.system.sops »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
boolActiver la configuration automatique sops pour DNF
darkone.system.sops.enable = false;⚙ darkone.system.srv-dirs
Section intitulée « ⚙ darkone.system.srv-dirs »Service de gestion des répertoires partagés.
- enable
boolActiver les répertoires srv, créer le répertoire racine (par défaut /srv) - enableNfs
boolActiver les chemins de service nfs (nfs/common, nfs/homes) - enableMedias
boolActiver les chemins des services médias (medias/[videos|music|incomming/…]) - root
strRépertoire racine pour les données persistantes (/srv) - nfs
strRépertoire racine NFS (/srv/nfs) - homes
strRépertoire pour les domiciles partagés (/srv/nfs/homes) - common
strRépertoire commun partagé (/srv/nfs/common lié à ~/Public) - medias
strRépertoire racine des médias (/srv/medias) - music
strRépertoire partagé des fichiers musicaux (/srv/medias/music) - videos
strRépertoire partagé des fichiers vidéo (/srv/medias/videos) - incoming
strRépertoire partagé entrant (/srv/medias/incoming accès écriture) - incomingMusic
strRépertoire partagé entrant (/srv/medias/incoming/music accès écriture) - incomingVideos
strRé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;};⚙ darkone.system.testing
Section intitulée « ⚙ darkone.system.testing »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
boolMode test autonome — ignore la config propre à workDir (nix.pub, harmonia.pub) et neutralise les services externes - tlsCert
nullOr pathCertificat auto-signé (PEM) fourni par le harnais de test pour stuber ACME. Jamais un chemin tests/ intégré au framework. - tlsKey
nullOr pathClé privée (PEM) associée à tlsCert.
darkone.system.testing = { standalone = false; tlsCert = null; tlsKey = null;};