import-treeand vic's dendritic libs made for you with Love++ and AI--. If you like my work, consider sponsoring
Recursively import Nix modules from a directory, with a simple, extensible API.
π³ Works with NixOS, nix-darwin, home-manager, flake-parts, NixVim, etc.
π² Callable as a deps-free Flake or nix lib.
π΄ Sensible defaults and configurable behaviour.
π΅ Chain .filter, .match, .map for precise file selection.
π Extensible: .addAPI to create domain-specific instances.
πΏ Built to enable the Dendritic Pattern on both stable/unstable Nix.
π± Growing community adoption
The following examples show how to import all module files.
By default, paths having /_ are ignored. See API documentation for advanced usage.
Related projects: vic/flake-file, vic/with-inputs
# 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);
}# flake.nix
{
inputs.import-tree.url = "github:vic/import-tree";
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
outputs = inputs:
(inputs.nixpkgs.lib.evalModules {
specialArgs.inputs = inputs;
modules = [ (inputs.import-tree ./modules) ];
}).config;
}This Den example uses with-inputs to provide flake-like inputs from npins sources.
# default.nix
let
sources = import ./npins;
with-inputs = import sources.with-inputs sources { };
outputs = inputs:
(inputs.nixpkgs.lib.evalModules {
specialArgs.inputs = inputs;
modules = [ (inputs.import-tree ./modules) ];
}).config;
in
with-inputs outputsπ Full documentation β guides, API reference, and examples.
import-tree uses checkmate for testing:
nix flake check github:vic/checkmate --override-input target path:.