Self-host your own digital island
1{ config, lib, ... }: 2 3with lib; 4let cfg = config.eilean; 5in { 6 7 options.eilean.dns = { 8 enable = mkEnableOption "dns"; 9 nameservers = mkOption { 10 type = types.listOf types.str; 11 default = [ "ns1" "ns2" ]; 12 }; 13 }; 14 15 config.eilean.services.dns = mkIf cfg.dns.enable { 16 enable = true; 17 zones.${config.networking.domain} = { 18 soa.serial = mkDefault 0; 19 records = builtins.concatMap (ns: [ 20 { 21 name = "@"; 22 type = "NS"; 23 data = ns; 24 } 25 { 26 name = ns; 27 type = "A"; 28 data = cfg.serverIpv4; 29 } 30 { 31 name = ns; 32 type = "AAAA"; 33 data = cfg.serverIpv6; 34 } 35 ]) cfg.dns.nameservers ++ [ 36 { 37 name = "@"; 38 type = "A"; 39 data = cfg.serverIpv4; 40 } 41 { 42 name = "@"; 43 type = "AAAA"; 44 data = cfg.serverIpv6; 45 } 46 47 { 48 name = cfg.domainName; 49 type = "A"; 50 data = cfg.serverIpv4; 51 } 52 { 53 name = cfg.domainName; 54 type = "AAAA"; 55 data = cfg.serverIpv6; 56 } 57 58 { 59 name = "@"; 60 type = "LOC"; 61 data = "52 12 40.4 N 0 5 31.9 E 22m 10m 10m 10m"; 62 } 63 ]; 64 }; 65 }; 66}