❄️ Dotfiles for our NixOS system configuration.
1{ config, pkgs, ... }:
2
3{
4 age.secrets.caddy = {
5 file = ../../secrets/caddy.age;
6 mode = "600";
7 };
8
9 services.caddy = {
10 enable = true;
11 package = pkgs.caddy.withPlugins {
12 plugins = [
13 "github.com/caddy-dns/bunny@v1.2.0"
14 "github.com/digilolnet/caddy-bunny-ip@v0.0.0-20250118080727-ef607b8e1644"
15 ];
16 hash = "sha256-j82fgKbh8AcM9jbKUoRKQsAvF/xaUj3pZLdAr9QtST0=";
17 };
18 environmentFile = config.age.secrets.caddy.path;
19 globalConfig = ''
20 email chloe@sapphic.moe
21 servers {
22 trusted_proxies bunny {
23 interval 6h
24 timeout 25s
25 }
26 }
27 '';
28 extraConfig = ''
29 (tls_bunny) {
30 tls {
31 dns bunny {env.BUNNY_API_KEY}
32 resolvers 9.9.9.9 149.112.112.112
33 }
34 }
35
36 (common) {
37 encode zstd gzip
38 }
39
40 (deny_non_bunny) {
41 @not_bunny not client_ip 127.0.0.1 ::1
42 handle @not_bunny {
43 abort
44 }
45 }
46 '';
47 logFormat = ''
48 level info
49 format json
50 '';
51 };
52
53 settings.firewall.allowedTCPPorts = [
54 80
55 443
56 ];
57
58 settings.firewall.allowedUDPPorts = [ 443 ];
59}