Architecture du projet
Le framework est organisé en couches : chaque niveau rend service au niveau supérieur, du système de base jusqu’aux profils d’hôtes et d’utilisateurs.
Organisation des fichiers
Section intitulée « Organisation des fichiers »La structure complète et les couches d’abstraction sont décrites dans la présentation du projet.
dnf/: le framework : modules, configuration Home Manager, librairies.usr/: le projet local (en écriture) : configuration, secrets, machines.var/generated/: fichiers générés (ne pas éditer à la main).src/generator/: sources du générateur (Rust).doc/: cette documentation.
Les modules de référence
Section intitulée « Les modules de référence »Les modules prêts à l’emploi sont documentés dans la référence des modules, classés par catégorie (système, service, sécurité, console, graphic, admin, user, mixin, home).
Les couches d’abstraction
Section intitulée « Les couches d’abstraction »Chaque niveau s’appuie sur le précédent : le système de base sert les modules, qui composent les profils, qui définissent les hôtes et les utilisateurs.
- Structure complète des fichiers : arborescence détaillée.
- Schéma des couches : du système aux profils.
| Couche | Où | Rôle |
|---|---|---|
| Modules | dnf/modules/standard/ | Briques unitaires (un service, un réglage système). |
| Mixins | dnf/modules/mixin/ | Macro-modules : profils d’hôtes, compléments de profils. |
| Home | dnf/home/ | Modules et profils Home Manager 🡕 (utilisateurs). |
| Librairie | dnf/lib/ | Helpers partagés (dnfLib) : réseau, OIDC, pare-feu, sécurité… |
| Génération | src/generator/ | Transforme etc/config.yaml → var/generated/. |
Framework vs projet local
Section intitulée « Framework vs projet local »Le framework (dnf/) est réutilisable et peu modifié ; le projet (usr/)
le surcharge sans le toucher.
usr/modules/reflètednf/modules/: un fichier de même chemin surcharge ou complète le module du framework.usr/home/reflètednf/home/pour les profils et modules utilisateur.usr/machines/<hôte>/porte le matériel (hardware-configuration.nix,disko.nix) et les réglages spécifiques.usr/secrets/contient les secrets chiffrés (sops).
Arguments injectés dans les modules
Section intitulée « Arguments injectés dans les modules »Les modules DNF reçoivent, en plus des arguments NixOS standards, des arguments
spécifiques via specialArgs (le générateur et flake.nix les alimentent) :
| Argument | Contenu |
|---|---|
config, lib, pkgs | Arguments NixOS standards. |
dnfLib | Helpers DNF partagés (voir Modules). |
dnfConfig | Configuration globale (ports réseau, valeurs par défaut). |
host | L’hôte courant : hostname, users, services, features, profile. |
hosts | La liste de tous les hôtes du réseau. |
network | Topologie réseau : zones, domaine, services. |
zone | La zone de l’hôte courant. |
workDir | Racine du projet (chemins absolus). |
Surcharges générées (overlays)
Section intitulée « Surcharges générées (overlays) »Certaines valeurs n’ont rien à faire dans etc/config.yaml (manuel) : trop
techniques, ou provisionnées par un outil. Le motif : un script écrit un
fichier var/generated/<x>.nix que l’assembleur dnf/lib/mk-configuration.nix
fusionne dans un argument injecté.
Exemple : just configure-alert-bot écrit var/generated/matrix.nix (identité du
bot d’alerte + ID des salons), fusionné dans network.matrix.* par
recursiveUpdate (le fichier généré l’emporte). Les modules lisent network.matrix
sans savoir d’où il vient.