{ config, lib, pkgs, ... }: with lib; let cfg = config.services.yggdrasilTinc; in { options = { services.yggdrasilTinc = { enable = mkEnableOption "yggdrasil tinc network"; connect = mkOption { default = true; type = types.bool; description = '' Connect to central server ''; }; useDNS = mkOption { default = true; type = types.bool; description = '' Use heimdallr as primary dns server ''; }; name = mkOption { default = config.networking.hostName; type = types.str; description = '' Node identifier ''; }; interfaceConfig = mkOption { default = {}; description = '' Additional configuration for the generated network interface ''; }; }; }; config = mkIf cfg.enable { services.customTinc.networks."yggdrasil" = { inherit (cfg) name interfaceConfig; debugLevel = 2; hosts = import ../../yggdrasil/hosts.nix; interfaceType = "tap"; extraConfig = '' Mode = switch PingTimeout = 30 ${optionalString cfg.connect "ConnectTo = ymir"} ''; }; }; }