Quick Start
Installation
Section titled “Installation”Add import-tree to your flake inputs:
{ inputs.import-tree.url = "github:vic/import-tree";}Import directly from a pinned source:
let import-tree = import (builtins.fetchTarball { url = "https://github.com/vic/import-tree/archive/main.tar.gz"; });in# use import-treeOr from a local checkout:
let import-tree = import ./path-to/import-tree;in# use import-treeBasic Usage
Section titled “Basic Usage”With flake-parts
Section titled “With flake-parts”The most common pattern — import all modules from a directory as flake-parts modules:
{ 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);}With NixOS / nix-darwin / home-manager
Section titled “With NixOS / nix-darwin / home-manager”Use import-tree anywhere you have an imports list:
{ config, ... }: { imports = [ (import-tree ./modules) ];}This recursively discovers all .nix files under ./modules and imports them.
What Gets Imported?
Section titled “What Gets Imported?”Given this tree:
modules/ networking.nix desktop/ sway.nix _private/ helper.niximport-tree ./modules imports networking.nix and desktop/sway.nix. The _private/ directory is skipped because paths with /_ are ignored by default.
Multiple Directories
Section titled “Multiple Directories”Pass a list to import from several directories:
{ imports = [ (import-tree [ ./modules ./extra-modules ]) ]; }Lists can be arbitrarily nested — they are flattened automatically.
Next Steps
Section titled “Next Steps”- Filtering — select specific files by predicate or regex
- API Reference — complete method documentation
- Dendritic Pattern — learn the file-per-module approach