5c370c0b2a
GitOrigin-RevId: 33d1e753c82ffc557b4a585c77de43d4c922ebb5
171 lines
4.7 KiB
Nix
171 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.48.0";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "RedisInsight";
|
|
repo = "RedisInsight";
|
|
rev = finalAttrs.version;
|
|
hash = "sha256-ek0Fp8v6j+mZPK2cEuFNrBgInXdYIKBBUg0UD1I51Sg=";
|
|
};
|
|
|
|
offlineCache = fetchYarnDeps {
|
|
yarnLock = finalAttrs.src + "/yarn.lock";
|
|
hash = "sha256-ohtU1h6wrg7asXDxTt1Jlzx9GaS3zDrGQD9P9tgzCOE=";
|
|
};
|
|
|
|
feOfflineCache = fetchYarnDeps {
|
|
yarnLock = finalAttrs.src + "/redisinsight/yarn.lock";
|
|
hash = "sha256-9xbIdDeLUEk4eNeK7RTwidqDGinA8SPfcumqml66kTw=";
|
|
};
|
|
|
|
apiOfflineCache = fetchYarnDeps {
|
|
yarnLock = finalAttrs.src + "/redisinsight/api/yarn.lock";
|
|
hash = "sha256-4zbffuneTceMEyKb8atTXTFhTv0DhrsRMdepZWgoxMQ=";
|
|
};
|
|
|
|
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;
|
|
};
|
|
})
|