{ lib, config, pkgs, ... }: let cfg = config.services.gmnisrv; in { meta.maintainers = [lib.maintainers.bsima]; options.services.gmnisrv = { enable = lib.mkEnableOption "Enable the gmnisrv service"; listen = lib.mkOption { description = "Addresses and ports on which to listen."; default = lib.mkDefault "0.0.0.0:1965 [::]:1965"; }; settings = lib.mkOption { # type = cfgFormat.type; description = '' Configuration for gmnisrv. See gmnisrv.ini(5) for supported settings. ''; default = { ":tls" = {"store" = lib.mkDefault "${cfg.dataDir}/certs";}; }; }; dataDir = lib.mkOption { type = lib.types.str; default = "/var/lib/gemini"; description = "Where gmnisrv should store certs and other data."; }; }; config = lib.mkIf cfg.enable { systemd.services.gmnisrv = { description = "gmnisrv service"; wantedBy = ["multi-user.target"]; after = ["network-online.target"]; script = let ini = lib.generators.toINIWithGlobalSection {} { globalSection = {"listen" = cfg.listen;}; sections = cfg.settings; }; in "${pkgs.gmnisrv}/bin/gmnisrv -C ${ini}"; }; }; }