Deploying to agents¶
Prerequisites¶
Start by getting your agent running.
Get Deploy Activate Auth Token¶
Click “Start a Deployment” on your workspace
Write the description of the token, for an example “github actions CD”
Click “Generate”
Copy the token and save it
Write Deploy specification¶
Depending on what are you deploying to an agent, here are some examples:
NixOS¶
The following deploys NixOS to the agent named myagent
in a file named flake.nix
:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.05";
cachix-deploy-flake.url = "github:cachix/cachix-deploy-flake";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils, cachix-deploy-flake }:
flake-utils.lib.eachDefaultSystem (
system: {
defaultPackage = let
pkgs = import nixpkgs { inherit system; };
cachix-deploy-lib = cachix-deploy-flake.lib pkgs;
in
cachix-deploy-lib.spec {
agents = {
myagent = cachix-deploy-lib.nixos {
fileSystems."/" = { device = "/dev/disk/by-label/nixos"; };
boot.loader.grub.devices = [ "/dev/sda" ];
boot.loader.grub.enable = true;
networking.hostName = "myagent";
};
};
};
}
);
}
To fully grasp the JSON specification see the reference.
nix-darwin¶
The following deploys nix-darwin to the agent named myagent
in a file named flake.nix
:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.05";
flake-utils.url = "github:numtide/flake-utils";
cachix-deploy-flake.url = "github:cachix/cachix-deploy-flake";
cachix-deploy-flake.inputs.darwin.follows = "darwin";
darwin.url = "github:LnL7/nix-darwin";
darwin.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = { self, flake-utils, darwin, nixpkgs, cachix-deploy-flake }:
flake-utils.lib.eachDefaultSystem (
system: {
defaultPackage = let
pkgs = import nixpkgs { inherit system; };
cachix-deploy-lib = cachix-deploy-flake.lib pkgs;
in
cachix-deploy-lib.spec {
agents = {
myagent = cachix-deploy-lib.darwin (
{ pkgs, ... }:
{
networking.hostName = "myagent";
services.cachix-agent.enable = true;
# Auto upgrade nix package and the daemon service.
services.nix-daemon.enable = true;
nix.package = pkgs.nix;
}
);
};
};
}
);
}
Simple Nix Profile¶
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.05";
flake-utils.url = "github:numtide/flake-utils";
cachix-deploy-flake.url = "github:cachix/cachix-deploy-flake";
};
outputs = { self, flake-utils, nixpkgs, cachix-deploy-flake }:
flake-utils.lib.eachDefaultSystem (
system: {
defaultPackage = let
pkgs = import nixpkgs { inherit system; };
cachix-deploy-lib = cachix-deploy-flake.lib pkgs;
in
cachix-deploy-lib.spec {
agents = {
myagent = pkgs.git;
};
};
}
);
}
Home Manager¶
The following deploys a standalone Home Manager to the agent named
myagent
in a file named flake.nix
:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.05";
flake-utils.url = "github:numtide/flake-utils";
cachix-deploy-flake.url = "github:cachix/cachix-deploy-flake";
cachix-deploy-flake.inputs.home-manager.follows = "home-manager";
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = { self, flake-utils, home-manager, nixpkgs, cachix-deploy-flake }:
flake-utils.lib.eachDefaultSystem (
system: {
defaultPackage = let
pkgs = nixpkgs.legacyPackages."${system}";
cachix-deploy-lib = cachix-deploy-flake.lib pkgs;
in
cachix-deploy-lib.spec {
agents = {
myagent = cachix-deploy-lib.homeManager { } (
{ pkgs, ... }:
{
home.username = "jdoe";
home.homeDirectory = "/home/jdoe";
home.stateVersion = "22.05";
services.cachix-agent = {
enable = true;
name = "myagent";
};
}
);
};
};
}
);
}
Activate the deployment¶
Assuming you’ve created a binary cache called mycache
:
you have a write token to replace
CACHE-TOKEN
previously generated token to replace
ACTIVATE-TOKEN
.
The following snippet will build your machine, push binaries to mycache
and deploy your agent:
export CACHIX_ACTIVATE_TOKEN=ACTIVATE-TOKEN
export CACHIX_AUTH_TOKEN=CACHE-TOKEN
spec=$(nix build --print-out-paths)
cachix push mycache $spec
cachix deploy activate $spec