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