manage, the Dolomite deploy tool
One front-end for the whole machine lifecycle: build, provision, deploy, and secrets, reaching targets colmena and deploy-rs cannot.
manage is the tool that drives Dolomite. The name is nothing
clever; I am not good at naming things. It began as a nushell script of about
800 lines and was then rewritten in Rust, the second such rewrite in the
Dolomite story after the nixpak launcher, and for the same reason: nushell while
it was a script, safe Rust once correctness started to matter.
What it owns
manage covers far more than deployment. It is a single front-end to the whole
machine lifecycle. It wraps or replaces nix build, nixos-rebuild, and the
rest; it manages build artifacts and input overrides; and it wraps
nixos-anywhere for provisioning. That scope is why colmena, nixops, and
deploy-rs did not fit: they are deploy-only and shaped around an SSH root
session, whereas manage owns build, provision, deploy, and secrets as one
correctness-first tool, and it reaches targets they cannot, including non-NixOS
machines and ones with no SSH at all.
Provisioning a machine
It uses disko everywhere it can, because a partition layout has to be written
down somewhere, and once it is machine-readable manage can create it without a
human, with no hand-partitioning step for an agent to get wrong. Impermanence,
an ephemeral root wiped on boot, is used on some machines and not others; it is
a per-machine choice, not a rule.
manage bootstraps sops by imperatively initializing the seed secrets: the
initrd SSH key for remote unlock and the userspace SSH key. This resolves a
chicken-and-egg problem, since the sops age keys derive from a host key a fresh
machine does not have yet. It can also side-step sops entirely when that is what
you want. That initrd SSH key is the remote-unlock capability: a machine can
boot encrypted and be unlocked over the network.
Transport is not fixed. manage pushes over SSH by default, but it can pull,
and it can consume signed artifacts instead.
A failed activation rolls back rather than stranding an encrypted, remote-unlock machine at a LUKS prompt no one can reach. That safety net is what lets Dolomite be bold about running modern, fast-moving components: a bad change is caught and reversed, not lived with in production.
When there is no SSH
Some products have no SSH access at all, HyperPrint
among them, where Dolomite forms the basis of the firmware. For those, a
companion daemon uses nix copy to pull builds from their CI. But the same
daemon can be pointed at a package source of the end user's choosing, and from
there build the entire OS from scratch. They do not need to trust us: the system
rebuilds itself from source they control and proves its own provenance, rather
than asking them to take our word.