about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/nosql
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/servers/nosql')
-rw-r--r--nixpkgs/pkgs/servers/nosql/aerospike/default.nix40
-rw-r--r--nixpkgs/pkgs/servers/nosql/apache-jena/binary.nix27
-rw-r--r--nixpkgs/pkgs/servers/nosql/apache-jena/fuseki-binary.nix46
-rw-r--r--nixpkgs/pkgs/servers/nosql/apache-jena/fuseki-test.nix18
-rw-r--r--nixpkgs/pkgs/servers/nosql/arangodb/default.nix85
-rw-r--r--nixpkgs/pkgs/servers/nosql/cassandra/3.0.json4
-rw-r--r--nixpkgs/pkgs/servers/nosql/cassandra/3.0.nix7
-rw-r--r--nixpkgs/pkgs/servers/nosql/cassandra/3.11.json4
-rw-r--r--nixpkgs/pkgs/servers/nosql/cassandra/3.11.nix7
-rw-r--r--nixpkgs/pkgs/servers/nosql/cassandra/4.json4
-rw-r--r--nixpkgs/pkgs/servers/nosql/cassandra/4.nix8
-rw-r--r--nixpkgs/pkgs/servers/nosql/cassandra/generic.nix127
-rw-r--r--nixpkgs/pkgs/servers/nosql/cassandra/update-script.nix55
-rw-r--r--nixpkgs/pkgs/servers/nosql/dragonflydb/default.nix116
-rw-r--r--nixpkgs/pkgs/servers/nosql/dragonflydb/fixes.patch132
-rw-r--r--nixpkgs/pkgs/servers/nosql/dragonflydb/glog.patch553
-rw-r--r--nixpkgs/pkgs/servers/nosql/eventstore/default.nix84
-rw-r--r--nixpkgs/pkgs/servers/nosql/eventstore/deps.nix315
-rwxr-xr-xnixpkgs/pkgs/servers/nosql/eventstore/updater.sh21
-rw-r--r--nixpkgs/pkgs/servers/nosql/ferretdb/default.nix46
-rw-r--r--nixpkgs/pkgs/servers/nosql/immudb/default.nix62
-rw-r--r--nixpkgs/pkgs/servers/nosql/influxdb/default.nix88
-rw-r--r--nixpkgs/pkgs/servers/nosql/influxdb2/cli.nix34
-rw-r--r--nixpkgs/pkgs/servers/nosql/influxdb2/combined.nix12
-rw-r--r--nixpkgs/pkgs/servers/nosql/influxdb2/default.nix128
-rw-r--r--nixpkgs/pkgs/servers/nosql/influxdb2/no-deny-warnings.patch10
-rw-r--r--nixpkgs/pkgs/servers/nosql/influxdb2/provision.nix34
-rw-r--r--nixpkgs/pkgs/servers/nosql/influxdb2/token-manipulator.nix26
-rw-r--r--nixpkgs/pkgs/servers/nosql/janusgraph/default.nix48
-rw-r--r--nixpkgs/pkgs/servers/nosql/mongodb/4.4.nix20
-rw-r--r--nixpkgs/pkgs/servers/nosql/mongodb/5.0.nix28
-rw-r--r--nixpkgs/pkgs/servers/nosql/mongodb/6.0.nix18
-rw-r--r--nixpkgs/pkgs/servers/nosql/mongodb/asio-no-experimental-string-view-4-4.patch23
-rw-r--r--nixpkgs/pkgs/servers/nosql/mongodb/fix-build-with-boost-1.79-4_4.patch93
-rw-r--r--nixpkgs/pkgs/servers/nosql/mongodb/fix-build-with-boost-1.79-5_0-linux.patch90
-rw-r--r--nixpkgs/pkgs/servers/nosql/mongodb/fix-build-with-boost-1.79-5_0.patch90
-rw-r--r--nixpkgs/pkgs/servers/nosql/mongodb/fix-gcc-Wno-exceptions-5.0.patch44
-rw-r--r--nixpkgs/pkgs/servers/nosql/mongodb/forget-build-dependencies-4-4.patch33
-rw-r--r--nixpkgs/pkgs/servers/nosql/mongodb/mongodb.nix199
-rw-r--r--nixpkgs/pkgs/servers/nosql/neo4j/default.nix42
-rw-r--r--nixpkgs/pkgs/servers/nosql/questdb/default.nix42
-rw-r--r--nixpkgs/pkgs/servers/nosql/redis/default.nix91
-rw-r--r--nixpkgs/pkgs/servers/nosql/rethinkdb/default.nix59
-rw-r--r--nixpkgs/pkgs/servers/nosql/surrealdb/default.nix58
-rw-r--r--nixpkgs/pkgs/servers/nosql/victoriametrics/default.nix49
45 files changed, 3120 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/nosql/aerospike/default.nix b/nixpkgs/pkgs/servers/nosql/aerospike/default.nix
new file mode 100644
index 000000000000..9c0d034d7b3a
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/aerospike/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, openssl, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "aerospike-server";
+  version = "4.2.0.4";
+
+  src = fetchFromGitHub {
+    owner = "aerospike";
+    repo = "aerospike-server";
+    rev = version;
+    sha256 = "1vqi3xir4l57v62q1ns3713vajxffs6crss8fpvbcs57p7ygx3s7";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ autoconf automake libtool ];
+  buildInputs = [ openssl zlib ];
+
+  preBuild = ''
+    patchShebangs build/gen_version
+    substituteInPlace build/gen_version --replace 'git describe' 'echo ${version}'
+
+    # drop blanket -Werror
+    substituteInPlace make_in/Makefile.in --replace '-Werror' ""
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/udf
+    cp      target/Linux-x86_64/bin/asd $out/bin/asd
+    cp -dpR modules/lua-core/src        $out/share/udf/lua
+  '';
+
+  meta = with lib; {
+    description = "Flash-optimized, in-memory, NoSQL database";
+    homepage = "https://aerospike.com/";
+    license = licenses.agpl3;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ kalbasit ];
+    knownVulnerabilities = [ "CVE-2020-13151" ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/apache-jena/binary.nix b/nixpkgs/pkgs/servers/nosql/apache-jena/binary.nix
new file mode 100644
index 000000000000..2b7e3c04735d
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/apache-jena/binary.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, java, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "apache-jena";
+  version = "4.10.0";
+  src = fetchurl {
+    url = "mirror://apache/jena/binaries/apache-jena-${version}.tar.gz";
+    hash = "sha256-G2kCh5F2WfrSOCr+fEO02mlOSVfV2Oy3uZGNEarLR+M=";
+  };
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+  installPhase = ''
+    cp -r . "$out"
+    for i in "$out"/bin/*; do
+      wrapProgram "$i" --prefix "PATH" : "${java}/bin/"
+    done
+  '';
+  meta = with lib; {
+    description = "RDF database";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    homepage = "https://jena.apache.org";
+    downloadPage = "https://archive.apache.org/dist/jena/binaries/";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/apache-jena/fuseki-binary.nix b/nixpkgs/pkgs/servers/nosql/apache-jena/fuseki-binary.nix
new file mode 100644
index 000000000000..d748cdb7c4eb
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/apache-jena/fuseki-binary.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchurl
+, java
+, coreutils
+, which
+, makeWrapper
+  # For the test
+, pkgs
+}:
+
+stdenv.mkDerivation rec {
+  pname = "apache-jena-fuseki";
+  version = "4.9.0";
+  src = fetchurl {
+    url = "mirror://apache/jena/binaries/apache-jena-fuseki-${version}.tar.gz";
+    hash = "sha256-t25Q0lb+ecR12cDD1p6eZnzLxW0kZpPOFGvo5YK7AlI=";
+  };
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+  installPhase = ''
+    cp -r . "$out"
+    chmod +x $out/fuseki
+    ln -s "$out"/{fuseki-backup,fuseki-server,fuseki} "$out/bin"
+    for i in "$out"/bin/*; do
+      wrapProgram "$i" \
+        --prefix "PATH" : "${java}/bin/:${coreutils}/bin:${which}/bin" \
+        --set-default "FUSEKI_HOME" "$out" \
+        ;
+    done
+  '';
+  passthru = {
+    tests = {
+      basic-test = pkgs.callPackage ./fuseki-test.nix { };
+    };
+  };
+  meta = with lib; {
+    description = "SPARQL server";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.all;
+    homepage = "https://jena.apache.org";
+    downloadPage = "https://archive.apache.org/dist/jena/binaries/";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/apache-jena/fuseki-test.nix b/nixpkgs/pkgs/servers/nosql/apache-jena/fuseki-test.nix
new file mode 100644
index 000000000000..bbf98a838259
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/apache-jena/fuseki-test.nix
@@ -0,0 +1,18 @@
+{ lib, runCommand, apache-jena-fuseki, curl }:
+runCommand "fuseki-test-${apache-jena-fuseki.name}"
+{ nativeBuildInputs = [ curl apache-jena-fuseki ]; } ''
+  export FUSEKI_BASE="$PWD/fuseki-base"
+  mkdir -p "$FUSEKI_BASE/db"
+  FUSEKI_ARGS="--update --loc=$FUSEKI_BASE/db /dataset" fuseki start
+  fuseki status
+  for i in $(seq 120); do
+      if  curl http://127.0.0.1:3030/dataset/data; then
+          break;
+      fi
+      sleep 1
+  done
+  curl -d 'update=insert+data+{+<test://subject>+<test://predicate>+<test://object>+}' http://127.0.0.1:3030/dataset/update > /dev/null
+  curl http://127.0.0.1:3030/dataset/data | grep -C999 'test://predicate'
+  curl -d 'query=select+?s+?p+?o+where+{+?s+?p+?o+.+}' http://127.0.0.1:3030/dataset/query | grep -C999 'test://predicate'
+  touch $out
+''
diff --git a/nixpkgs/pkgs/servers/nosql/arangodb/default.nix b/nixpkgs/pkgs/servers/nosql/arangodb/default.nix
new file mode 100644
index 000000000000..52b9125e99d5
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/arangodb/default.nix
@@ -0,0 +1,85 @@
+{
+  # gcc 11.2 suggested on 3.10.5.2.
+  # gcc 11.3.0 unsupported yet, investigate gcc support when upgrading
+  # See https://github.com/arangodb/arangodb/issues/17454
+  gcc10Stdenv
+, git
+, lib
+, fetchFromGitHub
+, openssl
+, zlib
+, cmake
+, python3
+, perl
+, snappy
+, lzo
+, which
+, targetArchitecture ? null
+, asmOptimizations ? gcc10Stdenv.hostPlatform.isx86
+}:
+
+let
+  defaultTargetArchitecture =
+    if gcc10Stdenv.hostPlatform.isx86
+    then "haswell"
+    else "core";
+
+  targetArch =
+    if targetArchitecture == null
+    then defaultTargetArchitecture
+    else targetArchitecture;
+in
+
+gcc10Stdenv.mkDerivation rec {
+  pname = "arangodb";
+  version = "3.10.5.2";
+
+  src = fetchFromGitHub {
+    repo = "arangodb";
+    owner = "arangodb";
+    rev = "v${version}";
+    sha256 = "sha256-64iTxhG8qKTSrTlH/BWDJNnLf8VnaCteCKfQ9D2lGDQ=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake git perl python3 which ];
+
+  buildInputs = [ openssl zlib snappy lzo ];
+
+  # prevent failing with "cmake-3.13.4/nix-support/setup-hook: line 10: ./3rdParty/rocksdb/RocksDBConfig.cmake.in: No such file or directory"
+  dontFixCmake = true;
+  env.NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  postPatch = ''
+    sed -ie 's!/bin/echo!echo!' 3rdParty/V8/gypfiles/*.gypi
+
+    # with nixpkgs, it has no sense to check for a version update
+    substituteInPlace js/client/client.js --replace "require('@arangodb').checkAvailableVersions();" ""
+    substituteInPlace js/server/server.js --replace "require('@arangodb').checkAvailableVersions();" ""
+  '';
+
+  preConfigure = ''
+    patchShebangs utils
+  '';
+
+  cmakeBuildType = "RelWithDebInfo";
+
+  cmakeFlags = [
+    "-DUSE_MAINTAINER_MODE=OFF"
+    "-DUSE_GOOGLE_TESTS=OFF"
+
+    # avoid reading /proc/cpuinfo for feature detection
+    "-DTARGET_ARCHITECTURE=${targetArch}"
+  ] ++ lib.optionals asmOptimizations [
+    "-DASM_OPTIMIZATIONS=ON"
+    "-DHAVE_SSE42=${if gcc10Stdenv.hostPlatform.sse4_2Support then "ON" else "OFF"}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.arangodb.com";
+    description = "A native multi-model database with flexible data models for documents, graphs, and key-values";
+    license = licenses.asl20;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ flosse jsoo1 ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/cassandra/3.0.json b/nixpkgs/pkgs/servers/nosql/cassandra/3.0.json
new file mode 100644
index 000000000000..968edce704b3
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/cassandra/3.0.json
@@ -0,0 +1,4 @@
+{
+  "version": "3.0.28",
+  "sha256": "1x06sxzppipi0jg0qvk26iicqwf28y0aik7c732r0yd1vz4vdwq6"
+}
diff --git a/nixpkgs/pkgs/servers/nosql/cassandra/3.0.nix b/nixpkgs/pkgs/servers/nosql/cassandra/3.0.nix
new file mode 100644
index 000000000000..ce2da3391be1
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/cassandra/3.0.nix
@@ -0,0 +1,7 @@
+{ callPackage, lib, ... } @ args:
+callPackage ./generic.nix (
+  args
+  // lib.importJSON ./3.0.json
+  // {
+    generation = "3_0";
+  })
diff --git a/nixpkgs/pkgs/servers/nosql/cassandra/3.11.json b/nixpkgs/pkgs/servers/nosql/cassandra/3.11.json
new file mode 100644
index 000000000000..e47f78b7baf8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/cassandra/3.11.json
@@ -0,0 +1,4 @@
+{
+  "version": "3.11.12",
+  "sha256": "16j58l7r47qrfh8q7fm92y935ykgvnbj3qn984c42qda15x92hkw"
+}
diff --git a/nixpkgs/pkgs/servers/nosql/cassandra/3.11.nix b/nixpkgs/pkgs/servers/nosql/cassandra/3.11.nix
new file mode 100644
index 000000000000..695478f05030
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/cassandra/3.11.nix
@@ -0,0 +1,7 @@
+{ callPackage, lib, ... } @ args:
+callPackage ./generic.nix (
+  args
+  // lib.importJSON ./3.11.json
+  // {
+    generation = "3_11";
+  })
diff --git a/nixpkgs/pkgs/servers/nosql/cassandra/4.json b/nixpkgs/pkgs/servers/nosql/cassandra/4.json
new file mode 100644
index 000000000000..c200c867bfe2
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/cassandra/4.json
@@ -0,0 +1,4 @@
+{
+  "version": "4.1.2",
+  "sha256": "003p0985fr3l09qpw44rhys3dp9zl2bl46vasix18p2cxq0j8sw5"
+}
diff --git a/nixpkgs/pkgs/servers/nosql/cassandra/4.nix b/nixpkgs/pkgs/servers/nosql/cassandra/4.nix
new file mode 100644
index 000000000000..5674d4866475
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/cassandra/4.nix
@@ -0,0 +1,8 @@
+# GENERATED BY update.sh
+{ callPackage, lib, ... } @ args:
+callPackage ./generic.nix (
+  args
+  // lib.importJSON ./4.json
+  // {
+    generation = "4";
+  })
diff --git a/nixpkgs/pkgs/servers/nosql/cassandra/generic.nix b/nixpkgs/pkgs/servers/nosql/cassandra/generic.nix
new file mode 100644
index 000000000000..45bea6fed4c5
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/cassandra/generic.nix
@@ -0,0 +1,127 @@
+{ lib
+, stdenv
+, fetchurl
+, python
+, makeWrapper
+, gawk
+, bash
+, getopt
+, procps
+, which
+, jre
+, nixosTests
+  # generation is the attribute version suffix such as 3_11 in pkgs.cassandra_3_11
+, generation
+, version
+, sha256
+, extraMeta ? { }
+, callPackage
+, ...
+}:
+
+let
+  libPath = lib.makeLibraryPath [ stdenv.cc.cc ];
+  binPath = lib.makeBinPath [
+    bash
+    getopt
+    gawk
+    which
+    jre
+    procps
+  ];
+in
+
+stdenv.mkDerivation rec {
+  pname = "cassandra";
+  inherit version;
+
+  src = fetchurl {
+    inherit sha256;
+    url = "mirror://apache/cassandra/${version}/apache-cassandra-${version}-bin.tar.gz";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    mv * $out
+
+    # Clean up documentation.
+    mkdir -p $out/share/doc/${pname}-${version}
+    mv $out/CHANGES.txt \
+       $out/LICENSE.txt \
+       $out/NEWS.txt \
+       $out/NOTICE.txt \
+       $out/share/doc/${pname}-${version}
+
+    if [[ -d $out/doc ]]; then
+      mv "$out/doc/"* $out/share/doc/${pname}-${version}
+      rmdir $out/doc
+    fi
+
+
+    for cmd in bin/cassandra \
+               bin/nodetool \
+               bin/sstablekeys \
+               bin/sstableloader \
+               bin/sstablescrub \
+               bin/sstableupgrade \
+               bin/sstableutil \
+               bin/sstableverify; do
+      # Check if file exists because some don't exist across all versions
+      if [ -f $out/$cmd ]; then
+        wrapProgram $out/bin/$(basename "$cmd") \
+          --suffix-each LD_LIBRARY_PATH : ${libPath} \
+          --prefix PATH : ${binPath} \
+          --set JAVA_HOME ${jre}
+      fi
+    done
+
+    for cmd in tools/bin/cassandra-stress \
+               tools/bin/cassandra-stressd \
+               tools/bin/sstabledump \
+               tools/bin/sstableexpiredblockers \
+               tools/bin/sstablelevelreset \
+               tools/bin/sstablemetadata \
+               tools/bin/sstableofflinerelevel \
+               tools/bin/sstablerepairedset \
+               tools/bin/sstablesplit \
+               tools/bin/token-generator; do
+      # Check if file exists because some don't exist across all versions
+      if [ -f $out/$cmd ]; then
+        makeWrapper $out/$cmd $out/bin/$(basename "$cmd") \
+          --suffix-each LD_LIBRARY_PATH : ${libPath} \
+          --prefix PATH : ${binPath} \
+          --set JAVA_HOME ${jre}
+      fi
+    done
+
+    wrapProgram $out/bin/cqlsh --prefix PATH : ${python}/bin
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    tests =
+      let
+        test = nixosTests."cassandra_${generation}";
+      in
+      {
+        nixos =
+          assert test.testPackage.version == version;
+          test;
+      };
+
+    updateScript = callPackage ./update-script.nix { inherit generation; };
+  };
+
+  meta = with lib; {
+    homepage = "https://cassandra.apache.org/";
+    description = "A massively scalable open source NoSQL database";
+    platforms = platforms.unix;
+    license = licenses.asl20;
+    maintainers = [ maintainers.roberth ];
+  } // extraMeta;
+}
diff --git a/nixpkgs/pkgs/servers/nosql/cassandra/update-script.nix b/nixpkgs/pkgs/servers/nosql/cassandra/update-script.nix
new file mode 100644
index 000000000000..b407b704fdfd
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/cassandra/update-script.nix
@@ -0,0 +1,55 @@
+{ git
+, lib
+, runtimeShell
+, writeScript
+, generation
+, gnupg
+}:
+let
+  inherit (lib) makeBinPath;
+  filename = lib.strings.replaceStrings [ "_" ] [ "." ] generation + ".json";
+  regex = lib.strings.replaceStrings [ "_" ] [ "[.]" ] generation;
+in
+writeScript "update-cassandra_${generation}" ''
+  #!${runtimeShell}
+  set -eux -o pipefail
+  test -d pkgs -a -d nixos -a -d lib || {
+    echo >&2 "$0 expects to be run in a nixpkgs checkout"
+    exit 1
+  }
+  cd pkgs/servers/nosql/cassandra
+  PATH="${makeBinPath [git gnupg]}:$PATH"
+
+  tmp="$(mktemp -d)"
+  cleanup() {
+    rm -rf "$tmp"
+  }
+  trap cleanup EXIT
+
+  # get numeric-only versions, sort them latest first
+  git ls-remote --tags https://github.com/apache/cassandra \
+    | awk '{ if (match($0, /refs.tags.cassandra-([0-9.]*)$/, m)) print m[1] }' \
+    | sort -V \
+    | tac >$tmp/versions
+
+  version="$(grep -E '^${regex}' <$tmp/versions | head -n 1)"
+  path="cassandra/$version/apache-cassandra-$version-bin.tar.gz"
+  curl "https://downloads.apache.org/$path" >$tmp/src.tar.gz
+  curl "https://downloads.apache.org/$path.asc" >$tmp/src.tar.gz.asc
+
+  # See https://downloads.apache.org/cassandra/KEYS
+  # Make sure that any new key corresponds to someone on the project
+  for key in A4C465FEA0C552561A392A61E91335D77E3E87CB; do
+    gpg --trustdb-name "$tmp/trust.db" --batch --recv-keys "$key"
+    echo "$key:5:" | gpg --trustdb-name "$tmp/trust.db" --batch --import-ownertrust
+  done
+  gpg --trustdb-name "$tmp/trust.db" --batch --verify --trust-model direct $tmp/src.tar.gz.asc $tmp/src.tar.gz
+
+  hash="$(nix-prefetch-url "file://$tmp/src.tar.gz")"
+  cat >${filename} <<EOF
+  {
+    "version": "$version",
+    "sha256": "$hash"
+  }
+  EOF
+''
diff --git a/nixpkgs/pkgs/servers/nosql/dragonflydb/default.nix b/nixpkgs/pkgs/servers/nosql/dragonflydb/default.nix
new file mode 100644
index 000000000000..e73f00164fe9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/dragonflydb/default.nix
@@ -0,0 +1,116 @@
+{ fetchFromGitHub
+, fetchurl
+, lib
+, stdenv
+, double-conversion
+, gperftools
+, mimalloc
+, rapidjson
+, liburing
+, xxHash
+, gbenchmark
+, glog
+, gtest
+, jemalloc
+, gcc-unwrapped
+, autoconf
+, autoconf-archive
+, automake
+, cmake
+, ninja
+, boost
+, libunwind
+, libtool
+, openssl
+}:
+
+let
+  pname = "dragonflydb";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = "dragonfly";
+    rev = "v${version}";
+    hash = "sha256-P6WMW/n+VezWDXGagT4B+ZYyCp8oufDV6MTrpKpLZcs=";
+    fetchSubmodules = true;
+  };
+
+  # Needed exactly 5.4.4 for patch to work
+  lua = fetchurl {
+    url = "https://github.com/lua/lua/archive/refs/tags/v5.4.4.tar.gz";
+    hash = "sha256-L/ibvqIqfIuRDWsAb1ukVZ7c9GiiVTfO35mI7ZD2tFA=";
+  };
+
+  # Needed exactly 20211102.0 for patch to work
+  abseil-cpp_202111 = fetchFromGitHub {
+    owner = "abseil";
+    repo = "abseil-cpp";
+    rev = "20211102.0";
+    sha256 = "sha256-sSXT6D4JSrk3dA7kVaxfKkzOMBpqXQb0WbMYWG+nGwk=";
+  };
+in
+stdenv.mkDerivation {
+  inherit pname version src;
+
+  postPatch = ''
+    mkdir -p ./build/{third_party,_deps}
+    ln -s ${double-conversion.src} ./build/third_party/dconv
+    ln -s ${mimalloc.src} ./build/third_party/mimalloc
+    ln -s ${rapidjson.src} ./build/third_party/rapidjson
+    ln -s ${gbenchmark.src} ./build/_deps/benchmark-src
+    ln -s ${gtest.src} ./build/_deps/gtest-src
+    cp -R --no-preserve=mode,ownership ${gperftools.src} ./build/third_party/gperf
+    cp -R --no-preserve=mode,ownership ${liburing.src} ./build/third_party/uring
+    cp -R --no-preserve=mode,ownership ${xxHash.src} ./build/third_party/xxhash
+    cp -R --no-preserve=mode,ownership ${abseil-cpp_202111} ./build/_deps/abseil_cpp-src
+    cp -R --no-preserve=mode,ownership ${glog.src} ./build/_deps/glog-src
+    chmod u+x ./build/third_party/uring/configure
+    cp ./build/third_party/xxhash/cli/xxhsum.{1,c} ./build/third_party/xxhash
+    patch -p1 -d ./build/_deps/glog-src < ${./glog.patch}
+    sed '
+    s@REPLACEJEMALLOCURL@file://${jemalloc.src}@
+    s@REPLACELUAURL@file://${lua}@
+    ' ${./fixes.patch} | patch -p1
+  '';
+
+  nativeBuildInputs = [
+    autoconf
+    autoconf-archive
+    automake
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    boost
+    libunwind
+    libtool
+    openssl
+  ];
+
+  cmakeFlags = [
+    "-DCMAKE_AR=${gcc-unwrapped}/bin/gcc-ar"
+    "-DCMAKE_RANLIB=${gcc-unwrapped}/bin/gcc-ranlib"
+  ];
+
+  ninjaFlags = [ "dragonfly" ];
+
+  doCheck = false;
+  dontUseNinjaInstall = true;
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp ./dragonfly $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A modern replacement for Redis and Memcached";
+    homepage = "https://dragonflydb.io/";
+    license = licenses.bsl11;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ yureien ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/dragonflydb/fixes.patch b/nixpkgs/pkgs/servers/nosql/dragonflydb/fixes.patch
new file mode 100644
index 000000000000..d2992fbbaf82
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/dragonflydb/fixes.patch
@@ -0,0 +1,132 @@
+diff --git a/helio/cmake/third_party.cmake b/helio/cmake/third_party.cmake
+index aeb78d9..e9d4e6b 100644
+--- a/helio/cmake/third_party.cmake
++++ b/helio/cmake/third_party.cmake
+@@ -143,7 +143,7 @@ endfunction()
+ 
+ FetchContent_Declare(
+   gtest
+-  URL https://github.com/google/googletest/archive/release-1.11.0.zip
++  DOWNLOAD_COMMAND true
+ )
+ 
+ FetchContent_GetProperties(gtest)
+@@ -154,7 +154,7 @@ endif ()
+ 
+ FetchContent_Declare(
+   benchmark
+-  URL https://github.com/google/benchmark/archive/v1.6.1.tar.gz
++  DOWNLOAD_COMMAND true
+ )
+ 
+ FetchContent_GetProperties(benchmark)
+@@ -169,7 +169,7 @@ endif ()
+ 
+ FetchContent_Declare(
+   abseil_cpp
+-  URL https://github.com/abseil/abseil-cpp/archive/20211102.0.tar.gz
++  DOWNLOAD_COMMAND true
+   PATCH_COMMAND patch -p1 < "${CMAKE_CURRENT_LIST_DIR}/../patches/abseil-20211102.patch"
+ )
+ 
+@@ -183,11 +183,7 @@ endif()
+ 
+ FetchContent_Declare(
+   glog
+-  GIT_REPOSITORY https://github.com/romange/glog
+-  GIT_TAG Absl
+-
+-  GIT_PROGRESS    TRUE
+-  GIT_SHALLOW     TRUE
++  DOWNLOAD_COMMAND true
+ )
+ 
+ FetchContent_GetProperties(glog)
+@@ -233,10 +229,7 @@ endif()
+ 
+ add_third_party(
+   gperf
+-  URL https://github.com/gperftools/gperftools/archive/gperftools-2.9.1.tar.gz
+-  #GIT_REPOSITORY https://github.com/gperftools/gperftools
+-  #GIT_TAG gperftools-2.9.1
+-  GIT_SHALLOW TRUE
++  DOWNLOAD_COMMAND true
+   PATCH_COMMAND autoreconf -i   # update runs every time for some reason
+   # CMAKE_PASS_FLAGS "-DGPERFTOOLS_BUILD_HEAP_PROFILER=OFF -DGPERFTOOLS_BUILD_HEAP_CHECKER=OFF \
+   #                   -DGPERFTOOLS_BUILD_DEBUGALLOC=OFF -DBUILD_TESTING=OFF  \
+@@ -260,11 +253,12 @@ else()
+ endif()
+ 
+ add_third_party(mimalloc
+-  URL https://github.com/microsoft/mimalloc/archive/refs/tags/v2.0.5.tar.gz
++  DOWNLOAD_COMMAND true
+ 
+   # Add -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-O0 to debug
+   CMAKE_PASS_FLAGS "-DCMAKE_BUILD_TYPE=Release -DMI_BUILD_SHARED=OFF -DMI_BUILD_TESTS=OFF \
+-                    -DMI_INSTALL_TOPLEVEL=ON -DMI_OVERRIDE=${MI_OVERRIDE} -DCMAKE_C_FLAGS=-g"
++                    -DMI_INSTALL_TOPLEVEL=ON -DMI_OVERRIDE=${MI_OVERRIDE} -DCMAKE_C_FLAGS=-g \
++                    -DCMAKE_INSTALL_LIBDIR=${THIRD_PARTY_LIB_DIR}/mimalloc/lib"
+ 
+   BUILD_COMMAND make -j4 mimalloc-static
+   INSTALL_COMMAND make install
+@@ -274,7 +268,7 @@ add_third_party(mimalloc
+ )
+ 
+ add_third_party(jemalloc
+-  URL https://github.com/jemalloc/jemalloc/releases/download/5.2.1/jemalloc-5.2.1.tar.bz2
++  URL REPLACEJEMALLOCURL
+   PATCH_COMMAND ./autogen.sh
+   CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${THIRD_PARTY_LIB_DIR}/jemalloc --with-jemalloc-prefix=je_ --disable-libdl
+ )
+@@ -282,24 +276,23 @@ add_third_party(jemalloc
+ 
+ add_third_party(
+   xxhash
+-  URL https://github.com/Cyan4973/xxHash/archive/v0.8.0.tar.gz
++  DOWNLOAD_COMMAND true
+   SOURCE_SUBDIR cmake_unofficial
+-  CMAKE_PASS_FLAGS "-DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=OFF"
++  CMAKE_PASS_FLAGS "-DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=OFF \
++                    -DCMAKE_INSTALL_LIBDIR=${THIRD_PARTY_LIB_DIR}/xxhash/lib"
+ )
+ 
+ 
+ add_third_party(
+   uring
+-  GIT_REPOSITORY https://github.com/axboe/liburing.git
+-  GIT_TAG liburing-2.1
++  DOWNLOAD_COMMAND true
+   CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${THIRD_PARTY_LIB_DIR}/uring
+   BUILD_IN_SOURCE 1
+ )
+ 
+ add_third_party(
+   rapidjson
+-  GIT_REPOSITORY https://github.com/Tencent/rapidjson.git
+-  GIT_TAG 1a803826f1197b5e30703afe4b9c0e7dd48074f5
++  DOWNLOAD_COMMAND true
+   CMAKE_PASS_FLAGS "-DRAPIDJSON_BUILD_TESTS=OFF -DRAPIDJSON_BUILD_EXAMPLES=OFF \
+                     -DRAPIDJSON_BUILD_DOC=OFF"
+   LIB "none"
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 0dc0824..d5b38b3 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -1,6 +1,6 @@
+ add_third_party(
+   lua
+-  URL https://github.com/lua/lua/archive/refs/tags/v5.4.4.tar.gz
++  URL REPLACELUAURL
+   PATCH_COMMAND patch -p1 -i "${CMAKE_SOURCE_DIR}/patches/lua-v5.4.4.patch"
+   CONFIGURE_COMMAND echo
+   BUILD_IN_SOURCE 1
+@@ -11,7 +11,8 @@ add_third_party(
+ 
+ add_third_party(
+   dconv
+-  URL https://github.com/google/double-conversion/archive/refs/tags/v3.2.0.tar.gz
++  DOWNLOAD_COMMAND true
++  CMAKE_PASS_FLAGS "-DCMAKE_INSTALL_LIBDIR=${THIRD_PARTY_LIB_DIR}/dconv/lib"
+   LIB libdouble-conversion.a
+ )
+ 
diff --git a/nixpkgs/pkgs/servers/nosql/dragonflydb/glog.patch b/nixpkgs/pkgs/servers/nosql/dragonflydb/glog.patch
new file mode 100644
index 000000000000..2fb9c0733b87
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/dragonflydb/glog.patch
@@ -0,0 +1,553 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 846b4448..b4900ead 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -39,6 +39,7 @@ option (PRINT_UNSYMBOLIZED_STACK_TRACES
+   "Print file offsets in traces instead of symbolizing" OFF)
+ option (WITH_CUSTOM_PREFIX "Enable support for user-generated message prefixes" ON)
+ option (WITH_GFLAGS "Use gflags" ON)
++option (WITH_ABSL "Use absl flags" OFF)
+ option (WITH_GTEST "Use Google Test" ON)
+ option (WITH_PKGCONFIG "Enable pkg-config support" ON)
+ option (WITH_SYMBOLIZE "Enable symbolize module" ON)
+@@ -87,6 +88,13 @@ if (WITH_GFLAGS)
+   endif (gflags_FOUND)
+ endif (WITH_GFLAGS)
+ 
++if (WITH_ABSL)
++  set (HAVE_ABSL_FLAGS 1)
++  set (ac_cv_have_abslflags 1)
++else (WITH_ABSL)
++set (ac_cv_have_abslflags 0)
++endif (WITH_ABSL)
++
+ find_package (Threads)
+ find_package (Unwind)
+ 
+@@ -1025,7 +1033,7 @@ write_basic_package_version_file (
+   ${CMAKE_CURRENT_BINARY_DIR}/glog-config-version.cmake
+   COMPATIBILITY SameMajorVersion)
+ 
+-export (TARGETS glog NAMESPACE glog:: FILE glog-targets.cmake)
++# export (TARGETS glog NAMESPACE glog:: FILE glog-targets.cmake)
+ export (PACKAGE glog)
+ 
+ get_filename_component (_PREFIX "${CMAKE_INSTALL_PREFIX}" ABSOLUTE)
+diff --git a/src/base/commandlineflags.h b/src/base/commandlineflags.h
+index bcb12dea..1c9d9294 100644
+--- a/src/base/commandlineflags.h
++++ b/src/base/commandlineflags.h
+@@ -57,6 +57,25 @@
+ 
+ #include <gflags/gflags.h>
+ 
++#else
++#ifdef HAVE_ABSL_FLAGS
++#include <absl/flags/flag.h>
++
++#define FLAG(name) absl::GetFlag(FLAGS_##name)
++
++#define DEFINE_bool(name, value, meaning) \
++  ABSL_FLAG(bool, name, value, meaning)
++
++#define DEFINE_int32(name, value, meaning) \
++  ABSL_FLAG(GOOGLE_NAMESPACE::int32, name, value, meaning)
++
++#define DEFINE_uint32(name, value, meaning) \
++  ABSL_FLAG(GOOGLE_NAMESPACE::uint32, name, value, meaning)
++
++#define DEFINE_string(name, value, meaning) \
++  ABSL_FLAG(std::string, name, value, meaning)
++
++
+ #else
+ 
+ #include <glog/logging.h>
+@@ -108,6 +127,7 @@
+   }                                                           \
+   using fLS::FLAGS_##name
+ 
++#endif
+ #endif  // HAVE_LIB_GFLAGS
+ 
+ // Define GLOG_DEFINE_* using DEFINE_* . By using these macros, we
+diff --git a/src/base/mutex.h b/src/base/mutex.h
+index e82c597f..a58c1412 100644
+--- a/src/base/mutex.h
++++ b/src/base/mutex.h
+@@ -319,11 +319,6 @@ class WriterMutexLock {
+   void operator=(const WriterMutexLock&);
+ };
+ 
+-// Catch bug where variable name is omitted, e.g. MutexLock (&mu);
+-#define MutexLock(x) COMPILE_ASSERT(0, mutex_lock_decl_missing_var_name)
+-#define ReaderMutexLock(x) COMPILE_ASSERT(0, rmutex_lock_decl_missing_var_name)
+-#define WriterMutexLock(x) COMPILE_ASSERT(0, wmutex_lock_decl_missing_var_name)
+-
+ }  // namespace MUTEX_NAMESPACE
+ 
+ using namespace MUTEX_NAMESPACE;
+diff --git a/src/config.h.cmake.in b/src/config.h.cmake.in
+index b225b7ec..a4c58c96 100644
+--- a/src/config.h.cmake.in
++++ b/src/config.h.cmake.in
+@@ -34,6 +34,8 @@
+ /* define if you have google gflags library */
+ #cmakedefine HAVE_LIB_GFLAGS
+ 
++#cmakedefine HAVE_ABSL_FLAGS
++
+ /* define if you have google gmock library */
+ #cmakedefine HAVE_LIB_GMOCK
+ 
+diff --git a/src/glog/logging.h.in b/src/glog/logging.h.in
+index 95a573b1..54cd838f 100644
+--- a/src/glog/logging.h.in
++++ b/src/glog/logging.h.in
+@@ -89,6 +89,10 @@
+ #include <gflags/gflags.h>
+ #endif
+ 
++#if @ac_cv_have_abslflags@
++#include <absl/flags/declare.h>
++#endif
++
+ #if @ac_cv_cxx11_atomic@ && __cplusplus >= 201103L
+ #include <atomic>
+ #elif defined(GLOG_OS_WINDOWS)
+@@ -395,6 +399,14 @@ typedef void(*CustomPrefixCallback)(std::ostream& s, const LogMessageInfo& l, vo
+ #undef DECLARE_uint32
+ #endif
+ 
++#if @ac_cv_have_abslflags@
++#define DECLARE_VARIABLE 1
++#define DECLARE_bool(name) ABSL_DECLARE_FLAG(bool, name)
++#define DECLARE_int32(name) ABSL_DECLARE_FLAG(@ac_google_namespace@::int32, name)
++#define DECLARE_uint32(name) ABSL_DECLARE_FLAG(@ac_google_namespace@::uint32, name)
++#define DECLARE_string(name) ABSL_DECLARE_FLAG(std::string, name)
++#endif
++
+ #ifndef DECLARE_VARIABLE
+ #define DECLARE_VARIABLE(type, shorttype, name, tn)                     \
+   namespace fL##shorttype {                                             \
+diff --git a/src/glog/vlog_is_on.h.in b/src/glog/vlog_is_on.h.in
+index 7526fc34..16e60f46 100644
+--- a/src/glog/vlog_is_on.h.in
++++ b/src/glog/vlog_is_on.h.in
+@@ -64,6 +64,14 @@
+ #include <glog/log_severity.h>
+ 
+ #if defined(__GNUC__)
++
++#if @ac_cv_have_abslflags@
++  extern int32_t absl_proxy_v;
++  #define VLEVEL (@ac_google_namespace@::absl_proxy_v)
++#else
++  #define VLEVEL (FLAGS_v)
++#endif
++
+ // We emit an anonymous static int* variable at every VLOG_IS_ON(n) site.
+ // (Normally) the first time every VLOG_IS_ON(n) site is hit,
+ // we determine what variable will dynamically control logging at this site:
+@@ -74,7 +82,7 @@
+   __extension__  \
+   ({ static @ac_google_namespace@::SiteFlag vlocal__ = {NULL, NULL, 0, NULL};       \
+      @ac_google_namespace@::int32 verbose_level__ = (verboselevel);                    \
+-     (vlocal__.level == NULL ? @ac_google_namespace@::InitVLOG3__(&vlocal__, &FLAGS_v, \
++     (vlocal__.level == NULL ? @ac_google_namespace@::InitVLOG3__(&vlocal__, &VLEVEL, \
+                         __FILE__, verbose_level__) : *vlocal__.level >= verbose_level__); \
+   })
+ #else
+diff --git a/src/logging.cc b/src/logging.cc
+index 4028ccc0..fc618d3a 100644
+--- a/src/logging.cc
++++ b/src/logging.cc
+@@ -103,7 +103,9 @@ using std::fdopen;
+ #endif
+ 
+ // There is no thread annotation support.
++#ifndef EXCLUSIVE_LOCKS_REQUIRED
+ #define EXCLUSIVE_LOCKS_REQUIRED(mu)
++#endif
+ 
+ static bool BoolFromEnv(const char *varname, bool defval) {
+   const char* const valstr = getenv(varname);
+@@ -351,8 +353,9 @@ static const char* GetAnsiColorCode(GLogColor color) {
+ 
+ // Safely get max_log_size, overriding to 1 if it somehow gets defined as 0
+ static uint32 MaxLogSize() {
+-  return (FLAGS_max_log_size > 0 && FLAGS_max_log_size < 4096
+-              ? FLAGS_max_log_size
++  uint32 maxlogsize = FLAG(max_log_size);
++  return (maxlogsize > 0 && maxlogsize < 4096
++              ? maxlogsize
+               : 1);
+ }
+ 
+@@ -721,7 +724,7 @@ inline void LogDestination::SetStderrLogging(LogSeverity min_severity) {
+   // Prevent any subtle race conditions by wrapping a mutex lock around
+   // all this stuff.
+   MutexLock l(&log_mutex);
+-  FLAGS_stderrthreshold = min_severity;
++  absl::SetFlag(&FLAGS_stderrthreshold, min_severity);
+ }
+ 
+ inline void LogDestination::LogToStderr() {
+@@ -747,8 +750,8 @@ static void ColoredWriteToStderrOrStdout(FILE* output, LogSeverity severity,
+                                          const char* message, size_t len) {
+   bool is_stdout = (output == stdout);
+   const GLogColor color = (LogDestination::terminal_supports_color() &&
+-                           ((!is_stdout && FLAGS_colorlogtostderr) ||
+-                            (is_stdout && FLAGS_colorlogtostdout)))
++                           ((!is_stdout && FLAG(colorlogtostderr)) ||
++                            (is_stdout && FLAG(colorlogtostdout))))
+                               ? SeverityToColor(severity)
+                               : COLOR_DEFAULT;
+ 
+@@ -789,7 +792,7 @@ static void ColoredWriteToStdout(LogSeverity severity, const char* message,
+   FILE* output = stdout;
+   // We also need to send logs to the stderr when the severity is
+   // higher or equal to the stderr threshold.
+-  if (severity >= FLAGS_stderrthreshold) {
++  if (severity >= FLAG(stderrthreshold)) {
+     output = stderr;
+   }
+   ColoredWriteToStderrOrStdout(output, severity, message, len);
+@@ -808,7 +811,7 @@ static void WriteToStderr(const char* message, size_t len) {
+ 
+ inline void LogDestination::MaybeLogToStderr(LogSeverity severity,
+ 					     const char* message, size_t message_len, size_t prefix_len) {
+-  if ((severity >= FLAGS_stderrthreshold) || FLAGS_alsologtostderr) {
++  if ((severity >= FLAG(stderrthreshold)) || FLAG(alsologtostderr)) {
+     ColoredWriteToStderr(severity, message, message_len);
+ #ifdef GLOG_OS_WINDOWS
+     (void) prefix_len;
+@@ -835,8 +838,8 @@ inline void LogDestination::MaybeLogToStderr(LogSeverity severity,
+ inline void LogDestination::MaybeLogToEmail(LogSeverity severity,
+ 					    const char* message, size_t len) {
+   if (severity >= email_logging_severity_ ||
+-      severity >= FLAGS_logemaillevel) {
+-    string to(FLAGS_alsologtoemail);
++      severity >= FLAG(logemaillevel)) {
++    string to(FLAG(alsologtoemail));
+     if (!addresses_.empty()) {
+       if (!to.empty()) {
+         to += ",";
+@@ -862,7 +865,7 @@ inline void LogDestination::MaybeLogToLogfile(LogSeverity severity,
+                                               time_t timestamp,
+ 					      const char* message,
+ 					      size_t len) {
+-  const bool should_flush = severity > FLAGS_logbuflevel;
++  const bool should_flush = severity > FLAG(logbuflevel);
+   LogDestination* destination = log_destination(severity);
+   destination->logger_->Write(should_flush, timestamp, message, len);
+ }
+@@ -871,9 +874,9 @@ inline void LogDestination::LogToAllLogfiles(LogSeverity severity,
+                                              time_t timestamp,
+                                              const char* message,
+                                              size_t len) {
+-  if (FLAGS_logtostdout) {  // global flag: never log to file
++  if (FLAG(logtostdout)) {  // global flag: never log to file
+     ColoredWriteToStdout(severity, message, len);
+-  } else if (FLAGS_logtostderr) {  // global flag: never log to file
++  } else if (FLAG(logtostderr)) {  // global flag: never log to file
+     ColoredWriteToStderr(severity, message, len);
+   } else {
+     for (int i = severity; i >= 0; --i) {
+@@ -1032,25 +1035,25 @@ void LogFileObject::FlushUnlocked(){
+     bytes_since_flush_ = 0;
+   }
+   // Figure out when we are due for another flush.
+-  const int64 next = (FLAGS_logbufsecs
++  const int64 next = (FLAG(logbufsecs)
+                       * static_cast<int64>(1000000));  // in usec
+   next_flush_time_ = CycleClock_Now() + UsecToCycles(next);
+ }
+ 
+ bool LogFileObject::CreateLogfile(const string& time_pid_string) {
+   string string_filename = base_filename_;
+-  if (FLAGS_timestamp_in_logfile_name) {
++  if (FLAG(timestamp_in_logfile_name)) {
+     string_filename += time_pid_string;
+   }
+   string_filename += filename_extension_;
+   const char* filename = string_filename.c_str();
+   //only write to files, create if non-existant.
+   int flags = O_WRONLY | O_CREAT;
+-  if (FLAGS_timestamp_in_logfile_name) {
++  if (FLAG(timestamp_in_logfile_name)) {
+     //demand that the file is unique for our timestamp (fail if it exists).
+     flags = flags | O_EXCL;
+   }
+-  int fd = open(filename, flags, FLAGS_logfile_mode);
++  int fd = open(filename, flags, FLAG(logfile_mode));
+   if (fd == -1) return false;
+ #ifdef HAVE_FCNTL
+   // Mark the file close-on-exec. We don't really care if this fails
+@@ -1083,7 +1086,7 @@ bool LogFileObject::CreateLogfile(const string& time_pid_string) {
+   file_ = fdopen(fd, "a");  // Make a FILE*.
+   if (file_ == NULL) {  // Man, we're screwed!
+     close(fd);
+-    if (FLAGS_timestamp_in_logfile_name) {
++    if (FLAG(timestamp_in_logfile_name)) {
+       unlink(filename);  // Erase the half-baked evidence: an unusable log file, only if we just created it.
+     }
+     return false;
+@@ -1125,8 +1128,8 @@ bool LogFileObject::CreateLogfile(const string& time_pid_string) {
+ 
+     // Make an additional link to the log file in a place specified by
+     // FLAGS_log_link, if indicated
+-    if (!FLAGS_log_link.empty()) {
+-      linkpath = FLAGS_log_link + "/" + linkname;
++    if (!FLAG(log_link).empty()) {
++      linkpath = FLAG(log_link) + "/" + linkname;
+       unlink(linkpath.c_str());                  // delete old one if it exists
+       if (symlink(filename, linkpath.c_str()) != 0) {
+         // silently ignore failures
+@@ -1165,7 +1168,7 @@ void LogFileObject::Write(bool force_flush,
+     rollover_attempt_ = 0;
+ 
+     struct ::tm tm_time;
+-    if (FLAGS_log_utc_time) {
++    if (FLAG(log_utc_time)) {
+       gmtime_r(&timestamp, &tm_time);
+     } else {
+       localtime_r(&timestamp, &tm_time);
+@@ -1253,14 +1256,14 @@ void LogFileObject::Write(bool force_flush,
+                        << ' '
+                        << setw(2) << tm_time.tm_hour << ':'
+                        << setw(2) << tm_time.tm_min << ':'
+-                       << setw(2) << tm_time.tm_sec << (FLAGS_log_utc_time ? " UTC\n" : "\n")
++                       << setw(2) << tm_time.tm_sec << (FLAG(log_utc_time) ? " UTC\n" : "\n")
+                        << "Running on machine: "
+                        << LogDestination::hostname() << '\n';
+ 
+     if(!g_application_fingerprint.empty()) {
+       file_header_stream << "Application fingerprint: " << g_application_fingerprint << '\n';
+     }
+-    const char* const date_time_format = FLAGS_log_year_in_prefix
++    const char* const date_time_format = FLAG(log_year_in_prefix)
+                                              ? "yyyymmdd hh:mm:ss.uuuuuu"
+                                              : "mmdd hh:mm:ss.uuuuuu";
+     file_header_stream << "Running duration (h:mm:ss): "
+@@ -1284,7 +1287,7 @@ void LogFileObject::Write(bool force_flush,
+     // greater than 4096, thereby indicating an error.
+     errno = 0;
+     fwrite(message, 1, message_len, file_);
+-    if ( FLAGS_stop_logging_if_full_disk &&
++    if ( FLAG(stop_logging_if_full_disk) &&
+          errno == ENOSPC ) {  // disk full, stop writing to disk
+       stop_writing = true;  // until the disk is
+       return;
+@@ -1307,7 +1310,7 @@ void LogFileObject::Write(bool force_flush,
+     FlushUnlocked();
+ #ifdef GLOG_OS_LINUX
+     // Only consider files >= 3MiB
+-    if (FLAGS_drop_log_memory && file_length_ >= (3U << 20U)) {
++    if (FLAG(drop_log_memory) && file_length_ >= (3U << 20U)) {
+       // Don't evict the most recent 1-2MiB so as not to impact a tailer
+       // of the log file and to avoid page rounding issue on linux < 4.7
+       uint32 total_drop_length =
+@@ -1348,7 +1351,7 @@ void LogCleaner::Disable() {
+ }
+ 
+ void LogCleaner::UpdateCleanUpTime() {
+-  const int64 next = (FLAGS_logcleansecs
++  const int64 next = (FLAG(logcleansecs)
+                       * 1000000);  // in usec
+   next_cleanup_time_ = CycleClock_Now() + UsecToCycles(next);
+ }
+@@ -1664,7 +1667,7 @@ void LogMessage::Init(const char* file,
+   //    I20201018 160715 f5d4fbb0 logging.cc:1153]
+   //    (log level, GMT year, month, date, time, thread_id, file basename, line)
+   // We exclude the thread_id for the default thread.
+-  if (FLAGS_log_prefix && (line != kNoLogPrefix)) {
++  if (FLAG(log_prefix) && (line != kNoLogPrefix)) {
+       std::ios saved_fmt(NULL);
+       saved_fmt.copyfmt(stream());
+       stream().fill('0');
+@@ -1672,7 +1675,7 @@ void LogMessage::Init(const char* file,
+       if (custom_prefix_callback == NULL) {
+     #endif
+           stream() << LogSeverityNames[severity][0];
+-          if (FLAGS_log_year_in_prefix) {
++          if (FLAG(log_year_in_prefix)) {
+             stream() << setw(4) << 1900 + logmsgtime_.year();
+           }
+           stream() << setw(2) << 1 + logmsgtime_.month()
+@@ -1703,11 +1706,11 @@ void LogMessage::Init(const char* file,
+   }
+   data_->num_prefix_chars_ = data_->stream_.pcount();
+ 
+-  if (!FLAGS_log_backtrace_at.empty()) {
++  if (!FLAG(log_backtrace_at).empty()) {
+     char fileline[128];
+     snprintf(fileline, sizeof(fileline), "%s:%d", data_->basename_, line);
+ #ifdef HAVE_STACKTRACE
+-    if (FLAGS_log_backtrace_at == fileline) {
++    if (FLAG(log_backtrace_at) == fileline) {
+       string stacktrace;
+       DumpStackTraceToString(&stacktrace);
+       stream() << " (stacktrace:\n" << stacktrace << ") ";
+@@ -1746,7 +1749,7 @@ ostream& LogMessage::stream() {
+ // Flush buffered message, called by the destructor, or any other function
+ // that needs to synchronize the log.
+ void LogMessage::Flush() {
+-  if (data_->has_been_flushed_ || data_->severity_ < FLAGS_minloglevel) {
++  if (data_->has_been_flushed_ || data_->severity_ < FLAG(minloglevel)) {
+     return;
+   }
+ 
+@@ -1808,7 +1811,7 @@ static char fatal_message[256];
+ void ReprintFatalMessage() {
+   if (fatal_message[0]) {
+     const size_t n = strlen(fatal_message);
+-    if (!FLAGS_logtostderr) {
++    if (!FLAG(logtostderr)) {
+       // Also write to stderr (don't color to avoid terminal checks)
+       WriteToStderr(fatal_message, n);
+     }
+@@ -1837,8 +1840,8 @@ void LogMessage::SendToLog() EXCLUSIVE_LOCKS_REQUIRED(log_mutex) {
+   // global flag: never log to file if set.  Also -- don't log to a
+   // file if we haven't parsed the command line flags to get the
+   // program name.
+-  if (FLAGS_logtostderr || FLAGS_logtostdout || !IsGoogleLoggingInitialized()) {
+-    if (FLAGS_logtostdout) {
++  if (FLAG(logtostderr) || FLAG(logtostdout) || !IsGoogleLoggingInitialized()) {
++    if (FLAG(logtostdout)) {
+       ColoredWriteToStdout(data_->severity_, data_->message_text_,
+                            data_->num_chars_to_log_);
+     } else {
+@@ -1891,7 +1894,7 @@ void LogMessage::SendToLog() EXCLUSIVE_LOCKS_REQUIRED(log_mutex) {
+       fatal_time = logmsgtime_.timestamp();
+     }
+ 
+-    if (!FLAGS_logtostderr && !FLAGS_logtostdout) {
++    if (!FLAG(logtostderr) && !FLAG(logtostdout)) {
+       for (int i = 0; i < NUM_SEVERITIES; ++i) {
+         if (LogDestination::log_destinations_[i]) {
+           LogDestination::log_destinations_[i]->logger_->Write(true, 0, "", 0);
+@@ -2238,7 +2241,7 @@ static bool SendEmailInternal(const char*dest, const char *subject,
+               subject, body, dest);
+     }
+ 
+-    string logmailer = FLAGS_logmailer;
++    string logmailer = FLAG(logmailer);
+     if (logmailer.empty()) {
+         logmailer = "/bin/mail";
+     }
+@@ -2338,9 +2341,9 @@ const vector<string>& GetLoggingDirectories() {
+   if (logging_directories_list == NULL) {
+     logging_directories_list = new vector<string>;
+ 
+-    if ( !FLAGS_log_dir.empty() ) {
++    if ( !FLAG(log_dir).empty() ) {
+       // A dir was specified, we should use it
+-      logging_directories_list->push_back(FLAGS_log_dir);
++      logging_directories_list->push_back(FLAG(log_dir));
+     } else {
+       GetTempDirectories(logging_directories_list);
+ #ifdef GLOG_OS_WINDOWS
+@@ -2654,7 +2657,7 @@ LogMessageTime::LogMessageTime(std::tm t) {
+ 
+ LogMessageTime::LogMessageTime(std::time_t timestamp, WallTime now) {
+   std::tm t;
+-  if (FLAGS_log_utc_time)
++  if (FLAG(log_utc_time))
+     gmtime_r(&timestamp, &t);
+   else
+     localtime_r(&timestamp, &t);
+@@ -2673,7 +2676,7 @@ void LogMessageTime::init(const std::tm& t, std::time_t timestamp,
+ void LogMessageTime::CalcGmtOffset() {
+   std::tm gmt_struct;
+   int isDst = 0;
+-  if ( FLAGS_log_utc_time ) {
++  if ( FLAG(log_utc_time )) {
+     localtime_r(&timestamp_, &gmt_struct);
+     isDst = gmt_struct.tm_isdst;
+     gmt_struct = time_struct_;
+diff --git a/src/raw_logging.cc b/src/raw_logging.cc
+index 43159832..8532362b 100644
+--- a/src/raw_logging.cc
++++ b/src/raw_logging.cc
+@@ -123,8 +123,8 @@ static char crash_buf[kLogBufSize + 1] = { 0 };  // Will end in '\0'
+ GLOG_ATTRIBUTE_FORMAT(printf, 4, 5)
+ void RawLog__(LogSeverity severity, const char* file, int line,
+               const char* format, ...) {
+-  if (!(FLAGS_logtostdout || FLAGS_logtostderr ||
+-        severity >= FLAGS_stderrthreshold || FLAGS_alsologtostderr ||
++  if (!(FLAG(logtostdout) || FLAG(logtostderr) ||
++        severity >= FLAG(stderrthreshold) || FLAG(alsologtostderr) ||
+         !IsGoogleLoggingInitialized())) {
+     return;  // this stderr log message is suppressed
+   }
+diff --git a/src/utilities.cc b/src/utilities.cc
+index a332f1a1..a9d5102a 100644
+--- a/src/utilities.cc
++++ b/src/utilities.cc
+@@ -141,7 +141,7 @@ static void DumpStackTrace(int skip_count, DebugWriter *writerfn, void *arg) {
+   int depth = GetStackTrace(stack, ARRAYSIZE(stack), skip_count+1);
+   for (int i = 0; i < depth; i++) {
+ #if defined(HAVE_SYMBOLIZE)
+-    if (FLAGS_symbolize_stacktrace) {
++    if (FLAG(symbolize_stacktrace)) {
+       DumpPCAndSymbol(writerfn, arg, stack[i], "    ");
+     } else {
+       DumpPC(writerfn, arg, stack[i], "    ");
+diff --git a/src/vlog_is_on.cc b/src/vlog_is_on.cc
+index e478a366..4b7a5cae 100644
+--- a/src/vlog_is_on.cc
++++ b/src/vlog_is_on.cc
+@@ -43,14 +43,24 @@
+ #include <glog/logging.h>
+ #include <glog/raw_logging.h>
+ #include "base/googleinit.h"
++#include "config.h"
+ 
+ // glog doesn't have annotation
+ #define ANNOTATE_BENIGN_RACE(address, description)
+ 
+ using std::string;
+ 
++#ifdef HAVE_ABSL_FLAGS
++
++ABSL_FLAG(int32_t, v, 0, "Show all VLOG(m) messages for m <= this."
++" Overridable by --vmodule.").OnUpdate([] {
++      GOOGLE_NAMESPACE::absl_proxy_v = absl::GetFlag(FLAGS_v);
++    });
++
++#else
+ GLOG_DEFINE_int32(v, 0, "Show all VLOG(m) messages for m <= this."
+ " Overridable by --vmodule.");
++#endif
+ 
+ GLOG_DEFINE_string(vmodule, "", "per-module verbose level."
+ " Argument is a comma-separated list of <module name>=<log level>."
+@@ -60,6 +70,8 @@ GLOG_DEFINE_string(vmodule, "", "per-module verbose level."
+ 
+ _START_GOOGLE_NAMESPACE_
+ 
++int32_t absl_proxy_v = 0;
++
+ namespace glog_internal_namespace_ {
+ 
+ // Used by logging_unittests.cc so can't make it static here.
+@@ -132,7 +144,8 @@ static void VLOG2Initializer() {
+   // Can now parse --vmodule flag and initialize mapping of module-specific
+   // logging levels.
+   inited_vmodule = false;
+-  const char* vmodule = FLAGS_vmodule.c_str();
++  string vmodule_str = FLAG(vmodule);
++  const char* vmodule = vmodule_str.c_str();
+   const char* sep;
+   VModuleInfo* head = NULL;
+   VModuleInfo* tail = NULL;
+@@ -164,7 +177,7 @@ static void VLOG2Initializer() {
+ 
+ // This can be called very early, so we use SpinLock and RAW_VLOG here.
+ int SetVLOGLevel(const char* module_pattern, int log_level) {
+-  int result = FLAGS_v;
++  int result = FLAG(v);
+   size_t const pattern_len = strlen(module_pattern);
+   bool found = false;
+   {
diff --git a/nixpkgs/pkgs/servers/nosql/eventstore/default.nix b/nixpkgs/pkgs/servers/nosql/eventstore/default.nix
new file mode 100644
index 000000000000..4165a6ff4390
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/eventstore/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, git
+, dotnetCorePackages
+, glibcLocales
+, buildDotnetModule
+, fetchFromGitHub
+, bintools
+, stdenv
+, mono
+}:
+let
+  mainProgram = "EventStore.ClusterNode";
+in
+
+buildDotnetModule rec {
+  pname = "EventStore";
+  version = "23.6.0";
+
+  src = fetchFromGitHub {
+    owner = "EventStore";
+    repo = "EventStore";
+    rev = "oss-v${version}";
+    sha256 = "sha256-+Wxm6yusaCoqXIbsi0ZoALAviKUyNMQwbzsQtBK/PCo=";
+    leaveDotGit = true;
+  };
+
+  # Fixes application reporting 0.0.0.0 as its version.
+  MINVERVERSIONOVERRIDE = version;
+
+  dotnet-sdk = dotnetCorePackages.sdk_6_0;
+  dotnet-runtime = dotnetCorePackages.aspnetcore_6_0;
+
+  nativeBuildInputs = [ git glibcLocales bintools ];
+
+  runtimeDeps = [ mono ];
+
+  executables = [ mainProgram ];
+
+  # This test has a problem running on macOS
+  disabledTests = lib.optionals stdenv.isDarwin [
+    "EventStore.Projections.Core.Tests.Services.grpc_service.ServerFeaturesTests<LogFormat+V2,String>.should_receive_expected_endpoints"
+    "EventStore.Projections.Core.Tests.Services.grpc_service.ServerFeaturesTests<LogFormat+V3,UInt32>.should_receive_expected_endpoints"
+  ];
+
+  postConfigure = ''
+    # Fixes git execution by GitInfo on mac os
+    substituteInPlace "$HOME/.nuget/packages/gitinfo/2.0.26/build/GitInfo.targets" \
+      --replace "<GitExe Condition=\"Exists('/usr/bin/git')\">/usr/bin/git</GitExe>" " " \
+      --replace "<GitExe Condition=\"Exists('/usr/local/bin/git')\">/usr/local/bin/git</GitExe>" ""
+  '';
+
+  nugetDeps = ./deps.nix;
+
+  projectFile = "src/EventStore.ClusterNode/EventStore.ClusterNode.csproj";
+
+  doCheck = true;
+  testProjectFile = "src/EventStore.Projections.Core.Tests/EventStore.Projections.Core.Tests.csproj";
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/EventStore.ClusterNode --insecure \
+      --db "$HOME/data" \
+      --index "$HOME/index" \
+      --log "$HOME/log" \
+      -runprojections all --startstandardprojections \
+      --EnableAtomPubOverHttp &
+
+    PID=$!
+
+    sleep 30s;
+    kill "$PID";
+  '';
+
+  passthru.updateScript = ./updater.sh;
+
+  meta = with lib; {
+    homepage = "https://geteventstore.com/";
+    description = "Event sourcing database with processing logic in JavaScript";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ puffnfresh mdarocha ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    inherit mainProgram;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/eventstore/deps.nix b/nixpkgs/pkgs/servers/nosql/eventstore/deps.nix
new file mode 100644
index 000000000000..c1bdacfbf074
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/eventstore/deps.nix
@@ -0,0 +1,315 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "CompareNETObjects"; version = "4.78.0"; sha256 = "0vs0bxnw7287rh7yigq55750hfdzh04xbcaahawfdl9467vp4dgm"; })
+  (fetchNuGet { pname = "ConfigureAwaitChecker.Analyzer"; version = "5.0.0.1"; sha256 = "01llfwhra5m3jj1qpa4rj1hbh01drirakzjc2963vkl9iwrzscyl"; })
+  (fetchNuGet { pname = "dotnet-retire"; version = "4.0.1"; sha256 = "0zqyivj00mjagzhhkvzckdk5d5ldxhxhv7qk985pis9krfkgzhww"; })
+  (fetchNuGet { pname = "Esprima"; version = "3.0.0-rc-01"; sha256 = "068xfs4h34irqab9zbq5s45iycxhbrv2r6fdv47zsxcday9xq617"; })
+  (fetchNuGet { pname = "EventStore.Client"; version = "21.2.0"; sha256 = "1crnk0nbwcz4l2dv3ia96skmfn274nbyh5j1p0g9rjbzyy7kzf5j"; })
+  (fetchNuGet { pname = "EventStore.Plugins"; version = "22.10.3"; sha256 = "0irii0xk806bc1pfnyn5dgksy4x9nqj9x2m01h9ddnzkzds2n9bi"; })
+  (fetchNuGet { pname = "GitHubActionsTestLogger"; version = "2.0.1"; sha256 = "155d1fmnxlq7p7wk4v74b8v8h36nq0i6bq1vhdjf8sbq7f95fj0f"; })
+  (fetchNuGet { pname = "GitInfo"; version = "2.0.26"; sha256 = "050l74vkamvbsp8f02b8aknizcknk4fr26dvwvw86mm8iw1dlvrv"; })
+  (fetchNuGet { pname = "Google.Protobuf"; version = "3.22.0"; sha256 = "1wjxxlqdrjjb0f3py8sbgsivqms8d22m7xk1zx68gfmyih671in7"; })
+  (fetchNuGet { pname = "gpr"; version = "0.1.122"; sha256 = "0z65n8zqdz0p2ackha572gpdjydhgnfszb46rca44773ak6mfa2b"; })
+  (fetchNuGet { pname = "Grpc.AspNetCore"; version = "2.52.0"; sha256 = "1apbsqzkns2p0rn31j0q21n3a4lbnp06b4kh2wf44kancvhaj4ch"; })
+  (fetchNuGet { pname = "Grpc.AspNetCore.Server"; version = "2.52.0"; sha256 = "0bvi61phh4r48ha0xc8mp0n79n3l0pniik08kvc2cwyq2fk3iiji"; })
+  (fetchNuGet { pname = "Grpc.AspNetCore.Server.ClientFactory"; version = "2.52.0"; sha256 = "192bqxg63mn0nc8d8v21xnq3qmchiz90df6liqpbnisdl3avdyhk"; })
+  (fetchNuGet { pname = "Grpc.Core"; version = "2.46.5"; sha256 = "0s1vyb1cx5id62kwx67qaqx25bykwpqnm2nmwsmcyqpzgyy0zwy2"; })
+  (fetchNuGet { pname = "Grpc.Core.Api"; version = "2.46.5"; sha256 = "0m0vjr69rfqllvvij6rvv79mbks27rhh7b4wnfvj88v43zvvlnq0"; })
+  (fetchNuGet { pname = "Grpc.Core.Api"; version = "2.52.0"; sha256 = "1mrc8zkcgvklrc0xalky9xxy9dkq5yk92idj1wm5zgdh6pghsa11"; })
+  (fetchNuGet { pname = "Grpc.Net.Client"; version = "2.52.0"; sha256 = "0f8m8nmx30bb5wk61i7aqxnwz00rflyc7l8pl9i60mr8ybq5n671"; })
+  (fetchNuGet { pname = "Grpc.Net.ClientFactory"; version = "2.52.0"; sha256 = "18zcrbzhg06f6wvm120176zfkz2sy9jal6p9wh2xsapjk52qin27"; })
+  (fetchNuGet { pname = "Grpc.Net.Common"; version = "2.52.0"; sha256 = "1dhf98h89xbcpx4v6lmr3gq51br9r8jm38zhrs9dw8l9vy73x1jy"; })
+  (fetchNuGet { pname = "Grpc.Tools"; version = "2.49.1"; sha256 = "1nsxm73b1bn4jjjpz5q6hvqjm77l9vhl4wi36b1pxwgdbdspy5rm"; })
+  (fetchNuGet { pname = "Grpc.Tools"; version = "2.52.0"; sha256 = "1a13rrdryykazhq71q339r0xpsyi8vlj2zprrpriak2yn7zhxiqh"; })
+  (fetchNuGet { pname = "HdrHistogram"; version = "2.5.0"; sha256 = "1s2np7m3pp17rgambax9a3x5pd2grx74cr325q3xapjz2gd58sj1"; })
+  (fetchNuGet { pname = "HostStat.NET"; version = "1.0.2"; sha256 = "1khxpp1fy36njjcmikr0xnxk7zv9d3rcnm6f7x2s94agins23hg7"; })
+  (fetchNuGet { pname = "Jint"; version = "3.0.0-beta-2048"; sha256 = "1iyfzpj36b8ybiwrjxwxqz42jgx2wsm8l0dmkiaip8ds0lal71iw"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.TestHost"; version = "6.0.16"; sha256 = "1zpiiq9yjwgcwq89j3jj7jdd2ycp15d3pklqdmhfxclv43ssn3hf"; })
+  (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "1.1.0"; sha256 = "1dq5yw7cy6s42193yl4iqscfw5vzkjkgv0zyy32scr4jza6ni1a1"; })
+  (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "5.0.0"; sha256 = "0cp5jbax2mf6xr3dqiljzlwi05fv6n9a35z337s92jcljiq674kf"; })
+  (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "6.0.0"; sha256 = "15gqy2m14fdlvy1g59207h5kisznm355kbw010gy19vh47z8gpz3"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "3.3.3"; sha256 = "09m4cpry8ivm9ga1abrxmvw16sslxhy2k5sl14zckhqb1j164im6"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "4.3.0"; sha256 = "0qpxygiq53v2d2wl6hccnkjf1lhlxjh4q3w5b6d23aq9pw5qj626"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "4.3.0"; sha256 = "0m9qqn391ayfi1ffkzvhpij790hs96q6dbhzfkj2ahvw6qx47b30"; })
+  (fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "17.3.2"; sha256 = "1f05l2vm8inlwhk36lfbyszjlcnvdd2qw2832npaah0dldn6dz00"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.0.1"; sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.7.0"; sha256 = "0gd67zlw554j098kabg887b5a6pq9kzavpa3jjy5w53ccjzjfy8j"; })
+  (fetchNuGet { pname = "Microsoft.Data.Sqlite"; version = "6.0.10"; sha256 = "0lshgxw6xvjaky1rg0nhdxw91h9m88fq2q3hrq9x0pk1wblsgkjp"; })
+  (fetchNuGet { pname = "Microsoft.Data.Sqlite.Core"; version = "6.0.10"; sha256 = "1sdh5rw2pyg6c64z0haxf57bakd5kwaav624vlqif1m59iz26rag"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.NETCore.Client"; version = "0.2.328102"; sha256 = "0i4wvjjcvxdr806s5yzwbjd1w9x8bcshrrq18kmc9ymjd1pkzpxk"; })
+  (fetchNuGet { pname = "Microsoft.Diagnostics.Tracing.TraceEvent"; version = "3.0.5"; sha256 = "0j2w8q7a20s46a4nq8vnv8n14aamdamqcfvia9zkvx5xl7l22yb0"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration"; version = "2.0.0"; sha256 = "0yssxq9di5h6xw2cayp5hj3l9b2p0jw9wcjz73rwk4586spac9s9"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration"; version = "2.1.1"; sha256 = "0244czr3jflvzcj6axq61j10dkl0f16ad34rw81ryg57v4cvlwx6"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration"; version = "3.0.3"; sha256 = "0fiwv35628rzkpixpbqcj8ln4c0hnwhr3is8ha38a9pdzlrs6zx8"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration"; version = "3.1.0"; sha256 = "1rszgz0rd5kvib5fscz6ss3pkxyjwqy0xpd4f2ypgzf5z5g5d398"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration"; version = "6.0.0"; sha256 = "1zdyai2rzngmsp3706d12qrdk315c1s3ja218fzb3nc3wd1vz0s8"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "2.0.0"; sha256 = "1ilz2yrgg9rbjyhn6a5zh9pr51nmh11z7sixb4p7vivgydj9gxwf"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "2.1.0"; sha256 = "03gzlr3z9j1xnr1k6y91zgxpz3pj27i3zsvjwj7i8jqnlqmk7pxd"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "2.1.1"; sha256 = "0b4bn0cf39c6jlc8xnpi1d8f3pz0qhf8ng440yb95y5jv5q4fdyw"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "3.0.3"; sha256 = "18l6ys6z7j07vf5pa3g0d018dfgk5vb9hf3393cmmh448rpjq41m"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "3.1.0"; sha256 = "1f7h52kamljglx5k08ccryilvk6d6cvr9c26lcb6b2c091znzk0q"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "6.0.0"; sha256 = "0w6wwxv12nbc3sghvr68847wc9skkdgsicrz3fx4chgng1i3xy0j"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Binder"; version = "2.0.0"; sha256 = "1prvdbma6r18n5agbhhabv6g357p1j70gq4m9g0vs859kf44nrgc"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Binder"; version = "2.1.1"; sha256 = "0n91s6cjfv8plf5swhr307s849jmq2pa3i1rbpb0cb0grxml0mqm"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Binder"; version = "3.0.3"; sha256 = "0zy90kvlvxinwqz38cwj1jmp06a8gar1crdbycjk5wy8d6w5m0br"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Binder"; version = "3.1.0"; sha256 = "13jj7jxihiswmhmql7r5jydbca4x5qj6h7zq10z17gagys6dc7pw"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.EnvironmentVariables"; version = "3.1.0"; sha256 = "1bkcrsmm37i7dcg4arffwqmd90vfhaxhrc6vh8mjwwp41q09ghna"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.FileExtensions"; version = "6.0.0"; sha256 = "02nna984iwnyyz4jjh9vs405nlj0yk1g5vz4v2x30z2c89mx5f9w"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Json"; version = "6.0.0"; sha256 = "1c6l5szma1pdn61ncq1kaqibg0dz65hbma2xl626a8d1m6awn353"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "3.0.3"; sha256 = "0nd36n0zfqv5l4w4jlbs2smaw0x7lw49aw1wgk3wsyv69s74p3gj"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "3.1.0"; sha256 = "1xc61dy07bn2q73mx1z3ylrw80xpa682qjby13gklnqq636a3gab"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "2.0.0"; sha256 = "1pwrfh9b72k9rq6mb2jab5qhhi225d5rjalzkapiayggmygc8nhz"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "2.1.0"; sha256 = "0c0cx8r5xkjpxmcfp51959jnp55qjvq28d9vaslk08avvi1by12s"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "2.1.1"; sha256 = "0rn0925aqm1fsbaf0n8jy6ng2fm1cy97lp7yikvx31m6178k9i84"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "3.0.3"; sha256 = "1hyilp5gr19xz7zcyar6h8jpfksqbn5s9kz0qrfqwvqhq2p7sm5g"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "3.1.0"; sha256 = "1pvms778xkyv1a3gfwrxnh8ja769cxi416n7pcidn9wvg15ifvbh"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "5.0.0"; sha256 = "17cz6s80va0ch0a6nqa1wbbbp3p8sqxb96lj4qcw67ivkp2yxiyj"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyModel"; version = "3.0.0"; sha256 = "1cm0hycgb33mf1ja9q91wxi3gk13d1p462gdq7gndrya23hw2jm5"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileProviders.Abstractions"; version = "2.1.0"; sha256 = "1sxls5f5cgb0wr8cwb05skqmz074683hrhmd3hhq6m5dasnzb8n3"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileProviders.Abstractions"; version = "6.0.0"; sha256 = "1fbqmfapxdz77drcv1ndyj2ybvd2rv4c9i9pgiykcpl4fa6dc65q"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileProviders.Composite"; version = "6.0.0"; sha256 = "1yn0cnclbm3lv12fmf6z0mxqsyjk8s8r952fcw4fdv54mvqbfgkl"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileProviders.Embedded"; version = "6.0.9"; sha256 = "0pni3y0drcjfr3cgpw8iiac589rsh6z5c2h2xnzy3yvk5lx5pl0d"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileProviders.Physical"; version = "6.0.0"; sha256 = "1ikc3kf325xig6njbi2aj5kmww4xlaq9lsrpc8v764fsm4x10474"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.FileSystemGlobbing"; version = "6.0.0"; sha256 = "09gyyv4fwy9ys84z3aq4lm9y09b7bd1d4l4gfdinmg0z9678f1a4"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Hosting.Abstractions"; version = "2.1.0"; sha256 = "04vm9mdjjzg3lpp2rzpgkpn8h5bzdl3bwcr22lshd3kp602ws4k9"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Http"; version = "3.0.3"; sha256 = "0glfid82amr4mxjqpq2ar6vhq6wv88sp463yvhg4pravkcrd0611"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "2.0.0"; sha256 = "1jkwjcq1ld9znz1haazk8ili2g4pzfdp6i7r7rki4hg3jcadn386"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "2.1.1"; sha256 = "12pag6rf01xfa8x1h30mf4czfhlhg2kgi5q712jicy3h12c02w8y"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "3.0.3"; sha256 = "0kyh6bk9iywbdvn29zm1770fwmag58y7c8rfpx886anxs6p9rh61"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "3.1.0"; sha256 = "1d3yhqj1rav7vswm747j7w8fh8paybji4rz941hhlq4b12mfqfh4"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "2.0.0"; sha256 = "1x5isi71z02khikzvm7vaschb006pqqrsv86ky1x08a4hir4s43h"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "2.1.0"; sha256 = "1gvgif1wcx4k6pv7gc00qv1hid945jdywy1s50s33q0hfd91hbnj"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "2.1.1"; sha256 = "1sgpwj0sa0ac7m5fnkb482mnch8fsv8hfbvk53c6lyh47s1xhdjg"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "3.0.3"; sha256 = "1wj871vl1azasbn2lrzzycvzkk72rvaxywnj193xwv11420b0mjh"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "3.1.0"; sha256 = "1zyalrcksszmn9r5xjnirfh7847axncgzxkk3k5srbvlcch8fw8g"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Configuration"; version = "3.1.0"; sha256 = "00bx95j2j0lkrr1znm53qicigvrj4sbc7snh27nqwsp4vkjnpz5h"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.ObjectPool"; version = "5.0.10"; sha256 = "07fk669pjydkcg6bxxv7aj548fzab4yb7ba8370d719lgi9y425l"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "2.0.0"; sha256 = "0g4zadlg73f507krilhaaa7h0jdga216syrzjlyf5fdk25gxmjqh"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "2.1.1"; sha256 = "0wgpsi874gzzjj099xbdmmsifslkbdjkxd5xrzpc5xdglpkw08vl"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "3.0.3"; sha256 = "0lq433x3z3dhf4w10vrxnqami6xsr6mwasla3qhmfx7yfybgz7y0"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "5.0.0"; sha256 = "1rdmgpg770x8qwaaa6ryc27zh93p697fcyvn5vkxp0wimlhqkbay"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options.ConfigurationExtensions"; version = "3.1.0"; sha256 = "13bhi1q4s79k4qb19m4p94364543jr3a1f8kacjvdhigpmqa732r"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "2.0.0"; sha256 = "1xppr5jbny04slyjgngxjdm0maxdh47vq481ps944d7jrfs0p3mb"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "2.1.0"; sha256 = "1r9gzwdfmb8ysnc4nzmyz5cyar1lw0qmizsvrsh252nhlyg06nmb"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "2.1.1"; sha256 = "033rkqdffybq5prhc7nn6v68zij393n00s5a82yf2n86whwvdfwx"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "2.2.0"; sha256 = "0znah6arbcqari49ymigg3wiy2hgdifz8zsq8vdc3ynnf45r7h0c"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "3.0.3"; sha256 = "08zlr6kl92znj9v2cs1wsjw6s98nxbkwnxk8pccbv0b4c7xhb3pf"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "3.1.0"; sha256 = "1w1y22njywwysi8qjnj4m83qhbq0jr4mmjib0hfawz6cwamh7xrb"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "5.0.0"; sha256 = "0swqcknyh87ns82w539z1mvy804pfwhgzs97cr3nwqk6g5s42gd6"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "6.0.0"; sha256 = "1kjiw6s4yfz9gm7mx3wkhp06ghnbs95icj9hi505shz9rjrg42q2"; })
+  (fetchNuGet { pname = "Microsoft.FASTER.Core"; version = "1.9.5"; sha256 = "1vp2644301bsdad0sd20pjqa8lbf1vc8yvd9rkl986h56hgwczsj"; })
+  (fetchNuGet { pname = "Microsoft.Net.Http.Headers"; version = "2.2.8"; sha256 = "1s0n68z6v5mbys4jjrd4jdxrrz81iq4dzmmbmxzmlf59769x8rj9"; })
+  (fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "17.3.2"; sha256 = "0pm06nxqi8aw04lciqy7iz8ln1qm5mx06cpwgqa2dfwvnjp7zxnm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.1"; sha256 = "164wycgng4mi9zqi2pnsf1pq6gccbqvw6ib916mqizgjmd8f44pj"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.1.0"; sha256 = "0nmdnkmwyxj8cp746hs9an57zspqlmqdm55b00i7yk8a22s6akxz"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies"; version = "1.0.0"; sha256 = "0na724xhvqm63vq9y18fl9jw9q2v99bdwr353378s5fsi11qzxp9"; })
+  (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies.net461"; version = "1.0.0"; sha256 = "00vkn4c6i0rn1l9pv912y0wgb9h6ks76qah8hvk441nari8fqbm1"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.2.0"; sha256 = "0l05smcgjzdfa5f60f9q5lylap3i21aswxbava92s19bgv46w2rv"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.3.2"; sha256 = "0bs38r5kdw1xpbjbi5l82xbhfnfbzr5xhg5520lk05pg914d1ln1"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.TestHost"; version = "17.3.2"; sha256 = "089nmaxzvm5xcf20pm4iiavz2k6lwh69r51xlbqg0ry605mnl869"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
+  (fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "6.0.0"; sha256 = "0c6pcj088g1yd1vs529q3ybgsd2vjlk5y1ic6dkmbhvrp5jibl9p"; })
+  (fetchNuGet { pname = "MinVer"; version = "4.2.0"; sha256 = "00skhyfh6q2dmqgh1bmcryvkg79kvgc6d9qxbpg43fvaifwxxl99"; })
+  (fetchNuGet { pname = "minver-cli"; version = "2.2.0"; sha256 = "0whxllmgyin9n02pvq97633ncflg7k4z0c7p28j4wydv55iz3cxv"; })
+  (fetchNuGet { pname = "Mono.Posix.NETStandard"; version = "1.0.0"; sha256 = "0xlja36hwpjm837haq15mjh2prcf68lyrmn72nvgpz8qnf9vappw"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.0"; sha256 = "1bc4ba8ahgk15m8k4nd7x406nhi0kwqzbgjk2dmw52ss553xz7iy"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.3"; sha256 = "1fn9fxppfcg4jgypp2pmrpr6awl3qz1xmnri0cygpkwvyx27df1y"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "11.0.2"; sha256 = "1784xi44f4k8v1fr696hsccmwpy94bz7kixxqlri98zhcxn406b2"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.2"; sha256 = "1p9splg1min274dpz7xdfgzrwkyfd3xlkygwpr1xgjvvyjvs6b0i"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "9.0.1"; sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r"; })
+  (fetchNuGet { pname = "NuGet.Frameworks"; version = "5.11.0"; sha256 = "0wv26gq39hfqw9md32amr5771s73f5zn1z9vs4y77cgynxr73s4z"; })
+  (fetchNuGet { pname = "NUnit"; version = "3.13.3"; sha256 = "0wdzfkygqnr73s6lpxg5b1pwaqz9f414fxpvpdmf72bvh4jaqzv6"; })
+  (fetchNuGet { pname = "NUnit3TestAdapter"; version = "4.2.1"; sha256 = "0gildh4xcb6gkxcrrgh5a1j7lq0a7l670jpbs71akl5b5bgy5gc3"; })
+  (fetchNuGet { pname = "OpenTelemetry"; version = "1.4.0-rc.1"; sha256 = "17cbj0dx6fxk169rs0ds6cph75z9r1i90xgjdapx1zmx1kwcdn00"; })
+  (fetchNuGet { pname = "OpenTelemetry.Api"; version = "1.4.0-rc.1"; sha256 = "09pc8vbhgjq5bibvjw39gjdb99x3nclsggzp509qfcxv8gizcs21"; })
+  (fetchNuGet { pname = "OpenTelemetry.Exporter.Prometheus.AspNetCore"; version = "1.4.0-rc.1"; sha256 = "129qk929f21akx87g66f8h1ckj2lj2ij5by5ma7bdm19jpk2yhdx"; })
+  (fetchNuGet { pname = "OpenTelemetry.Extensions.DependencyInjection"; version = "1.4.0-rc.1"; sha256 = "19sraav8y53yi1pf8dsjd2n5cnffqd876rjxmlkkbi550qdr9l0v"; })
+  (fetchNuGet { pname = "OpenTelemetry.Extensions.Hosting"; version = "1.4.0-rc.1"; sha256 = "0h781wdirsqz1hxwmag6dzzng3kpk7nqrmfg0j04z3q23zi9rp9h"; })
+  (fetchNuGet { pname = "protobuf-net"; version = "2.4.0"; sha256 = "106lxm9afga7ihlknyy7mlfplyq40mrndksqrsn8ia2a47fbqqld"; })
+  (fetchNuGet { pname = "Quickenshtein"; version = "1.5.1"; sha256 = "0mhnywivqxlpznr2fk7jp8g0bshsbq0yyyggcn51blkaabf18grl"; })
+  (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "1wl76vk12zhdh66vmagni66h5xbhgqq7zkdpgw21jhxhvlbcl8pk"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1ghhhk5psqxcg6w88sxkqrc35bxcz27zbqm2y5p5298pv3v7g201"; })
+  (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
+  (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0rwpqngkqiapqc5c2cpkj7idhngrgss5qpnqg0yh40mbyflcxf8i"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1n06gxwlinhs0w7s8a94r1q3lwqzvynxwd3mp10ws9bg6gck8n4r"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0404wqrc7f2yc0wxv71y3nnybvqx8v4j9d47hlscxy759a525mc3"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0zy5r25jppz48i2bkg8b9lfig24xixg6nm3xyr1379zdnqnpm8f6"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "096ch4n4s8k82xga80lfmpimpzahd2ip1mgwdqgar0ywbbl6x438"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1dm8fifl7rf1gy7lnwln78ch4rw54g0pl5g1c189vawavll7p6rj"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1m9z1k9kzva9n9kwinqxl97x2vgl79qhqjlv17k9s2ymcyv2bwr6"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1cpx56mcfxz7cpn57wvj18sjisvzq8b5vd9rw16ihd2i6mcp3wa1"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "15gsm1a8jdmgmf8j5v1slfz8ks124nfdhk2vxs2rw3asrxalg8hi"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0q0n5q1r1wnqmr5i5idsrd9ywl33k0js4pngkwq9p368mbxp8x1w"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1x0g58pbpjrmj2x2qw17rdwwnrcl0wvim2hdwz48lixvwvp22n9c"; })
+  (fetchNuGet { pname = "runtime.unix.Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0y61k9zbxhdi0glg154v30kkq7f8646nif8lnnxbvkjpakggd5id"; })
+  (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
+  (fetchNuGet { pname = "runtime.unix.System.IO.FileSystem"; version = "4.3.0"; sha256 = "14nbkhvs7sji5r1saj2x8daz82rnf9kx28d3v2qss34qbr32dzix"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Primitives"; version = "4.3.0"; sha256 = "0bdnglg59pzx9394sy4ic66kmxhqp8q8bvmykdxcbs5mm0ipwwm4"; })
+  (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "Serilog"; version = "2.0.0"; sha256 = "194c39cwribx7p2sic0w8hjmc83194bc985kl7aqpmljfz376gsc"; })
+  (fetchNuGet { pname = "Serilog"; version = "2.12.0"; sha256 = "0lqxpc96qcjkv9pr1rln7mi4y7n7jdi4vb36c2fv3845w1vswgr4"; })
+  (fetchNuGet { pname = "Serilog.Enrichers.Process"; version = "2.0.2"; sha256 = "0wivpxljx5s2vh9rw0h8g64siaq3ajm6rpg6y8v3qnxfmlhlas6s"; })
+  (fetchNuGet { pname = "Serilog.Enrichers.Thread"; version = "3.1.0"; sha256 = "1y75aiv2k1sxnh012ixkx92fq1yl8srqggy8l439igg4p223hcqi"; })
+  (fetchNuGet { pname = "Serilog.Expressions"; version = "3.4.0"; sha256 = "10knpl8nnxmksbsq3l7p486kq1n5y5kn8ibvcscmcig6wxhcw05h"; })
+  (fetchNuGet { pname = "Serilog.Extensions.Logging"; version = "3.1.0"; sha256 = "0lv370ks2fjdn1nsgkbzbmw6hybnincw3jabr471a5w39pp4fl1c"; })
+  (fetchNuGet { pname = "Serilog.Filters.Expressions"; version = "2.1.0"; sha256 = "0pwlcisijbkdhgab2k4vwjqimminxnkzgdrxvq7pz5ba2brsy28l"; })
+  (fetchNuGet { pname = "Serilog.Settings.Configuration"; version = "3.4.0"; sha256 = "1l6fyy9y5a168i1mm107aqyrwzhqmpy0cp1v13l2b89yv8dc105j"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Async"; version = "1.5.0"; sha256 = "0bcb3n6lmg5wfj806mziybfmbb8gyiszrivs3swf0msy8w505gyg"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Console"; version = "4.1.0"; sha256 = "1rpkphmqfh3bv3m7v1zwz88wz4sirj4xqyff9ga0c6bqhblj6wii"; })
+  (fetchNuGet { pname = "Serilog.Sinks.File"; version = "5.0.0"; sha256 = "097rngmgcrdfy7jy8j7dq3xaq2qky8ijwg0ws6bfv5lx0f3vvb0q"; })
+  (fetchNuGet { pname = "Serilog.Sinks.InMemory"; version = "0.11.0"; sha256 = "0kmnj3wx1hwxvgp06avn2zw1mzsfjamrgpaav44ir40100g4hdkd"; })
+  (fetchNuGet { pname = "Serilog.Sinks.TextWriter"; version = "2.1.0"; sha256 = "0p13m8spj6psybwdw21gjaxw854va8n6m2rbdy0w78q135br1kcd"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.bundle_e_sqlite3"; version = "2.1.2"; sha256 = "07rc4pj3rphi8nhzkcvilnm0fv27qcdp68jdwk4g0zjk7yfvbcay"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.core"; version = "2.1.2"; sha256 = "19hxv895lairrjmk4gkzd3mcb6b0na45xn4n551h4kckplqadg3d"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.lib.e_sqlite3"; version = "2.1.2"; sha256 = "0jn98bkjk8h4smi09z31ib6s6392054lwmkziqmkqf5gf614k2fz"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.provider.e_sqlite3"; version = "2.1.2"; sha256 = "0bnm2fhvcsyg5ry74gal2cziqnyf5a8d2cb491vsa7j41hbbx7kv"; })
+  (fetchNuGet { pname = "Superpower"; version = "2.3.0"; sha256 = "0bdsc3c0d6jb0wr67siqfba0ldl0jxbwis6xr0whzqzf6m2cyahm"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.0"; sha256 = "1ywfqn4md6g3iilpxjn5dsr0f5lx6z0yvhqp4pgjcamygg73cz2c"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.0.11"; sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "6.0.0"; sha256 = "1js98kmjn47ivcvkjqdmyipzknb9xbndssczm8gq224pbaj1p88c"; })
+  (fetchNuGet { pname = "System.ComponentModel.Composition"; version = "6.0.0"; sha256 = "16zfx5mivkkykp76krw8x68izmjf79ldfmn26k9x3m55lmp9i77c"; })
+  (fetchNuGet { pname = "System.Configuration.ConfigurationManager"; version = "6.0.0"; sha256 = "0sqapr697jbb4ljkq46msg0xx1qpmc31ivva6llyz2wzq3mpmxbw"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11"; sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "7.0.0"; sha256 = "1jxhvsh5mzdf0sgb4dfmbys1b12ylyr5pcfyj1map354fiq3qsgm"; })
+  (fetchNuGet { pname = "System.Diagnostics.PerformanceCounter"; version = "6.0.1"; sha256 = "17p5vwbgrycsrvv9a9ksxbiziy75x4s25dw71fnbw1ci5kpp8yz7"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1"; sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Drawing.Common"; version = "6.0.0"; sha256 = "02n8rzm58dac2np8b3xw8ychbvylja4nh6938l5k2fhyn40imlgz"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.0.11"; sha256 = "1pla2dx8gkidf7xkciig6nifdsb494axjvzvann8g2lp3dbqasm9"; })
+  (fetchNuGet { pname = "System.Formats.Asn1"; version = "7.0.0"; sha256 = "1a14kgpqz4k7jhi7bs2gpgf67ym5wpj99203zxgwjypj7x47xhbq"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.0.11"; sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
+  (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; })
+  (fetchNuGet { pname = "System.Interactive.Async"; version = "5.0.0"; sha256 = "00flf80ahpyhrsny2kfl9bsyh1mxmsdsigpq3rzhaps9wgdbmzjz"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.0.1"; sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1"; sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.IO.Pipelines"; version = "6.0.3"; sha256 = "1jgdazpmwc21dd9naq3l9n5s8a1jnbwlvgkf1pnm0aji6jd4xqdz"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Linq.Async"; version = "6.0.1"; sha256 = "10ira8hmv0i54yp9ggrrdm1c06j538sijfjpn1kmnh9j2xk5yzmq"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.1.0"; sha256 = "1gpdxl6ip06cnab7n3zlcg6mqp7kknf73s8wjinzi4p0apw82fpg"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.0"; sha256 = "1layqpcx1q4l805fdnj2dfqp6ncx2z42ca06rgsr6ikq4jjgbv30"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.1"; sha256 = "0f07d7hny38lq9w69wx4lxkn4wszrqf9m9js6fh9is645csm167c"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.3"; sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.4"; sha256 = "0kdp31b8819v88l719j6my0yas6myv9d1viql3qz5577mv819jhl"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.4.0"; sha256 = "0rdvma399070b0i46c4qq1h2yvjj3k013sqzkilz4bz5cwmx1rba"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; })
+  (fetchNuGet { pname = "System.Private.ServiceModel"; version = "4.10.0"; sha256 = "0048hmv4j4wfpa9hwn8d5l3ag3hwmhp5r26iarfbsxj0q3i2d1a8"; })
+  (fetchNuGet { pname = "System.Private.ServiceModel"; version = "4.5.3"; sha256 = "0nyw9m9dj327hn0qb0jmgwpch0f40jv301fk4mrchga8g99xbpng"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.DispatchProxy"; version = "4.5.0"; sha256 = "0v9sg38h91aljvjyc77m1y5v34p50hjdbxvvxwa1whlajhafadcn"; })
+  (fetchNuGet { pname = "System.Reflection.DispatchProxy"; version = "4.7.1"; sha256 = "10yh3q2i71gcw7c0dfz9qxql2vlvnqjav1hyf1q9rpbvdbgsabrs"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.0.1"; sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.0.1"; sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.0.1"; sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.0.1"; sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.6.0"; sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "5.0.0"; sha256 = "17qsl5nanlqk9iz0l5wijdn6ka632fs1m1fvx18dfgswm258r3ss"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.1.0"; sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.4.0"; sha256 = "0a6ahgi5b148sl5qyfpyw383p3cb4yrkm802k29fsi4mxkiwir29"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.0"; sha256 = "17labczwqk3jng3kkky73m0jhi8wc21vbl7cz5c0hj2p1dswin43"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.1"; sha256 = "1xcrjx5fwg284qdnxyi2d0lzdm5q4frlpkp0nf6vvkx1kdz2prrf"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "5.0.0"; sha256 = "02k25ivn50dmqx5jn8hawwmz24yf0454fjd823qk6lygj9513q4x"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.0.1"; sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0"; sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.1.1"; sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "6.0.0"; sha256 = "0a678bzj8yxxiffyzy60z2w1nczzpi8v97igr4ip3byd2q89dv58"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Pkcs"; version = "7.0.2"; sha256 = "0px6snb8gdb6mpwsqrhlpbkmjgd63h4yamqm2gvyf9rwibymjbm9"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "6.0.0"; sha256 = "05kd3a8w7658hjxq9vvszxip30a479fjmfq4bq1r95nrsvs4hbss"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Xml"; version = "7.0.1"; sha256 = "0p6kx6ag0il7rxxcvm84w141phvr7fafjzxybf920bxwa0jkwzq8"; })
+  (fetchNuGet { pname = "System.Security.Permissions"; version = "6.0.0"; sha256 = "0jsl4xdrkqi11iwmisi1r2f2qn5pbvl79mzq877gndw6ans2zhzw"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.5.0"; sha256 = "0rmj89wsl5yzwh0kqjgx45vzf694v9p92r4x4q6yxldk1cv1hi86"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
+  (fetchNuGet { pname = "System.ServiceModel.Http"; version = "4.10.0"; sha256 = "1b6dzgrj5ybpr21zh1gnmzbmx7k3xsc53ksmv8ilhj717gpvaz9d"; })
+  (fetchNuGet { pname = "System.ServiceModel.Primitives"; version = "4.10.0"; sha256 = "1a1b0li9g7nhmy7r850nprpihkpfhw9gscfbgl38xzyr9crd236w"; })
+  (fetchNuGet { pname = "System.ServiceModel.Primitives"; version = "4.5.3"; sha256 = "1v90pci049cn44y0km885k1vrilhb34w6q2zva4y6f3ay84klrih"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "6.0.0"; sha256 = "0gm2kiz2ndm9xyzxgi0jhazgwslcs427waxgfa30m7yqll1kcrww"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "6.0.0"; sha256 = "06n9ql3fmhpjl32g3492sj181zjml5dlcc5l76xq2h38c4f87sai"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "4.6.0"; sha256 = "0ism236hwi0k6axssfq58s1d8lihplwiz058pdvl8al71hagri39"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "6.0.0"; sha256 = "1si2my1g0q0qv1hiqnji4xh9wd05qavxnzj9dwgs23iqvgjky0gl"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.1.0"; sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.0.11"; sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0"; sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
+  (fetchNuGet { pname = "System.Windows.Extensions"; version = "6.0.0"; sha256 = "1wy9pq9vn1bqg5qnv53iqrbx04yzdmjw4x5yyi09y3459vaa1sip"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11"; sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.0.11"; sha256 = "0n4lvpqzy9kc7qy1a4acwwd7b7pnvygv895az5640idl2y9zbz18"; })
+  (fetchNuGet { pname = "YamlDotNet"; version = "12.0.1"; sha256 = "0axlq2xm3lb8kq24b0fsi5yg3gm63fjsy30xkxwngnnx7wd75y2y"; })
+]
diff --git a/nixpkgs/pkgs/servers/nosql/eventstore/updater.sh b/nixpkgs/pkgs/servers/nosql/eventstore/updater.sh
new file mode 100755
index 000000000000..77c2f733e5f8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/eventstore/updater.sh
@@ -0,0 +1,21 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -I nixpkgs=./. -i bash -p curl jq common-updater-scripts
+# shellcheck shell=bash
+
+set -euo pipefail
+
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+new_version="$(curl -s "https://api.github.com/repos/EventStore/EventStore/releases/latest" | jq -r '.name')"
+new_version="${new_version#oss-v}"
+old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
+
+if [[ "$new_version" == "$old_version" ]]; then
+  echo "Already up to date!"
+  exit 0
+fi
+
+cd ../../../..
+update-source-version eventstore "${new_version//v}"
+
+$(nix-build -A eventstore.fetch-deps --no-out-link)
diff --git a/nixpkgs/pkgs/servers/nosql/ferretdb/default.nix b/nixpkgs/pkgs/servers/nosql/ferretdb/default.nix
new file mode 100644
index 000000000000..ba46d7f01289
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/ferretdb/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildGo121Module
+, fetchFromGitHub
+, nixosTests
+}:
+
+buildGo121Module rec {
+  pname = "ferretdb";
+  version = "1.14.0";
+
+  src = fetchFromGitHub {
+    owner = "FerretDB";
+    repo = "FerretDB";
+    rev = "v${version}";
+    hash = "sha256-x5In8cBRki3rHaAB+iSglL19UCD8DtITr5gjb8KKuAw=";
+  };
+
+  postPatch = ''
+    echo v${version} > build/version/version.txt
+    echo nixpkgs     > build/version/package.txt
+  '';
+
+  vendorHash = "sha256-0DFNDfJmBFpgzarg9FaGb8GV11LhA1N8oq0kSXIWxi8=";
+
+  CGO_ENABLED = 0;
+
+  subPackages = [ "cmd/ferretdb" ];
+
+  # tests in cmd/ferretdb are not production relevant
+  doCheck = false;
+
+  # the binary panics if something required wasn't set during compilation
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/ferretdb --version | grep ${version}
+  '';
+
+  passthru.tests = nixosTests.ferretdb;
+
+  meta = with lib; {
+    description = "A truly Open Source MongoDB alternative";
+    homepage = "https://www.ferretdb.io/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dit7ya noisersup julienmalka ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/immudb/default.nix b/nixpkgs/pkgs/servers/nosql/immudb/default.nix
new file mode 100644
index 000000000000..716f9f0a9f74
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/immudb/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fetchzip
+, installShellFiles
+}:
+
+let
+  webconsoleVersion = "1.0.18";
+  webconsoleDist = fetchzip {
+    url = "https://github.com/codenotary/immudb-webconsole/releases/download/v${webconsoleVersion}/immudb-webconsole.tar.gz";
+    sha256 = "sha256-4BhTK+gKO8HW1CelGa30THpfkqfqFthK+b7p9QWl4Pw=";
+  };
+in
+buildGoModule rec {
+  pname = "immudb";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "codenotary";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-xvbks6dUiS14cntydAjSNTujxsSwYzmf+B4Zh4V/NwI=";
+  };
+
+  preBuild = ''
+    mkdir -p webconsole/dist
+    cp -r ${webconsoleDist}/* ./webconsole/dist
+    go generate -tags webconsole ./webconsole
+  '';
+
+  vendorHash = "sha256-7mMutYx2/jmTx+7h9S412fYCFXiJnTGz0qwDSO7BIzM=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  tags = [ "webconsole" ];
+
+  ldflags = [ "-X github.com/codenotary/immudb/cmd/version.Version=${version}" ];
+
+  subPackages = [
+    "cmd/immudb"
+    "cmd/immuclient"
+    "cmd/immuadmin"
+  ];
+
+  postInstall = ''
+    mkdir -p share/completions
+    for executable in immudb immuclient immuadmin; do
+      for shell in bash fish zsh; do
+        $out/bin/$executable completion $shell > share/completions/$executable.$shell
+        installShellCompletion share/completions/$executable.$shell
+      done
+    done
+  '';
+
+  meta = with lib; {
+    description = "Immutable database based on zero trust, SQL and Key-Value, tamperproof, data change history";
+    homepage = "https://github.com/codenotary/immudb";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/influxdb/default.nix b/nixpkgs/pkgs/servers/nosql/influxdb/default.nix
new file mode 100644
index 000000000000..180f22684578
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/influxdb/default.nix
@@ -0,0 +1,88 @@
+{ lib, buildGoModule, fetchFromGitHub, stdenv, pkg-config, rustPlatform, libiconv, fetchpatch, nixosTests }:
+
+let
+  libflux_version = "0.170.1";
+
+  # This is copied from influxdb2 with flux version matching the needed by thi
+  flux = rustPlatform.buildRustPackage rec {
+    pname = "libflux";
+    version = "v${libflux_version}";
+    src = fetchFromGitHub {
+      owner = "influxdata";
+      repo = "flux";
+      rev = "v${libflux_version}";
+      sha256 = "sha256-P3SpleOVbL+nGWdscwjj9yWqRdck/9JsAwuJtGOO7N8=";
+    };
+    patches = [
+      # https://github.com/influxdata/flux/pull/5273
+      # fix compile error with Rust 1.64
+      (fetchpatch {
+        url = "https://github.com/influxdata/flux/commit/20ca62138a0669f2760dd469ca41fc333e04b8f2.patch";
+        stripLen = 2;
+        extraPrefix = "";
+        sha256 = "sha256-Fb4CuH9ZvrPha249dmLLI8MqSNQRKqKPxPbw2pjqwfY=";
+      })
+    ];
+    sourceRoot = "${src.name}/libflux";
+    cargoSha256 = "sha256-kYiZ5ZRiFHRf1RQeeUGjIhnEkTvhNSZ0t4tidpRIDyk=";
+    nativeBuildInputs = [ rustPlatform.bindgenHook ];
+    buildInputs = lib.optional stdenv.isDarwin libiconv;
+    pkgcfg = ''
+      Name: flux
+      Version: ${libflux_version}
+      Description: Library for the InfluxData Flux engine
+      Cflags: -I/out/include
+      Libs: -L/out/lib -lflux -lpthread
+    '';
+    passAsFile = [ "pkgcfg" ];
+    postInstall = ''
+      mkdir -p $out/include $out/pkgconfig
+      cp -r $NIX_BUILD_TOP/source/libflux/include/influxdata $out/include
+      substitute $pkgcfgPath $out/pkgconfig/flux.pc \
+        --replace /out $out
+    '' + lib.optionalString stdenv.isDarwin ''
+      install_name_tool -id $out/lib/libflux.dylib $out/lib/libflux.dylib
+    '';
+  };
+in
+buildGoModule rec {
+  pname = "influxdb";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "influxdata";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-BMHR9EdYC+8oA0he7emzBRmNnHn15nO/5NqsLcr+R0k=";
+  };
+
+  vendorHash = "sha256-AY04cmfg7vbrWR4+LBuCFYqBgQJBXlPpO+2oj0qqjM4=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  PKG_CONFIG_PATH = "${flux}/pkgconfig";
+
+  # Check that libflux is at the right version
+  preBuild = ''
+    flux_ver=$(grep github.com/influxdata/flux go.mod | awk '{print $2}')
+    if [ "$flux_ver" != "v${libflux_version}" ]; then
+      echo "go.mod wants libflux $flux_ver, but nix derivation provides ${libflux_version}"
+      exit 1
+    fi
+  '';
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  excludedPackages = "test";
+
+  passthru.tests = { inherit (nixosTests) influxdb; };
+
+  meta = with lib; {
+    description = "An open-source distributed time series database";
+    license = licenses.mit;
+    homepage = "https://influxdata.com/";
+    maintainers = with maintainers; [ offline zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/influxdb2/cli.nix b/nixpkgs/pkgs/servers/nosql/influxdb2/cli.nix
new file mode 100644
index 000000000000..dc7395a7eb7f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/influxdb2/cli.nix
@@ -0,0 +1,34 @@
+{ buildGoModule
+, buildGoPackage
+, fetchFromGitHub
+, lib
+}:
+
+let
+  version = "2.7.3";
+
+  src = fetchFromGitHub {
+    owner = "influxdata";
+    repo = "influx-cli";
+    rev = "v${version}";
+    sha256 = "sha256-hRv7f2NeURsgLQ1zNgAhZvTjS0ei4+5lqokIu0iN+aI=";
+  };
+
+in buildGoModule {
+  pname = "influx-cli";
+  version = version;
+  inherit src;
+
+  vendorHash = "sha256-QNhL5RPkNLTXoQ0NqcZuKec3ZBc3CDTc/XTWvjy55wk=";
+  subPackages = [ "cmd/influx" ];
+
+  ldflags = [ "-X main.commit=v${version}" "-X main.version=${version}" ];
+
+  meta = with lib; {
+    description = "CLI for managing resources in InfluxDB v2";
+    license = licenses.mit;
+    homepage = "https://influxdata.com/";
+    maintainers = with maintainers; [ abbradar danderson ];
+    mainProgram = "influx";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/influxdb2/combined.nix b/nixpkgs/pkgs/servers/nosql/influxdb2/combined.nix
new file mode 100644
index 000000000000..285c94d01580
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/influxdb2/combined.nix
@@ -0,0 +1,12 @@
+{
+  buildEnv,
+  influxdb2-server,
+  influxdb2-cli,
+}:
+buildEnv {
+  name = "influxdb2";
+  paths = [
+    influxdb2-server
+    influxdb2-cli
+  ];
+}
diff --git a/nixpkgs/pkgs/servers/nosql/influxdb2/default.nix b/nixpkgs/pkgs/servers/nosql/influxdb2/default.nix
new file mode 100644
index 000000000000..7013b0cd6806
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/influxdb2/default.nix
@@ -0,0 +1,128 @@
+{ buildGoModule
+, fetchFromGitHub
+, fetchurl
+, fetchpatch
+, go-bindata
+, lib
+, perl
+, pkg-config
+, rustPlatform
+, stdenv
+, libiconv
+, nixosTests
+}:
+
+let
+  version = "2.7.1";
+  ui_version = "OSS-v${version}";
+  libflux_version = "0.193.0";
+
+  src = fetchFromGitHub {
+    owner = "influxdata";
+    repo = "influxdb";
+    rev = "v${version}";
+    hash = "sha256-JWu4V2k8ItbzBa421EtzgMVlDznoDdGjIhfDSaZ0j6c=";
+  };
+
+  ui = fetchurl {
+    url = "https://github.com/influxdata/ui/releases/download/${ui_version}/build.tar.gz";
+    hash = "sha256-0k59SKvt9pFt3WSd5PRUThbfbctt2RYtaxaxoyLICm8=";
+  };
+
+  flux = rustPlatform.buildRustPackage {
+    pname = "libflux";
+    version = "v${libflux_version}";
+    src = fetchFromGitHub {
+      owner = "influxdata";
+      repo = "flux";
+      rev = "v${libflux_version}";
+      hash = "sha256-gx6vnGOFu35wasLl7X/73eDsE0/50cAzjmBjZ+H2Ne4=";
+    };
+    patches = [
+      # Fix build with recent rust versions
+      (fetchpatch {
+        url = "https://github.com/influxdata/flux/commit/6dc8054cfeec4b65b5c7ae786d633240868b8589.patch";
+        stripLen = 2;
+        extraPrefix = "";
+        excludes = [ "rust-toolchain.toml" ];
+        hash = "sha256-w3z+Z26Xhy9TNICyNhc8XiWNSpdLA23ADI4K/AOMYhg=";
+      })
+      ./no-deny-warnings.patch
+    ];
+    sourceRoot = "${src.name}/libflux";
+    cargoSha256 = "sha256-MoI5nxLGA/3pduZ+vgmSG3lm3Nx58SP+6WXQl2pX9Lc=";
+    nativeBuildInputs = [ rustPlatform.bindgenHook ];
+    buildInputs = lib.optional stdenv.isDarwin libiconv;
+    pkgcfg = ''
+      Name: flux
+      Version: ${libflux_version}
+      Description: Library for the InfluxData Flux engine
+      Cflags: -I/out/include
+      Libs: -L/out/lib -lflux -lpthread
+    '';
+    passAsFile = [ "pkgcfg" ];
+    postInstall = ''
+      mkdir -p $out/include $out/pkgconfig
+      cp -r $NIX_BUILD_TOP/source/libflux/include/influxdata $out/include
+      substitute $pkgcfgPath $out/pkgconfig/flux.pc \
+        --replace /out $out
+    '' + lib.optionalString stdenv.isDarwin ''
+      install_name_tool -id $out/lib/libflux.dylib $out/lib/libflux.dylib
+    '';
+  };
+
+in buildGoModule {
+  pname = "influxdb";
+  version = version;
+  inherit src;
+
+  nativeBuildInputs = [ go-bindata pkg-config perl ];
+
+  vendorHash = "sha256-5b1WRq3JndkOkKBhMzGZnSyBDY5Lk0UGe/WGHQJp0CQ=";
+  subPackages = [ "cmd/influxd" "cmd/telemetryd" ];
+
+  PKG_CONFIG_PATH = "${flux}/pkgconfig";
+
+  postPatch = ''
+    # use go-bindata from environment
+    substituteInPlace static/static.go \
+      --replace 'go run github.com/kevinburke/go-bindata/' ""
+  '';
+
+  # Check that libflux and the UI are at the right version, and embed
+  # the UI assets into the Go source tree.
+  preBuild = ''
+    (
+      flux_ver=$(grep github.com/influxdata/flux go.mod | awk '{print $2}')
+      if [ "$flux_ver" != "v${libflux_version}" ]; then
+        echo "go.mod wants libflux $flux_ver, but nix derivation provides ${libflux_version}"
+        exit 1
+      fi
+
+      ui_ver=$(egrep 'UI_RELEASE=".*"' scripts/fetch-ui-assets.sh | cut -d'"' -f2)
+      if [ "$ui_ver" != "${ui_version}" ]; then
+        echo "scripts/fetch-ui-assets.sh wants UI $ui_ver, but nix derivation provides ${ui_version}"
+        exit 1
+      fi
+    )
+
+    mkdir -p static/data
+    tar -xzf ${ui} -C static/data
+    pushd static
+    go generate
+    popd
+  '';
+
+  tags = [ "assets" ];
+
+  ldflags = [ "-X main.commit=v${version}" "-X main.version=${version}" ];
+
+  passthru.tests = { inherit (nixosTests) influxdb2; };
+
+  meta = with lib; {
+    description = "An open-source distributed time series database";
+    license = licenses.mit;
+    homepage = "https://influxdata.com/";
+    maintainers = with maintainers; [ abbradar danderson ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/influxdb2/no-deny-warnings.patch b/nixpkgs/pkgs/servers/nosql/influxdb2/no-deny-warnings.patch
new file mode 100644
index 000000000000..3000ccad8256
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/influxdb2/no-deny-warnings.patch
@@ -0,0 +1,10 @@
+diff --git a/flux/src/lib.rs b/flux/src/lib.rs
+index 3fdf4071..a4c02277 100644
+--- a/flux/src/lib.rs
++++ b/flux/src/lib.rs
+@@ -1,5 +1,3 @@
+-#![cfg_attr(feature = "strict", deny(warnings, missing_docs))]
+-
+ //! This module provides the public facing API for Flux's Go runtime, including formatting,
+ //! parsing, and standard library analysis.
+ use std::sync::Arc;
diff --git a/nixpkgs/pkgs/servers/nosql/influxdb2/provision.nix b/nixpkgs/pkgs/servers/nosql/influxdb2/provision.nix
new file mode 100644
index 000000000000..dfb1d6083a71
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/influxdb2/provision.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3Packages
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "influxdb2-provision";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "oddlama";
+    repo = "influxdb2-provision";
+    rev = "v${version}";
+    hash = "sha256-kgpUtXmwy9buupNzQj/6AIeN8XG2x0XjIckK3WIFC+I=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python3Packages.python python3Packages.influxdb-client ];
+
+  installPhase = ''
+    install -Dm0555 influxdb2-provision.py $out/bin/influxdb2-provision
+    wrapProgram $out/bin/influxdb2-provision --prefix PYTHONPATH : "$PYTHONPATH"
+  '';
+
+  meta = with lib; {
+    description = "A small utility to help provisioning influxdb2";
+    homepage = "https://github.com/oddlama/influxdb2-provision";
+    license = licenses.mit;
+    maintainers = with maintainers; [oddlama];
+    mainProgram = "influxdb2-provision";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/influxdb2/token-manipulator.nix b/nixpkgs/pkgs/servers/nosql/influxdb2/token-manipulator.nix
new file mode 100644
index 000000000000..88713941b465
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/influxdb2/token-manipulator.nix
@@ -0,0 +1,26 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "influxdb2-token-manipulator";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "oddlama";
+    repo = "influxdb2-token-manipulator";
+    rev = "v${version}";
+    hash = "sha256-9glz+TdqvGJgSsbLm4J/fn7kzMC75z74/jxZrEZiooc=";
+  };
+
+  vendorHash = "sha256-zBZk7JbNILX18g9+2ukiESnFtnIVWhdN/J/MBhIITh8=";
+
+  meta = with lib; {
+    description = "Utility program to manipulate influxdb api tokens for declarative setups";
+    homepage = "https://github.com/oddlama/influxdb2-token-manipulator";
+    license = licenses.mit;
+    maintainers = with maintainers; [oddlama];
+    mainProgram = "influxdb2-token-manipulator";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/janusgraph/default.nix b/nixpkgs/pkgs/servers/nosql/janusgraph/default.nix
new file mode 100644
index 000000000000..36385fd46cca
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/janusgraph/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchzip, jdk11, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "janusgraph";
+  version = "0.6.4";
+
+  src = fetchzip {
+    url = "https://github.com/JanusGraph/janusgraph/releases/download/v${version}/janusgraph-${version}.zip";
+    sha256 = "sha256-rfqZE7HYgudVjrz+Ij+ggltaBXvYbczgRwCqsNTojTg=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/janusgraph
+    install -D $src/lib/*.jar $out/share/janusgraph
+    cd $src
+    find conf scripts -type f -exec install -D {} $out/share/janusgraph/{} \;
+
+    JANUSGRAPH_LIB=$out/share/janusgraph
+    classpath=""
+    # Add the slf4j-log4j12 binding
+    classpath="$classpath":$(find -L $JANUSGRAPH_LIB -name 'slf4j-log4j12*.jar' | sort | tr '\n' ':')
+    # Add the jars in $JANUSGRAPH_LIB that start with "janusgraph"
+    classpath="$classpath":$(find -L $JANUSGRAPH_LIB -name 'janusgraph*.jar' | sort | tr '\n' ':')
+    # Add the remaining jars in $JANUSGRAPH_LIB.
+    classpath="$classpath":$(find -L $JANUSGRAPH_LIB -name '*.jar' \
+                    \! -name 'janusgraph*' \
+                    \! -name 'slf4j-log4j12*.jar' | sort | tr '\n' ':')
+
+    makeWrapper ${jdk11}/bin/java $out/bin/janusgraph-server \
+      --add-flags "-classpath $classpath org.janusgraph.graphdb.server.JanusGraphServer"
+
+    # temporary workaround for
+    # https://github.com/NixOS/nixpkgs/pull/244400#issuecomment-1667330430
+    cd "$TMPDIR"
+  '';
+
+  meta = with lib; {
+    description = "An open-source, distributed graph database";
+    homepage = "https://janusgraph.org/";
+    mainProgram = "janusgraph-server";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.ners ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/servers/nosql/mongodb/4.4.nix b/nixpkgs/pkgs/servers/nosql/mongodb/4.4.nix
new file mode 100644
index 000000000000..001b473ff5d6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/mongodb/4.4.nix
@@ -0,0 +1,20 @@
+{ stdenv, callPackage, lib, fetchpatch, sasl, boost, Security, CoreFoundation, cctools }:
+
+let
+  buildMongoDB = callPackage ./mongodb.nix {
+    inherit sasl boost Security CoreFoundation cctools;
+  };
+in
+buildMongoDB {
+  version = "4.4.25";
+  sha256 = "sha256-oE5bs9M0E43e+8tmZaRkA/GtbKG5uZ+3Pf0sJiddTJk=";
+  patches = [
+    ./forget-build-dependencies-4-4.patch
+    ./fix-build-with-boost-1.79-4_4.patch
+    (fetchpatch {
+      name = "mongodb-4.4.15-adjust-the-cache-alignment-assumptions.patch";
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/mongodb-4.4.15-adjust-cache-alignment-assumptions.patch.arm64?h=mongodb44";
+      sha256 = "Ah4zdSFgXUJ/HSN8VRLJqDpNy3CjMCBnRqlpALXzx+g=";
+    })
+  ] ++ lib.optionals stdenv.isDarwin [ ./asio-no-experimental-string-view-4-4.patch ];
+}
diff --git a/nixpkgs/pkgs/servers/nosql/mongodb/5.0.nix b/nixpkgs/pkgs/servers/nosql/mongodb/5.0.nix
new file mode 100644
index 000000000000..05fed1ac9204
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/mongodb/5.0.nix
@@ -0,0 +1,28 @@
+{ stdenv, callPackage, lib, sasl, boost, Security, CoreFoundation, cctools }:
+
+let
+  buildMongoDB = callPackage ./mongodb.nix {
+    inherit sasl boost Security CoreFoundation cctools;
+  };
+  variants = if stdenv.isLinux then
+    {
+      version = "5.0.22";
+      sha256 = "sha256-NIsx6nwXGsuk+ff+LOCwOMpT/HAaNn89t4jtJvKprIA=";
+      patches = [ ./fix-build-with-boost-1.79-5_0-linux.patch ];
+    }
+  else lib.optionalAttrs stdenv.isDarwin
+    {
+      version = "5.0.3"; # at least darwin has to stay on 5.0.3 until the SDK used by nixpkgs is bumped to 10.13
+      sha256 = "1p9pq0dfd6lynvnz5p1c8dqp4filzrz86j840xwxwx82dm1zl6p0";
+      patches = [ ./fix-build-with-boost-1.79-5_0.patch ]; # no darwin in name to prevent unnecessary rebuild
+    };
+in
+buildMongoDB {
+  version = variants.version;
+  sha256 = variants.sha256;
+  patches = [
+    ./forget-build-dependencies-4-4.patch
+    ./asio-no-experimental-string-view-4-4.patch
+    ./fix-gcc-Wno-exceptions-5.0.patch
+  ] ++ variants.patches;
+}
diff --git a/nixpkgs/pkgs/servers/nosql/mongodb/6.0.nix b/nixpkgs/pkgs/servers/nosql/mongodb/6.0.nix
new file mode 100644
index 000000000000..8d7d6fbe78f6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/mongodb/6.0.nix
@@ -0,0 +1,18 @@
+{ stdenv, callPackage, lib, fetchpatch, sasl, boost, Security, CoreFoundation, cctools }:
+
+let
+  buildMongoDB = callPackage ./mongodb.nix {
+    inherit sasl boost Security CoreFoundation cctools stdenv;
+  };
+in
+buildMongoDB {
+  version = "6.0.11";
+  sha256 = "sha256-hIbbCDQ0Sqnm6ohtEpbdGWk18nLIlr6T0T9UL6WAFA8=";
+  patches = [
+    (fetchpatch {
+      name = "mongodb-6.1.0-rc-more-specific-cache-alignment-types.patch";
+      url = "https://github.com/mongodb/mongo/commit/5435f9585f857f6145beaf6d31daf336453ba86f.patch";
+      sha256 = "sha256-gWlE2b/NyGe2243iNCXzjcERIY8/4ZWI4Gjh5SF0tYA=";
+    })
+  ];
+}
diff --git a/nixpkgs/pkgs/servers/nosql/mongodb/asio-no-experimental-string-view-4-4.patch b/nixpkgs/pkgs/servers/nosql/mongodb/asio-no-experimental-string-view-4-4.patch
new file mode 100644
index 000000000000..b27145d57ecf
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/mongodb/asio-no-experimental-string-view-4-4.patch
@@ -0,0 +1,23 @@
+--- a/src/third_party/asio-master/asio/include/asio/detail/config.hpp
+--- b/src/third_party/asio-master/asio/include/asio/detail/config.hpp
+@@ -831,20 +831,8 @@
+ #     endif // (__cplusplus >= 201402)
+ #    endif // (_LIBCPP_VERSION < 7000)
+ #   else // defined(ASIO_HAS_CLANG_LIBCXX)
+-#    if (__cplusplus >= 201402)
+-#     if __has_include(<experimental/string_view>)
+-#      define ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW 1
+-#     endif // __has_include(<experimental/string_view>)
+-#    endif // (__cplusplus >= 201402)
+ #   endif // // defined(ASIO_HAS_CLANG_LIBCXX)
+ #  endif // defined(__clang__)
+-#  if defined(__GNUC__)
+-#   if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 9)) || (__GNUC__ > 4)
+-#    if (__cplusplus >= 201402)
+-#     define ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW 1
+-#    endif // (__cplusplus >= 201402)
+-#   endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 9)) || (__GNUC__ > 4)
+-#  endif // defined(__GNUC__)
+ # endif // !defined(ASIO_DISABLE_STD_EXPERIMENTAL_STRING_VIEW)
+ #endif // !defined(ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW)
+ 
diff --git a/nixpkgs/pkgs/servers/nosql/mongodb/fix-build-with-boost-1.79-4_4.patch b/nixpkgs/pkgs/servers/nosql/mongodb/fix-build-with-boost-1.79-4_4.patch
new file mode 100644
index 000000000000..72da249f2380
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/mongodb/fix-build-with-boost-1.79-4_4.patch
@@ -0,0 +1,93 @@
+From f0c7e9190e9d61515ab3f95c6665754d3b972cd1 Mon Sep 17 00:00:00 2001
+From: Et7f3 <cadeaudeelie@gmail.com>
+Date: Tue, 19 Jul 2022 22:11:11 +0200
+Subject: [PATCH] build: Upgrade boost to 1.79.0
+
+We can see in src/third_party/boost-1.70.0/boost/version.hpp that vendored
+version of boost is BOOST_LIB_VERSION "1_70"
+
+We can also see the doc desbribe 2 headers to use filesystems lib: One is
+src/third_party/boost/boost/filesystem/fstream.hpp that contains (175-177)
+  typedef basic_ifstream<char> ifstream;
+  typedef basic_ofstream<char> ofstream;
+  typedef basic_fstream<char> fstream;
+
+So this mean they mostly forgot to include a header and include-what-you-use
+would catch this error.
+
+In upstream they fixed in a simmilar way
+https://github.com/mongodb/mongo/commit/13389dc222fc372442be8c147e09685bb9a26a3a
+
+Co-Authored-By: Adrian Pistol <vifino@tty.sh>
+---
+ src/mongo/db/storage/storage_repair_observer.cpp    | 1 +
+ src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp | 1 +
+ src/mongo/shell/shell_utils_extended.cpp            | 1 +
+ src/mongo/util/processinfo_linux.cpp                | 2 +-
+ src/mongo/util/stacktrace_threads.cpp               | 1 +
+ 5 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/src/mongo/db/storage/storage_repair_observer.cpp b/src/mongo/db/storage/storage_repair_observer.cpp
+index 22b76a6a39c..453f48229cd 100644
+--- a/src/mongo/db/storage/storage_repair_observer.cpp
++++ b/src/mongo/db/storage/storage_repair_observer.cpp
+@@ -42,6 +42,7 @@
+ #endif
+ 
+ #include <boost/filesystem/path.hpp>
++#include <boost/filesystem/fstream.hpp>
+ 
+ #include "mongo/db/dbhelpers.h"
+ #include "mongo/db/operation_context.h"
+diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp
+index ee87aca4723..bde2c1b2b83 100644
+--- a/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp
++++ b/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp
+@@ -37,6 +37,7 @@
+ 
+ #include <boost/filesystem.hpp>
+ #include <boost/filesystem/path.hpp>
++#include <boost/filesystem/fstream.hpp>
+ #include <pcrecpp.h>
+ 
+ #include "mongo/base/simple_string_data_comparator.h"
+diff --git a/src/mongo/shell/shell_utils_extended.cpp b/src/mongo/shell/shell_utils_extended.cpp
+index 8cd7f035f1d..cd672eb513f 100644
+--- a/src/mongo/shell/shell_utils_extended.cpp
++++ b/src/mongo/shell/shell_utils_extended.cpp
+@@ -37,6 +37,7 @@
+ #endif
+ 
+ #include <boost/filesystem.hpp>
++#include <boost/filesystem/fstream.hpp>
+ #include <fstream>
+ 
+ #include "mongo/bson/bson_validate.h"
+diff --git a/src/mongo/util/processinfo_linux.cpp b/src/mongo/util/processinfo_linux.cpp
+index 9063f140988..d74949d45fc 100644
+--- a/src/mongo/util/processinfo_linux.cpp
++++ b/src/mongo/util/processinfo_linux.cpp
+@@ -33,7 +33,7 @@
+ 
+ #include "processinfo.h"
+ 
+-#include <iostream>
++#include <fstream>
+ #include <malloc.h>
+ #include <pcrecpp.h>
+ #include <sched.h>
+diff --git a/src/mongo/util/stacktrace_threads.cpp b/src/mongo/util/stacktrace_threads.cpp
+index 4667a261ab7..73a36015bd6 100644
+--- a/src/mongo/util/stacktrace_threads.cpp
++++ b/src/mongo/util/stacktrace_threads.cpp
+@@ -36,6 +36,7 @@
+ #include <array>
+ #include <atomic>
+ #include <boost/filesystem.hpp>
++#include <boost/filesystem/fstream.hpp>
+ #include <cctype>
+ #include <cstdint>
+ #include <cstdlib>
+-- 
+2.39.2
+
diff --git a/nixpkgs/pkgs/servers/nosql/mongodb/fix-build-with-boost-1.79-5_0-linux.patch b/nixpkgs/pkgs/servers/nosql/mongodb/fix-build-with-boost-1.79-5_0-linux.patch
new file mode 100644
index 000000000000..eb205bd92894
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/mongodb/fix-build-with-boost-1.79-5_0-linux.patch
@@ -0,0 +1,90 @@
+From fb846bdbd07cc3b8ada6179dccd974072c2b69da Mon Sep 17 00:00:00 2001
+From: Et7f3 <cadeaudeelie@gmail.com>
+Date: Tue, 19 Jul 2022 22:01:56 +0200
+Subject: [PATCH] build: Upgrade boost to 1.79.0
+
+We can see in src/third_party/boost/boost/version.hpp that vendored version of
+boost is BOOST_LIB_VERSION "1_76"
+
+We can also see the doc desbribe 2 headers to use filesystems lib: One is
+src/third_party/boost/boost/filesystem/fstream.hpp that contains (175-177)
+  typedef basic_ifstream<char> ifstream;
+  typedef basic_ofstream<char> ofstream;
+  typedef basic_fstream<char> fstream;
+
+So this mean they mostly forgot to include a header and include-what-you-use
+would catch this error.
+
+In upstream they fixed in a simmilar way
+https://github.com/mongodb/mongo/commit/13389dc222fc372442be8c147e09685bb9a26a3a
+---
+ src/mongo/db/storage/storage_repair_observer.cpp    | 1 +
+ src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp | 1 +
+ src/mongo/shell/shell_utils_extended.cpp            | 1 +
+ src/mongo/util/processinfo_linux.cpp                | 1 +
+ src/mongo/util/stacktrace_threads.cpp               | 1 +
+ 5 files changed, 5 insertions(+)
+
+diff --git a/src/mongo/db/storage/storage_repair_observer.cpp b/src/mongo/db/storage/storage_repair_observer.cpp
+index 22b76a6a39c..453f48229cd 100644
+--- a/src/mongo/db/storage/storage_repair_observer.cpp
++++ b/src/mongo/db/storage/storage_repair_observer.cpp
+@@ -42,6 +42,7 @@
+ #endif
+ 
+ #include <boost/filesystem/path.hpp>
++#include <boost/filesystem/fstream.hpp>
+ 
+ #include "mongo/db/dbhelpers.h"
+ #include "mongo/db/operation_context.h"
+diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp
+index 2f032e4..d1a90e0 100644
+--- a/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp
++++ b/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp
+@@ -37,6 +37,7 @@
+
+ #include <boost/filesystem.hpp>
+ #include <boost/filesystem/path.hpp>
++#include <boost/filesystem/fstream.hpp>
+ #include <pcrecpp.h>
+
+ #include "mongo/base/simple_string_data_comparator.h"
+diff --git a/src/mongo/shell/shell_utils_extended.cpp b/src/mongo/shell/shell_utils_extended.cpp
+index fbdddc1318d..e37d4c93a11 100644
+--- a/src/mongo/shell/shell_utils_extended.cpp
++++ b/src/mongo/shell/shell_utils_extended.cpp
+@@ -37,6 +37,7 @@
+ #endif
+ 
+ #include <boost/filesystem.hpp>
++#include <boost/filesystem/fstream.hpp>
+ #include <fmt/format.h>
+ #include <fstream>
+ 
+diff --git a/src/mongo/util/processinfo_linux.cpp b/src/mongo/util/processinfo_linux.cpp
+index eae0e9b7764..d5cd40f6039 100644
+--- a/src/mongo/util/processinfo_linux.cpp
++++ b/src/mongo/util/processinfo_linux.cpp
+@@ -52,6 +52,7 @@
+ #endif
+ 
+ #include <boost/filesystem.hpp>
++#include <boost/filesystem/fstream.hpp>
+ #include <boost/none.hpp>
+ #include <boost/optional.hpp>
+ #include <fmt/format.h>
+diff --git a/src/mongo/util/stacktrace_threads.cpp b/src/mongo/util/stacktrace_threads.cpp
+index d2ee29d24b4..d485fa22367 100644
+--- a/src/mongo/util/stacktrace_threads.cpp
++++ b/src/mongo/util/stacktrace_threads.cpp
+@@ -36,6 +36,7 @@
+ #include <array>
+ #include <atomic>
+ #include <boost/filesystem.hpp>
++#include <boost/filesystem/fstream.hpp>
+ #include <cstdint>
+ #include <cstdlib>
+ #include <dirent.h>
+-- 
+2.32.1 (Apple Git-133)
+
diff --git a/nixpkgs/pkgs/servers/nosql/mongodb/fix-build-with-boost-1.79-5_0.patch b/nixpkgs/pkgs/servers/nosql/mongodb/fix-build-with-boost-1.79-5_0.patch
new file mode 100644
index 000000000000..d00ed5e77d67
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/mongodb/fix-build-with-boost-1.79-5_0.patch
@@ -0,0 +1,90 @@
+From fb846bdbd07cc3b8ada6179dccd974072c2b69da Mon Sep 17 00:00:00 2001
+From: Et7f3 <cadeaudeelie@gmail.com>
+Date: Tue, 19 Jul 2022 22:01:56 +0200
+Subject: [PATCH] build: Upgrade boost to 1.79.0
+
+We can see in src/third_party/boost/boost/version.hpp that vendored version of
+boost is BOOST_LIB_VERSION "1_76"
+
+We can also see the doc desbribe 2 headers to use filesystems lib: One is
+src/third_party/boost/boost/filesystem/fstream.hpp that contains (175-177)
+  typedef basic_ifstream<char> ifstream;
+  typedef basic_ofstream<char> ofstream;
+  typedef basic_fstream<char> fstream;
+
+So this mean they mostly forgot to include a header and include-what-you-use
+would catch this error.
+
+In upstream they fixed in a simmilar way
+https://github.com/mongodb/mongo/commit/13389dc222fc372442be8c147e09685bb9a26a3a
+---
+ src/mongo/db/storage/storage_repair_observer.cpp    | 1 +
+ src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp | 1 +
+ src/mongo/shell/shell_utils_extended.cpp            | 1 +
+ src/mongo/util/processinfo_linux.cpp                | 1 +
+ src/mongo/util/stacktrace_threads.cpp               | 1 +
+ 5 files changed, 5 insertions(+)
+
+diff --git a/src/mongo/db/storage/storage_repair_observer.cpp b/src/mongo/db/storage/storage_repair_observer.cpp
+index 22b76a6a39c..453f48229cd 100644
+--- a/src/mongo/db/storage/storage_repair_observer.cpp
++++ b/src/mongo/db/storage/storage_repair_observer.cpp
+@@ -42,6 +42,7 @@
+ #endif
+ 
+ #include <boost/filesystem/path.hpp>
++#include <boost/filesystem/fstream.hpp>
+ 
+ #include "mongo/db/dbhelpers.h"
+ #include "mongo/db/operation_context.h"
+diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp
+index 07fabadd634..2924a2c74af 100644
+--- a/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp
++++ b/src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp
+@@ -37,6 +37,7 @@
+ 
+ #include <boost/filesystem.hpp>
+ #include <boost/filesystem/path.hpp>
++#include <boost/filesystem/fstream.hpp>
+ 
+ #include "mongo/base/simple_string_data_comparator.h"
+ #include "mongo/bson/bsonobjbuilder.h"
+diff --git a/src/mongo/shell/shell_utils_extended.cpp b/src/mongo/shell/shell_utils_extended.cpp
+index fbdddc1318d..e37d4c93a11 100644
+--- a/src/mongo/shell/shell_utils_extended.cpp
++++ b/src/mongo/shell/shell_utils_extended.cpp
+@@ -37,6 +37,7 @@
+ #endif
+ 
+ #include <boost/filesystem.hpp>
++#include <boost/filesystem/fstream.hpp>
+ #include <fmt/format.h>
+ #include <fstream>
+ 
+diff --git a/src/mongo/util/processinfo_linux.cpp b/src/mongo/util/processinfo_linux.cpp
+index eae0e9b7764..d5cd40f6039 100644
+--- a/src/mongo/util/processinfo_linux.cpp
++++ b/src/mongo/util/processinfo_linux.cpp
+@@ -52,6 +52,7 @@
+ #endif
+ 
+ #include <boost/filesystem.hpp>
++#include <boost/filesystem/fstream.hpp>
+ #include <boost/none.hpp>
+ #include <boost/optional.hpp>
+ #include <fmt/format.h>
+diff --git a/src/mongo/util/stacktrace_threads.cpp b/src/mongo/util/stacktrace_threads.cpp
+index d2ee29d24b4..d485fa22367 100644
+--- a/src/mongo/util/stacktrace_threads.cpp
++++ b/src/mongo/util/stacktrace_threads.cpp
+@@ -36,6 +36,7 @@
+ #include <array>
+ #include <atomic>
+ #include <boost/filesystem.hpp>
++#include <boost/filesystem/fstream.hpp>
+ #include <cstdint>
+ #include <cstdlib>
+ #include <dirent.h>
+-- 
+2.32.1 (Apple Git-133)
+
diff --git a/nixpkgs/pkgs/servers/nosql/mongodb/fix-gcc-Wno-exceptions-5.0.patch b/nixpkgs/pkgs/servers/nosql/mongodb/fix-gcc-Wno-exceptions-5.0.patch
new file mode 100644
index 000000000000..b8803911968b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/mongodb/fix-gcc-Wno-exceptions-5.0.patch
@@ -0,0 +1,44 @@
+From e78b2bf6eaa0c43bd76dbb841add167b443d2bb0 Mon Sep 17 00:00:00 2001
+From: Mark Benvenuto <mark.benvenuto@mongodb.com>
+Date: Mon, 21 Jun 2021 11:36:56 -0400
+Subject: [PATCH] SERVER-57688 Fix debug gcc 11 and clang 12 builds on Fedora
+ 34
+
+---
+ SConstruct                              | 4 ----
+ src/mongo/db/query/plan_summary_stats.h | 4 +++-
+ src/mongo/util/shim_boost_assert.cpp    | 1 +
+ 3 files changed, 4 insertions(+), 5 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index 25fd4a248d0c..23cff6f9da53 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -3108,10 +3108,6 @@ def doConfigure(myenv):
+         # harmful to capture unused variables we are suppressing for now with a plan to fix later.
+         AddToCCFLAGSIfSupported(myenv, "-Wno-unused-lambda-capture")
+ 
+-        # This warning was added in clang-5 and incorrectly flags our implementation of
+-        # exceptionToStatus(). See https://bugs.llvm.org/show_bug.cgi?id=34804
+-        AddToCCFLAGSIfSupported(myenv, "-Wno-exceptions")
+-
+         # Enable sized deallocation support.
+         AddToCXXFLAGSIfSupported(myenv, '-fsized-deallocation')
+ 
+diff --git a/src/mongo/db/query/plan_summary_stats.h b/src/mongo/db/query/plan_summary_stats.h
+index 58677ab20d25..cfaa2053d16f 100644
+--- a/src/mongo/db/query/plan_summary_stats.h
++++ b/src/mongo/db/query/plan_summary_stats.h
+@@ -29,9 +29,11 @@
+ 
+ #pragma once
+ 
+-#include "mongo/util/container_size_helper.h"
++#include <optional>
+ #include <string>
+ 
++#include "mongo/util/container_size_helper.h"
++
+ namespace mongo {
+ 
+ /**
diff --git a/nixpkgs/pkgs/servers/nosql/mongodb/forget-build-dependencies-4-4.patch b/nixpkgs/pkgs/servers/nosql/mongodb/forget-build-dependencies-4-4.patch
new file mode 100644
index 000000000000..1c3e0982a8c1
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/mongodb/forget-build-dependencies-4-4.patch
@@ -0,0 +1,33 @@
+--- a/site_scons/mongo/generators.py
++++ b/site_scons/mongo/generators.py
+@@ -34,30 +34,12 @@ def default_buildinfo_environment_data():
+             False,
+         ),
+         (
+-            'ccflags',
+-            '$CCFLAGS',
+-            True,
+-            False,
+-        ),
+-        (
+             'cxx',
+             '$CXX_VERSION',
+             True,
+             False,
+         ),
+         (
+-            'cxxflags',
+-            '$CXXFLAGS',
+-            True,
+-            False,
+-        ),
+-        (
+-            'linkflags',
+-            '$LINKFLAGS',
+-            True,
+-            False,
+-        ),
+-        (
+             'target_arch',
+             '$TARGET_ARCH',
+             True,
diff --git a/nixpkgs/pkgs/servers/nosql/mongodb/mongodb.nix b/nixpkgs/pkgs/servers/nosql/mongodb/mongodb.nix
new file mode 100644
index 000000000000..df7efb33b68e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/mongodb/mongodb.nix
@@ -0,0 +1,199 @@
+{ lib
+, stdenv
+, fetchurl
+, scons_3_1_2
+, boost
+, gperftools
+, pcre-cpp
+, snappy
+, zlib
+, yaml-cpp
+, sasl
+, openssl
+, libpcap
+, python3
+, curl
+, Security
+, CoreFoundation
+, cctools
+, xz
+}:
+
+# Note:
+#   The command line administrative tools are part of other packages:
+#   see pkgs.mongodb-tools and pkgs.mongosh.
+
+with lib;
+
+{ version, sha256, patches ? []
+, license ? lib.licenses.sspl
+}:
+
+let
+  variants =
+    if versionAtLeast version "6.0"
+    then rec {
+      python = scons.python.withPackages (ps: with ps; [
+        pyyaml
+        cheetah3
+        psutil
+        setuptools
+        packaging
+        pymongo
+      ]);
+
+      scons = scons_3_1_2;
+
+      mozjsVersion = "60";
+      mozjsReplace = "defined(HAVE___SINCOS)";
+
+    }
+    else rec {
+      python = scons.python.withPackages (ps: with ps; [
+        pyyaml
+        cheetah3
+        psutil
+        setuptools
+      ]);
+
+      scons = scons_3_1_2;
+
+      mozjsVersion = "60";
+      mozjsReplace = "defined(HAVE___SINCOS)";
+
+    };
+
+  system-libraries = [
+    "boost"
+    "pcre"
+    "snappy"
+    "yaml"
+    "zlib"
+    #"asio" -- XXX use package?
+    #"stemmer"  -- not nice to package yet (no versioning, no makefile, no shared libs).
+    #"valgrind" -- mongodb only requires valgrind.h, which is vendored in the source.
+    #"wiredtiger"
+  ] ++ optionals stdenv.isLinux [ "tcmalloc" ];
+  inherit (lib) systems subtractLists;
+
+in stdenv.mkDerivation rec {
+  inherit version;
+  pname = "mongodb";
+
+  src = fetchurl {
+    url = "https://fastdl.mongodb.org/src/mongodb-src-r${version}.tar.gz";
+    inherit sha256;
+  };
+
+  nativeBuildInputs = [ variants.scons ]
+                      ++ lib.optionals (versionAtLeast version "4.4") [ xz ];
+
+  buildInputs = [
+    boost
+    curl
+    gperftools
+    libpcap
+    yaml-cpp
+    openssl
+    pcre-cpp
+    variants.python
+    sasl
+    snappy
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [ Security CoreFoundation cctools ];
+
+  # MongoDB keeps track of its build parameters, which tricks nix into
+  # keeping dependencies to build inputs in the final output.
+  # We remove the build flags from buildInfo data.
+  inherit patches;
+
+  postPatch = ''
+    # fix environment variable reading
+    substituteInPlace SConstruct \
+        --replace "env = Environment(" "env = Environment(ENV = os.environ,"
+   '' + lib.optionalString (versionAtLeast version "4.4") ''
+    # Fix debug gcc 11 and clang 12 builds on Fedora
+    # https://github.com/mongodb/mongo/commit/e78b2bf6eaa0c43bd76dbb841add167b443d2bb0.patch
+    substituteInPlace src/mongo/db/query/plan_summary_stats.h --replace '#include <string>' '#include <optional>
+    #include <string>'
+    substituteInPlace src/mongo/db/exec/plan_stats.h --replace '#include <string>' '#include <optional>
+    #include <string>'
+  '' + lib.optionalString (versionOlder version "5.0") ''
+    # remove -march overriding, we know better.
+    sed -i 's/env.Append.*-march=.*$/pass/' SConstruct
+  '' + lib.optionalString (stdenv.isDarwin && versionOlder version "6.0") ''
+    substituteInPlace src/third_party/mozjs-${variants.mozjsVersion}/extract/js/src/jsmath.cpp --replace '${variants.mozjsReplace}' 0
+  '' + lib.optionalString (stdenv.isDarwin && versionOlder version "3.6") ''
+    substituteInPlace src/third_party/s2/s1angle.cc --replace drem remainder
+    substituteInPlace src/third_party/s2/s1interval.cc --replace drem remainder
+    substituteInPlace src/third_party/s2/s2cap.cc --replace drem remainder
+    substituteInPlace src/third_party/s2/s2latlng.cc --replace drem remainder
+    substituteInPlace src/third_party/s2/s2latlngrect.cc --replace drem remainder
+  '' + lib.optionalString stdenv.isi686 ''
+
+    # don't fail by default on i686
+    substituteInPlace src/mongo/db/storage/storage_options.h \
+      --replace 'engine("wiredTiger")' 'engine("mmapv1")'
+  '';
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang
+    "-Wno-unused-command-line-argument";
+
+  sconsFlags = [
+    "--release"
+    "--ssl"
+    #"--rocksdb" # Don't have this packaged yet
+    "--wiredtiger=on"
+    "--js-engine=mozjs"
+    "--use-sasl-client"
+    "--disable-warnings-as-errors"
+    "VARIANT_DIR=nixos" # Needed so we don't produce argument lists that are too long for gcc / ld
+  ] ++ lib.optionals (versionAtLeast version "4.4") [ "--link-model=static" ]
+  ++ map (lib: "--use-system-${lib}") system-libraries;
+
+  # This seems to fix mongodb not able to find OpenSSL's crypto.h during build
+  hardeningDisable = [ "fortify3" ];
+
+  preBuild = ''
+    sconsFlags+=" CC=$CC"
+    sconsFlags+=" CXX=$CXX"
+  '' + optionalString stdenv.isAarch64 ''
+    sconsFlags+=" CCFLAGS='-march=armv8-a+crc'"
+  '';
+
+  preInstall = ''
+    mkdir -p "$out/lib"
+  '';
+
+  postInstall = ''
+    rm -f "$out/bin/install_compass" || true
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    "$out/bin/mongo" --version
+    runHook postInstallCheck
+  '';
+
+  installTargets =
+    if (versionAtLeast version "6.0") then "install-devcore"
+    else if (versionAtLeast version "4.4") then "install-core"
+    else "install";
+
+  prefixKey = if (versionAtLeast version "4.4") then "DESTDIR=" else "--prefix=";
+
+  enableParallelBuilding = true;
+
+  hardeningEnable = [ "pie" ];
+
+  meta = {
+    description = "A scalable, high-performance, open source NoSQL database";
+    homepage = "http://www.mongodb.org";
+    inherit license;
+
+    maintainers = with maintainers; [ bluescreen303 offline ];
+    platforms = subtractLists systems.doubles.i686 systems.doubles.unix;
+    broken = (versionOlder version "6.0" && stdenv.system == "aarch64-darwin");
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/neo4j/default.nix b/nixpkgs/pkgs/servers/nosql/neo4j/default.nix
new file mode 100644
index 000000000000..7de1967583b6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/neo4j/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, lib, fetchurl, nixosTests, makeWrapper, openjdk11, which, gawk }:
+
+stdenv.mkDerivation rec {
+  pname = "neo4j";
+  version = "4.4.11";
+
+  src = fetchurl {
+    url = "https://neo4j.com/artifact.php?name=neo4j-community-${version}-unix.tar.gz";
+    sha256 = "sha256-KIENqsXeSl1bd84tp9fD2kxczxMoi62IW4M8NblhAMg=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p "$out/share/neo4j"
+    cp -R * "$out/share/neo4j"
+
+    mkdir -p "$out/bin"
+    for NEO4J_SCRIPT in neo4j neo4j-admin cypher-shell
+    do
+        chmod +x "$out/share/neo4j/bin/$NEO4J_SCRIPT"
+        makeWrapper "$out/share/neo4j/bin/$NEO4J_SCRIPT" \
+            "$out/bin/$NEO4J_SCRIPT" \
+            --prefix PATH : "${lib.makeBinPath [ openjdk11 which gawk ]}" \
+            --set JAVA_HOME "${openjdk11}"
+    done
+
+    patchShebangs $out/share/neo4j/bin/neo4j-admin
+    # user will be asked to change password on first login
+    $out/bin/neo4j-admin set-initial-password neo4j
+  '';
+
+  passthru.tests.nixos = nixosTests.neo4j;
+
+  meta = with lib; {
+    description = "A highly scalable, robust (fully ACID) native graph database";
+    homepage = "https://neo4j.com/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ jonringer offline ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/questdb/default.nix b/nixpkgs/pkgs/servers/nosql/questdb/default.nix
new file mode 100644
index 000000000000..d989d125b2fb
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/questdb/default.nix
@@ -0,0 +1,42 @@
+{
+  fetchurl,
+  jdk17_headless,
+  lib,
+  makeBinaryWrapper,
+  stdenv
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "questdb";
+  version = "7.3.3";
+
+  src = fetchurl {
+    url = "https://github.com/questdb/questdb/releases/download/${finalAttrs.version}/questdb-${finalAttrs.version}-no-jre-bin.tar.gz";
+    hash = "sha256-THQGgvSxij1xpAsOj3oCYYDfhoe/ji3jZ6PMT+5UThc=";
+  };
+
+  nativeBuildInputs = [
+    makeBinaryWrapper
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/java
+    cp questdb.sh $out/bin
+    cp questdb.jar $out/share/java
+
+    ln -s $out/share/java/questdb.jar $out/bin
+    wrapProgram $out/bin/questdb.sh --set JAVA_HOME "${jdk17_headless}"
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "high-performance, open-source SQL database for applications in financial services, IoT, machine learning, DevOps and observability";
+    homepage = "https://questdb.io/";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.jacfal ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/servers/nosql/redis/default.nix b/nixpkgs/pkgs/servers/nosql/redis/default.nix
new file mode 100644
index 000000000000..c3ac0ebbf969
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/redis/default.nix
@@ -0,0 +1,91 @@
+{ lib, stdenv, fetchurl, lua, jemalloc, pkg-config, nixosTests
+, tcl, which, ps, getconf
+, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd, systemd
+# dependency ordering is broken at the moment when building with openssl
+, tlsSupport ? !stdenv.hostPlatform.isStatic, openssl
+
+# Using system jemalloc fixes cross-compilation and various setups.
+# However the experimental 'active defragmentation' feature of redis requires
+# their custom patched version of jemalloc.
+, useSystemJemalloc ? true
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "redis";
+  version = "7.2.3";
+
+  src = fetchurl {
+    url = "https://download.redis.io/releases/redis-${finalAttrs.version}.tar.gz";
+    hash = "sha256-PisZbW603bnnQwiL/CkVzLtC1A9aij7djLaccW7DS+c=";
+  };
+
+  patches = lib.optionals useSystemJemalloc [
+    # use system jemalloc
+    (fetchurl {
+      url = "https://gitlab.archlinux.org/archlinux/packaging/packages/redis/-/raw/102cc861713c796756abd541bf341a4512eb06e6/redis-5.0-use-system-jemalloc.patch";
+      hash = "sha256-VPRfoSnctkkkzLrXEWQX3Lh5HmZaCXoJafyOG007KzM=";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ lua ]
+    ++ lib.optional useSystemJemalloc jemalloc
+    ++ lib.optional withSystemd systemd
+    ++ lib.optionals tlsSupport [ openssl ];
+
+  preBuild = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace src/Makefile --replace "-flto" ""
+  '';
+
+  # More cross-compiling fixes.
+  makeFlags = [ "PREFIX=${placeholder "out"}" ]
+    ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ "AR=${stdenv.cc.targetPrefix}ar" "RANLIB=${stdenv.cc.targetPrefix}ranlib" ]
+    ++ lib.optionals withSystemd [ "USE_SYSTEMD=yes" ]
+    ++ lib.optionals tlsSupport [ "BUILD_TLS=yes" ];
+
+  enableParallelBuilding = true;
+
+  hardeningEnable = lib.optionals (!stdenv.isDarwin) [ "pie" ];
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals stdenv.cc.isClang [ "-std=c11" ]);
+
+  # darwin currently lacks a pure `pgrep` which is extensively used here
+  doCheck = !stdenv.isDarwin;
+  nativeCheckInputs = [ which tcl ps ] ++ lib.optionals stdenv.hostPlatform.isStatic [ getconf ];
+  checkPhase = ''
+    runHook preCheck
+
+    # disable test "Connect multiple replicas at the same time": even
+    # upstream find this test too timing-sensitive
+    substituteInPlace tests/integration/replication.tcl \
+      --replace 'foreach mdl {no yes}' 'foreach mdl {}'
+
+    substituteInPlace tests/support/server.tcl \
+      --replace 'exec /usr/bin/env' 'exec env'
+
+    sed -i '/^proc wait_load_handlers_disconnected/{n ; s/wait_for_condition 50 100/wait_for_condition 50 500/; }' \
+      tests/support/util.tcl
+
+    ./runtest \
+      --no-latency \
+      --timeout 2000 \
+      --clients $NIX_BUILD_CORES \
+      --tags -leaks \
+      --skipunit integration/failover # flaky and slow
+
+    runHook postCheck
+  '';
+
+  passthru.tests.redis = nixosTests.redis;
+
+  meta = with lib; {
+    homepage = "https://redis.io";
+    description = "An open source, advanced key-value store";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    changelog = "https://github.com/redis/redis/raw/${finalAttrs.version}/00-RELEASENOTES";
+    maintainers = with maintainers; [ berdario globin marsam ];
+    mainProgram = "redis-cli";
+  };
+})
diff --git a/nixpkgs/pkgs/servers/nosql/rethinkdb/default.nix b/nixpkgs/pkgs/servers/nosql/rethinkdb/default.nix
new file mode 100644
index 000000000000..8c83e794f30f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/rethinkdb/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv, fetchurl, which, m4
+, protobuf, boost, zlib, curl, openssl, icu, jemalloc, libtool
+, python3Packages, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rethinkdb";
+  version = "2.4.3";
+
+  src = fetchurl {
+    url = "https://download.rethinkdb.com/repository/raw/dist/${pname}-${version}.tgz";
+    hash = "sha256-w3iMeicPu0nj2kV4e2vlAHY8GQ+wWeObfe+UVPmkZ08=";
+  };
+
+  postPatch = ''
+    substituteInPlace external/quickjs_*/Makefile \
+      --replace "gcc-ar" "${stdenv.cc.targetPrefix}ar" \
+      --replace "gcc" "${stdenv.cc.targetPrefix}cc"
+  '';
+
+  preConfigure = ''
+    export ALLOW_WARNINGS=1
+    patchShebangs .
+  '';
+
+  configureFlags = lib.optionals (!stdenv.isDarwin) [
+    "--with-jemalloc"
+    "--lib-path=${jemalloc}/lib"
+  ];
+
+  makeFlags = [ "rethinkdb" ];
+
+  buildInputs = [ protobuf boost zlib curl openssl icu ]
+    ++ lib.optional (!stdenv.isDarwin) jemalloc
+    ++ lib.optional stdenv.isDarwin libtool;
+
+  nativeBuildInputs = [ which m4 python3Packages.python makeWrapper ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    wrapProgram $out/bin/rethinkdb \
+      --prefix PATH ":" "${python3Packages.rethinkdb}/bin"
+  '';
+
+  meta = {
+    description = "An open-source distributed database built with love";
+    longDescription = ''
+      RethinkDB is built to store JSON documents, and scale to
+      multiple machines with very little effort. It has a pleasant
+      query language that supports really useful queries like table
+      joins and group by, and is easy to setup and learn.
+    '';
+    homepage    = "https://rethinkdb.com";
+    license     = lib.licenses.asl20;
+    platforms   = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ thoughtpolice bluescreen303 ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/surrealdb/default.nix b/nixpkgs/pkgs/servers/nosql/surrealdb/default.nix
new file mode 100644
index 000000000000..22903725a5ed
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/surrealdb/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, rocksdb
+, testers
+, surrealdb
+, SystemConfiguration
+, protobuf
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "surrealdb";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "surrealdb";
+    repo = "surrealdb";
+    rev = "v${version}";
+    hash = "sha256-rBqg8tMcdc9VavYQDiKQwNp2IxYvpDNB/Qb74uiMmO4=";
+  };
+
+  cargoHash = "sha256-qbKc9/n4bOvdP2iXg6IF3jAwxx6Wj17Uxlj3F/gx+1g=";
+
+  # error: linker `aarch64-linux-gnu-gcc` not found
+  postPatch = ''
+    rm .cargo/config.toml
+  '';
+
+  PROTOC = "${protobuf}/bin/protoc";
+  PROTOC_INCLUDE = "${protobuf}/include";
+
+  ROCKSDB_INCLUDE_DIR = "${rocksdb}/include";
+  ROCKSDB_LIB_DIR = "${rocksdb}/lib";
+
+  nativeBuildInputs = [
+    pkg-config
+    rustPlatform.bindgenHook
+  ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ SystemConfiguration ];
+
+  passthru.tests.version = testers.testVersion {
+    package = surrealdb;
+    command = "surreal version";
+  };
+
+  meta = with lib; {
+    description = "A scalable, distributed, collaborative, document-graph database, for the realtime web";
+    homepage = "https://surrealdb.com/";
+    mainProgram = "surreal";
+    license = licenses.bsl11;
+    maintainers = with maintainers; [ sikmir happysalada ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/nosql/victoriametrics/default.nix b/nixpkgs/pkgs/servers/nosql/victoriametrics/default.nix
new file mode 100644
index 000000000000..25517c0b437b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/nosql/victoriametrics/default.nix
@@ -0,0 +1,49 @@
+{ lib, buildGoModule, fetchFromGitHub, nixosTests }:
+
+buildGoModule rec {
+  pname = "VictoriaMetrics";
+  version = "1.93.7";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-MGIFM7PhKTeu7hnE9M2fj4EsJQv5AIDhFbypEJjYNwc=";
+  };
+
+  vendorHash = null;
+
+  postPatch = ''
+    # main module (github.com/VictoriaMetrics/VictoriaMetrics) does not contain package
+    # github.com/VictoriaMetrics/VictoriaMetrics/app/vmui/packages/vmui/web
+    #
+    # This appears to be some kind of test server for development purposes only.
+    rm -f app/vmui/packages/vmui/web/{go.mod,main.go}
+
+    # Increase timeouts in tests to prevent failure on heavily loaded builders
+    substituteInPlace lib/storage/storage_test.go \
+      --replace "time.After(10 " "time.After(120 " \
+      --replace "time.NewTimer(30 " "time.NewTimer(120 " \
+      --replace "time.NewTimer(time.Second * 10)" "time.NewTimer(time.Second * 120)" \
+  '';
+
+  ldflags = [ "-s" "-w" "-X github.com/VictoriaMetrics/VictoriaMetrics/lib/buildinfo.Version=${version}" ];
+
+  preCheck = ''
+    # `lib/querytracer/tracer_test.go` expects `buildinfo.Version` to be unset
+    export ldflags=''${ldflags//=${version}/=}
+  '';
+
+  __darwinAllowLocalNetworking = true;
+
+  passthru.tests = { inherit (nixosTests) victoriametrics; };
+
+  meta = with lib; {
+    homepage = "https://victoriametrics.com/";
+    description = "fast, cost-effective and scalable time series database, long-term remote storage for Prometheus";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ yorickvp ivan ];
+    changelog = "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v${version}";
+    mainProgram = "victoria-metrics";
+  };
+}