{ config, pkgs, inputs, lib, ... }: let httpPort = 8000; agentPort = 9000; domain = "ci.cyplo.dev"; path = "/var/lib/woodpecker"; serverContainerName = "woodpecker-server"; uid = 2061; gid = 3061; systemUserName = "woodpecker"; systemGroupName = "woodpecker"; in { imports = [../nginx.nix]; users = { users."${systemUserName}" = { inherit uid; isSystemUser = true; isNormalUser = false; group = systemGroupName; extraGroups = ["podman"]; }; groups."${systemGroupName}" = { inherit gid; members = ["${systemUserName}"]; }; }; services.nginx = { virtualHosts = { "${domain}" = { forceSSL = true; enableACME = true; locations."/" = { proxyPass = "http://localhost:" + toString httpPort; }; }; }; }; sops.secrets."gitea-env" = { sopsFile = ./gitea.sops; format = "binary"; }; virtualisation.podman = { enable = true; defaultNetwork.dnsname.enable = true; }; networking.firewall.allowedTCPPorts = [agentPort]; virtualisation.oci-containers.containers = { "${serverContainerName}" = { image = "woodpeckerci/woodpecker-server@sha256:acb188797f93b1b9228415b4418b8b8d2153df2e21f8c0c561a893243a542439"; volumes = ["woodpecker-server-data:${path}"]; environmentFiles = ["${config.sops.secrets.gitea-env.path}"]; environment = { WOODPECKER_OPEN = "false"; WOODPECKER_ADMIN = "cyplo"; WOODPECKER_HOST = "https://${domain}"; WOODPECKER_GITEA = "true"; WOODPECKER_GITEA_URL = "https://git.cyplo.dev"; }; ports = [ "${toString httpPort}:${toString httpPort}" "${toString agentPort}:${toString agentPort}" ]; }; }; }