2021-07-17 15:09:49 +03:00
|
|
|
with builtins;
|
|
|
|
rec {
|
2021-07-15 00:36:59 +03:00
|
|
|
filterAttrs = pred: set:
|
|
|
|
listToAttrs (concatMap (name: let value = set.${name}; in if pred name value then [ ({ inherit name value; }) ] else [ ]) (attrNames set));
|
|
|
|
|
|
|
|
/* Generate an attribute set by mapping a function over a list of
|
2021-07-19 16:17:21 +03:00
|
|
|
attribute names.
|
2021-07-15 00:36:59 +03:00
|
|
|
|
2021-07-19 16:17:21 +03:00
|
|
|
Example:
|
|
|
|
genAttrs [ "foo" "bar" ] (name: "x_" + name)
|
|
|
|
=> { foo = "x_foo"; bar = "x_bar"; }
|
2021-07-15 00:36:59 +03:00
|
|
|
*/
|
|
|
|
genAttrs' = func: values: builtins.listToAttrs (map func values);
|
|
|
|
|
2021-11-06 16:29:27 +03:00
|
|
|
getAttrs = names: attrs: genAttrs names (name: attrs.${name});
|
|
|
|
|
2021-07-15 00:36:59 +03:00
|
|
|
hasFileAttr = o: builtins.hasAttr "_file" o;
|
|
|
|
|
|
|
|
# Definition in nixpkgs
|
|
|
|
hasSuffix =
|
|
|
|
# Suffix to check for
|
|
|
|
suffix:
|
|
|
|
# Input string
|
|
|
|
content:
|
|
|
|
let
|
|
|
|
lenContent = stringLength content;
|
|
|
|
lenSuffix = stringLength suffix;
|
2021-07-19 16:17:21 +03:00
|
|
|
in
|
|
|
|
lenContent >= lenSuffix &&
|
|
|
|
substring (lenContent - lenSuffix) lenContent content == suffix;
|
2021-07-15 00:36:59 +03:00
|
|
|
|
|
|
|
# Definition in nixpkgs
|
|
|
|
mapAttrs' = f: set:
|
|
|
|
listToAttrs (map (attr: f attr set.${attr}) (attrNames set));
|
|
|
|
|
|
|
|
/* Partition string s based on sep
|
|
|
|
|
2021-07-19 16:17:21 +03:00
|
|
|
Example:
|
|
|
|
partitionString "," "nix,json,yaml"
|
|
|
|
=> [ "nix" "json" "yaml" ]
|
2021-07-15 00:36:59 +03:00
|
|
|
*/
|
|
|
|
partitionString = sep: s:
|
|
|
|
filter (v: isString v) (split "${sep}" s);
|
|
|
|
|
|
|
|
# Returns the type of a path: regular (for file), symlink, or directory
|
|
|
|
pathType = p: getAttr (baseNameOf p) (readDir (dirOf p));
|
|
|
|
|
|
|
|
peek = f: f (builtins.functionArgs f);
|
|
|
|
|
|
|
|
removeSuffix = suffix: str:
|
|
|
|
let
|
|
|
|
sufLen = builtins.stringLength suffix;
|
|
|
|
sLen = builtins.stringLength str;
|
|
|
|
in
|
|
|
|
if sufLen <= sLen && suffix == builtins.substring (sLen - sufLen) sufLen str then
|
|
|
|
builtins.substring 0 (sLen - sufLen) str
|
|
|
|
else
|
|
|
|
str;
|
|
|
|
|
|
|
|
reverseList = xs:
|
|
|
|
let l = length xs; in genList (n: elemAt xs (l - n - 1)) l;
|
|
|
|
|
|
|
|
}
|