1{
2 pkgs,
3 config,
4 lib,
5 ...
6}:
7let
8 runnerBase = {
9 enable = true;
10 url = "https://git.pyrox.dev";
11 labels = [
12 "default:docker://git.pyrox.dev/pyrox/flake-base:latest"
13 "nodejs:docker://node:20"
14 "nodejs-alpine:docker://node:20-alpine"
15 "nodejs-lts:docker://node:20"
16 "nodejs-lts:docker://node:20-alpine"
17 "nodejs-latest:docker://node:21"
18 "nodejs-latest-alpine:docker://node:21-alpine"
19 "alpine:docker://alpine:3.19"
20 ];
21 settings = {
22 log.level = "info";
23 runner = {
24 insecure = false;
25 capacity = 4;
26 };
27 cache = {
28 enabled = true;
29 dir = "/var/lib/forgejo/runners/cache/";
30 host = "";
31 port = 0;
32 };
33 container = {
34 # Automatically create a network for containers
35 network = "";
36 enable_ipv6 = false;
37 };
38 };
39 };
40 cfg = config.py.services.forgejo-runner;
41in
42{
43 options.py.services.forgejo-runner = {
44 enable = lib.mkEnableOption "Forgejo Actions Runner configuration";
45 tokenFile = lib.mkOption {
46 type = lib.types.path;
47 description = "Token for default runner";
48 example = /path/to/token/file;
49 };
50 };
51
52 config.services.gitea-actions-runner = lib.mkIf cfg.enable {
53 package = pkgs.forgejo-runner;
54 instances = {
55 "${config.networking.hostName}-default" = runnerBase // {
56 inherit (cfg) tokenFile;
57 name = "${config.networking.hostName}";
58 };
59 };
60 };
61}