# ABOUTME: Flake to build a custom Nix Docker image for Gitea Actions.
# ABOUTME: Includes coreutils (/bin/sleep), modern Nix with flakes, and CI tools.
{
  description = "Nix runner image for Gitea Actions";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = import nixpkgs { inherit system; };
      in {
        packages.default = pkgs.dockerTools.buildImage {
          name = "gitea.v.paler.net/alo/nix-runner";
          tag = "v4";

          copyToRoot = pkgs.buildEnv {
            name = "image-root";
            paths = with pkgs; [
              # Core utilities (provides /bin/sleep that act_runner needs)
              coreutils-full
              bash
              # Nix itself
              nix
              # For actions that need node
              nodejs_20
              # Common CI tools
              git
              curl
              jq
              skopeo
              # CA certificates for HTTPS
              cacert
            ];
            pathsToLink = [ "/bin" "/etc" ];
          };

          # Create temp directories without runAsRoot (which needs KVM)
          extraCommands = ''
            mkdir -p -m 1777 tmp
            mkdir -p -m 1777 var/tmp
          '';

          config = {
            Env = [
              "NIX_PAGER=cat"
              "USER=root"
              "SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"
              "NIX_SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"
              "NIX_CONFIG=experimental-features = nix-command flakes\nsandbox = false\nbuild-users-group =\nsubstituters = http://c3.mule-stork.ts.net:8501 https://cache.nixos.org\ntrusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= c3:sI3l1RN80xdehzXLA8u2P6352B0SyRPs2XiYy/YWYro="
            ];
          };
        };
      });
}
