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 = "@"; 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}