Import all nix files in a directory tree. Discussions: https://oeiuwq.zulipchat.com/join/nqp26cd4kngon6mo3ncgnuap/ dendrix.oeiuwq.com/Dendritic.html
dendritic inputs
MDX 43.4%
Astro 28.7%
Nix 24.0%
JavaScript 3.4%
TypeScript 0.4%
CSS 0.1%
Other 0.1%
93 1 1

Clone this repository

https://tangled.org/oeiuwq.com/import-tree https://tangled.org/did:plc:hwcqoy35x55nzde2sm6dbvq7/import-tree
git@knot.tangled.wizardry.systems:oeiuwq.com/import-tree git@knot.tangled.wizardry.systems:did:plc:hwcqoy35x55nzde2sm6dbvq7/import-tree

For self-hosted knots, clone URLs may differ based on your setup.

Download tar.gz
README.md

Sponsor Vic Dendritic Nix License CI Status

import-tree and vic's dendritic libs made for you with Love++ and AI--. If you like my work, consider sponsoring

🌲🌴 import-tree 🎄🌳#

Recursively import Nix modules from a directory, with a simple, extensible API.

Features#

🌳 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

Quick Start#

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

Dendritic flake-parts#

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

Dendritic flake without flake-parts#

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

Dendritic Nix (non-flakes, stable Nix)#

This example uses with-inputs to provide flake-file inputs from npins sources.

# default.nix
let
  sources = import ./npins;
  with-inputs = import sources.with-inputs;
  outputs = inputs:
   (inputs.nixpkgs.lib.evalModules {
      specialArgs.inputs = inputs;
      modules = [ (inputs.import-tree ./modules)  ];
   }).config;
in
with-inputs sources {} outputs

Documentation#

📖 Full documentation — guides, API reference, and examples.

Testing#

import-tree uses checkmate for testing:

nix flake check github:vic/checkmate --override-input target path:.