History
Where gen comes from
Section titled “Where gen comes from”gen grew out of den, a framework for NixOS, nix-darwin and home-manager configuration. In den, a quirk is a piece of data a scope emits, and a pipe moves quirk data between scopes: from a user up to its host, across the hosts of one environment, or across every machine in a deployment. gen’s graph model and its parametric aspects grew from quirks and pipes: the scopes became nodes, the movements of data became edges, and a feature that needs its host takes the host as an argument.
den was extracted from its author’s own configurations. A setup with several hosts and users
repeats one pattern: a mapAttrs over the users, with each result installed into a host’s
configuration. den began as an abstraction over that iteration, with a declarative surface
language and general code that walks the topology of the infrastructure. Through den v0.10 the
implementation was plain maps and traversals.
As den took on larger deployments, it needed new kinds of entity beyond hosts and homes (fleets, microVMs), values passed between entities, and typed schemas for them. den’s core moved onto nix-effects, keeping its public API. The next planned kernel was Ned, a stream library built on nix-effects. While designing that migration, den’s problem turned out to map onto attribute-grammar evaluation over a scope graph, which became gen-scope. The step after that described the whole problem as logic programs over a graph of facts, and gen is the set of libraries for that model. den is being rebuilt on gen with the same public API and domain language.
Timeline
Section titled “Timeline”| Date | Event |
|---|---|
| October 2025 | den’s first commit. |
| 2026-05-10 | First commit of the schema library, the first piece of gen. |
| 2026-05-20 | First commit of the scope library, the graph’s evaluator. |
| 2026-05-26 | The gen hub is created, gathering the libraries under one flake. |
| 2026-06-15 | den adopts gen’s schema library for its entities (den pull request #563). |
| 2026-07-02 | First commit of gen’s module system, which merges modules without nixpkgs. |
The Roadmap lists what gen ships now and what is planned.
Palettes adapted from Catppuccin (Macchiato) (MIT), Tokyo Night (Apache-2.0), gruvbox (MIT), Catppuccin (Latte) (MIT), Rosé Pine (Dawn) (MIT).