grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / search / hound.nix
blob7aca1adc19b082167bd5bb8013924417e215d92b
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.hound;
4   settingsFormat = pkgs.formats.json { };
5 in {
6   imports = [
7     (lib.mkRemovedOptionModule [ "services" "hound" "extraGroups" ] "Use users.users.hound.extraGroups instead")
8     (lib.mkChangedOptionModule [ "services" "hound" "config" ] [ "services" "hound" "settings" ] (config: builtins.fromJSON config.services.hound.config))
9   ];
11   meta.maintainers = with lib.maintainers; [ SuperSandro2000 ];
13   options = {
14     services.hound = {
15       enable = lib.mkEnableOption "hound";
17       package = lib.mkPackageOption pkgs "hound" { };
19       user = lib.mkOption {
20         default = "hound";
21         type = lib.types.str;
22         description = ''
23           User the hound daemon should execute under.
24         '';
25       };
27       group = lib.mkOption {
28         default = "hound";
29         type = lib.types.str;
30         description = ''
31           Group the hound daemon should execute under.
32         '';
33       };
35       home = lib.mkOption {
36         default = "/var/lib/hound";
37         type = lib.types.path;
38         description = ''
39           The path to use as hound's $HOME.
40           If the default user "hound" is configured then this is the home of the "hound" user.
41         '';
42       };
44       settings = lib.mkOption {
45         type = settingsFormat.type;
46         example = lib.literalExpression ''
47           {
48             max-concurrent-indexers = 2;
49             repos.nixpkgs.url = "https://www.github.com/NixOS/nixpkgs.git";
50           }
51         '';
52         description = ''
53           The full configuration of the Hound daemon.
54           See the upstream documentation <https://github.com/hound-search/hound/blob/main/docs/config-options.md> for details.
56           :::{.note}
57           The `dbpath` should be an absolute path to a writable directory.
58           :::.com/hound-search/hound/blob/main/docs/config-options.md>.
59         '';
60       };
62       listen = lib.mkOption {
63         type = lib.types.str;
64         default = "0.0.0.0:6080";
65         example = ":6080";
66         description = ''
67           Listen on this [IP]:port
68         '';
69       };
70     };
71   };
73   config = lib.mkIf cfg.enable {
74     users.groups = lib.mkIf (cfg.group == "hound") {
75       hound = { };
76     };
78     users.users = lib.mkIf (cfg.user == "hound") {
79       hound = {
80         description = "Hound code search";
81         createHome = true;
82         isSystemUser = true;
83         inherit (cfg) home group;
84       };
85     };
87     environment.etc."hound/config.json".source = pkgs.writeTextFile {
88       name = "hound-config";
89       text = builtins.toJSON cfg.settings;
90       checkPhase = ''
91         ${cfg.package}/bin/houndd -check-conf -conf $out
92       '';
93     };
95     services.hound.settings = {
96       dbpath = "${config.services.hound.home}/data";
97     };
99     systemd.services.hound = {
100       description = "Hound Code Search";
101       wantedBy = [ "multi-user.target" ];
102       after = [ "network.target" ];
103       serviceConfig = {
104         User = cfg.user;
105         Group = cfg.group;
106         WorkingDirectory = cfg.home;
107         ExecStartPre = "${pkgs.git}/bin/git config --global --replace-all http.sslCAinfo /etc/ssl/certs/ca-certificates.crt";
108         ExecStart = "${cfg.package}/bin/houndd -addr ${cfg.listen} -conf /etc/hound/config.json";
109       };
110     };
111   };