mirror of
https://github.com/foo-dogsquared/nixos-config.git
synced 2025-01-31 04:58:01 +00:00
34 lines
1017 B
Nix
34 lines
1017 B
Nix
{ pkgs, lib, self }:
|
|
|
|
{
|
|
/* Count the attributes with the given predicate.
|
|
|
|
Examples:
|
|
countAttrs (name: value: value) { d = true; f = true; a = false; }
|
|
=> 2
|
|
|
|
countAttrs (name: value: value.enable) { d = { enable = true; }; f = { enable = false; package = [ ]; }; }
|
|
=> 1
|
|
*/
|
|
countAttrs = pred: attrs:
|
|
lib.count (attr: pred attr.name attr.value)
|
|
(lib.mapAttrsToList lib.nameValuePair attrs);
|
|
|
|
/* Filters and groups the attribute set into two separate attribute where it
|
|
either accepted or denied from a given predicate function.
|
|
|
|
Example:
|
|
filterAttrs' (n: v: v == 4) { a = 4; b = 2; c = 6; }
|
|
=> { ok = { a = 4; }; notOk = { b = 2; c = 6; }; }
|
|
*/
|
|
filterAttrs' = f: attrs:
|
|
lib.foldlAttrs (acc: name: value: let
|
|
isOk = f name value;
|
|
in {
|
|
ok = acc.ok // lib.optionalAttrs isOk { ${name} = value; };
|
|
notOk = acc.notOk // lib.optionalAttrs (!isOk) { ${name} = value; };
|
|
})
|
|
{ ok = { }; notOk = { }; }
|
|
attrs;
|
|
}
|