{ config, lib, pkgs, ... }: with lib; let cfg = config.qenya.services.forgejo; in { options.qenya.services.forgejo = { enable = mkEnableOption "Forgejo"; domain = mkOption { type = types.str; }; stateDir = mkOption { type = types.str; }; }; config = mkIf cfg.enable { # TODO: email out # TODO: interface customisation services = { nginx = { enable = true; virtualHosts = { ${cfg.domain} = { forceSSL = true; enableACME = true; locations."/".proxyPass = "http://[::1]:3000/"; }; }; }; forgejo = { enable = true; stateDir = cfg.stateDir; settings = { DEFAULT.APP_NAME = cfg.domain; cache = { ADAPTER = "twoqueue"; HOST = ''{"size": 100, "recent_ratio": 0.25, "ghost_ratio": 0.5}''; }; database = { DB_TYPE = "sqlite3"; SQLITE_JOURNAL_MODE = "WAL"; }; security.LOGIN_REMEMBER_DAYS = 365; server = { DOMAIN = cfg.domain; HTTP_PORT = 3000; ROOT_URL = "https://${cfg.domain}/"; }; service.DISABLE_REGISTRATION = true; }; }; }; networking.firewall.allowedTCPPorts = [ 80 443 ]; }; }