zones: make zonefiles available as packages

This commit is contained in:
tv 2022-08-15 01:43:57 +02:00
parent a78ae45928
commit 31b30c5f22

View File

@ -1,22 +1,36 @@
with import <stockholm/lib>; with import <stockholm/lib>;
{ config, ... }: { { config, pkgs, ... }: {
config = { config = {
# Implements environment.etc."zones/<zone-name>" environment.etc =
environment.etc = let
stripEmptyLines = s: (concatStringsSep "\n"
(remove "\n" (remove "" (splitString "\n" s)))) + "\n";
all-zones = foldAttrs (sum: current: sum + "\n" +current ) ""
([config.krebs.zone-head-config] ++ combined-hosts);
combined-hosts =
mapAttrsToList (name: getAttr "extraZones") config.krebs.hosts;
in
mapAttrs' mapAttrs'
(name: value: { (name: pkg: {
name = "zones/${name}"; name = "zones/${name}";
value.text = stripEmptyLines value; value.source = pkg;
}) })
all-zones; pkgs.krebs.zones;
nixpkgs.overlays = [
# Explicit zones generated from config.krebs.hosts.*.extraZones
(self: super: let
stripEmptyLines = s: (concatStringsSep "\n"
(remove "\n" (remove "" (splitString "\n" s)))) + "\n";
all-zones = foldAttrs (sum: current: sum + "\n" + current) ""
([config.krebs.zone-head-config] ++ combined-hosts);
combined-hosts =
mapAttrsToList (name: getAttr "extraZones") config.krebs.hosts;
in {
krebs = super.krebs or {} // {
zones = super.krebs.zones or {} //
mapAttrs'
(name: value: {
name = name;
value = self.writeText "${name}.zone" (stripEmptyLines value);
})
all-zones;
};
})
];
}; };
} }