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 = "@"; 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 name = "@"; 43 type = "A"; 44 data = cfg.serverIpv4; 45 } 46 { 47 name = "@"; 48 type = "AAAA"; 49 data = cfg.serverIpv6; 50 } 51 52 { 53 name = "vps"; 54 type = "A"; 55 data = cfg.serverIpv4; 56 } 57 { 58 name = "vps"; 59 type = "AAAA"; 60 data = cfg.serverIpv6; 61 } 62 63 { 64 name = "@"; 65 type = "LOC"; 66 data = "52 12 40.4 N 0 5 31.9 E 22m 10m 10m 10m"; 67 } 68 ]; 69 }; 70 }; 71}