-
Dendritic: each module configures same concern over different Nix classes.
-
Create DRY & class-generic modules.
-
Parametric over host/home/user.
-
Share aspects across systems & repos.
-
Context-aware dependencies: user/host contributions.
-
Routable configurations.
-
Custom factories for any Nix class.
-
Use stable/unstable channels per config.
-
Freeform host/user/home schemas (no specialArgs).
-
Multi-platform, multi-tenant hosts.
-
Batteries: Opt-in, replaceable aspects.
-
Opt-in <angle/brackets> aspect resolution.
-
Templates tested along examples.
-
Concepts documented.
Need more batteries? See vic/denful.
❄️ Try it now!
Launch our template VM:
nix run github:vic/den
Or, initialize a project:
nix flake init -t github:vic/den
nix flake update den
nix run .#vm
Real-world examples for inspiration
Available templates
|
🏠 Define Hosts, Users & Homes concisely.
See schema in _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 = {};
}
$ nixos-rebuild switch --flake .#lap
$ darwin-rebuild switch --flake .#mac
$ home-manager switch --flake .#vic
🧩 Aspect-oriented incremental features. (example)
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
];
};
}
|