{ lib, stdenv, fetchurl, unzip, elasticsearch }: let esVersion = elasticsearch.version; esPlugin = a@{ pluginName, installPhase ? '' mkdir -p $out/config mkdir -p $out/plugins ln -s ${elasticsearch}/lib ${elasticsearch}/modules $out ES_HOME=$out ${elasticsearch}/bin/elasticsearch-plugin install --batch -v file://$src rm $out/lib $out/modules '' , ... }: stdenv.mkDerivation (a // { inherit installPhase; pname = "elasticsearch-${pluginName}"; dontUnpack = true; # Work around the "unpacker appears to have produced no directories" # case that happens when the archive doesn't have a subdirectory. setSourceRoot = "sourceRoot=$(pwd)"; nativeBuildInputs = [ unzip ]; meta = a.meta // { platforms = elasticsearch.meta.platforms; maintainers = (a.meta.maintainers or [ ]) ++ (with lib.maintainers; [ offline ]); }; }); in { analysis-icu = esPlugin rec { name = "elasticsearch-analysis-icu-${version}"; pluginName = "analysis-icu"; version = esVersion; src = fetchurl { url = "https://artifacts.elastic.co/downloads/elasticsearch-plugins/${pluginName}/${pluginName}-${version}.zip"; sha256 = if version == "7.17.4" then "a4e881d86694ae70ab6b18f72ea700415971200145d33d438e57c0374d9fc16f" else if version == "6.8.21" then "06b1pavyggzfp4wwdql0q9nm3r7i9px9cagp4yh4nhxhnk4w5fiq" else throw "unsupported version ${version} for plugin ${pluginName}"; }; meta = with lib; { homepage = "https://github.com/elastic/elasticsearch/tree/master/plugins/analysis-icu"; description = "The ICU Analysis plugin integrates the Lucene ICU module into elasticsearch"; license = licenses.asl20; }; }; analysis-lemmagen = esPlugin rec { pluginName = "analysis-lemmagen"; version = esVersion; src = fetchurl { url = "https://github.com/vhyza/elasticsearch-${pluginName}/releases/download/v${version}/elasticsearch-${pluginName}-${version}-plugin.zip"; sha256 = if version == "7.17.3" then "1835f374230cb17193859cee22ac90e3d7a67fb41a55fd4578e840d708287a08" else if version == "6.8.21" then "0m80cn7vkcvk95v4pdmi6vk5ww7p01k0hj2iqb9g870vs6x2qjzv" else throw "unsupported version ${version} for plugin ${pluginName}"; }; meta = with lib; { homepage = "https://github.com/vhyza/elasticsearch-analysis-lemmagen"; description = "LemmaGen Analysis plugin provides jLemmaGen lemmatizer as Elasticsearch token filter"; license = licenses.asl20; }; }; analysis-phonetic = esPlugin rec { pluginName = "analysis-phonetic"; version = esVersion; src = fetchurl { url = "https://artifacts.elastic.co/downloads/elasticsearch-plugins/${pluginName}/${pluginName}-${version}.zip"; sha256 = if version == "7.17.4" then "1c8175b2dac54277c1f41981fb4a784829e74e6e74268381fe0c27bc6652704b" else if version == "6.8.21" then "07w8s4a5gvr9lzjzf629y8rx3kvs6zd1vl07ksw1paghp42yb354" else throw "unsupported version ${version} for plugin ${pluginName}"; }; meta = with lib; { homepage = "https://github.com/elastic/elasticsearch/tree/master/plugins/analysis-phonetic"; description = "The Phonetic Analysis plugin integrates phonetic token filter analysis with elasticsearch"; license = licenses.asl20; }; }; discovery-ec2 = esPlugin rec { pluginName = "discovery-ec2"; version = esVersion; src = fetchurl { url = "https://artifacts.elastic.co/downloads/elasticsearch-plugins/${pluginName}/${pluginName}-${version}.zip"; sha256 = if version == "7.17.4" then "702e446997bde5cb38af120a1cb4271d976fdd23444be49e53b6be3801d845a9" else if version == "6.8.21" then "1kdpbrasxwr3dn21zjrklp1s389rwa51fairygdwl8px9liwwfa5" else throw "unsupported version ${version} for plugin ${pluginName}"; }; meta = with lib; { homepage = "https://github.com/elastic/elasticsearch/tree/master/plugins/discovery-ec2"; description = "The EC2 discovery plugin uses the AWS API for unicast discovery."; license = licenses.asl20; }; }; ingest-attachment = esPlugin rec { pluginName = "ingest-attachment"; version = esVersion; src = fetchurl { url = "https://artifacts.elastic.co/downloads/elasticsearch-plugins/${pluginName}/${pluginName}-${version}.zip"; sha256 = if version == "7.17.4" then "7d1574a585a9db0988ee248159d51f62cce5578a8c082096ef3e26efdb24aee7" else if version == "6.8.21" then "0v31yyhjcdlqnjw1f9kihh7z3c6d31whc57hqqd1dn579n4s9rlz" else throw "unsupported version ${version} for plugin ${pluginName}"; }; meta = with lib; { homepage = "https://github.com/elastic/elasticsearch/tree/master/plugins/ingest-attachment"; description = "Ingest processor that uses Apache Tika to extract contents"; license = licenses.asl20; }; }; repository-s3 = esPlugin rec { pluginName = "repository-s3"; version = esVersion; src = fetchurl { url = "https://artifacts.elastic.co/downloads/elasticsearch-plugins/${pluginName}/${pluginName}-${esVersion}.zip"; sha256 = if version == "7.17.4" then "cad923a662db705d40ca29698aa118e9e4cc50ae564c426a76d5acb777a4f57c" else if version == "6.8.21" then "0sfh1az30q4f34zxig2fz8wn9gk53fmmxyg5pbi1svn9761p5awq" else throw "unsupported version ${version} for plugin ${pluginName}"; }; meta = with lib; { homepage = "https://github.com/elastic/elasticsearch/tree/master/plugins/repository-s3"; description = "The S3 repository plugin adds support for using AWS S3 as a repository for Snapshot/Restore."; license = licenses.asl20; }; }; repository-gcs = esPlugin rec { pluginName = "repository-gcs"; version = esVersion; src = fetchurl { url = "https://artifacts.elastic.co/downloads/elasticsearch-plugins/${pluginName}/${pluginName}-${esVersion}.zip"; sha256 = if version == "7.17.4" then "a50be4cea5c68ad7615f87d672ba160d027fdfde2be0578bb2dabd6384cc8108" else if version == "6.8.21" then "00lwj00rfdk6850gk1n86chiz2w6afpqn7jn588jdbwv41qh5mrv" else throw "unsupported version ${version} for plugin ${pluginName}"; }; meta = with lib; { homepage = "https://github.com/elastic/elasticsearch/tree/master/plugins/repository-gcs"; description = "The GCS repository plugin adds support for using Google Cloud Storage as a repository for Snapshot/Restore."; license = licenses.asl20; }; }; search-guard = let majorVersion = lib.head (builtins.splitVersion esVersion); in esPlugin rec { pluginName = "search-guard"; version = # https://docs.search-guard.com/latest/search-guard-versions if esVersion == "7.17.3" then "${esVersion}-53.1.0" else if esVersion == "6.8.21" then "${esVersion}-25.6" else throw "unsupported version ${esVersion} for plugin ${pluginName}"; src = if esVersion == "7.17.3" then fetchurl { url = "https://maven.search-guard.com/search-guard-suite-release/com/floragunn/search-guard-suite-plugin/${version}/search-guard-suite-plugin-${version}.zip"; sha256 = "b49b24f7b74043cb5bab93f18316ea71656a7668e61bf063ccaa7b0ee2302a31"; } else if esVersion == "6.8.21" then fetchurl { url = "https://maven.search-guard.com/search-guard-release/com/floragunn/search-guard-6/${version}/search-guard-6-${version}.zip"; sha256 = "19nj513wigwd0mzq747zax4fzvv5vi24f7j0636rydd9iv9cyhg2"; } else throw "unsupported version ${version} for plugin ${pluginName}"; meta = with lib; { homepage = "https://search-guard.com"; description = "Elasticsearch plugin that offers encryption, authentication, and authorisation."; license = licenses.asl20; }; }; }