{
  config,
  pkgs,
  lib,
  ...
}:
let
  cfg = config.custom.forgejo-actions-runner;
  settingsFormat = pkgs.formats.yaml { };
in
{
  options = {
    custom.forgejo-actions-runner = {
      enable = lib.mkEnableOption "TPM supported ssh agent in go";
      tokenFile = lib.mkOption { type = lib.types.path; };
      settings = lib.mkOption {
        type = lib.types.submodule {
          freeformType = settingsFormat.type;
        };

        default = { };
      };
    };
  };
  config = lib.mkIf cfg.enable {
    virtualisation.docker.enable = true;
    services.gitea-actions-runner.package = pkgs.forgejo-actions-runner;
    services.gitea-actions-runner.instances = {
      "git.xinyang.life" = {
        enable = true;
        url = "https://git.xinyang.life";
        tokenFile = cfg.tokenFile;
        name = config.networking.hostName;
        labels = [
          "debian-latest:docker://node:18-bullseye"
          "ubuntu-latest:docker://node:18-bullseye"
          "nix:docker://xiny/nix-runner:2.21.0-pkgs-23.11"
        ];
        settings = {
          container.network = "host";
        } // cfg.settings;
      };
    };
  };
}
