From 8ee4a09c813a1183f05e1e0f5aef025f7cd9eaaf Mon Sep 17 00:00:00 2001 From: Sudoer777's Guix Server Date: Fri, 24 May 2024 19:06:43 -0500 Subject: [PATCH] Create package that generates another package --- actual-server.scm => actual-server-2.scm | 23 ++-- actual-server-installer.bak | 89 ++++++++++++++ actual-server-installer.scm | 147 +++++++++++++++++++++++ 3 files changed, 243 insertions(+), 16 deletions(-) rename actual-server.scm => actual-server-2.scm (55%) create mode 100644 actual-server-installer.bak create mode 100644 actual-server-installer.scm diff --git a/actual-server.scm b/actual-server-2.scm similarity index 55% rename from actual-server.scm rename to actual-server-2.scm index e0446aa..7712124 100644 --- a/actual-server.scm +++ b/actual-server-2.scm @@ -1,4 +1,4 @@ -(define-module (actual-server) +(define-module (actual-server-2) #:use-module (guix packages) #:use-module (guix git-download) #:use-module (guix build-system node) @@ -7,11 +7,13 @@ #:use-module (guix licenses) #:use-module (gnu packages) #:use-module (gnu packages node) - #:use-module (gnu packages package-management)) + #:use-module (gnu packages package-management) + #:use-module (ice-9 pretty-print) + #:use-module (srfi srfi-1)) -(define-public actual-server-src +(define-public actual-server-2 (package - (name "actual-server-src") + (name "actual-server-2") (version "24.4.0") (source (origin (method git-fetch) @@ -20,20 +22,9 @@ (commit "deec1f9"))) (file-name (git-file-name name version)) (sha256 (base32 "1lq5lqa3818ajyn4cs8paw0iy4ibpggzsp9p1l4xwpa1xz10jb52")))) - (build-system gnu-build-system) + (build-system node-build-system) (inputs `(("node" ,node-lts))) - (arguments - `(#:tests? #f ; Disable tests for simplicity - #:phases (modify-phases %standard-phases - (delete 'configure) - (delete 'build) - (delete 'install) - (add-after 'unpack 'store-source - (lambda* (#:key outputs #:allow-other-keys) - (let ((source-dir (assoc-ref outputs "out"))) - (copy-recursively "." (string-append source-dir "/src")) - #t)))))) (home-page "https://github.com/actualbudget/actual-server") (synopsis "Actual server for budget management") (description "Actual is a local-first personal finance tool.") diff --git a/actual-server-installer.bak b/actual-server-installer.bak new file mode 100644 index 0000000..532aa3c --- /dev/null +++ b/actual-server-installer.bak @@ -0,0 +1,89 @@ +(define-module (actual-server-installer) + #:use-module (guix packages) + #:use-module (guix git-download) + #:use-module (guix build-system node) + #:use-module (guix utils) + #:use-module (guix build-system gnu) + #:use-module (guix licenses) + #:use-module (gnu packages) + #:use-module (gnu packages node) + #:use-module (gnu packages package-management) + #:use-module (ice-9 pretty-print) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26)) + +(define-public actual-server-installer + (package + (name "actual-server-installer") + (version "24.4.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/actualbudget/actual-server") + (commit "deec1f9"))) + (file-name (git-file-name name version)) + (sha256 (base32 "1lq5lqa3818ajyn4cs8paw0iy4ibpggzsp9p1l4xwpa1xz10jb52")) +(snippet + '(begin + ;; Guile code to pretty-print to a file + (use-modules (ice-9 pretty-print)) + (let ((output-file "actual-server.scm")) + (call-with-output-file output-file + (lambda (port) + (pretty-print + '(begin + (define-module (actual-server) + #:use-module (guix packages) + #:use-module (guix build-system gnu) + #:use-module (guix licenses) + #:use-module (guix download) + #:use-module (gnu packages) + #:use-module (gnu packages node)) + + (define-public actual-server + (package + (name "actual-server") + (version "24.4.0") + (source (origin + (method url-fetch) + (uri "file:///tmp/actual-server-installer/actual-server.tar.gz") + (sha256 + (base32 "$checksum")))) + (build-system gnu-build-system) + (inputs + `(("node" ,node-lts))) + (arguments + `(#:tests? #f ; Disable tests + #:phases (modify-phases %standard-phases + (delete 'configure) + (delete 'build) + (delete 'install) + (add-after 'unpack 'copy-files + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (mkdir-p (string-append out "/lib")) + (copy-recursively (string-append (assoc-ref %build-inputs "source") "/lib") (string-append out "/lib")) + #t)))))) + (home-page "https://github.com/actualbudget/actual-server") + (synopsis "Actual server for budget management") + (description "Actual is a local-first personal finance tool.") + (license expat)))) +port)))))))) + (build-system gnu-build-system) + (inputs + `(("node" ,node-lts))) + (arguments + `(#:tests? #f ; Disable tests for simplicity + #:phases (modify-phases %standard-phases + (delete 'configure) + (delete 'build) + (delete 'install) + (add-after 'unpack 'store-source + (lambda* (#:key outputs #:allow-other-keys) + (let ((source-dir (assoc-ref outputs "out"))) + (copy-recursively "." (string-append source-dir "/lib/actual-server-installer/repo")) + #t)))))) + (home-page "https://github.com/actualbudget/actual-server") + (synopsis "Actual server for budget management") + (description "Actual is a local-first personal finance tool.") + (license expat))) diff --git a/actual-server-installer.scm b/actual-server-installer.scm new file mode 100644 index 0000000..d49b7a7 --- /dev/null +++ b/actual-server-installer.scm @@ -0,0 +1,147 @@ +(define-module (actual-server-installer) +#:use-module (guix packages) +#:use-module (guix git-download) +#:use-module (guix build-system node) +#:use-module (guix utils) +#:use-module (guix build-system gnu) +#:use-module (guix licenses) +#:use-module (gnu packages) +#:use-module (gnu packages node) +#:use-module (gnu packages package-management) +#:use-module (ice-9 pretty-print) +#:use-module (srfi srfi-1) +#:use-module (srfi srfi-26)) + +(define-public actual-server-installer +(package + (name "actual-server-installer") + (version "24.4.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/actualbudget/actual-server") + (commit "deec1f9"))) + (file-name (git-file-name name version)) + (sha256 (base32 "1lq5lqa3818ajyn4cs8paw0iy4ibpggzsp9p1l4xwpa1xz10jb52")) +(snippet + '(begin + ;; Guile code to pretty-print to a file + (use-modules (ice-9 pretty-print)) + (let ((output-file "build.scm")) + (call-with-output-file output-file + (lambda (port) + (pretty-print +'(begin +(use-modules (ice-9 popen) +(ice-9 rdelim) +(srfi srfi-1) +(rnrs io ports) +(rnrs bytevectors) +(rnrs files) +(guix build utils) +(ice-9 pretty-print) +(gcrypt hash) +(guix base32)) + +(define (run-shell-command command) +(let* ((p (open-pipe* OPEN_READ "sh" "-c" command)) +(output (get-string-all p))) +(close-pipe p) +output)) + +(define (run-and-display-command command) +(let ((port (open-pipe* OPEN_READ "sh" "-c" command))) + (let loop () + (let ((line (read-line port 'concat))) + (if (eof-object? line) + (close-pipe port) + (begin + (display line) + (force-output) ; Ensure output is flushed immediately + (loop))))))) + +;; Enable corepack and install yarn +(run-and-display-command "corepack enable") +(run-and-display-command "corepack install") +(run-and-display-command "yarn install") + +;; Create the necessary directory +(mkdir-p "/actual-server-build/lib/actual-server-node") + +;; Copy directory +(copy-recursively "~/.cache" "/actual-server-build/lib/actual-server-node/.cache") + +;; Create tar.gz archive +(run-and-display-command "tar -czvf /actual-server/actual-server.tar.gz -C /actual-server-build .") + +;; Calculate checksum +(define (sha256sum file) +(call-with-input-file file + (lambda (port) + (let ((digest (sha256 (get-bytevector-all port)))) + (bytevector->nix-base32-string digest))))) + +(let* ((checksum (sha256sum "/actual-server/actual-server.tar.gz")) +(actual-server-scm + `( + (define-module (actual-server) + #:use-module (guix packages) + #:use-module (guix build-system gnu) + #:use-module (guix licenses) + #:use-module (guix download) + #:use-module (gnu packages) + #:use-module (gnu packages node)) + + (define-public actual-server + (package + (name "actual-server") + (version "24.4.0") + (source (origin + (method url-fetch) + (uri "file:///tmp/actual-server-installer/actual-server.tar.gz") + (sha256 + (base32 ,checksum)))) + (build-system gnu-build-system) + (inputs + `(("node" ,node-lts))) + (arguments + `(#:tests? #f ; Disable tests + #:phases (modify-phases %standard-phases + (delete 'configure) + (delete 'build) + (delete 'install) + (add-after 'unpack 'copy-files + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (mkdir-p (string-append out "/lib")) + (copy-recursively (string-append (assoc-ref %build-inputs "source") "/lib") (string-append out "/lib")) + #t)))))) + (home-page "https://github.com/actualbudget/actual-server") + (synopsis "Actual server for budget management") + (description "Actual is a local-first personal finance tool.") + (license expat)))))) + +;; Write the content to actual-server.scm +(call-with-output-file "/actual-server/actual-server.scm" +(lambda (port) + (for-each (lambda (expr) (pretty-print expr port)) + actual-server-scm))))) +port)))))))) + (build-system gnu-build-system) + (inputs + `(("node" ,node-lts))) + (arguments + `(#:tests? #f ; Disable tests for simplicity + #:phases (modify-phases %standard-phases + (delete 'configure) + (delete 'build) + (delete 'install) + (add-after 'unpack 'store-source + (lambda* (#:key outputs #:allow-other-keys) + (let ((source-dir (assoc-ref outputs "out"))) + (copy-recursively "." (string-append source-dir "/lib/actual-server-installer/repo")) + #t)))))) + (home-page "https://github.com/actualbudget/actual-server") + (synopsis "Actual server for budget management") + (description "Actual is a local-first personal finance tool.") + (license expat)))