diff --git a/nongnu/packages/electron.scm b/nongnu/packages/electron.scm new file mode 100644 index 0000000..ffe71cd --- /dev/null +++ b/nongnu/packages/electron.scm @@ -0,0 +1,126 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2023 Pierre Neidhardt + +(define-module (nongnu packages electron) + #:use-module (nonguix build-system binary) + #:use-module ((nonguix licenses) :prefix license:) + #:use-module (guix download) + #:use-module (guix packages) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (gnu packages compression) + #:use-module (gnu packages glib) + #:use-module (gnu packages nss) + #:use-module (gnu packages gtk) + #:use-module (gnu packages xorg) + #:use-module (gnu packages xml) + #:use-module (gnu packages xdisorg) + #:use-module (gnu packages gl) + #:use-module (gnu packages linux) + #:use-module (gnu packages cups) + #:use-module (gnu packages gcc) + #:use-module (gnu packages video)) + +(define-public electron + (package + (name "electron") + (version "24.2.0") + (source (origin + (method url-fetch/zipbomb) + (uri + (string-append + "https://github.com/electron/electron/releases/download/v" + version "/electron-v" version "-" + (match (or (%current-system) (%current-target-system)) + ("x86_64-linux" "linux-x64") + ("i686-linux" "linux-ia32") + ("aarch64-linux" "linux-arm64") + ("armhf-linux" "linux-armv7l")) + ".zip")) + (sha256 (base32 "04vmqr5547059751yxr729ljqahal57lymyglaa5xzpw5bfq0xwd")))) + (build-system binary-build-system) + (arguments + `(#:patchelf-plan + `(("electron" + ("glib" "atk" "libx11" "dbus" "gdk-pixbuf" "gtk+" "pango" + "cairo" "libxcomposite" "libxdamage" "libxext" "libxfixes" + "libxrandr" "expat" "libdrm" "libxkbcommon" "mesa" "alsa-lib" + "cups" "at-spi2-core" "gcc:lib" "libxcb" "at-spi2-atk" "nspr")) + ("libffmpeg.so" + ("gcc:lib")) + ("libGLESv2.so" + ("gcc:lib" "libx11" "libxcb" "libxext")) + ("libEGL.so" + ("gcc:lib"))) + #:install-plan + `(("." "share/electron/" #:include + ("electron" + "chrome-sandbox" + "chrome_100_percent.pak" + "chrome_200_percent.pak" + "chrome_crashpad_handler" + "icudtl.dat" + "resources.pak" + "v8_context_snapshot.bin" + "version" + "libffmpeg.so" + ;; electron seems to force-load these from its directory. + "libEGL.so" + "libGLESv2.so")) + ("resources" "share/electron/") + ("locales" "share/electron/")) + #:phases + (modify-phases %standard-phases + (add-after 'install 'wrap-where-patchelf-does-not-work + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/share/electron/electron")) + (wrapper (string-append out "/bin/electron"))) + (mkdir-p (dirname wrapper)) + (make-wrapper wrapper bin + `("LD_LIBRARY_PATH" ":" + prefix + (,(string-join + (list + (string-append (assoc-ref inputs "nss") "/lib/nss") + (string-append (assoc-ref inputs "eudev") "/lib") + (string-append (assoc-ref inputs "mesa") "/lib") + (string-append out "/share/electron")) + ":"))))) + #t))))) + (native-inputs `(("unzip" ,unzip))) + (inputs `(("glib" ,glib) + ("nss" ,nss) + ("nspr" ,nspr) + ("atk" ,atk) + ("libx11" ,libx11) + ("dbus" ,dbus) + ("gdk-pixbuf" ,gdk-pixbuf) + ("gtk+" ,gtk+) + ("pango" ,pango) + ("cairo" ,cairo) + ("ffmpeg" ,ffmpeg) + ("libxcomposite" ,libxcomposite) + ("libxdamage" ,libxdamage) + ("libxext" ,libxext) + ("libxfixes" ,libxfixes) + ("libxrandr" ,libxrandr) + ("expat" ,expat) + ("libdrm" ,libdrm) + ("libxkbcommon" ,libxkbcommon) + ("mesa" ,mesa) + ("alsa-lib" ,alsa-lib) + ("cups" ,cups) + ("at-spi2-core" ,at-spi2-core) + ("gcc:lib" ,gcc "lib") + ("libxcb" ,libxcb) + ("at-spi2-atk" ,at-spi2-atk) + ("eudev" ,eudev))) + (home-page "https://www.electronjs.org/") + (synopsis "Cross platform desktop application shell") + (description "The Electron framework lets you write cross-platform desktop +applications using JavaScript, HTML and CSS. It is based on Node.js and +Chromium and is used by the Atom editor and many other apps.") + (license (license:nonfree + (string-append "https://github.com/electron/electron/blob/v" + version "/LICENSE")))))