nixpkgs/pkgs/by-name/ri/ride/package.nix
2024-05-14 13:53:13 +02:00

153 lines
3.7 KiB
Nix

{
lib,
stdenv,
buildNpmPackage,
fetchFromGitHub,
substituteAll,
jq,
moreutils,
zip,
makeWrapper,
copyDesktopItems,
makeDesktopItem,
electron_27,
}:
let
platformInfos = {
"x86_64-linux" = {
zipSuffix = "linux-x64";
buildCmd = "linux";
};
"x86_64-darwin" = {
zipSuffix = "darwin-x64";
buildCmd = "osx";
};
"aarch64-darwin" = {
zipSuffix = "darwin-arm64";
buildCmd = "osxarm";
};
};
platformInfo = platformInfos.${stdenv.system};
# Electron 27 is the latest version that works as of RIDE version 4.5.4097
electron = electron_27;
in
buildNpmPackage rec {
pname = "ride";
version = "4.5.4097";
src = fetchFromGitHub {
owner = "Dyalog";
repo = "ride";
rev = "v${version}";
hash = "sha256-xR+HVC1JVrPkgPhIJZxdTVG52+QbanmD1c/uO5l84oc=";
};
npmDepsHash = "sha256-EG3pZkjDGBI2dDaQZ6351+oU4xfHd6HNB8eD7ErpYIg=";
patches = [
# Fix info in the "about" page, set electron version, set local-cache as zipdir
(substituteAll {
src = ./mk.patch;
version = version;
electron_version = electron.version;
})
];
postPatch = ''
# Remove spectron (it would download electron-chromedriver binaries)
${jq}/bin/jq 'del(.devDependencies.spectron)' package.json | ${moreutils}/bin/sponge package.json
pushd style
# Remove non-deterministic glob ordering
sed -i "/\*\*/d" layout.less light-theme.less dark-theme.less
# Individually include all files that were previously globbed
shopt -s globstar
for file in less/layout/**/*.less; do
echo "@import '$file';" >> layout.less
done
for file in less/colour/**/*.less; do
echo "@import '$file';" >> light-theme.less
echo "@import '$file';" >> dark-theme.less
done
shopt -u globstar
popd
'';
nativeBuildInputs = [
zip
makeWrapper
copyDesktopItems
];
env.ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
npmBuildFlags = platformInfo.buildCmd;
# This package uses electron-packager instead of electron-builder
# Here, we create a local cache of electron zip-files, so electron-packager can copy from it
postConfigure = ''
mkdir local-cache
cp -r --no-preserve=all ${electron}/libexec/electron electron
pushd electron
zip -qr ../local-cache/electron-v${electron.version}-${platformInfo.zipSuffix}.zip *
popd
'';
installPhase = ''
runHook preInstall
install -Dm644 D.png $out/share/icons/hicolor/64x64/apps/ride.png
install -Dm644 D.svg $out/share/icons/hicolor/scalable/apps/ride.svg
pushd _/ride*/*
install -Dm644 ThirdPartyNotices.txt -t $out/share/doc/ride
mkdir -p $out/share/ride
cp -r locales resources{,.pak} $out/share/ride
makeWrapper ${lib.getExe electron} $out/bin/ride \
--add-flags $out/share/ride/resources/app.asar \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
--inherit-argv0
popd
runHook postInstall
'';
desktopItems = [
(makeDesktopItem {
name = "ride";
exec = "ride";
icon = "ride";
desktopName = "RIDE";
categories = [
"Development"
"IDE"
];
comment = meta.description;
terminal = false;
})
];
meta = {
broken = stdenv.isDarwin;
changelog = "https://github.com/Dyalog/ride/releases/tag/${src.rev}";
description = "Remote IDE for Dyalog APL";
homepage = "https://github.com/Dyalog/ride";
license = lib.licenses.mit;
mainProgram = "ride";
maintainers = with lib.maintainers; [
tomasajt
markus1189
];
platforms = lib.attrNames platformInfos;
};
}