32 lines
629 B
Nix
32 lines
629 B
Nix
{ lib, ... }:
|
|
let
|
|
inherit (lib)
|
|
filterAttrs
|
|
groupBy
|
|
mapAttrs
|
|
unique
|
|
;
|
|
|
|
serviceNamesByUid = entries:
|
|
mapAttrs (_uid: uidEntries: unique (map (entry: entry.entry) uidEntries)) (
|
|
groupBy (entry: toString entry.value) entries
|
|
);
|
|
|
|
duplicateUids = entries:
|
|
filterAttrs (_uid: serviceNames: builtins.length serviceNames > 1) (serviceNamesByUid entries);
|
|
|
|
in
|
|
{
|
|
# Next stable UID: 20003
|
|
replicate = true;
|
|
|
|
type = lib.types.ints.positive;
|
|
|
|
validate = entries: [
|
|
{
|
|
assertion = duplicateUids entries == { };
|
|
message = "Stable UID allocations must be unique.";
|
|
}
|
|
];
|
|
}
|