{ options , lib , config , pkgs , modulesPath }: let cfg = config.services.que-server; in { options.services.que-server = { enable = lib.mkEnableOption "Enable the que-server service"; domain = lib.mkOption { type = lib.types.str; default = "que.run"; description = '' Domain on which to host que-server. This is passed to services.nginx.virtualHosts. directly. ''; }; port = lib.mkOption { type = lib.types.int; default = 3000; description = '' The port on which que-server will listen for incoming HTTP traffic. ''; }; package = lib.mkOption { type = lib.types.package; description = "que-server package to use"; }; }; config = lib.mkIf cfg.enable { systemd.services.que-server = { path = [ cfg.package ]; wantedBy = [ "multi-user.target" ]; script = '' ${cfg.package}/bin/que-server -p ${toString cfg.port} ''; description = '' Que server ''; serviceConfig = { KillSignal = "INT"; Type = "simple"; Restart = "on-abort"; RestartSec = "1"; }; }; services.nginx = { recommendedGzipSettings = true; recommendedOptimisation = true; recommendedProxySettings = true; recommendedTlsSettings = true; virtualHosts = { "${cfg.domain}" = { forceSSL = true; enableACME = true; locations."/" = { proxyPass = "http://localhost:${toString cfg.port}"; extraConfig = '' # forward the headers so the `guardIP` function works properly proxy_pass_request_headers on; ''; }; }; }; }; }; }