Aller au contenu

Modules de service

AdGuard Home entièrement configuré pour passerelle / routeur local.

  • enable bool Active le service adguardhome local
darkone.service.adguardhome.enable = false;

Intelligence artificielle locale (open-webui + ollama + llms).

  • enable bool Activer le service d’IA local
darkone.service.ai.enable = false;

Services audio : alsa, pulse (pas jack pour le moment). Ajoute automatiquement les utilisateurs au groupe audio quand il est activé.

  • enable bool Activer le système sonore
darkone.service.audio.enable = false;

dnsmasq pré-configuré pour la passerelle / routeur local.

  • enable bool Active le service dnsmasq local
darkone.service.dnsmasq.enable = false;

Un module LaSuite Docs entièrement configuré.

  • enable bool Activer le service de documentation local
  • s3Host str Nom d’hôte du backend S3
  • s3Port port Port du backend S3
  • s3Bucket str Nom du bucket S3 pour le stockage des documents
darkone.service.docs = {
enable = false;
s3Host = "127.0.0.1";
s3Port = dnfConfig.network.ports.garage;
s3Bucket = "docs";
};

Client web Element pour le service matrix local.

  • enable bool Activer le service element local
darkone.service.element.enable = false;

Module fail2ban spécifique à DNF.

  • enable bool Activer fail2ban avec les spécificités DNF
darkone.service.fail2ban.enable = false;

Une forge git forgejo entièrement configurée.

  • enable bool Active le service forgejo local
darkone.service.forgejo.enable = false;

Un service Garage S3 local entièrement configuré.

Fournit un stockage d’objets interne compatible S3 accessible uniquement sur 127.0.0.1:3900.

  • enable bool Activer le service Garage S3 local
  • srvPort port Port de l’API S3 exposé sur l’IP interne
  • s3Region str Nom de la région S3 (doit correspondre à la config du consommateur)
  • capacity str Indication de capacité de stockage du nœud transmise à garage layout assign. Utilisée uniquement au premier démarrage pour l’initialisation du layout ; n’agit pas comme un quota strict sur le système de fichiers sous-jacent. Suffixes pris en charge : B, KB, MB, GB, TB, PB.
darkone.service.garage = {
enable = false;
srvPort = srvPort;
s3Region = s3Region;
capacity = "500GB";
};

GeneWeb — Service de généalogie puissant.

  • enable bool Activer le service de généalogie GeneWeb local
  • enablePasswords bool Activer les mots de passe sops (non recommandé)
darkone.service.geneweb = {
enable = false;
enablePasswords = false;
};

Harmonia : serveur local de cache binaire Nix (sert le /nix/store de cet hôte).

Expose les chemins du store construits / réalisés localement sur HTTP simple (port 5000), signés avec la clé de cache binaire déployée sur tout le réseau. À activer par hôte depuis usr/config.yaml (services.harmonia), comme tout autre service DNF.

  • enable bool Active un serveur de cache binaire Nix Harmonia local
darkone.service.harmonia.enable = false;

Un service headscale entièrement configuré pour HCS.

  • enable bool Activer le service DNF headscale
  • enableGRPC bool Ouvrir le port TCP GRPC
darkone.service.headscale = {
enable = false;
enableGRPC = false;
};

Un Home Assistant avec certains plugins (en cours).

  • enable bool Activer home-assistant
darkone.service.home-assistant.enable = false;

Tableau de bord de page d’accueil configuré dynamiquement pour votre réseau local.

  • enable bool Activer le tableau de bord de la page d’accueil + httpd + hôte
  • protect bool Restreindre la page d’accueil aux utilisateurs Kanidm authentifiés (oauth2-proxy forward auth)
  • localServices listOf attrs Services à ajouter dans la section Applications locales
  • globalServices listOf attrs Services communs du réseau & accessibles publiquement
  • remoteServices listOf attrs Services à ajouter dans la section Applications distantes
  • bookmarks listOf attrs Remplacer les favoris par défaut (liens)
  • widgets listOf attrs Remplacer les widgets par défaut
