labcoat is a TUI for deploying flake based NixOS systems. It lets you select
from a list of nixosConfigurations
available in your flake, giving you one
touch access to deploy and inspect those systems.
labcoat is ideal for managing NixOS lab environments up to a couple dozen systems; particularly during the development phase where you do not yet know if your configuration works correctly.
For production NixOS environments with many instances of the same configuration, you will be better served by a parallel deployment tool such as Colmena.
- Automatically fetch node list from nix flake
- Fetch individual node deploy configs (ie FQDN) from flake
- Fetch target host status on hover
- Build & deploy nix configuration to target host
- Launch interactive SSH into target host
- Reboot target host with confirmation
- Use ping to track host status during reboot
- Run specified command on target host
- Run configurable commands on target host, w/ optional confirmation
- Record/display per-node command and deployment history
- Gather target host deployment/generation state
- Flag out-of-date hosts in list UI
- External pager support
labcoat is currently incomplete, and alpha quality. However, it's good enough to manage my homelab, and maybe yours too.
From the directory containing your systems flake, execute:
nix run github:jhillyerd/labcoat
Alternately you may pass the path to a directory containing flake.nix as the last argument
nix run github:jhillyerd/labcoat -- ~/myflake/
For ideas on how to layout a system flake for labcoat, please see the examples directory.
labcoat contains a default configuration, and does not require a configuration
file. The -defaults
argument will print the default configuration to
stdout
.
If you want to make changes to the default configuration, it should be stored
in $XDG_HOME/labcoat/config.toml
. labcoat always layers your configuration
on top of it's defaults, so you may remove or comment out anything you don't
wish to change.
Create the TOML config file:
mkdir -p ~/.config/labcoat
nix run github:jhillyerd/labcoat -- -defaults > ~/.config/labcoat/config.toml
Contributions are welcome, with the following provisions:
- If you are not already familiar with The Elm Architecture, please read through the Bubble Tea Tutorial to learn basics.
- Please create a new Issue before starting work on large changes, to make sure they fit my vision for the project.
- I am not interested in supporting non-Nix tools, such as Ansible or Puppet. Please feel free to fork if that is your goal!