diff --git a/doc/searxng.md b/doc/searxng.md new file mode 100644 index 0000000..1361a51 --- /dev/null +++ b/doc/searxng.md @@ -0,0 +1,20 @@ +# Searxng + +[Searxng](https://github.com/searxng/searxng) is a free internet metasearch engine which aggregates results from various search services and databases. Users are neither tracked nor profiled. + +## Getting Started + +```nix +# In `perSystem.process-compose.` +{ + services.searxng."instance-name" = { + enable = true; + settings = { + use_default_settings = true; + server.port = 1234; + server.bind_address = "127.0.0.1"; + server.secret_key = "foobar"; + }; + }; +} +``` diff --git a/nix/default.nix b/nix/default.nix index a853a9a..1adbd7c 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -21,5 +21,6 @@ in ./cassandra.nix ./tempo.nix ./weaviate.nix + ./searxng.nix ]; } diff --git a/nix/searxng.nix b/nix/searxng.nix new file mode 100644 index 0000000..0dbfed4 --- /dev/null +++ b/nix/searxng.nix @@ -0,0 +1,73 @@ +{ + pkgs, + lib, + name, + config, + ... +}: +let + inherit (lib) types; + + settingType = + with types; + (oneOf [ + bool + int + float + str + (listOf settingType) + (attrsOf settingType) + ]) + // { + description = "JSON value"; + }; +in +{ + options = { + enable = lib.mkEnableOption name; + package = lib.mkPackageOption pkgs "searxng" { }; + + settings = lib.mkOption { + type = types.attrsOf settingType; + default = { + use_default_settings = true; + server.port = 8080; + server.bind_address = "127.0.0.1"; + server.secret_key = "secret"; + server.limiter = false; + }; + example = lib.literalExpression '' + { + use_default_settings = true; + server.port = 8080; + server.bind_address = "127.0.0.1"; + server.secret_key = "secret"; + } + ''; + description = '' + Searxng settings. These will be merged with (taking precedence over) + the default configuration. It's also possible to refer to + environment variables using the syntax `@VARIABLE_NAME@`. + ''; + }; + + outputs.settings = lib.mkOption { + type = types.deferredModule; + internal = true; + readOnly = true; + default = { + processes = { + "${name}" = + { + environment = { + SEARXNG_SETTINGS_PATH = "${pkgs.writeText "settings.yml" (builtins.toJSON config.settings)}"; + }; + command = lib.getExe config.package; + namespace = name; + availability.restart = "on_failure"; + }; + }; + }; + }; + }; +} diff --git a/nix/searxng_test.nix b/nix/searxng_test.nix new file mode 100644 index 0000000..2c874c4 --- /dev/null +++ b/nix/searxng_test.nix @@ -0,0 +1,15 @@ +{ pkgs, ... }: +{ + services.searxng."searxng1".enable = true; + + settings.processes.test = { + command = pkgs.writeShellApplication { + runtimeInputs = [ pkgs.curl ]; + text = '' + curl http://127.0.0.1:8080 + ''; + name = "searxng-test"; + }; + depends_on."searxng".condition = "process_healthy"; + }; +} diff --git a/test/flake.nix b/test/flake.nix index 4995218..287f41b 100644 --- a/test/flake.nix +++ b/test/flake.nix @@ -49,6 +49,7 @@ "${inputs.services-flake}/nix/cassandra_test.nix" "${inputs.services-flake}/nix/tempo_test.nix" "${inputs.services-flake}/nix/weaviate_test.nix" + "${inputs.services-flake}/nix/searxng_test.nix" ] ++ lib.optionals pkgs.stdenv.isLinux [ # Broken on Darwin: https://github.com/NixOS/nixpkgs/issues/316954 "${inputs.services-flake}/nix/grafana_test.nix"