Skip to content

Quick Start

Add import-tree to your flake inputs:

{
inputs.import-tree.url = "github:vic/import-tree";
}

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);
}

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.

Given this tree:

modules/
networking.nix
desktop/
sway.nix
_private/
helper.nix

import-tree ./modules imports networking.nix and desktop/sway.nix. The _private/ directory is skipped because paths with /_ are ignored by default.

Pass a list to import from several directories:

{ imports = [ (import-tree [ ./modules ./extra-modules ]) ]; }

Lists can be arbitrarily nested — they are flattened automatically.

Contribute Community Sponsor