Aller au contenu

Les modules

Les fonctionnalités du framework sont fournies sous forme de modules NixOS haut-niveau, regroupés par catégorie sous dnf/modules/ et documentés dans la référence des modules.

  • standard : système, console, graphic, service, admin, user.
  • mixin : macro-modules composant des profils d’hôtes et compléments de profils utilisateurs.
  • home : modules et profils Home Manager 🡕.
  1. Choisir la catégorie (dnf/modules/standard/<catégorie>/ ou mixin).
  2. Écrire l’en-tête du fichier selon les règles (voir headers de code).
  3. Déclarer les options puis la config du module.
  4. Régénérer (just generate) et tester avant de commiter.

Pour un service auto-hébergé (web UI, API, stockage…), suivre le guide dédié Créer un module de service : reverse proxy, persistance, pare-feu, SSO Kanidm et activation par hôte.

Un module DNF suit le patron NixOS classique : un en-tête, un bloc options et un bloc config activé par enable.

dnf/modules/standard/service/hello.nix
{ lib, config, ... }:
let
cfg = config.darkone.service.hello;
in
{
options.darkone.service.hello = {
enable = lib.mkEnableOption "Enable the hello service";
port = lib.mkOption {
type = lib.types.port;
default = 8080;
description = "Listening port.";
};
};
config = lib.mkIf cfg.enable {
# ... configuration réelle, activée seulement si enable = true
};
}

Toutes les options du framework vivent sous l’espace de noms darkone :

darkone.<catégorie>.<nom>.<option>
  • darkone.service.immich.enable : un service.
  • darkone.system.security.level : un réglage système.
  • darkone.host.desktop.enable : un profil d’hôte (mixin).

dnfLib (défini dans dnf/lib/) fournit les fonctions transverses, injectées dans chaque module. Les plus utiles :

HelperRôle
extractServiceParams / buildServiceParamsLire les paramètres d’un service (domaine, titre, icône…).
mkOidcContext / mkKanidmEndpointsBrancher un service au SSO Kanidm (OIDC).
mkInternalFirewallOuvrir des ports sur l’interface interne uniquement.
findHost / findService / isGateway / isHcsInterroger la topologie réseau.
mkHomepageSectionDéclarer l’entrée du portail.
mkIsActiveActiver une règle de sécurité selon niveau/catégorie.

Un service déclare sa topologie dans dnf/config/modules.nix (et non dans son .nix) : reverse proxy, unicité par zone, accès externe, activation automatique par profil d’hôte.

dnf/config/modules.nix
adguardhome = {
uniquePerZone = true;
activation.profiles.gateway.triggers.keys.adguardhome = [ "enable" ];
};
DrapeauDéfautEffet
reverseProxytrueLe service est exposé via Caddy.
uniquePerZonefalseUn seul exemplaire admis par zone.
externalAccessfalseJoignable hors zone (via le HCS).
require[ ]Services à activer sur le même hôte (sinon erreur de génération).
activation.profiles.<profil>Activé d’office sur les hôtes d’un profil.

Chaque dossier de modules possède un default.nix qui importe ses fichiers. Il est généré par just generate (liste des imports) → ne pas l’éditer.

Fenêtre de terminal
just generate # régénère les default.nix + var/generated/