Hi Ludo ! > Maybe with a macro along these lines: Nice, thanks ! I attached the patch I come up with. It's working ok :) I have a shorter version using match : --8<---------------cut here---------------start------------->8--- (letrec-syntax ((maybe-load-paths (syntax-rules () ((_ item rest ...) (let ((tail (maybe-load-paths rest ...))) (if (string? item) (match tail ((load-path load-compiled-path) (list (cons (string-append item "/share/guile/site/" #$(effective-version)) load-path) (cons (string-append item "/lib/guile/" #$(effective-version) "/site-ccache") load-compiled-path)))) tail))) ((_) '(() ()))))) (match (maybe-load-paths #$guile-json #$guile-ssh #$guile-git #$guile-bytestructures) ((module-load-path module-load-compiled-path) (set! %load-path (append module-load-path %load-path) (set! %load-compiled-path (append module-load-compiled-path %load-compiled-path)))))) --8<---------------cut here---------------end--------------->8--- It might seems preferable but I can't get guix-latest derivation to include (ice-9 match), maybe because of #:module-path in "(gexp->derivation "guix-latest" ...". Mathieu