{ config, lib, inputs, masterDomain, templates, ... }: let cfg = config.os.srv.omnisearch; in { imports = [ inputs.omnisearch.nixosModules.default ]; options.os.srv.omnisearch = { enable = lib.mkEnableOption "enables omnisearch tracking infrastructure"; role = lib.mkOption { type = lib.types.enum [ "server" "standalone" ]; default = "standalone"; description = "Designates the deployment method"; }; }; config = lib.mkIf cfg.enable ( lib.mkMerge [ { services.omnisearch = { enable = true; settings = { server = { host = "127.0.0.1"; port = 8087; locale = "en"; domain = if cfg.role == "server" then "https://search.${masterDomain}" else "http://localhost:8087"; }; proxy = { max_retries = 3; randomize_username = true; randomize_password = true; }; cache = { dir = "/var/cache/omnisearch"; ttl_search = 1800; ttl_infobox = 86400; }; }; }; } (lib.mkIf (cfg.role == "server") { assertions = [ { assertion = config.os.srv.nginx.enable; message = "Required for proxying"; } ]; services.nginx.virtualHosts."search.${masterDomain}" = { enableACME = true; forceSSL = true; locations."/" = { proxyPass = "http://127.0.0.1:8087"; proxyWebsockets = true; extraConfig = templates.restrictToInternal; }; }; }) ] ); }