{ 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}"; }; }; }