idiosyn/lib/flags.nix

28 lines
756 B
Nix

{ nixpkgs, ... }:
let
inherit (builtins)
filter isList
isString stringLength
unsafeDiscardStringContext;
inherit (nixpkgs.lib.lists) flatten subtractLists;
inherit (nixpkgs.lib.strings) addContextFrom;
split = strOrList:
if isList strOrList then flatten strOrList
else builtins.split "[[:space:]]+" strOrList
|> filter (flag: isString flag && stringLength flag > 0);
remerge = strOrList: list:
if isList strOrList then list
else toString list |> addContextFrom strOrList;
in {
remove = rem: strOrList: split strOrList
|> subtractLists rem
|> remerge strOrList;
subst = sub: strOrList: split strOrList
|> map (flag: sub.${unsafeDiscardStringContext flag} or flag)
|> remerge strOrList;
}