2022-03-29 07:34:10 +02:00
|
|
|
pkgs:
|
|
|
|
with pkgs.lib; let
|
|
|
|
inherit (pkgs) buildEnv callPackage writeTextDir;
|
|
|
|
|
|
|
|
importAll = { root, exclude ? [] }:
|
|
|
|
|
|
|
|
# adapted from http://chriswarbo.net/projects/nixos/useful_hacks.html
|
|
|
|
let
|
|
|
|
basename = removeSuffix ".nix";
|
|
|
|
|
|
|
|
isMatch = name: type: (hasSuffix ".nix" name || type == "directory")
|
|
|
|
&& ! elem name (map basename exclude);
|
|
|
|
|
|
|
|
entry = name: _: {
|
|
|
|
name = basename name;
|
|
|
|
value = import (root + "/${name}");
|
|
|
|
};
|
|
|
|
in
|
2022-03-29 07:35:32 +02:00
|
|
|
mapAttrs' entry (filterAttrs isMatch (readDir root));
|
2022-03-29 07:34:10 +02:00
|
|
|
|
|
|
|
in {
|
|
|
|
shenvs = let
|
|
|
|
build = name: { paths, enter ? null }: buildEnv {
|
|
|
|
name = "shenv-${name}";
|
|
|
|
paths = (optional (enter != null) (writeTextDir "lib/shenv/enter" enter))
|
|
|
|
++ paths;
|
|
|
|
};
|
|
|
|
in mapAttrs (name: shenv: build name (shenv pkgs)) (importAll {
|
|
|
|
root = ../shenvs;
|
|
|
|
exclude = [ "config" ];
|
|
|
|
});
|
|
|
|
}
|