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