Aller au contenu

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.

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 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).

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.

CoucheRôle
Modulesdnf/modules/standard/Briques unitaires (un service, un réglage système).
Mixinsdnf/modules/mixin/Macro-modules : profils d’hôtes, compléments de profils.
Homednf/home/Modules et profils Home Manager 🡕 (utilisateurs).
Librairiednf/lib/Helpers partagés (dnfLib) : réseau, OIDC, pare-feu, sécurité…
Générationsrc/generator/Transforme etc/config.yamlvar/generated/.

Le framework (dnf/) est réutilisable et peu modifié ; le projet (usr/) le surcharge sans le toucher.

  • usr/modules/ reflète dnf/modules/ : un fichier de même chemin surcharge ou complète le module du framework.
  • usr/home/ reflète dnf/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).

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) :

ArgumentContenu
config, lib, pkgsArguments NixOS standards.
dnfLibHelpers DNF partagés (voir Modules).
dnfConfigConfiguration globale (ports réseau, valeurs par défaut).
hostL’hôte courant : hostname, users, services, features, profile.
hostsLa liste de tous les hôtes du réseau.
networkTopologie réseau : zones, domaine, services.
zoneLa zone de l’hôte courant.
workDirRacine du projet (chemins absolus).

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.