Infrastructure
Dolomite
The multi-user NixOS a handful of us run and build on. We own it top to bottom and automate its upkeep, so we can be modern, self-built, and correctness-first.
- Role
- Sole author
- Stack
What it does
- One flake, consumed as an upstream dependency by colleagues' own flakes, configures desktops, laptops, servers, embedded systems, and non-NixOS targets across x86_64 and aarch64 from a single lockfile.
- Untrusted-input apps (including AI coding agents) run inside a bubblewrap sandbox; escapes go through rungate, a daemon that executes only a typed, whitelisted set of commands with per-argument validation.
- The security boundary is namespace isolation, not the UID, and the threat model says in writing what it does not cover.
- Multi-user by design, with configuration kept at the global declarative layer and no home-manager, so several people share one coherent system.
- Services bind directly to their WireGuard address, so the mesh is the firewall; secrets are sops-nix with age keys derived from each machine's SSH host key.
- The whole machine lifecycle runs through one Rust tool, manage, which handles build, provision, deploy, and secrets. A product with no SSH access can be pointed at its owner's own package source and build the OS from scratch, so they need not trust us.
Dolomite is the operating system my colleagues and I run, and a shared foundation their own flakes pull in as a dependency. One NixOS flake configures a heterogeneous fleet from a single lockfile: desktops, laptops, servers, embedded systems, and even non-NixOS targets across two architectures, and it forms the basis of the HyperPrint project's firmware. It began as a team's multi-user declarative NixOS, then grew a security design strict enough to run AI coding agents safely. One thread of the write-up: how do you give an agent enough access to do real work without handing it your SSH keys? The security answer is that the boundary is the container, not the user ID, and it is one of several deliberate departures from a stock NixOS install.
The full write-up, including the attack surface most sandbox diagrams leave out and why Dolomite stays at the global declarative layer instead of home-manager, is in Dolomite, an operating system for a small team.
Currently semi-open: the design circulates, the tree does not, pending a clean separation of the machine schema and secrets layout from the fleet they describe.