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}