Skip to content
Oeiuwq Faith Blog OpenSource Porfolio

vic/den

Modular, context-aware and aspect-oriented dendritic Nix configurations.

vic/den.json
{
"defaultBranch": "main",
"description": "Modular, context-aware and aspect-oriented dendritic Nix configurations.",
"fullName": "vic/den",
"homepage": "http://den.oeiuwq.com/",
"language": "Nix",
"name": "den",
"pushedAt": "2025-11-24T05:48:13Z",
"stargazersCount": 31,
"updatedAt": "2025-11-23T14:18:55Z",
"url": "https://github.com/vic/den"
}

Sponsor Vic Dendritic Nix License CI Status

den - an aspect-oriented approach to Dendritic Nix configurations.

Section titled “den - an aspect-oriented approach to Dendritic Nix configurations.”

den and vic’s dendritic libs made for you with Love++ and AI—. If you like my work, consider sponsoring

den
  • Dendritic: each module configures same concern over different Nix classes.

  • Create [DRY]!(modules/aspects/provides/unfree.nix) & [class-generic]!(modules/aspects/provides/primary-user.nix) modules.

  • [Parametric]!(modules/aspects/provides/define-user.nix) over host/home/user.

  • [Share]!(templates/default/modules/namespace.nix) aspects across systems & repos.

  • Context-aware [dependencies]!(modules/aspects/dependencies.nix): user/host contributions.

  • [Routable]!(templates/default/modules/aspects/eg/routes.nix) configurations.

  • Custom factories for any Nix class.

  • Use stable/unstable channels per config.

  • Freeform host/user/home [schemas]!(modules/_types.nix) (no specialArgs).

  • Multi-platform, multi-tenant hosts.

  • [Batteries]!(modules/aspects/provides/): Opt-in, replaceable aspects.

  • Opt-in <angle/brackets> aspect resolution.

  • Templates [tested]!(templates/default/modules/tests.nix) along [examples]!(templates/examples/modules/_example/ci).

  • Concepts documented.

Need more batteries? See vic/denful.

❄️ Try it now!

Launch our template VM:

Terminal window
nix run github:vic/den

Or, initialize a project:

Terminal window
nix flake init -t github:vic/den
nix flake update den
nix run .#vm

Real-world examples for inspiration

Available templates

  • [default]!(templates/default) batteries-included layout.
  • [minimal]!(templates/minimal) truly minimalistic start.
  • [examples]!(templates/examples) tests for all features.
  • [bogus]!(templates/bogus) reproduce and report bugs.

🏠 Define [Hosts, Users]!(templates/examples/modules/_example/hosts.nix) & [Homes]!(templates/examples/modules/_example/homes.nix) concisely.

See schema in [_types.nix]!(modules/_types.nix).

modules/hosts.nix
{
# same home-manager vic configuration
# over laptop, macbook and standalone-hm
den.hosts.x86_64-linux.lap.users.vic = {};
den.hosts.aarch64-darwin.mac.users.vic = {};
den.homes.aarch64-darwin.vic = {};
}
Terminal window
$ nixos-rebuild switch --flake .#lap
$ darwin-rebuild switch --flake .#mac
$ home-manager switch --flake .#vic

🧩 Aspect-oriented incremental features. ([example]!(templates/default/modules/den.nix))

Any module can contribute configurations to aspects.

modules/my-laptop.nix
{ den, inputs, ... }: {
# Example: enhance the my-laptop aspect.
# This can be done from any file, multiple times.
den.aspects.my-laptop = {
# this aspect includes configurations
# available from other aspects
includes = [
# your own parametric aspects
den.aspects.workplace-vpn
# den's opt-in batteries includes.
den.provides.home-manager
];
# any file can contribute to this aspect, so
# best practice is to keep concerns separated,
# each on their own file, instead of having huge
# modules in a single file:
# any NixOS configuration
nixos = {
# A nixos class module, see NixOS options.
# import third-party NixOS modules
imports = [
inputs.disko.nixosModules.disko
];
disko.devices = { /* ... */ };
};
# any nix-darwin configuration
darwin = {
# import third-party Darwin modules
imports = [
inputs.nix-homebrew.darwinModules.nix-homebrew
];
nix-homebrew.enableRosetta = true;
};
# For all users of my-laptop
homeManager.programs.vim.enable = true;
};
}
# modules/vic.nix
{ den, ... }: {
den.aspects.vic = {
homeManager = { /* ... */ };
# User contribs to host
nixos.users.users = {
vic.description = "oeiuwq";
};
includes = [
den.aspects.tiling-wm
den._.primary-user
];
};
}

You are done! You know everything to start creating configurations with den.

Feel free to to explore the codebase, particularly our [included batteries]!(modules/aspects/provides) and [tests]!(templates/examples/modules/_example/ci).

Join our community discussion.