diff options
Diffstat (limited to 'nixos/modules/services/search/tika.nix')
-rw-r--r-- | nixos/modules/services/search/tika.nix | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/nixos/modules/services/search/tika.nix b/nixos/modules/services/search/tika.nix new file mode 100644 index 0000000000000..94096b6db29fe --- /dev/null +++ b/nixos/modules/services/search/tika.nix @@ -0,0 +1,98 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + cfg = config.services.tika; + inherit (lib) + literalExpression + mkIf + mkEnableOption + mkOption + mkPackageOption + getExe + types + ; +in +{ + meta.maintainers = [ lib.maintainers.drupol ]; + + options = { + services.tika = { + enable = mkEnableOption "Apache Tika server"; + package = mkPackageOption pkgs "tika" { }; + + listenAddress = mkOption { + type = types.str; + default = "127.0.0.1"; + example = "0.0.0.0"; + description = '' + The Apache Tika bind address. + ''; + }; + + port = mkOption { + type = types.port; + default = 9998; + description = '' + The Apache Tike port to listen on + ''; + }; + + configFile = mkOption { + type = types.nullOr types.path; + default = null; + description = '' + The Apache Tika configuration (XML) file to use. + ''; + example = literalExpression "./tika/tika-config.xml"; + }; + + enableOcr = mkOption { + type = types.bool; + default = true; + description = '' + Whether to enable OCR support by adding the `tesseract` package as a dependency. + ''; + }; + + openFirewall = mkOption { + type = types.bool; + default = false; + description = '' + Whether to open the firewall for Apache Tika. + This adds `services.tika.port` to `networking.firewall.allowedTCPPorts`. + ''; + }; + }; + }; + + config = mkIf cfg.enable { + systemd.services.tika = { + description = "Apache Tika Server"; + + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + + serviceConfig = + let + package = cfg.package.override { inherit (cfg) enableOcr; }; + in + { + Type = "simple"; + + ExecStart = "${getExe package} --host ${cfg.listenAddress} --port ${toString cfg.port} ${ + lib.optionalString (cfg.configFile != null) "--config ${cfg.configFile}" + }"; + DynamicUser = true; + StateDirectory = "tika"; + CacheDirectory = "tika"; + }; + }; + + networking.firewall = mkIf cfg.openFirewall { allowedTCPPorts = [ cfg.port ]; }; + }; +} |