grace/dots

dotfiles/nix configs

git clone https://git.gae.moe/grace/dots

Grace Yodermore stuff4db52e6

wafrn-testing
2.9 KiB151 linesraw
1{ pkgs, ... }:
2
3let
4  serial = "2026100601";
5
6  public = {
7    lee = "152.44.40.91";
8    knuth = "209.50.50.6";
9  };
10
11  tailnet = import ../tailnet.nix;
12
13  tailnetRecords = builtins.concatStringsSep "\n" (
14    builtins.map (name: "${name}.i IN A ${tailnet.${name}}\n*.${name}.i IN A ${tailnet.${name}}") (builtins.attrNames tailnet)
15  );
16
17  mafiaSecondaries = [
18    "45.8.201.122"
19    "45.8.201.114"
20    "158.101.112.125"
21  ];
22
23  publicNameservers = ''
24    @ IN NS ns1.gae.moe.
25    @ IN NS ns1.inx.moe.
26    @ IN NS denise.charbroil.me.
27    @ IN NS ns1.shad.moe.
28  '';
29
30  mkPrimaryZone =
31    {
32      domain,
33      address,
34      extraRecords ? "",
35    }:
36    pkgs.writeText "zone-${domain}" ''
37      $ORIGIN ${domain}.
38      $TTL 300
39
40      @ IN SOA ns1.gae.moe. hostmaster.gae.moe. (
41        ${serial}
42        1h
43        15m
44        1w
45        5m
46      )
47
48      ${publicNameservers}
49
50      @ IN A ${address}
51      * IN A ${address}
52
53      ${extraRecords}
54    '';
55
56  mkSecondary =
57    master: zones:
58    builtins.listToAttrs (
59      map (zone: {
60        name = zone;
61        value = {
62          master = false;
63          masters = [ master ];
64          file = zone;
65        };
66      }) zones
67    );
68
69  mafiaZones =
70    mkSecondary "45.8.201.122" [
71      "inx.moe"
72      "doge-inc.net"
73      "foxy.software"
74      "swedish.fish"
75      "unreliable.email"
76      "funmafia.industries"
77      "vulcan.moe"
78    ]
79    // mkSecondary "45.8.201.114" [
80      "charbroil.me"
81      "puppy.observer"
82      "bdsm.equipment"
83      "ilovehewlettpackard.com"
84    ]
85    // mkSecondary "158.101.112.125" [
86      "shad.moe"
87      "konpeki.solutions"
88      "konpekisolutions.com"
89    ];
90
91in
92{
93  services.bind = {
94    enable = true;
95
96    cacheNetworks = [
97      "127.0.0.0/8"
98      "::1/128"
99      "100.64.0.0/10"
100    ];
101
102    zones = {
103      "gae.moe" = {
104        master = true;
105        slaves = mafiaSecondaries;
106
107        # Potentially could use DNAME forwarding while defining a Quad100 forwarder?
108        # https://github.com/tailscale/tailscale/issues/1543#issuecomment-4703759447
109        file = mkPrimaryZone {
110          domain = "gae.moe";
111          address = public.knuth;
112          extraRecords = ''
113            ns1 IN A ${public.knuth}
114            _hi 3600 IN TXT "hi :3"
115
116            ${tailnetRecords}
117          '';
118        };
119      };
120
121      "grace.pink" = {
122        master = true;
123        slaves = mafiaSecondaries;
124
125        file = mkPrimaryZone {
126          domain = "grace.pink";
127          address = public.lee;
128          extraRecords = ''
129            _atproto 3600 IN TXT "did=did:plc:rtokeh2dsmapicefqxkefbfn"
130          '';
131        };
132      };
133
134      "words.gay" = {
135        master = true;
136        slaves = mafiaSecondaries;
137
138        file = mkPrimaryZone {
139          domain = "words.gay";
140          address = public.lee;
141        };
142      };
143    }
144    // mafiaZones;
145  };
146
147  networking.firewall = {
148    allowedTCPPorts = [ 53 ];
149    allowedUDPPorts = [ 53 ];
150  };
151}