diff options
author | Hilton Chain <hako@ultrarare.space> | 2025-05-11 01:08:40 +0800 |
---|---|---|
committer | Hilton Chain <hako@ultrarare.space> | 2025-05-15 21:22:42 +0800 |
commit | 38d420fa5ae4b69e8ef118ffffba50a68d3d9893 (patch) | |
tree | b28cbaaf62bc5c94add1ad47f5a8ed1fcbeb077e | |
parent | 457b17de16d599f27c279a322ac820eaf15704e9 (diff) |
nongnu: Add all-nongnu-packages.
* nongnu/packages.scm (%nongnu-package-module-path): New variable.
(all-nongnu-packages): New procedure.
-rw-r--r-- | nongnu/packages.scm | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/nongnu/packages.scm b/nongnu/packages.scm index 756f6cfd..f2a2b71d 100644 --- a/nongnu/packages.scm +++ b/nongnu/packages.scm @@ -5,12 +5,18 @@ (define-module (nongnu packages) #:use-module (gnu packages) #:use-module (guix diagnostics) + #:use-module (guix discovery) #:use-module (guix i18n) + #:use-module (guix memoization) + #:use-module (guix packages) + #:use-module (guix ui) #:use-module (ice-9 match) #:use-module (srfi srfi-34) #:replace (%patch-path search-patch) - #:export (nongnu-patches)) + #:export (nongnu-patches + %nongnu-package-module-path + all-nongnu-packages)) ;;; Commentary: ;;; @@ -40,6 +46,9 @@ (try ("nongnu/packages/firmware.scm" nongnu/ packages/) ("nongnu/ci.scm" nongnu/)))) +(define %nongnu-package-module-path + `((,%nongnu-root-directory . "nongnu/packages"))) + (define %patch-path ;; Define it after '%package-module-path' so that '%load-path' contains user ;; directories, allowing patches in $GUIX_PACKAGE_PATH to be found. @@ -64,3 +73,29 @@ "Return the list of absolute file names corresponding to each FILE-NAME found in %PATCH-PATH." (list (search-patch file-name) ...)) + +;; Adapted from (@ (gnu packages) all-packages). +(define all-nongnu-packages + (mlambda () + "Return the list of all public packages, including replacements and hidden +packages, excluding superseded packages." + ;; Note: 'fold-packages' never traverses the same package twice but + ;; replacements break that (they may or may not be visible to + ;; 'fold-packages'), hence this hash table to track visited packages. + (define visited (make-hash-table)) + + (fold-packages (lambda (package result) + (if (hashq-ref visited package) + result + (begin + (hashq-set! visited package #t) + (match (package-replacement package) + ((? package? replacement) + (hashq-set! visited replacement #t) + (cons* replacement package result)) + (#f + (cons package result)))))) + '() + (all-modules %nongnu-package-module-path #:warn warn-about-load-error) + ;; Dismiss deprecated packages but keep hidden packages. + #:select? (negate package-superseded)))) |