I just made the repository for navi public: https://github.com/cafkafk/navi.
It’s a specialized deployment tool for NixOS, forked from Colmena. It extends the core deployment capabilities you might be used to with a persistent daemon architecture, integrated infrastructure provisioning via Terraform/Terranix, and a terminal user interface (TUI) for managing large-scale fleets.
It looks something like this:
I built this because I wanted deep native integration between infrastructure provisioning and system configuration. While I could have just used an existing deployment tool as an input, I wouldn’t have had the necessary control over the internals. And there is a lot to be gained from this kind of tight integration.
This is actually based on some older work, but at vitvio, we found that we needed a tool that would scale with us across multiple teams and larger infrastructures than are typically managed in homelab environments. So I made that tool… enjoy!
Some key features include:
- TUI Dashboard: Launch
navi tuifor real-time fleet management, live monitoring, and interactive deployments. - Infrastructure Provisioning: Define Terraform resources alongside NixOS configurations in the same Hive, and manage lifecycle commands directly (
navi provision). - Daemon Architecture: A background service manages connections and task queues (i.e. deploy in the background).
- Disk Unlocking: Remote unlocking for encrypted ZFS pools via initrd SSH.
- Provenance: Answers questions such as “what is outdated”, “who did this” and “what commit is this host currently on”.
- Registrant support: Because it’s annoying that I have to touch HTTP just to deal with my domains.
It’s currently pretty GCP/bare-metal/nixos-anywhere centered (as those are my usecases), but it supports the whole lifecycle of provisioning, updating, reprovisoning and reinstalling a large fleet of machines across GCP and bare-metal from terraform/tofu/nothing → nixos-anywhere → normal “boot --reboot” ops.
A few major disclaimers:
- Security Notice: This tool is currently highly experimental. Do not use with production API keys or on multi-user systems, as credential handling is not yet hardened.
- Documentation: As of right now, the source code is the documentation. I don’t have the time to write or maintain formal docs at this stage. It’s often easier to just read the source code anyway.
- If you find yourself asking, “Why should I use this instead of [insert existing tool]?” The honest answer is: You really shouldn’t. Please don’t. At least, not yet. Expect breaking changes without notice.
Feel free to poke around the source code or try it out in a safe environment!
