Awesome
comin - GitOps for NixOS Machines
comin is a NixOS deployment tool operating in pull mode. Running on a machine, it periodically polls Git repositories and deploys the NixOS configuration associated to the machine.
Features
- :snowflake: Git push to deploy NixOS configurations
- :construction: Support testing branches to try changes
- :rocket: Poll multiple Git remotes to avoid SPOF
- :postbox: Support machines migrations
- :fast_forward: Fast iterations with local remotes
- :satellite: Observable via Prometheus metrics
- :pushpin: Create and delete system profiles
Quick start
This is a basic flake.nix
example:
{
inputs = {
nixpkgs.url = "github:nixOS/nixpkgs";
comin = {
url = "github:nlewo/comin";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, comin }: {
nixosConfigurations = {
myMachine = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
comin.nixosModules.comin
({...}: {
services.comin = {
enable = true;
remotes = [{
name = "origin";
url = "https://gitlab.com/your/infra.git";
branches.main.name = "main";
}];
};
})
];
};
};
};
}
This enables a systemd service, which periodically pulls the main
branch of the repository https://gitlab.com/your/infra.git
and
deploys the NixOS configuration corresponding to the machine hostname
myMachine
.
A new commit in the main
branch of the repository
https://gitlab.com/your/infra.git
is then deployed in the next 60
seconds.