dotfiles/modules/nixos/services/acme/default.nix

92 lines
1.8 KiB
Nix
Raw Normal View History

2024-10-06 15:25:05 -05:00
{
config,
flake,
...
2025-01-18 18:48:37 -06:00
}:
let
inherit (flake.config.people)
2025-01-08 19:06:14 -06:00
user0
;
2025-01-18 18:48:37 -06:00
inherit (flake.config.people.users.${user0})
2025-01-08 19:06:14 -06:00
email
;
2025-01-18 18:48:37 -06:00
inherit (flake.config.services)
2025-01-08 19:06:14 -06:00
instances
;
2024-11-04 20:49:43 -06:00
domain0 = instances.web.domains.url0;
domain1 = instances.web.domains.url1;
2024-12-08 22:53:40 -06:00
domain3 = instances.web.domains.url3;
2024-11-04 20:49:43 -06:00
dns = instances.web.dns.provider0;
instanceName = service: (instances.${service}.subdomain);
2024-10-06 15:25:05 -05:00
dnsConfig = {
2024-10-19 18:22:29 -05:00
dnsProvider = dns;
2024-11-04 20:49:43 -06:00
directory = instances.acme.paths.path0;
2024-10-06 15:25:05 -05:00
environmentFile = config.sops.secrets."dns/namecheap".path;
};
2025-01-18 18:48:37 -06:00
in
{
2024-10-06 15:25:05 -05:00
security.acme = {
acceptTerms = true;
defaults = {
email = email.address0;
server = "https://acme-v02.api.letsencrypt.org/directory";
};
certs = builtins.listToAttrs (
2025-01-18 18:48:37 -06:00
(map
(service: {
2024-11-23 20:47:35 -06:00
name = "${instanceName service}.${domain0}";
2024-10-06 15:25:05 -05:00
value = dnsConfig;
})
2024-11-23 20:47:35 -06:00
[
2024-11-04 02:09:15 -06:00
"jellyfin"
"minecraft"
"ollama"
"syncthing"
"vaultwarden"
2025-01-18 18:48:37 -06:00
]
)
++ (map
(service: {
2024-12-19 22:09:26 -06:00
name = "${instanceName service}.${domain3}";
value = dnsConfig;
})
[
2024-11-04 02:09:15 -06:00
"peertube"
2025-01-18 18:48:37 -06:00
"forgejo"
2025-01-19 00:39:21 -06:00
"mastodon"
2025-01-18 18:48:37 -06:00
]
)
++ (map
(name: {
2024-10-06 15:25:05 -05:00
name = name;
value = dnsConfig;
})
2024-11-04 02:09:15 -06:00
[
domain0
domain1
2024-12-08 22:53:40 -06:00
domain3
2025-01-18 18:48:37 -06:00
]
)
2024-10-06 15:25:05 -05:00
);
};
2025-01-18 18:48:37 -06:00
sops =
let
sopsSecrets = [
"pass"
];
sopsPath = secret: {
path = "/var/lib/secrets/${instances.acme.name}/${dns}-${secret}";
owner = "root";
mode = "600";
};
in
{
secrets = builtins.listToAttrs (
map (secret: {
name = "dns/${dns}";
value = sopsPath secret;
}) sopsSecrets
);
2024-10-06 15:25:05 -05:00
};
}