summaryrefslogtreecommitdiff
path: root/modules/nixos/server/mixins/hercules.nix
diff options
context:
space:
mode:
authorseth <[email protected]>2024-02-11 03:12:54 -0500
committerseth <[email protected]>2024-02-11 03:15:48 -0500
commitdadd33514c1fdc8ba4890e9334ab0fb89c31d02a (patch)
tree20d8f9a31933ee143c5d6d1fefa92f3a5f6d402d /modules/nixos/server/mixins/hercules.nix
parent055b48c798039558e2ffde83b589ef6856917bbf (diff)
nixos/server: init (again)
Diffstat (limited to 'modules/nixos/server/mixins/hercules.nix')
-rw-r--r--modules/nixos/server/mixins/hercules.nix53
1 files changed, 53 insertions, 0 deletions
diff --git a/modules/nixos/server/mixins/hercules.nix b/modules/nixos/server/mixins/hercules.nix
new file mode 100644
index 0000000..103f58e
--- /dev/null
+++ b/modules/nixos/server/mixins/hercules.nix
@@ -0,0 +1,53 @@
+{
+ config,
+ lib,
+ unstable,
+ secretsDir,
+ ...
+}: let
+ cfg = config.server.mixins.hercules-ci;
+in {
+ options.server.mixins.hercules-ci = {
+ enable = lib.mkEnableOption "hercules-ci mixin";
+ manageSecrets =
+ lib.mkEnableOption "automatic secrets management"
+ // {
+ default = config.traits.secrets.enable;
+ };
+ };
+
+ config = lib.mkIf cfg.enable (
+ lib.mkMerge [
+ {
+ services.hercules-ci-agent = {
+ enable = true;
+ package = unstable.hercules-ci-agent;
+ };
+ }
+
+ (let
+ secretNames = [
+ "binaryCaches"
+ "clusterJoinToken"
+ "secretsJson"
+ ];
+ in
+ lib.mkIf cfg.manageSecrets {
+ age.secrets = lib.genAttrs secretNames (
+ file: {
+ file = "${secretsDir}/${file}.age";
+ mode = "400";
+ owner = "hercules-ci-agent";
+ group = "hercules-ci-agent";
+ }
+ );
+
+ services.hercules-ci-agent = {
+ settings = lib.mapAttrs' (name: lib.nameValuePair (name + "Path")) (
+ lib.genAttrs secretNames (name: config.age.secrets.${name}.path)
+ );
+ };
+ })
+ ]
+ );
+}