52 lines
1.9 KiB
Nix
52 lines
1.9 KiB
Nix
{ config, lib, ... }:
|
|
|
|
let
|
|
inherit (config) cluster flake;
|
|
in
|
|
|
|
{
|
|
perSystem = { config, pkgs, ... }: {
|
|
catalog.cluster = {
|
|
services = lib.mapAttrs (name: svc: {
|
|
description = "Cluster service: ${name}";
|
|
actions = let
|
|
mkDeployAction = { description, agents }: {
|
|
inherit description;
|
|
packages = [
|
|
config.packages.cachix
|
|
pkgs.tmux
|
|
];
|
|
command = let
|
|
cachixDeployJson = pkgs.writeText "cachix-deploy.json" (builtins.toJSON {
|
|
agents = lib.genAttrs agents (name: builtins.unsafeDiscardStringContext flake.nixosConfigurations.${name}.config.system.build.toplevel);
|
|
});
|
|
in ''
|
|
set -e
|
|
echo building ${toString (lib.length agents)} configurations in parallel
|
|
tmux new-session ${lib.concatStringsSep " split-window " (
|
|
map (host: let
|
|
drvPath = builtins.unsafeDiscardStringContext flake.nixosConfigurations.${host}.config.system.build.toplevel.drvPath;
|
|
in '' 'echo building configuration for ${host}; nix build -L --no-link --store "ssh-ng://${host}" --eval-store auto "${drvPath}^*"'\; '') agents
|
|
)} select-layout even-vertical
|
|
|
|
source ~/.config/cachix/deploy
|
|
cachix deploy activate ${cachixDeployJson}
|
|
echo
|
|
'';
|
|
};
|
|
in {
|
|
deployAll = mkDeployAction {
|
|
description = "Deploy ALL groups of this service.";
|
|
agents = lib.unique (lib.concatLists (lib.attrValues svc.nodes));
|
|
};
|
|
} // lib.mapAttrs' (group: agents: {
|
|
name = "deployGroup-${group}";
|
|
value = mkDeployAction {
|
|
description = "Deploy the '${group}' group of this service.";
|
|
inherit agents;
|
|
};
|
|
}) svc.nodes;
|
|
}) cluster.config.services;
|
|
};
|
|
};
|
|
}
|