all repos — nixfiles @ ffe3c708845ceff09283cda3e8130ee31f3e9553

System and user configuration, managed by nix and home-manager

system/roles/searchix.nix (view raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
{
  config,
  inputs,
  pkgs,
  ...
}:
{
  imports = [
    inputs.searchix.nixosModules.web
  ];
  nixpkgs.overlays = [
    inputs.searchix.overlays.default
  ];

  services.searchix = {
    enable = true;
    environment = {
      GOMEMLIMIT = "1500MiB";
    };
    settings = {
      web = {
        baseURL = "https://searchix.ovh";
        searchTimeout = "2s";
      };

      importer.timeout = "2h";
      importer.sources = {
        darwin = {
          enable = true;
          fetcher = "download";
          url = "https://alinnow.github.io/nix-options/darwin";
        };
        home-manager = {
          enable = true;
          fetcher = "download";
          url = "https://alinnow.github.io/nix-options/home-manager";
        };
        nixpkgs = {
          enable = true;
          fetcher = "channel-nixpkgs";
          channel = "nixos-unstable";
          timeout = "1h";
        };
        nixos = {
          enable = true;
          fetcher = "channel-nixpkgs";
          channel = "nixos-unstable";
        };
        nur.enable = true;
      };
    };
  };

  systemd.services.searchix.serviceConfig = {
    MemoryHigh = "1.2G";
    MemoryMax = "1.5G";
  };
  services.caddy.virtualHosts = {
    "searchix.ovh" = {
      extraConfig = ''
        root ${pkgs.searchix}/lib/searchix
        handle_errors {
          rewrite * /error.html
          templates
          file_server
        }
        handle_path /stats/* {
          root /srv/http/access/searchix
          file_server
        }
        handle {
          reverse_proxy localhost:${toString config.services.searchix.settings.web.port} {
            health_uri /health
            health_status 2xx
            health_interval 10s
            health_timeout 1s
            health_fails 2
          }
        }
        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 = {
    group = "caddy";
    instances = {
      searchix = {
        enable = true;
        dates = "hourly";
        settings = {
          log-file = "${config.services.caddy.logDir}/access-searchix.ovh.log";
          output = "/srv/http/access/searchix/index.html";
          log-format = "caddy";
          anonymize-ip = true;
          anonymize-level = 2;
          persist = true;
          restore = true;
          keep-last = 90; # days
        };
      };
    };
  };

}