diff --git a/modules/misc/news.nix b/modules/misc/news.nix index fce1eb689..b4c672f36 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -1152,6 +1152,14 @@ in A new module is available: 'programs.kakoune'. ''; } + + { + time = "2019-08-08T11:49:35+00:00"; + condition = hostPlatform.isLinux; + message = '' + A new module is available: 'services.hound'. + ''; + } ]; }; } diff --git a/modules/modules.nix b/modules/modules.nix index 1ec06144d..ba1fdb392 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -102,6 +102,7 @@ let (loadModule ./services/flameshot.nix { }) (loadModule ./services/gnome-keyring.nix { }) (loadModule ./services/gpg-agent.nix { }) + (loadModule ./services/hound.nix { condition = hostPlatform.isLinux; }) (loadModule ./services/imapnotify.nix { condition = hostPlatform.isLinux; }) (loadModule ./services/getmail.nix { condition = hostPlatform.isLinux; }) (loadModule ./services/kbfs.nix { }) diff --git a/modules/services/hound.nix b/modules/services/hound.nix new file mode 100644 index 000000000..a252a68d2 --- /dev/null +++ b/modules/services/hound.nix @@ -0,0 +1,84 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.services.hound; + + configFile = pkgs.writeText "hound-config.json" ( + builtins.toJSON { + max-concurrent-indexers = cfg.maxConcurrentIndexers; + dbpath = cfg.databasePath; + repos = cfg.repositories; + health-check-url = "/healthz"; + } + ); + + houndOptions = [ + "--addr ${cfg.listenAddress}" + "--conf ${configFile}" + ]; + +in + +{ + meta.maintainers = [ maintainers.adisbladis ]; + + options.services.hound = { + enable = mkEnableOption "hound"; + + maxConcurrentIndexers = mkOption { + type = types.ints.positive; + default = 2; + description = "Limit the amount of concurrent indexers."; + }; + + databasePath = mkOption { + type = types.path; + default = "${config.xdg.dataHome}/hound"; + defaultText = "\$XDG_DATA_HOME/hound"; + description = "The Hound database path."; + }; + + listenAddress = mkOption { + type = types.str; + default = "localhost:6080"; + description = "Listen address of the Hound daemon."; + }; + + repositories = mkOption { + type = types.attrsOf (types.uniq types.attrs); + default = {}; + example = literalExample '' + { + SomeGitRepo = { + url = "https://www.github.com/YourOrganization/RepoOne.git"; + ms-between-poll = 10000; + exclude-dot-files = true; + }; + } + ''; + description = "The repository configuration."; + }; + }; + + config = mkIf cfg.enable { + home.packages = [ pkgs.hound ]; + + systemd.user.services.hound = { + Unit = { + Description = "Hound source code search engine"; + }; + + Install = { + WantedBy = [ "default.target" ]; + }; + + Service = { + Environment = "PATH=${makeBinPath [ pkgs.mercurial pkgs.git ]}"; + ExecStart = "${pkgs.hound}/bin/houndd ${concatStringsSep " " houndOptions}"; + }; + }; + }; +}