From d07c67aaea61abc7780786b27c68131f2f02f475 Mon Sep 17 00:00:00 2001 From: Infinidoge Date: Tue, 25 Jul 2023 00:48:54 -0400 Subject: [PATCH] modules/soft-serve: refactor for soft-serve 0.5 --- modules/functionality/soft-serve.nix | 71 +++++++++++++++++++++++----- 1 file changed, 60 insertions(+), 11 deletions(-) diff --git a/modules/functionality/soft-serve.nix b/modules/functionality/soft-serve.nix index 35df04d..1f4c7e3 100644 --- a/modules/functionality/soft-serve.nix +++ b/modules/functionality/soft-serve.nix @@ -3,18 +3,54 @@ with lib; with lib.hlissner; let cfg = config.services.soft-serve; + mkIfNotNull = v: mkIf (v != null) v; in { options.services.soft-serve = with types; { enable = mkBoolOpt false; + host = mkOpt str ""; path = mkOpt path "/srv/soft-serve"; + initial_admin_keys = mkOpt (nullOr str) null; - port = mkOpt port 23231; - host = mkOpt str "0.0.0.0"; - key_path = mkOpt path "${cfg.path}/soft_serve_server_ed25519"; - repo_path = mkOpt path "${cfg.path}/repos"; - initial_admin_key = mkOpt (nullOr str) null; + name = mkOpt (nullOr str) null; + log_format = mkOpt (nullOr str) null; + + # TODO: Allow adding git hooks via Nix + + ssh = { + host = mkOpt str cfg.host; + port = mkOpt port 23231; + + public_url = mkOpt (nullOr str) null; + key_path = mkOpt (nullOr str) null; + client_key_path = mkOpt (nullOr str) null; + max_timeout = mkOpt (nullOr int) null; + idle_timeout = mkOpt (nullOr int) null; + }; + + git = { + host = mkOpt str cfg.host; + port = mkOpt port 9418; + + max_timeout = mkOpt (nullOr int) null; + idle_timeout = mkOpt (nullOr int) null; + max_connections = mkOpt (nullOr int) null; + }; + + http = { + host = mkOpt str cfg.host; + port = mkOpt port 23232; + + public_url = mkOpt (nullOr str) null; + tls_key_path = mkOpt (nullOr str) null; + tls_cert_path = mkOpt (nullOr str) null; + }; + + stats = { + host = mkOpt str cfg.host; + port = mkOpt port 23233; + }; }; config = mkIf cfg.enable { @@ -23,16 +59,29 @@ in after = [ "network.target" ]; description = "SSH Git server and TUI"; environment = { - SOFT_SERVE_PORT = toString cfg.port; - SOFT_SERVE_HOST = cfg.host; - SOFT_SERVE_KEY_PATH = cfg.key_path; - SOFT_SERVE_REPO_PATH = cfg.repo_path; - SOFT_SERVE_INITIAL_ADMIN_KEY = cfg.initial_admin_key; + SOFT_SERVE_DATA_PATH = cfg.path; + SOFT_SERVE_INITIAL_ADMIN_KEYS = mkIfNotNull cfg.initial_admin_keys; + + SOFT_SERVE_SSH_LISTEN_ADDR = "${cfg.ssh.host}:${toString cfg.ssh.port}"; + SOFT_SERVE_GIT_LISTEN_ADDR = "${cfg.git.host}:${toString cfg.git.port}"; + SOFT_SERVE_HTTP_LISTEN_ADDR = "${cfg.http.host}:${toString cfg.http.port}"; + SOFT_SERVE_STATS_LISTEN_ADDR = "${cfg.stats.host}:${toString cfg.stats.port}"; + + SOFT_SERVE_NAME = mkIfNotNull cfg.name; + + # TODO: Add the rest of the config override environment variables + # TODO: Document how configuration from Nix works, potentially adding a comment to the top of any existing `config.yaml` in `path` }; script = "${pkgs.soft-serve}/bin/soft serve"; serviceConfig.Type = "exec"; }; - networking.firewall.allowedTCPPorts = [ cfg.port ]; + networking.firewall.allowedTCPPorts = [ + cfg.ssh.port + cfg.git.port + cfg.http.port + cfg.stats.port + ]; }; } +