darkone.service.homepage = {
enable = false;
protect = true;
localServices = [ ];
globalServices = [ ];
remoteServices = [ ];
bookmarks = [ ];
widgets = [ ];
};

Service DNF Kanidm (gestionnaire d’identités).

  • enable bool Activer le SSO local avec Kanidm
  • oauth2 attrs Modèles de clients OAuth2/OIDC fournis par les modules de services. Kanidm provisionne un client pour chaque entrée correspondante dans network.services, avec clientId = dnfLib.oauth2ClientName.
    • enable bool Whether to provision OAuth2 clients for this template.
    • clientName nullOr str Override the kanidm client name. Defaults to dnfLib.oauth2ClientName.
    • displayName str Human-readable name shown on the kanidm consent screen.
    • imageFile path Application icon. Re-uploaded on every kanidm-provision run.
    • redirectPaths listOf str OAuth2 redirect paths (one per accepted callback URL).
    • landingPath str Auto-connect entry point path on the service.
    • enableLegacyCrypto bool Allow legacy JWT signing algorithms (eg. RS256).
    • allowInsecureClientDisablePkce bool Disable PKCE on the client (only for clients that do not implement it).
    • preferShortUsername nullOr bool Use the short username (no domain) in the preferred_username claim.
    • extra attrs Extra attributes merged into the provisioned client (claimMaps, etc).
darkone.service.idm = {
enable = false;
oauth2.enable = true;
oauth2.clientName = null;
oauth2.displayName = null;
oauth2.imageFile = null;
oauth2.redirectPaths = [ ];
oauth2.landingPath = "/";
oauth2.enableLegacyCrypto = false;
oauth2.allowInsecureClientDisablePkce = false;
oauth2.preferShortUsername = null;
oauth2.extra = { };
};

Service Immich (gestion de photos) entièrement configuré.

  • enable bool Activer le service immich local
  • enableMachineLearning bool Activer les fonctionnalités d’apprentissage automatique (reconnaissance faciale, détection d’objets)
  • enableRedis bool Activer Redis pour la mise en cache (recommandé pour les performances)
darkone.service.immich = {
enable = false;
enableMachineLearning = false;
enableRedis = false;
};

Un serveur jellyfin entièrement configuré.

  • enable bool Activer le service jellyfin
darkone.service.jellyfin.enable = false;

Un service jitsi-meet entièrement configuré.

  • enable bool Activer le service jitsi-meet local
darkone.service.jitsi-meet.enable = false;

Loki + Alloy, statistiques HTTP avec Grafana.

  • enable bool Déploie le serveur Loki + le datasource Grafana (co-localisé avec Grafana).
  • isClient bool Déploie Alloy pour collecter les logs d’accès Caddy locaux.
  • retentionTime str Durée de rétention des logs dans Loki (30 jours par défaut).
darkone.service.loki = {
enable = config.darkone.service.monitoring.enable;
isClient = config.services.caddy.enable && hasMonitoringHost;
retentionTime = "720h";
};

Service matrix (synapse) DNF avec les ponts mautrix.

Les ponts (whatsapp, signal, telegram, messenger, discord) sont utilisables par tous les comptes locaux : chaque utilisateur lie son propre compte distant en dialoguant avec le bot du pont (@whatsappbot, @signalbot, … puis login) ; les sessions sont isolées par utilisateur. Les network.matrix.admins déclarés administrent les ponts et le serveur (cf. « Administrateurs » ci-dessous).

