current
 1{lib, ...}: {
 2  den.aspects.services.provides.woodpecker.provides.agent = {
 3    name,
 4    server,
 5    tokenFileAged,
 6    labels ? {},
 7    extraEnv ? {},
 8  }: let
 9    mapLabels = lib.concatMapAttrsStringSep "," (n: v: "${n}=${v}");
10  in {
11    nixos = {config, ...}: {
12      services.woodpecker-agents.agents.${name} = {
13        enable = true;
14        extraGroups = ["podman"];
15        environment =
16          {
17            WOODPECKER_AGENT_LABELS = mapLabels labels;
18            WOODPECKER_SERVER = server;
19            WOODPECKER_GRPC_SECURE = "true";
20            WOODPECKER_AGENT_SECRET_FILE = config.vaultix.secrets."woodpecker-agent-${name}-token".path;
21            WOODPECKER_MAX_WORKFLOWS = "4";
22            DOCKER_HOST = "unix:///run/podman/podman.sock";
23            WOODPECKER_BACKEND = "docker";
24            WOODPECKER_BACKEND_DOCKER_ENABLE_IPV6 = "true";
25          }
26          // extraEnv;
27      };
28
29      systemd.services."woodpecker-agent-${name}".serviceConfig = {
30        DynamicUser = lib.mkForce false;
31        User = "woodpecker-agent-${name}";
32        Group = "woodpecker-agent-${name}";
33      };
34
35      users.users."woodpecker-agent-${name}" = {
36        isSystemUser = true;
37        useDefaultShell = true;
38        group = "woodpecker-agent-${name}";
39      };
40      users.groups."woodpecker-agent-${name}" = {};
41
42      vaultix.secrets."woodpecker-agent-${name}-token" = {
43        file = tokenFileAged;
44        owner = "root";
45        group = "woodpecker-agent-${name}";
46        mode = "0440";
47      };
48    };
49  };
50}