nixpkgs/pkgs/development/tools/redisinsight/default.nix

172 lines
4.7 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
makeWrapper,
makeDesktopItem,
copyDesktopItems,
fixup-yarn-lock,
yarn,
nodejs_18,
python3,
fetchYarnDeps,
electron,
nest-cli,
libsass,
buildPackages,
pkg-config,
sqlite,
xdg-utils,
}:
let
nodejs = nodejs_18;
in
stdenv.mkDerivation (finalAttrs: {
pname = "redisinsight";
version = "2.32";
src = fetchFromGitHub {
owner = "RedisInsight";
repo = "RedisInsight";
rev = finalAttrs.version;
hash = "sha256-esaH10AyEooym/62F5LJL7oP5UmD6T2UX8g/9QniL9s=";
};
offlineCache = fetchYarnDeps {
yarnLock = finalAttrs.src + "/yarn.lock";
hash = "sha256-NHKttywAaWAYkciGzYCnm1speHrWsv1t+dxL1DZgM7o=";
};
feOfflineCache = fetchYarnDeps {
yarnLock = finalAttrs.src + "/redisinsight/yarn.lock";
hash = "sha256-1S1KNUOtmywQ0eyqVS2oRlhpjcL9eps8CR7AtC9ujSU=";
};
apiOfflineCache = fetchYarnDeps {
yarnLock = finalAttrs.src + "/redisinsight/api/yarn.lock";
hash = "sha256-P99+1Dhdg/vznC2KepPrVGNlrofJFydXkZVxgwprIx4=";
};
nativeBuildInputs = [
yarn
fixup-yarn-lock
nodejs
makeWrapper
python3
nest-cli
libsass
pkg-config
copyDesktopItems
];
buildInputs = [
sqlite
xdg-utils
];
configurePhase = ''
runHook preConfigure
export HOME=$(mktemp -d)
yarn config --offline set yarn-offline-mirror ${finalAttrs.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 ${finalAttrs.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 ${finalAttrs.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}
# Build the sqlite3 package.
pushd redisinsight
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
# Build node-sass
LIBSASS_EXT=auto npm rebuild --verbose node-sass
substituteInPlace redisinsight/api/config/default.ts \
--replace-fail "process['resourcesPath']" "\"$out/share/redisinsight\"" \
# has irrelevant files
rm -r resources/app
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
yarn config --offline set yarn-offline-mirror ${finalAttrs.offlineCache}
yarn --offline build:prod
yarn --offline electron-builder \
--dir \
-c.electronDist=${electron}/libexec/electron \
-c.electronVersion=${electron.version}
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p "$out/share/redisinsight"/{app,defaults,static/plugins,static/resources/plugins}
cp -r release/*-unpacked/{locales,resources{,.pak}} "$out/share/redisinsight/app"
mv "$out/share/redisinsight/app/resources/resources" "$out/share/redisinsight"
# icons
for icon in "$out/share/redisinsight/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
makeWrapper '${electron}/bin/electron' "$out/bin/redisinsight" \
--add-flags "$out/share/redisinsight/app/resources/app.asar" \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
--set-default ELECTRON_FORCE_IS_PACKAGED 1 \
--inherit-argv0
runHook postInstall
'';
desktopItems = [
(makeDesktopItem {
name = "redisinsight";
exec = "redisinsight %u";
icon = "redisinsight";
desktopName = "RedisInsight";
genericName = "RedisInsight Redis Client";
comment = finalAttrs.meta.description;
categories = [ "Development" ];
startupWMClass = "redisinsight";
})
];
meta = {
description = "RedisInsight Redis client powered by Electron";
homepage = "https://github.com/RedisInsight/RedisInsight";
license = lib.licenses.sspl;
maintainers = with lib.maintainers; [
gmemstr
tomasajt
];
platforms = lib.platforms.linux;
};
})