Providers
A provider is where a node's machine comes from. Navi's reason to exist is that it drives the whole lifecycle from one declarative source — creating the machine, installing NixOS onto it, and switching it to its configuration — and the provider is the first link in that chain.
The lifecycle Navi covers is:
- Provisioning, creating the machine through Terraform.
- Installation, putting NixOS onto it with nixos-anywhere.
- Disk decryption, unlocking encrypted volumes in initrd.
- Configuration switching, activating the target NixOS configuration.
Without Navi these are separate tools stitched together by hand. With Navi they are one Nix-evaluated workflow, because the whole lifecycle is evaluated from the same Hive. An address that provisioning assigns becomes a fact that installation and switching read, without you copying it between tools.
Declaring a provider on a node
Provider settings live in a node's deployment block. They tell Navi how the
machine is created and how to reach it. The two providers documented here are:
- Google Cloud, for GCP virtual machines, including reaching instances with no public address through an Identity-Aware Proxy tunnel.
- Bare metal, for physical hosts you install over the network.
A node that has no provider — one that already exists and is reachable over SSH —
needs nothing here beyond deployment.targetHost. Navi begins managing it from
the apply step, the same point Colmena would.
What it scales to
The same command shape that deploys one node deploys a whole class of them, across both cloud and bare metal. Selecting more nodes widens an operation rather than adding steps to it, which is what makes a thirty-node fleet no harder to run than a single host.