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}