about summary refs log tree commit diff
path: root/pkgs/development/tools/redisinsight
diff options
context:
space:
mode:
authorGabriel Simmer <g@gmem.ca>2023-09-08 20:31:09 +0100
committerGabriel Simmer <g@gmem.ca>2023-09-08 20:41:36 +0100
commit5942921df7465ff7610f92ae64322d08a759b930 (patch)
tree78f60ba616f6c506aea5f75a55fb2717e32a20f7 /pkgs/development/tools/redisinsight
parent1d07743667b6ad1e149a539d3d4ead66d31da901 (diff)
downloadnixlib-5942921df7465ff7610f92ae64322d08a759b930.tar
nixlib-5942921df7465ff7610f92ae64322d08a759b930.tar.gz
nixlib-5942921df7465ff7610f92ae64322d08a759b930.tar.bz2
nixlib-5942921df7465ff7610f92ae64322d08a759b930.tar.lz
nixlib-5942921df7465ff7610f92ae64322d08a759b930.tar.xz
nixlib-5942921df7465ff7610f92ae64322d08a759b930.tar.zst
nixlib-5942921df7465ff7610f92ae64322d08a759b930.zip
redisinsight: init at 2.30.0
Diffstat (limited to 'pkgs/development/tools/redisinsight')
-rw-r--r--pkgs/development/tools/redisinsight/default.nix154
1 files changed, 154 insertions, 0 deletions
diff --git a/pkgs/development/tools/redisinsight/default.nix b/pkgs/development/tools/redisinsight/default.nix
new file mode 100644
index 000000000000..20ba4ba18c41
--- /dev/null
+++ b/pkgs/development/tools/redisinsight/default.nix
@@ -0,0 +1,154 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, makeDesktopItem
+, fixup_yarn_lock
+, yarn
+, nodejs_18
+, python3
+, fetchYarnDeps
+, electron
+, desktopToDarwinBundle
+, nest-cli
+, libsass
+, buildPackages
+, pkg-config
+, sqlite
+, xdg-utils
+}:
+let
+  nodejs = nodejs_18;
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "redisinsight-electron";
+  version = "2.30.0";
+
+  src = fetchFromGitHub {
+    owner = "RedisInsight";
+    repo = "RedisInsight";
+    rev = "${finalAttrs.version}";
+    hash = "sha256-TzqbMycKcOlUSKvfghip/KdMRiwstkFP+iJG5/9JVlA=";
+  };
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = finalAttrs.src + "/yarn.lock";
+    sha256 = "sha256-aDr5wxM/Rp3Tj09nPpLPJHSG5A73+4rAfrMCcxCr7so=";
+  };
+
+  feOfflineCache = fetchYarnDeps {
+    yarnLock = finalAttrs.src + "/redisinsight/yarn.lock";
+    sha256 = "sha256-O+8lNDrqPdxE+tgjpKbgm9Q66VlJaJgZRHlNyaFkumM=";
+  };
+
+  apiOfflineCache = fetchYarnDeps {
+    yarnLock = finalAttrs.src + "/redisinsight/api/yarn.lock";
+    sha256 = "sha256-2Tvck+9MDj6s+7jehUEyPfJiFFxbMOYDFD/Qgt2En6c=";
+  };
+
+  nativeBuildInputs = [ yarn fixup_yarn_lock nodejs makeWrapper python3 nest-cli libsass pkg-config ]
+    ++ lib.optionals stdenv.isDarwin [ desktopToDarwinBundle ];
+
+  buildInputs = [ sqlite xdg-utils ];
+
+  configurePhase = ''
+    runHook preConfigure
+
+    export HOME=$(mktemp -d)
+    yarn config --offline set yarn-offline-mirror $offlineCache
+    fixup_yarn_lock yarn.lock
+    yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+
+    yarn config --offline set yarn-offline-mirror $feOfflineCache
+    fixup_yarn_lock redisinsight/yarn.lock
+    yarn --offline --cwd redisinsight/ --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+
+    yarn config --offline set yarn-offline-mirror $apiOfflineCache
+    fixup_yarn_lock redisinsight/api/yarn.lock
+    yarn --offline --cwd redisinsight/api/ --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+
+    patchShebangs node_modules/
+    patchShebangs redisinsight/node_modules/
+    patchShebangs redisinsight/api/node_modules/
+
+    mkdir -p "$HOME/.node-gyp/${nodejs.version}"
+    echo 9 >"$HOME/.node-gyp/${nodejs.version}/installVersion"
+    ln -sfv "${nodejs}/include" "$HOME/.node-gyp/${nodejs.version}"
+    export npm_config_nodedir=${nodejs}
+
+    pushd redisinsight
+    # Build the sqlite3 package.
+    npm_config_node_gyp="${buildPackages.nodejs}/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" npm rebuild --verbose --sqlite=${sqlite.dev} sqlite3
+    popd
+
+    substituteInPlace redisinsight/api/config/default.ts \
+      --replace "process['resourcesPath']" "\"$out/share/redisinsight\"" \
+
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+    yarn config --offline set yarn-offline-mirror $offlineCache
+
+    pushd node_modules/node-sass
+    LIBSASS_EXT=auto yarn run build --offline
+    popd
+
+    yarn --offline build:prod
+
+    yarn --offline electron-builder \
+      --dir ${if stdenv.isDarwin then "--macos" else "--linux"} ${if stdenv.hostPlatform.isAarch64 then "--arm64" else "--x64"} \
+      -c.electronDist=${electron}/lib/electron \
+      -c.electronVersion=${electron.version}
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    # resources
+    mkdir -p "$out/share/redisinsight"
+    mkdir -p "$out/share/redisinsight/static/resources/plugins"
+    mkdir -p "$out/share/redisinsight/default"
+
+    cp -r release/${if stdenv.isDarwin then "darwin-" else "linux-"}${lib.optionalString stdenv.hostPlatform.isAarch64 "arm64-"}unpacked/resources/{app.asar,app.asar.unpacked} $out/share/redisinsight/
+    cp -r resources/ $out/share/redisinsight
+
+    # icons
+    for icon in "$out/resources/icons/*.png"; do
+      mkdir -p "$out/share/icons/hicolor/$(basename $icon .png)/apps"
+      ln -s "$icon" "$out/share/icons/hicolor/$(basename $icon .png)/apps/redisinsight.png"
+    done
+
+    ln -s "${finalAttrs.desktopItem}/share/applications" "$out/share/applications"
+
+    makeWrapper '${electron}/bin/electron' "$out/bin/redisinsight" \
+      --add-flags "$out/share/redisinsight/app.asar" \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
+      --chdir "$out/share/redisinsight" \
+      --argv0 "$out/share/redisinsight/app.asar"
+
+    runHook postInstall
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = "redisinsight";
+    exec = "redisinsight %u";
+    icon = "redisinsight";
+    desktopName = "RedisInsight";
+    genericName = "RedisInsight Redis Client";
+    comment = finalAttrs.meta.description;
+    categories = [ "Development" ];
+    startupWMClass = "redisinsight";
+  };
+
+  meta = with lib; {
+    description = "RedisInsight Redis client powered by Electron";
+    homepage = "https://github.com/RedisInsight/RedisInsight";
+    license = licenses.sspl;
+    maintainers = with maintainers; [ gmemstr ];
+    platforms = [ "x86_64-linux" ];
+  };
+})