Who it's for
People managing several NixOS machines, a Mac with nix-darwin, or Home Manager users, who want one structure for all of it.
Move up when
This is the top of the ladder. From here the work is tidying your own aspects, and perhaps sharing them.
The pour
Declare the machine and its user, then give the machine its aspects:
# modules/hosts.nix
{ den, ... }:
{
den.hosts.x86_64-linux.endgame.users.tom = { };
den.aspects.endgame.includes = [ den.aspects.gaming ];
}
The gaming aspect is where Steam lives. It could set Mac or Home Manager options in the same place:
# modules/aspects/gaming.nix
{
den.aspects.gaming = {
nixos = { pkgs, ... }: {
programs.steam.enable = true;
};
};
}
How it works
den creates an aspect for every host and user you declare. Each aspect holds settings grouped by class (nixos, darwin, homeManager) and can include other aspects, so you build roles out of small, reusable pieces.
den grew out of exploring the dendritic pattern, but it now stands on its own and no longer describes itself as dendritic. The landlord’s own config, tomwrw/megadots, runs on den.
Why people like it
- One aspect can set NixOS, nix-darwin and Home Manager options together.
- Aspects include other aspects, so a
gamingrole can pull in Steam, controllers and performance tweaks. - Ready-made “batteries” for common chores, like setting the hostname or allowing an unfree package.
- Works with flakes or without them. Its own getting-started guide uses plain Nix.
What it costs you
- The youngest and steepest option here, and it’s still changing, so check the docs match the version you pin.
- Its own vocabulary (aspects, batteries, includes, provides) to learn on top of Nix.
- A smaller community than plain flakes, so fewer examples to borrow from.
Regulars brewed this way
An AMD gaming desktop and a Surface Pro tablet from one den config, with every feature written as a reusable aspect.
Further reading
- den documentation - including the "From Zero to Den" guide
- den on GitHub
Last checked against the projects' own docs: 11 November 2026. These tools move quickly; spotted something out of date? Open a pull request.