{
  lib,
  dnsLib,
  ...
}:
let
  SOA = {
    nameServer = "ns";
    adminEmail = "dns@malka.sh";
    serial = 0;
  };
  NS = [
    "ns1"
    "ns2"
  ];

  # 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 (
        recursiveUpdate dnsLib.types.zone { getSubModules = [ getSubmodulesCustom ]; }
      );
      default = { };
    };
  };

}