Hi, On Sat, 30 Nov 2024 at 23:03, wifi via <help-guix@gnu.org> wrote:
> I've been digging around looking for a way to build a complete build > dependency and runtime dependency graph of every package and their > derivations, but there doesn't appear to be a straightforward way to > do it. If such a complete graph could be built, it seems to be only a > matter of finding the leaf nodes and exporting those from the store. Well, I think that you can write a manifest that walks the whole graph and find the “leaf” packages, i.e., the packages that have no dependents: packages that do appear elsewhere in any other packages. Maybe there is some typo, but I think this manifest builds all the leaf packages and thus it will build the whole packages of Guix. Assuming, there is no mistake, I count 14143 leaf packages over 32459 packages. Hope that helps. Cheers, simon
(use-modules (gnu packages) (guix packages) (guix sets) (ice-9 match) (ice-9 vlist) (srfi srfi-1)) (define all (all-packages)) (define (p->k p) (string-append (package-name p) "@" (package-version p))) (define vall-packages (fold (lambda (package result) (vhash-cons (p->k package) package result)) vlist-null all)) (define vleaf-packages (vhash-fold (lambda (key package result) (let loop ((dependencies (package-direct-inputs package)) (updated result)) (match dependencies ('() updated) ((or ((_ p) . tail) ((_ p _) . tail)) (if (package? p) (loop tail (vhash-delete (p->k p) updated)) (loop tail updated)))))) vall-packages vall-packages)) (define leaf-packages (vhash-fold (lambda (key package result) (cons package result)) '() vleaf-packages)) (packages->manifest leaf-packages)