Self-host your own digital island
1{ config, lib, ... }:
2
3with lib;
4let cfg = config.eilean; in
5{
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 = "@";
32 type = "NS";
33 data = ns;
34 }
35 {
36 name = ns;
37 type = "AAAA";
38 data = cfg.serverIpv6;
39 }
40 ]) cfg.dns.nameservers ++
41 [
42 {
43 name = "@";
44 type = "A";
45 data = cfg.serverIpv4;
46 }
47 {
48 name = "@";
49 type = "AAAA";
50 data = cfg.serverIpv6;
51 }
52
53 {
54 name = "vps";
55 type = "A";
56 data = cfg.serverIpv4;
57 }
58 {
59 name = "vps";
60 type = "AAAA";
61 data = cfg.serverIpv6;
62 }
63
64 {
65 name = "@";
66 type = "LOC";
67 data = "52 12 40.4 N 0 5 31.9 E 22m 10m 10m 10m";
68 }
69 ];
70 };
71 };
72}