{ lib }: let checkType = lib.types.submodule { options = { assertion = lib.mkOption { type = lib.types.functionTo lib.types.bool; description = '' Predicate run against this registry's flattened collected entries. ''; }; message = lib.mkOption { type = lib.types.str; description = '' Error message shown when this registry validation check fails. ''; }; }; }; predicates = { uniqueValue = value: entries: builtins.length (lib.unique (map value entries)) == builtins.length entries; }; registryLib = lib // { registry = (lib.registry or { }) // { inherit predicates; }; }; registryDefinitionModule = { options = { type = lib.mkOption { type = lib.types.raw; description = '' NixOS option type for one registry entry. ''; }; replicate = lib.mkOption { type = lib.types.bool; default = false; description = '' Whether collected entries are merged and published under every host key. ''; }; checks = lib.mkOption { type = lib.types.listOf checkType; default = [ ]; description = '' Validation checks for this registry's flattened collected entries. ''; }; }; }; in { inherit checkType predicates registryDefinitionModule registryLib ; }