about summary refs log tree commit diff
path: root/pkgs/by-name/ri/ride/package.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/ri/ride/package.nix')
-rw-r--r--pkgs/by-name/ri/ride/package.nix152
1 files changed, 152 insertions, 0 deletions
diff --git a/pkgs/by-name/ri/ride/package.nix b/pkgs/by-name/ri/ride/package.nix
new file mode 100644
index 0000000000000..55ad02104ba9c
--- /dev/null
+++ b/pkgs/by-name/ri/ride/package.nix
@@ -0,0 +1,152 @@
+{
+  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;
+  };
+}