1 { inputs, pkgs, lib, config, hosts, ... }:
3 domain = "sourcephile.fr";
4 domainID = lib.replaceStrings ["."] ["_"] domain;
5 inherit (config) networking;
6 inherit (config.security) gnupg;
7 inherit (config.services) knot;
8 inherit (config.users) users;
11 services.knot.zones."${domain}" = {
14 - id: acl_localhost_acme_${domainID}
18 update-owner-match: equal
19 update-owner-name: [_acme-challenge, _acme-challenge.hut, _acme-challenge.code]
21 - id: acl_tsig_acme_${domainID}
25 update-owner-match: equal
26 update-owner-name: [_acme-challenge]
28 - id: acl_tsig_bureau1_${domainID}
29 key: bureau1_${domainID}
32 update-owner-match: equal
33 update-owner-name: [bureau1, lan.losurdo]
34 update-type: [A, AAAA]
39 serial-policy: increment
41 notify: secondary_gandi
43 acl: acl_localhost_acme_${domainID}
44 acl: acl_tsig_acme_${domainID}
45 acl: acl_tsig_bureau1_${domainID}
48 - domain: whoami4.${domain}
50 file: "${pkgs.writeText "whoami4.zone" ''
52 @ SOA ns root.${domain}. (
61 ns A ${hosts.mermet._module.args.ipv4}
64 # TODO: increase the TTL once things have settled down
69 ; SOA (Start Of Authority)
71 ${toString inputs.self.lastModified} ; Serial number
74 1000h ; Expire (1000h)
82 ns.whoami4 A ${hosts.mermet._module.args.ipv4}
85 @ A ${hosts.mermet._module.args.ipv4}
86 mermet A ${hosts.mermet._module.args.ipv4}
87 autoconfig A ${hosts.mermet._module.args.ipv4}
88 doc A ${hosts.mermet._module.args.ipv4}
89 git A ${hosts.mermet._module.args.ipv4}
90 imap A ${hosts.mermet._module.args.ipv4}
91 mail A ${hosts.mermet._module.args.ipv4}
92 mails A ${hosts.mermet._module.args.ipv4}
93 news A ${hosts.mermet._module.args.ipv4}
94 public-inbox A ${hosts.mermet._module.args.ipv4}
95 ns A ${hosts.mermet._module.args.ipv4}
96 pop A ${hosts.mermet._module.args.ipv4}
97 smtp A ${hosts.mermet._module.args.ipv4}
98 submission A ${hosts.mermet._module.args.ipv4}
99 www A ${hosts.mermet._module.args.ipv4}
100 lemoutona5pattes A ${hosts.mermet._module.args.ipv4}
101 covid19 A ${hosts.mermet._module.args.ipv4}
102 croc A ${hosts.mermet._module.args.ipv4}
103 stun A ${hosts.mermet._module.args.ipv4}
104 turn A ${hosts.mermet._module.args.ipv4}
105 whoami A ${hosts.mermet._module.args.ipv4}
106 code A ${hosts.mermet._module.args.ipv4}
107 builds.code A ${hosts.mermet._module.args.ipv4}
108 dispatch.code A ${hosts.mermet._module.args.ipv4}
109 git.code A ${hosts.mermet._module.args.ipv4}
110 hg.code A ${hosts.mermet._module.args.ipv4}
111 hub.code A ${hosts.mermet._module.args.ipv4}
112 lists.code A ${hosts.mermet._module.args.ipv4}
113 meta.code A ${hosts.mermet._module.args.ipv4}
114 man.code A ${hosts.mermet._module.args.ipv4}
115 pages.code A ${hosts.mermet._module.args.ipv4}
116 paste.code A ${hosts.mermet._module.args.ipv4}
117 todo.code A ${hosts.mermet._module.args.ipv4}
118 miniflux A ${hosts.mermet._module.args.ipv4}
120 ; CNAME (Canonical Name)
121 losurdo CNAME bureau1
122 openconcerto CNAME losurdo
126 cryptpad CNAME losurdo
127 cryptpad-api CNAME losurdo
128 cryptpad-files CNAME losurdo
129 cryptpad-sandbox CNAME losurdo
131 freeciv CNAME losurdo
132 nix-serve CNAME losurdo
133 nix-extracache CNAME losurdo
134 nix-localcache CNAME lan.losurdo
136 builds.hut CNAME builds.code
137 dispatch.hut CNAME dispatch.code
138 git.hut CNAME git.code
140 hub.hut CNAME hub.code
141 lists.hut CNAME lists.code
142 meta.hut CNAME meta.code
143 man.hut CNAME man.code
144 pages.hut CNAME pages.code
145 paste.hut CNAME paste.code
146 todo.hut CNAME todo.code
149 ; DMARC (Domain-based Message Authentication, Reporting and Conformance)
150 _dmarc 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:root+dmarc+aggregate@sourcephile.fr; ruf=mailto:root+dmarc+forensic@sourcephile.fr"
152 ; SPF (Sender Policy Framework)
153 @ 3600 IN TXT "v=spf1 mx ip4:${hosts.mermet._module.args.ipv4} -all"
157 lists.code 1800 MX 5 mail
158 todo.code 1800 MX 5 mail
161 _git._tcp.git 18000 IN SRV 0 0 9418 git
162 _stun._udp 18000 IN SRV 0 5 3478 stun
163 _xmpp-client._tcp 18000 IN SRV 0 5 5222 xmpp
164 _xmpp-server._tcp 18000 IN SRV 0 5 5269 xmpp
165 _xmpp-server._tcp.salons 18000 IN SRV 0 5 5269 xmpp
167 ; CAA (Certificate Authority Authorization)
168 ; DOC: https://blog.qualys.com/ssllabs/2017/03/13/caa-mandated-by-cabrowser-forum
169 @ CAA 128 issue "letsencrypt.org"
172 users.groups.keys.members = [ users.knot.name ];
175 gnupg.secrets."knot/tsig/${domain}/acme.conf".path
176 gnupg.secrets."knot/tsig/${domain}/bureau1.conf".path
179 security.gnupg.secrets = {
180 "knot/tsig/${domain}/acme.conf" = {
181 # Generated with: keymgr -t acme_${domainID}
182 user = users.knot.name;
184 "knot/tsig/${domain}/bureau1.conf" = {
185 # Generated with: keymgr -t bureau1_${domainID}
186 user = users.knot.name;
189 systemd.services.knot = {
191 gnupg.secrets."knot/tsig/${domain}/acme.conf".service
192 gnupg.secrets."knot/tsig/${domain}/bureau1.conf".service
195 gnupg.secrets."knot/tsig/${domain}/acme.conf".service
196 gnupg.secrets."knot/tsig/${domain}/bureau1.conf".service
199 /* Useless since the zone is public
200 services.unbound.settings = {
203 stub-addr = "127.0.0.1@5353";