Le double puppeting utilise la méthode officielle appservice (https://docs.mau.fi/bridges/general/double-puppeting.html 🡕) : un token appservice doublepuppet partagé permet aux ponts d’envoyer les messages d’origine distante sous le vrai compte matrix de l’utilisateur. Secrets sops requis : mautrix-doublepuppet-as-token et mautrix-doublepuppet-hs-token (openssl rand -hex 32 chacun).

Les tokens as/hs de chaque pont sont fournis par sops plutôt que générés automatiquement : le fichier de registration devient une pure fonction des secrets, donc réinitialiser le répertoire d’état d’un pont n’invalide jamais la registration chargée par synapse (sinon il faudrait purger la registration + redémarrer synapse, ce qui produirait des erreurs « as_token was not accepted »).

La fédération est configurable via darkone.service.matrix.federation :

  • enable = false : bloque toute la fédération (liste blanche de domaines vide).
  • enable = true; whitelist = [ ] : fédération ouverte avec tous les serveurs.
  • enable = true; whitelist = [ "ami.org" ] : liste blanche (entrant + sortant).

La découverte reste verrouillée quoi qu’il arrive (absence des salons dans les répertoires distants, profils privés sur la fédération), donc le réseau est accessible mais non consultable.

L’auto-inscription des amis (friendRegistration.enable) ouvre des comptes locaux par mot de passe, contrôlés par token, en parallèle des utilisateurs OIDC Kanidm. Émettre un token sur l’hôte avec sudo dnf-mas manage issue-user-registration-token.

Toute l’authentification est déléguée à Matrix Authentication Service, toujours : Element X, la connexion par QR et le portail self-service /account n’existent que là, et l’auth de synapse elle-même est dépréctée en amont (MSC3861). Kanidm reste la source d’identité : MAS est le client OIDC à la place de synapse, et synapse se contente de demander à MAS d’introspecter les tokens. Servi sur le même vhost : MAS possède la racine + les endpoints d’auth compat, synapse conserve /_matrix/* et /_synapse/* ; la découverte côté client est automatique (synapse sert auth_metadata lui-même), donc pas de modification well-known.

Secrets sops requis, tous créés par just configure-admin-host : mas-encryption-secret, mas-synapse-secret et mas-rsa-private-key.

dnf-mas (root) encapsule mas-cli pour l’administration côté hôte : tokens d’inscription, promote-admin, register-user, syn2mas. MAS tourne avec DynamicUser et lit ses secrets via les credentials systemd, qui n’existent pas en dehors de l’unité en cours ; le wrapper reconstitue un répertoire de credentials équivalent à partir des fichiers sops, donc il fonctionne que le service soit en marche ou à l’arrêt (syn2mas nécessite l’arrêt).

mas-cli n’agit jamais ne liste pas : activer le service matrix-admin pour le côté lecture (comptes, appareils, sessions), il parle les deux APIs admin.

network.matrix.admins (parties locales) est la source déclarative unique des deux administrations, appliquée au rebuild sans écriture en base :

  • ponts : niveau admin dans chaque map permissions mautrix ;
  • serveur : policy.data.admin_users, que la policy MAS fournie convertit en les scopes urn:mas:admin et urn:synapse:admin:* (API admin MAS, API admin synapse, connexion à l’IU matrix-admin).
  • enable bool Activer le service matrix (synapse)
  • federation.enable bool Autoriser la fédération serveur-à-serveur. False bloque toute la fédération.
  • federation.whitelist listOf str Vide = fédérer avec tous les serveurs ; non vide = uniquement ces domaines (entrant + sortant).
  • matrixRtc.enable bool Activer le backend MatrixRTC (LiveKit SFU) pour les appels de groupe Element Call.
  • friendRegistration.enable bool Autoriser les amis à s’auto-inscrire avec un token d’invitation (contrôlé par token).
  • bridges.whatsapp.enable bool Pont Mautrix WhatsApp (connexion par QR code).
  • bridges.signal.enable bool Pont Mautrix Signal (connexion par QR code).
  • bridges.telegram.enable bool Pont Mautrix Telegram (connexion par numéro de téléphone).
  • bridges.messenger.enable bool Pont Mautrix Facebook Messenger (connexion par cookies).
  • bridges.discord.enable bool Pont Mautrix Discord (connexion par QR code, expérimental).
darkone.service.matrix = {
enable = false;
federation.enable = false;
federation.whitelist = [ ];
matrixRtc.enable = false;
friendRegistration.enable = false;
bridges.whatsapp.enable = true;
bridges.signal.enable = true;
bridges.telegram.enable = true;
bridges.messenger.enable = true;
bridges.discord.enable = false;
};

network.matrix.admins (parties locales) est la source déclarative unique des deux administrations, appliquée au rebuild sans écriture en base :

  • ponts : niveau admin dans chaque map permissions mautrix ;
  • serveur : policy.data.admin_users, que la policy MAS fournie convertit en les scopes urn:mas:admin et urn:synapse:admin:* (API admin MAS, API admin synapse, connexion à l’IU matrix-admin).
  • enable bool Activer le service matrix (synapse)
  • federation.enable bool Autoriser la fédération serveur-à-serveur. False bloque toute la fédération.
  • federation.whitelist listOf str Vide = fédérer avec tous les serveurs ; non vide = uniquement ces domaines (entrant + sortant).
  • matrixRtc.enable bool Activer le backend MatrixRTC (LiveKit SFU) pour les appels de groupe Element Call.
  • friendRegistration.enable bool Autoriser les amis à s’auto-inscrire avec un token d’invitation (contrôlé par token).
  • bridges.whatsapp.enable bool Pont Mautrix WhatsApp (connexion par QR code).
  • bridges.signal.enable bool Pont Mautrix Signal (connexion par QR code).
  • bridges.telegram.enable bool Pont Mautrix Telegram (connexion par numéro de téléphone).
  • bridges.messenger.enable bool Pont Mautrix Facebook Messenger (connexion par cookies).
  • bridges.discord.enable bool Pont Mautrix Discord (connexion par QR code, expérimental).
darkone.service.matrix = {
enable = false;
federation.enable = false;
federation.whitelist = [ ];
matrixRtc.enable = false;
friendRegistration.enable = false;
bridges.whatsapp.enable = true;
bridges.signal.enable = true;
bridges.telegram.enable = true;
bridges.messenger.enable = true;
bridges.discord.enable = false;
};

Gestion de recettes Mealie

  • enable bool Activer le service mealie
darkone.service.mealie.enable = false;

Un service MinIO S3 local entièrement configuré. (wip)

Fournit un backend de stockage d’objets compatible S3 interne accessible uniquement sur 127.0.0.1:9000. L’interface Web de la console s’exécute sur 127.0.0.1:9001 pour l’administration et le débogage.

  • enable bool Activer le service MinIO S3 local
darkone.service.minio.enable = false;

Module de supervision : tableaux de bord Grafana + exportateur par nœud.

  • enable bool Activer la supervision avec prometheus, grafana et l’exportateur de nœud
  • isNode bool Est un nœud de supervision
  • kioskTarget str Cible (relative, sans /) pour la redirection automatique vers Grafana depuis la racine du domaine de supervision. Remplacée par le module Loki lorsqu’il est actif pour pointer vers un tableau de bord d’accueil multi-sources.
darkone.service.monitoring = {
enable = false;
isNode = lib.hasAttrByPath [ "features" "monitoring-node" ] host;
kioskTarget = "d/dnf-monitoring-home/home?kiosk";
};

Service Nextcloud entièrement configuré.

  • enable bool Activer le service nextcloud local

  • adminUser str Nom d’utilisateur administrateur pour Nextcloud

  • enableSsoRedirect bool Envoyer les utilisateurs directement à Kanidm au lieu d’afficher le formulaire de connexion Nextcloud (user_oidc allow_multiple_user_backends). Économise un clic à chaque connexion, y compris le Login Flow v2 du client desktop.

    Sans effet lorsque Kanidm est absent du réseau.

  • plugins listOf (enum (appstoreApps ++ shippedToggleableApps)) Applications Nextcloud à activer. Seuls calendar et contacts sont activés par défaut ; Talk (spreed), le tableau de bord, le flux d’activité, les photos et toutes les autres applications restent désactivés tant qu’ils ne figurent pas ici.

    user_oidc est requis pour le SSO Kanidm et est inclus de force indépendamment de cette liste.

darkone.service.nextcloud = {
enable = false;
adminUser = "admin";
enableSsoRedirect = true;
plugins = [ ];
};

Serveur + client NFS pour les partages domestiques.

  • enable bool Active le serveur NFS DNF (éviter l’activation manuelle)
  • serverDomain str FQDN du serveur NFS
darkone.service.nfs = {
enable = hasServer && (isServer || isClient);
serverDomain = "nfs";
};

Proxy de cache binaire Nix par zone (nginx proxy_cache).

Met en cache le cache Nix public (cache.nixos.org) sur la passerelle de la zone afin qu’un déploiement à l’échelle de la flotte tire chaque closure du WAN une seule fois, puis la sert sur le LAN à tous les autres hôtes. Les chemins construits localement sont servis directement par harmonia (voir harmonia.nix) ; ce proxy ne se place jamais devant harmonia.

  • enable bool le proxy de cache binaire Nix par zone (nginx devant cache.nixos.org)
  • maxSize str Taille maximale du cache sur disque ; au-delà, nginx évince les entrées les moins récemment utilisées.
  • roaming bool Hôte nomade (portable déplacé entre zones) : remplacer les substituters épinglés à la zone par les noms neutres de zone que le DNS de chaque zone résout vers ses propres services de cache. En dehors de toute zone DNF, les noms répondent NXDOMAIN instantanément et Nix retombe sur cache.nixos.org.
darkone.service.nix-cache = {
enable = false;
maxSize = "40g";
roaming = false;
};

Un wiki outline complètement configuré.

  • enable bool Activer le service outline local
darkone.service.outline.enable = false;

OxiCloud — Cloud souverain rapide (stockage de fichiers, WebDAV, CalDAV et CardDAV).

  • enable bool Activer le service OxiCloud local
darkone.service.oxicloud.enable = false;

Relais SMTP Postfix.

  • enable bool Activer le relais SMTP Postfix
darkone.service.postfix.enable = false;

Imprimantes et scanners.

  • enable bool Paquets utiles par défaut
  • loadAll bool Imprimantes et scanners complets
  • enableScanners bool Activer les scanners
  • enableHpPrinters bool Imprimantes HP uniquement
  • enableManualInstall bool Installation manuelle des pilotes
darkone.service.printing = {
enable = false;
loadAll = false;
enableScanners = false;
enableHpPrinters = false;
enableManualInstall = false;
};

Serveur de supervision Prometheus avec escalade déclarative via Alertmanager.

  • enable bool Activer le serveur de métriques + d’alerting Prometheus

  • retentionTime str Durée de rétention des métriques Prometheus

  • alerting.enable bool Activer Alertmanager (activé par défaut une fois les salons Matrix d’alerte provisionnés)

  • alerting.matrix.enable bool Diffuser les alertes dans les salons Matrix via le bot matrix-alertmanager

  • alerting.matrix.userId str ID utilisateur Matrix du bot d’alerte (par défaut depuis network.matrix.bot)

  • alerting.matrix.warningsRoom str ID du salon Matrix pour les avertissements (par défaut depuis network.matrix.warningsRoom)

  • alerting.matrix.incidentsRoom str ID du salon Matrix pour les incidents (par défaut depuis network.matrix.incidentsRoom)

  • alerting.email.enable bool Envoyer aussi les alertes critiques par mail (via le relais Postfix local)

  • alerting.email.to str Destinataire des mails d’alerte critique

  • alerting.network.enable bool Sonder l’atteignabilité réseau (passerelle/tailnet/DNS) avec blackbox_exporter

  • alerting.network.internetProbeTargets listOf str Adresses IP externes que la passerelle de zone ping pour détecter une coupure WAN. Si toutes échouent, ZoneInternetDown se déclenche et inhibe les alertes de down (erronées) des hôtes accessibles uniquement via le WAN (par ex. le HCS). Liste vide = désactivé.

  • alerting.network.httpProbeUrls listOf str URLs HTTP(S) sondées pour la vivacité (ServiceEndpointDown) et l’expiration du certificat TLS (CertificateExpiringSoon/Critical). Vide par défaut : lister les endpoints web publics à surveiller. Les redirections vers un login SSO (3xx) sont comptées comme up ; l’expiration du certificat est lue depuis la poignée de main TLS quelle que soit la réponse HTTP.

  • alerting.silenceOnRebuild bool Émettre le flag dnf-maintenance (textfile collector) afin que les reconstructions inhibent les alertes d’un nœud

  • alerting.thresholds attrs Remplacer les seuils d’alerte de ressources (voir les valeurs par défaut dans dnf/lib/alerts.nix)

  • alerting.silences listOf submodule Alertes connues et acceptées qui ne doivent jamais notifier. Chaque entrée devient une route Alertmanager vers le récepteur null : l’alerte se déclenche toujours et reste visible dans les interfaces Prometheus/Alertmanager/Grafana, elle ne parvient simplement plus à Matrix ni par mail.

    Déclaré sur l’hôte qui fait tourner Prometheus, car c’est là que les règles et routes de la zone sont générées. Un module consommateur à l’échelle de la flotte (usr/modules/alerts.nix) est l’endroit pratique : il est importé partout et ne prend effet que là où Prometheus tourne.

    • alert str Nom de l’alerte à mettre en sourdine (label alertname). Toujours restreint, afin que les niveaux de gravité voisins restent armés.
    • host nullOr str Restreindre le silence à un seul hôte. Null met en sourdine l’alerte pour toute la flotte.
    • matchers attrs Étiquettes de correspondance exacte supplémentaires, combinées en ET avec les autres (par ex. le point de montage ou le device visé par l’alerte).
    • reason str Pourquoi cette alerte est acceptée, et ce qui rendrait le silence supprimable.
darkone.service.prometheus = {
enable = false;
retentionTime = "30d";
alerting.enable = roomsReady;
alerting.matrix.enable = true;
alerting.matrix.userId = "@alertbot:domain.tld";
alerting.matrix.warningsRoom = "!warnings:domain.tld";
alerting.matrix.incidentsRoom = "!incidents:domain.tld";
alerting.email.enable = true;
alerting.email.to = "admin@${network.domain}";
alerting.network.enable = true;
alerting.network.internetProbeTargets = [ ];
alerting.network.httpProbeUrls = [ ];
alerting.silenceOnRebuild = true;
alerting.thresholds = { };
alerting.silences = [ ];
alerting.silences.alert = "DiskSpaceLow";
alerting.silences.host = "srv-main";
alerting.silences.matchers = { };
alerting.silences.reason = null;
};

Module de sauvegarde Restic : serveur REST + cibles de sauvegarde par hôte.

Exemple (configuration machine) :

darkone.service.restic = {
enable = true;
targets = [
{ name = "main"; root = "rest:http://restic.my-zone.my-domain.tld:8888";
zone = "ag"; categories = [ "system" "nfs" ]; }
];
};

Disposition du dépôt par cible : un dépôt par catégorie, nommé d’après celle-ci.

<root>/<hostname>/system <- catégorie "system" (/ hors exclus)
<root>/<hostname>/nfs <- catégorie "nfs" (/srv/nfs/<...>)
<root>/<hostname>/medias <- catégorie "medias" (/srv/medias/<...>)
  • enable bool Activer le client de sauvegarde restic
  • enableDryRun bool Mode simulation
  • enableWaitRemoteFs bool Lancer les sauvegardes uniquement après remote-fs.target
  • enableServer bool Activer le serveur REST restic
  • listenAll bool Écouter sur 0.0.0.0 (clients hors site)
  • serverDataDir str Répertoire de stockage local du serveur REST (dépôts de tous les hôtes)
  • targets listOf submodule Destinations de sauvegarde pour cet hôte (chemin local ou URL REST)
    • name str Identifiant de cible, utilisé dans les noms de sauvegarde/unité (<category>-<name>)
    • root str Racine du dépôt : chemin local ou URL REST
    • zone str Zone sélectionnant la phrase de passe du dépôt (restic-password-<zone>)
    • categories listOf ( enum [ "system" "nfs" "medias" ] ) Quoi sauvegarder dans cette cible
  • nfsPaths listOf str Répertoires NFS (/srv/nfs/<xxx>) inclus dans la catégorie « nfs »
  • mediasPaths listOf str Répertoires Médias (/srv/medias/<xxx>) inclus dans la catégorie « medias »
darkone.service.restic = {
enable = false;
enableDryRun = false;
enableWaitRemoteFs = false;
enableServer = false;
listenAll = false;
serverDataDir = "/mnt/backup/restic";
targets = [ ];
targets.name = "main";
targets.root = "rest:http://restic.${zone.domain}:${toString srvPort}";
targets.zone = zone.name;
targets.categories = [ ];
nfsPaths = [ ];
mediasPaths = [ ];
};

Un moteur de recherche durci et entièrement configuré.

  • enable bool Activer le proxy de recherche local
darkone.service.searx.enable = false;

Pistes partagées SuperTuxKart, servies via NFS.

  • enable bool Exporter les pistes partagées SuperTuxKart (éviter d’activer manuellement)
  • enableClient bool Monter les pistes partagées SuperTuxKart de la zone
  • serverName nullOr str Hostname du serveur hébergeant les pistes, par défaut l’hôte stk de la zone
darkone.service.stk = {
enable = stk.isServer;
enableClient = false;
serverName = stk.server;
};

Service client Tailscale pour le HCS.

  • enable bool Activer le client tailscale pour connecter le HCS
  • isGateway bool Ce nœud tailscale est une passerelle de sous-réseau
  • isExitNode bool Configurer ce client comme nœud de sortie
  • selfHeal.enable bool Chien de garde : détecter la déconnexion de headscale et redémarrer tailscaled.
  • autoPauseOnLan.enable bool Client nomade : mettre en pause tailscale (down) tant qu’il est branché sur un LAN d’une zone DNF connue, le reprendre ailleurs. Clients NetworkManager non-passerelles uniquement.
darkone.service.tailscale = {
enable = false;
isGateway = false;
isExitNode = false;
selfHeal.enable = true;
autoPauseOnLan.enable = false;
};

Serveur Coturn (matrix).

Ajouter des entrées DNS pour optimiser :

Type,Name,Priority,Pds,Port,Target
SRV,_stun._udp,0,0,3478,turn.mydomain.tld
SRV,_stun._tcp,0,0,3478,turn.mydomain.tld
SRV,_turn._udp,0,0,3478,turn.mydomain.tld
SRV,_turn._tcp,0,0,3478,turn.mydomain.tld
SRV,_turns._tcp,0,0,5349,turn.mydomain.tld
  • enable bool Activer le service turn local (visio)
darkone.service.turn.enable = false;

Un serveur vaultwarden entièrement configuré (wip).

  • enable bool Activer le service Vaultwarden local
  • enableSmtp bool Activer SMTP pour envoyer des emails (recommandé)
darkone.service.vaultwarden = {
enable = false;
enableSmtp = true;
};