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.
- ❄️ Git push to deploy NixOS configurations
 - 🚧 Support testing branches to try changes
 - 🚀 Poll multiple Git remotes to avoid SPOF
 - 📮 Support machines migrations
 - ⏩ Fast iterations with local remotes
 - 📡 Observable via Prometheus metrics
 - 📌 Create and delete system profiles
 
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.