summary refs log tree commit diff
diff options
context:
space:
mode:
authorSandro <sandro.jaeckel@gmail.com>2023-01-07 20:49:53 +0100
committerGitHub <noreply@github.com>2023-01-07 20:49:53 +0100
commit960e7415c167f572e7c4c45e1f6df70d068c3176 (patch)
treeda8f56a8d94415ba2902a819160ab65fc819d6bc
parent532ad194aab209855b2b73c4d41a3f4f08278dab (diff)
parentb75aad03d4ffe4fe94def30b02a261cdcde49d14 (diff)
downloadnixpkgs-960e7415c167f572e7c4c45e1f6df70d068c3176.tar
nixpkgs-960e7415c167f572e7c4c45e1f6df70d068c3176.tar.gz
nixpkgs-960e7415c167f572e7c4c45e1f6df70d068c3176.tar.bz2
nixpkgs-960e7415c167f572e7c4c45e1f6df70d068c3176.tar.lz
nixpkgs-960e7415c167f572e7c4c45e1f6df70d068c3176.tar.xz
nixpkgs-960e7415c167f572e7c4c45e1f6df70d068c3176.tar.zst
nixpkgs-960e7415c167f572e7c4c45e1f6df70d068c3176.zip
Merge pull request #207505 from andersk/electron-fiddle
-rw-r--r--pkgs/development/tools/electron-fiddle/default.nix163
-rw-r--r--pkgs/top-level/all-packages.nix2
2 files changed, 165 insertions, 0 deletions
diff --git a/pkgs/development/tools/electron-fiddle/default.nix b/pkgs/development/tools/electron-fiddle/default.nix
new file mode 100644
index 00000000000..5bfdb06600d
--- /dev/null
+++ b/pkgs/development/tools/electron-fiddle/default.nix
@@ -0,0 +1,163 @@
+{ buildFHSUserEnv
+, electron_20
+, fetchFromGitHub
+, fetchYarnDeps
+, fixup_yarn_lock
+, git
+, lib
+, makeDesktopItem
+, nodejs-16_x
+, stdenvNoCC
+, util-linux
+, zip
+}:
+
+let
+  pname = "electron-fiddle";
+  version = "0.31.0";
+  electron = electron_20;
+  nodejs = nodejs-16_x;
+
+  src = fetchFromGitHub {
+    owner = "electron";
+    repo = "fiddle";
+    rev = "v${version}";
+    hash = "sha256-GueLG+RYFHi3PVVxBTtpTHhfjygcQ6ZCbrp5n5I1gBM=";
+  };
+
+  inherit (nodejs.pkgs) yarn;
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    hash = "sha256-WVH1A0wtQl5nR1hvaL6mzm/7XBvo311FPKmsxB82e4U=";
+  };
+
+  electronDummyMirror = "https://electron.invalid/";
+  electronDummyDir = "nix";
+  electronDummyFilename =
+    builtins.baseNameOf (builtins.head (electron.src.urls));
+  electronDummyHash =
+    builtins.hashString "sha256" "${electronDummyMirror}${electronDummyDir}";
+
+  unwrapped = stdenvNoCC.mkDerivation {
+    pname = "${pname}-unwrapped";
+    inherit version src;
+
+    nativeBuildInputs = [ fixup_yarn_lock git nodejs util-linux yarn zip ];
+
+    configurePhase = ''
+      export HOME=$TMPDIR
+      fixup_yarn_lock yarn.lock
+      yarn config --offline set yarn-offline-mirror ${offlineCache}
+      yarn install --offline --frozen-lockfile --ignore-scripts --no-progress --non-interactive
+      patchShebangs node_modules
+
+      mkdir -p ~/.cache/electron/${electronDummyHash}
+      cp -ra '${electron}/lib/electron' "$TMPDIR/electron"
+      chmod -R u+w "$TMPDIR/electron"
+      (cd "$TMPDIR/electron" && zip -0Xr ~/.cache/electron/${electronDummyHash}/${electronDummyFilename} .)
+    '';
+
+    buildPhase = ''
+      ELECTRON_CUSTOM_VERSION='${electron.version}' \
+        ELECTRON_MIRROR='${electronDummyMirror}' \
+        ELECTRON_CUSTOM_DIR='${electronDummyDir}' \
+        ELECTRON_CUSTOM_FILENAME='${electronDummyFilename}' \
+        yarn --offline run package
+    '';
+
+    installPhase = ''
+      mkdir -p "$out/lib/electron-fiddle/resources"
+      cp "out/Electron Fiddle-"*/resources/app.asar "$out/lib/electron-fiddle/resources/"
+      mkdir -p "$out/share/icons/hicolor/scalable/apps"
+      cp assets/icons/fiddle.svg "$out/share/icons/hicolor/scalable/apps/electron-fiddle.svg"
+    '';
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "electron-fiddle";
+    desktopName = "Electron Fiddle";
+    comment = "The easiest way to get started with Electron";
+    genericName = "Electron Fiddle";
+    exec = "electron-fiddle %U";
+    icon = "electron-fiddle";
+    startupNotify = true;
+    categories = [ "GNOME" "GTK" "Utility" ];
+    mimeTypes = [ "x-scheme-handler/electron-fiddle" ];
+  };
+
+in
+buildFHSUserEnv {
+  name = "electron-fiddle";
+  runScript = "${electron}/bin/electron ${unwrapped}/lib/electron-fiddle/resources/app.asar";
+  extraInstallCommands = ''
+    mkdir -p "$out/share/icons/hicolor/scalable/apps"
+    ln -s "${unwrapped}/share/icons/hicolor/scalable/apps/electron-fiddle.svg" "$out/share/icons/hicolor/scalable/apps/"
+    mkdir -p "$out/share/applications"
+    cp "${desktopItem}/share/applications"/*.desktop "$out/share/applications/"
+  '';
+  targetPkgs = pkgs:
+    with pkgs;
+    map lib.getLib [
+      # for electron-fiddle itself
+      udev
+
+      # for running Electron 22.0.0 inside
+      alsa-lib
+      atk
+      cairo
+      cups
+      dbus
+      expat
+      glib
+      gtk3
+      libdrm
+      libnotify
+      libxkbcommon
+      mesa
+      nspr
+      nss
+      pango
+      xorg.libX11
+      xorg.libXcomposite
+      xorg.libXdamage
+      xorg.libXext
+      xorg.libXfixes
+      xorg.libXrandr
+      xorg.libxcb
+
+      # for running Electron before 18.3.5/19.0.5/20.0.0 inside
+      gdk-pixbuf
+
+      # for running Electron before 16.0.0 inside
+      xorg.libxshmfence
+
+      # for running Electron before 11.0.0 inside
+      xorg.libXcursor
+      xorg.libXi
+      xorg.libXrender
+      xorg.libXtst
+
+      # for running Electron before 10.0.0 inside
+      xorg.libXScrnSaver
+
+      # for running Electron before 8.0.0 inside
+      libuuid
+
+      # for running Electron before 4.0.0 inside
+      fontconfig
+
+      # for running Electron before 3.0.0 inside
+      gnome2.GConf
+
+      # Electron 2.0.8 is the earliest working version, due to
+      # https://github.com/electron/electron/issues/13972
+    ];
+
+  meta = with lib; {
+    description = "The easiest way to get started with Electron";
+    homepage = "https://www.electronjs.org/fiddle";
+    license = licenses.mit;
+    maintainers = with maintainers; [ andersk ];
+    platforms = electron.meta.platforms;
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 1fb2bc74e9a..da5fc449453 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -17331,6 +17331,8 @@ with pkgs;
 
   egypt = callPackage ../development/tools/analysis/egypt { };
 
+  electron-fiddle = callPackage ../development/tools/electron-fiddle { };
+
   elf2uf2-rs = callPackage ../development/embedded/elf2uf2-rs { };
 
   elfinfo = callPackage ../development/tools/misc/elfinfo { };