Subject: [bug#63307] [PATCH] gnu: Add pnpm

From: Franz Geffke <[email-masked]>
Date: Fri, 5 May 2023 15:03:22 +0100

diff --git a/gnu/packages/node-xyz.scm b/gnu/packages/node-xyz.scm
index 991113c05b..b32e68b415 100644
--- a/gnu/packages/node-xyz.scm
+++ b/gnu/packages/node-xyz.scm
@@ -29,7 +29,9 @@ (define-module (gnu packages node-xyz)
    #:use-module (guix gexp)
    #:use-module (guix packages)
    #:use-module (guix git-download)
-  #:use-module (guix build-system node))
+  #:use-module (guix build-system node)
+  #:use-module (guix build-system trivial)
+  #:use-module (ice-9 match))

  (define-public node-acorn
    (package
@@ -1546,3 +1548,37 @@ (define-public node-yazl
  @item Prefer to open input files one at a time than all at once.
  @end enumerate")
      (license license:expat)))
+
+(define-public pnpm
+  (package
+    (name "pnpm")
+    (version "7.32.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/pnpm/pnpm/releases/download/v"
+             version "/pnpm-linuxstatic-"
+             (match (or (%current-system) (%current-target-system))
+               ("x86_64-linux" "x64")
+               ("aarch64-linux" "arm64"))))
+       (sha256
+        (base32
+         "1k3n24ink74ajs8nd0p6y6238vi41n5bvrk8clnydgwg11ax1zx0"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules ((guix build utils)))
+         (let* ((source (assoc-ref %build-inputs "source"))
+                (bin (string-append %output "/bin"))
+                (exe (string-append bin "/pnpm")))
+           (mkdir-p bin)
+           (copy-file source exe)
+           (chmod exe #o755)))))
+    (home-page "https://pnpm.io")
+    (synopsis "Fast, disk space efficient package manager for nodejs")
+    (description "pnpm uses a content-addressable filesystem to
+store all files from all module directories on a disk")
+    (license license:expat)))