snowfield/lib/dns.nix

51 lines
1.2 KiB
Nix
Raw Normal View History

2024-08-12 18:12:37 +02:00
{ lib, dnsLib, ... }:
with lib;
rec {
2024-10-26 04:09:35 +02:00
allowedDomains = [
"luj.fr"
"julienmalka.me"
"malka.family"
"luj"
"malka.sh"
2025-02-09 18:14:38 +01:00
"hownix.works"
2024-10-26 04:09:35 +02:00
];
isVPNDomain = hasSuffix "luj";
2024-08-12 18:12:37 +02:00
hasSuffix' = flip strings.hasSuffix;
domainToZone = allowedDomains: domain: (findFirst (hasSuffix' domain) null allowedDomains);
filterElligibleDomains = allowedDomains: domain: domainToZone allowedDomains domain != null;
domainsFromConfiguration =
allowedDomains: config:
filter (filterElligibleDomains allowedDomains) (attrNames config.services.nginx.virtualHosts);
ipsToRecord =
ipType: ipValue:
with dnsLib.combinators;
if ipType == "ipv4" then { A = [ ipValue ]; } else { AAAA = [ ipValue ]; };
domainToRecords =
domain: machineMeta: isVPNDomain:
with dnsLib.combinators;
(optionalAttrs isVPNDomain (
mapAttrsWithMerge (n: v: nameValuePair domain (ipsToRecord n v)) machineMeta.ips.vpn
))
// (optionalAttrs (!isVPNDomain) (
mapAttrsWithMerge (n: v: nameValuePair domain (ipsToRecord n v)) machineMeta.ips.public
));
getDomainPrefix =
allowedDomains: domain:
let
zone = domainToZone allowedDomains domain;
in
strings.removeSuffix ".${zone}" domain;
}