22 lines
645 B
Nix
22 lines
645 B
Nix
|
let
|
||
|
pkgs = import <nixpkgs> {};
|
||
|
inherit (pkgs.lib) concatMap hasAttr;
|
||
|
in rec {
|
||
|
|
||
|
no-touch-args = {
|
||
|
config = throw "no-touch-args: can't touch config!";
|
||
|
lib = throw "no-touch-args: can't touch lib!";
|
||
|
pkgs = throw "no-touch-args: can't touch pkgs!";
|
||
|
};
|
||
|
|
||
|
# list-imports : path -> [path]
|
||
|
# Return a module's transitive list of imports.
|
||
|
# XXX duplicates won't get eliminated from the result.
|
||
|
list-imports = path:
|
||
|
let module = import path no-touch-args;
|
||
|
imports = if hasAttr "imports" module
|
||
|
then concatMap list-imports module.imports
|
||
|
else [];
|
||
|
in [path] ++ imports;
|
||
|
}
|