{ config, lib, pkgs, r6d, ... }: let inherit (lib) mkEnableOption mkTextOption mkIf mkMerge mkOption singleton types; # TODO: Anglish :) machineOptions = types.submodule { options = { configuration-flags = { #enable = mkEnableOption "Génération de la configuration d'une machine."; awesome = mkEnableOption "Profil pour activer le gestionnaire de fenêtre awesome."; auto-upgrade = mkEnableOption "Profil pour activer les mises à jour automatiques."; cartographie = mkEnableOption "Profil pour activer les outils de gestion de données géographiques."; conception-assistee = mkEnableOption "Profil pour activer les outils de conception électronique & modélisation 3D"; database_postgres = mkEnableOption "Profil pour activer le SGBD PostgreSQL."; developpement = mkEnableOption "Profil pour activer les outils de développement"; developpement-elm = mkEnableOption "Profil pour activer les outils de développement Elm"; developpement-haskell = mkEnableOption "Profil pour activer les outils de développement Haskell"; developpement-java = mkEnableOption "Profil pour activer les outils de développement Java"; developpement-rust = mkEnableOption "Profil pour activer les outils de développement Rust"; docker = mkEnableOption "Profil pour l'utilisation de Docker."; dovecot = mkEnableOption "Profil pour activer le serveur Dovecot."; dns_autorite = mkEnableOption "Profil pour servir les fichiers de zone DNS."; dns_resolveur = mkEnableOption "Profil pour activer un résolveur DNS local."; edition-musique = mkEnableOption "Profil pour la création/édition de musique."; edition-photo = mkEnableOption "Profil pour la création/édition de photos."; edition-video = mkEnableOption "Profil pour la création/édition de video."; elasticsearch = mkEnableOption "Profil pour activer le service elasticsearch."; fail2ban = mkEnableOption "Profil pour activer Fail2ban."; graphical = mkEnableOption "Profil pour activer les applications graphgiques."; hydra-builder = mkEnableOption "Profil pour une machine qui compile pour hydra."; hydra-core = mkEnableOption "Profil pour un serveur hydra."; kibana = mkEnableOption "Profil pour activer le service kibana."; internetSuite = mkEnableOption "Profil pour la suite de logiciels pour Internet."; jetbrains-licensed = mkEnableOption "Profil pour la suite de développement Jetbrains payante (sous-ensemble)."; jeux = mkEnableOption "Profil pour les jeux vidéos."; laptop = mkEnableOption "Profil pour les outils spécifiques aux ordinateurs portables."; locate = mkEnableOption "Profil pour activer la fonction locate."; mailboxes = mkEnableOption "Profil pour stocker les mails dans des boîtes aux lettres."; multimediaSuite = mkEnableOption "Profil pour la suite multimédia."; murmur = mkEnableOption "Profil pour activer un serveur Mumble (murmur)"; nix-serve-server = mkEnableOption "Profil pour que la machine soit un serveur de cache nix."; nixStoreProxyCache = mkEnableOption "Profil pour activer le proxy cahce nginx pour le nix store"; officeSuite = mkEnableOption "Profil pour la suite bureautique"; print = mkEnableOption "Profil pour activer cups & pouvoir imprimer."; pulseaudio = mkEnableOption "Profil pour activer pulseaudio."; rabbitmq = mkEnableOption "Profil pour activer le service de messagerie AMQP."; radicale = mkEnableOption "Profil pour activer le service d'hébergement de calendrier + tâches & contacts."; scanner = mkEnableOption "Profil pour que les scanners soient utilisable."; securitySuite = mkEnableOption "Profil pour la suite de logiciels de sécurité."; smokeping = mkEnableOption "Profil pour activer le monitoring réseau par smokeping."; swap = mkEnableOption "Profil pour que le swap soit activé."; virtualbox = mkEnableOption "Profil pour l'utilisation de VirtualBox."; xmonad = mkEnableOption "Profil pour activer le gestionnaire de fenêtres xmonad."; znc = mkEnableOption "Profil pour activer le relais IRC ZNC."; }; profiles = { # Domaine isDubronetwork = mkEnableOption "Pour distinguer les machines dubronetwork."; isPrunetwork = mkEnableOption "Pour distinguer les machines prunetwork."; # Utilisation machine isDesktopEnvironment = mkEnableOption "Pour indiquer une machine avec interface graphique."; isServer = mkEnableOption "Pour indiquer qu'il s'agit d'un serveur."; isWorkstation = mkEnableOption "Pour indiquer que la machine sert à travailler."; }; ipAddress = mkOption { description = "Adresse IP"; type = lib.types.string; }; nix-serve-server = mkEnableOption "nix-serve server"; nix-serve-client = { enable = mkEnableOption "nix-serve client"; servers = mkOption { default = [ https://cache.nixos.org/ ]; description = "List of nix-serve servers providing binary caches."; type = types.listOf types.str; }; }; tinc = { enable = mkEnableOption "Enable tinc service"; connectToAddress = mkOption { default = ""; example = "192.168.1.1"; description = "External address to connect from another node."; type = lib.types.string; }; vpnAddress = mkOption { example = "192.168.69.69/24"; description = "VPN local node IP address."; type = lib.types.string; }; vpnCidrLength = mkOption { default = 24; example = 24; description = "VPN netmask length."; type = lib.types.int; }; extraConfig = mkOption { default = ""; example = '' Mode = router ConnecTo = bar ''; description = "Configuration supplémentaire pour tinc"; type = lib.types.string; }; }; windowsBoot = { enable = mkEnableOption "Activation du démarrage de Windows par Grub"; drive = mkOption { description = "Lecteur sur lequel est présent le système Windows (au format GRUB)"; type = lib.types.string; default = "hd0,1"; }; }; windowsMount ={ enable = mkEnableOption "Montage de la partition data Windows"; device = mkOption { description = "Lecteur sur lequel est présent le disque de data Windows"; type = lib.types.string; default = "/dev/sda2"; }; }; }; }; in { options = { r6d.machines = mkOption { type = types.attrsOf machineOptions; description = '' Machines directory. ''; }; }; }