{ config, pkgs, ... }: let port = toString config.services.searchix.settings.web.port; in { imports = [ ../settings/services/searchix.nix ../../packages/modules/nixos/goaccess.nix ]; services.searchix.settings.web = { baseURL = "https://searchix.ovh"; otherInstance = { name = "Searchix Stable"; url = "https://stable.searchix.ovh"; }; }; services.caddy.virtualHosts = { "searchix.ovh" = { extraConfig = '' root ${pkgs.searchix}/lib/searchix handle_errors { rewrite * /error.html templates file_server } import goaccess "searchix" handle { import defender import rate_limit reverse_proxy { to localhost:${port} lb_policy first # active health checks (service running) health_uri /health health_status 2xx health_interval 10s health_timeout 2s health_fails 2 # passive health checks max_fails 5 fail_duration 30s unhealthy_status 5xx } } encode zstd gzip { match { header Content-Type text/* header Content-Type application/json* header Content-Type application/javascript* header Content-Type application/opensearchdescription+xml header Content-Type application/atom+xml* header Content-Type application/rss+xml* header Content-Type image/svg+xml* } } ''; }; "searchix.alanpearce.eu" = { extraConfig = '' redir https://searchix.ovh{uri} permanent ''; }; }; services.goaccess = { user = "caddy"; group = "webservice"; instances = { searchix = { enable = true; dates = "hourly"; settings = { log-file = "${config.services.caddy.logDir}/access-searchix.ovh.log"; output = "/srv/http/access/searchix/index.html"; external-assets = true; log-format = "caddy"; anonymize-ip = true; anonymize-level = 2; persist = true; restore = true; keep-last = 90; # days }; }; }; }; }