feat(registry): add generic fleet namespace

This commit is contained in:
2026-08-23 19:55:23 -04:00
parent 21fa48d93d
commit fa3ee912f8
4 changed files with 110 additions and 0 deletions

53
lib/registry.nix Normal file
View File

@@ -0,0 +1,53 @@
{ lib }:
let
inherit (lib)
filterAttrs
hasSuffix
mapAttrs
mapAttrs'
mkOption
nameValuePair
removeSuffix
types
;
registryName = fileName: removeSuffix ".nix" fileName;
registryOption = registry: mkOption {
type = types.attrsOf (types.attrsOf registry.type);
default = { };
description = ''
Lazily collected fleet-visible registry entries, nested by host and entry name.
'';
};
in
{
load =
{
dir,
args ? { },
}:
let
definitions = mapAttrs' (
name: type:
let
path = dir + "/${name}";
in
nameValuePair (registryName name) (import path args)
) (filterAttrs (name: type: type == "regular" && hasSuffix ".nix" name) (builtins.readDir dir));
in
{
inherit definitions;
module = {
options.registry = mapAttrs (_name: registry: registryOption registry) definitions;
};
collect =
{ hosts }:
mapAttrs (
registryName: _registry:
mapAttrs (hostName: host: host.config.registry.${registryName}.${hostName} or { }) hosts
) definitions;
};
}