1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6
7 cfg = config.services.searx;
8
9 configFile = cfg.configFile;
10
11in
12
13{
14
15 ###### interface
16
17 options = {
18
19 services.searx = {
20
21 enable = mkEnableOption
22 "the searx server. See https://github.com/asciimoo/searx";
23
24 configFile = mkOption {
25 type = types.nullOr types.path;
26 default = null;
27 description = "
28 The path of the Searx server configuration file. If no file
29 is specified, a default file is used (default config file has
30 debug mode enabled).
31 ";
32 };
33
34 package = mkOption {
35 type = types.package;
36 default = pkgs.searx;
37 defaultText = "pkgs.searx";
38 description = "searx package to use.";
39 };
40
41 };
42
43 };
44
45
46 ###### implementation
47
48 config = mkIf config.services.searx.enable {
49
50 users.extraUsers.searx =
51 { uid = config.ids.uids.searx;
52 description = "Searx user";
53 createHome = true;
54 home = "/var/lib/searx";
55 };
56
57 users.extraGroups.searx =
58 { gid = config.ids.gids.searx;
59 };
60
61 systemd.services.searx =
62 {
63 description = "Searx server, the meta search engine.";
64 after = [ "network.target" ];
65 wantedBy = [ "multi-user.target" ];
66 serviceConfig = {
67 User = "searx";
68 ExecStart = "${cfg.package}/bin/searx-run";
69 };
70 } // (optionalAttrs (configFile != null) {
71 environment.SEARX_SETTINGS_PATH = configFile;
72 });
73
74 environment.systemPackages = [ cfg.package ];
75
76 };
77
78}