From 5424d9f99428a2be6b2682b1129bf6d5df104304 Mon Sep 17 00:00:00 2001 From: Julien Malka Date: Sun, 25 Aug 2024 12:13:35 +0200 Subject: [PATCH] feat(dns): add defaults to each zone through the module system --- modules/dns/default.nix | 51 +++++++++++++++++++++++------------------ profiles/base.nix | 6 ----- 2 files changed, 29 insertions(+), 28 deletions(-) diff --git a/modules/dns/default.nix b/modules/dns/default.nix index 62fcecf..f4ba83d 100644 --- a/modules/dns/default.nix +++ b/modules/dns/default.nix @@ -24,53 +24,60 @@ let "ns1" "ns2" ]; - defaults = { - inherit SOA NS; - subdomains = { - ns1 = { - A = [ lib.snowfield.router.ips.public.ipv4 ]; - AAAA = [ lib.snowfield.router.ips.public.ipv6 ]; - }; - ns2 = { - A = [ lib.snowfield.akhaten.ips.public.ipv4 ]; - AAAA = [ lib.snowfield.akhaten.ips.public.ipv6 ]; + + # Set some defaults for a zone + getSubmodulesCustom = + inputs@{ name, ... }: + lib.recursiveUpdate ((lib.head dnsLib.types.zone.getSubModules) ({ inherit name; } // inputs)) { + config = { + SOA = lib.mkDefault SOA; + NS = lib.mkDefault NS; + subdomains = { + ns1 = lib.mkDefault { + A = [ lib.snowfield.router.ips.public.ipv4 ]; + AAAA = [ lib.snowfield.router.ips.public.ipv6 ]; + }; + ns2 = lib.mkDefault { + A = [ lib.snowfield.akhaten.ips.public.ipv4 ]; + AAAA = [ lib.snowfield.akhaten.ips.public.ipv6 ]; + }; + }; }; }; - }; + in with lib; { - options = { machine.meta.zones = mkOption { - type = types.attrsOf dnsLib.types.zone; + type = types.attrsOf ( + recursiveUpdate dnsLib.types.zone { getSubModules = [ getSubmodulesCustom ]; } + ); default = { }; }; }; config = let - # list of domains that are defined in the current configuration throught virtualHosts - domains = lib.dns.domainsFromConfiguration allowedDomains config; + # list of domains that are defined in the current configuration through virtualHosts + domains = dns.domainsFromConfiguration allowedDomains config; # AttrSet domain -> { records } recordsPerDomain = map ( domain: mapAttrs' ( n: v: - nameValuePair (lib.dns.domainToZone allowedDomains n) ( + nameValuePair (dns.domainToZone allowedDomains n) ( let - subdomain = lib.dns.getDomainPrefix allowedDomains n; + subdomain = dns.getDomainPrefix allowedDomains n; in - lib.recursiveUpdate ( - if elem subdomain allowedDomains then v else { subdomains."${subdomain}" = v; } - ) defaults + if elem subdomain allowedDomains then v else { subdomains."${subdomain}" = v; } ) - ) (lib.dns.domainToRecords domain cfg (isVPNDomain domain)) + ) (dns.domainToRecords domain cfg (isVPNDomain domain)) ) domains; in { - machine.meta.zones = lib.mkMerge recordsPerDomain; + machine.meta.zones = mkMerge recordsPerDomain; }; } diff --git a/profiles/base.nix b/profiles/base.nix index a6af2fa..88337ad 100644 --- a/profiles/base.nix +++ b/profiles/base.nix @@ -82,12 +82,6 @@ "ipv4" ] config.machine.meta.ips) { - SOA = { - nameServer = "ns"; - adminEmail = "dns@malka.sh"; - serial = 0; - }; - subdomains.${config.networking.hostName} = { A = [ config.machine.meta.ips.vpn.ipv4 ]; };