{ ... }:
{
  services.forgejo = {
    enable = true;
    stateDir = "/var/lib/forgejo";

    database = {
      createDatabase = true;
      name = "forgejo";
      type = "postgres";
      user = "forgejo";
    };

    settings =
      let
        gcArgs = "--aggressive --no-cruft --prune=now";
        gcTimeout = 600;
      in
      {
        "cron.cleanup_actions".ENABLED = true;
        "cron.update_mirrors".SCHEDULE = "@midnight";
        "git".GC_ARGS = gcArgs;
        "git.timeout".GC = gcTimeout;
        "log".LEVEL = "Error";
        "repo-archive".ENABLED = false;
        "repository.issue".MAX_PINNED = 99999;
        "repository.pull-request".DEFAULT_MERGE_STYLE = "rebase";
        "service".DISABLE_REGISTRATION = true;
        "server" = {
          DOMAIN = "git.voronind.com";
          HTTP_ADDR = "0.0.0.0";
          ROOT_URL = "https://git.voronind.com";
          BUILTIN_SSH_SERVER_USER = "git";
          DISABLE_SSH = false;
          SSH_PORT = 22144;
          START_SSH_SERVER = true;
        };
        "ui" = {
          AMBIGUOUS_UNICODE_DETECTION = false;
        };
        "repository" = {
          DEFAULT_PRIVATE = "private";
          DEFAULT_PUSH_CREATE_PRIVATE = true;
        };
        "cron" = {
          ENABLED = true;
          RUN_AT_START = true;
        };
        "cron.git_gc_repos" = {
          ENABLED = true;
          ARGS = gcArgs;
          SCHEDULE = "@midnight";
          TIMEOUT = gcTimeout;
        };
      };
  };
}