Skip to content

Examples

flake.nix
{
inputs.import-tree.url = "github:vic/import-tree";
inputs.flake-parts.url = "github:hercules-ci/flake-parts";
outputs = inputs:
inputs.flake-parts.lib.mkFlake { inherit inputs; }
(inputs.import-tree ./modules);
}
configuration.nix
{ import-tree, ... }: {
imports = [ (import-tree ./modules) ];
}
import-tree [ ./base-modules ./host-specific ./shared ]

Only import files tagged with a +feature convention:

import-tree.filter (lib.hasInfix "+networking") ./modules
word_word.nix
import-tree.match ".*/[a-z]+_[a-z]+\.nix" ./modules
lib.pipe import-tree [
(i: i.filter (lib.hasInfix "/desktop/"))
(i: i.map lib.traceVal)
(i: i ./modules)
]
lib.pipe import-tree [
(i: i.initFilter (lib.hasSuffix ".json"))
(i: i.map builtins.readFile)
(i: i.map builtins.fromJSON)
(i: i.withLib lib)
(i: i.leafs ./config)
]
# => list of parsed JSON objects
let
my-tree = lib.pipe import-tree [
(i: i.addPath ./modules)
(i: i.addAPI {
desktop = self: self.filter (lib.hasInfix "/desktop/");
server = self: self.filter (lib.hasInfix "/server/");
all = self: self;
})
];
in {
# Use the desktop subset
imports = [ my-tree.desktop ];
# Or import everything
# imports = [ my-tree.all ];
}
(import-tree.withLib lib).pipeTo builtins.length ./modules
{
imports = [
(import-tree ./auto-modules) # auto-discovered
./manual/special-case.nix # manual import
];
}
let
tree = import-tree.addPath ./core;
extended = tree.addPath ./extras;
in
extended.result
Contribute Community Sponsor