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