Self-host your own digital island
1{ config, lib, ... }: 2 3with lib; 4let cfg = config.eilean; in 5{ 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 = "@"; 32 type = "NS"; 33 data = ns; 34 } 35 { 36 name = ns; 37 type = "AAAA"; 38 data = cfg.serverIpv6; 39 } 40 ]) cfg.dns.nameservers ++ 41 [ 42 { 43 name = "@"; 44 type = "A"; 45 data = cfg.serverIpv4; 46 } 47 { 48 name = "@"; 49 type = "AAAA"; 50 data = cfg.serverIpv6; 51 } 52 53 { 54 name = "vps"; 55 type = "A"; 56 data = cfg.serverIpv4; 57 } 58 { 59 name = "vps"; 60 type = "AAAA"; 61 data = cfg.serverIpv6; 62 } 63 64 { 65 name = "@"; 66 type = "LOC"; 67 data = "52 12 40.4 N 0 5 31.9 E 22m 10m 10m 10m"; 68 } 69 ]; 70 }; 71 }; 72}