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}