gexp: Add symlink-to procedure.

* guix/gexp.scm (symlink-to): New procedure.
* doc/guix.texi (G-Expressions): Document it.

Change-Id: I7c1ba3a29a4e5350cb4f196185b7171c4750b6b8
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
This commit is contained in:
Sergey Trofimov 2025-05-19 11:50:09 +02:00 committed by Maxim Cournoyer
parent 9b7213fc11
commit b989e503ac
No known key found for this signature in database
GPG key ID: 1260E46482E63562
2 changed files with 16 additions and 0 deletions

View file

@ -12692,6 +12692,17 @@ file. Here's an example:
This yields an @code{etc} directory containing these two files. This yields an @code{etc} directory containing these two files.
@end deffn @end deffn
@deffn {Procedure} symlink-to target
Return a @code{<computed-file>} that is a symbolic link to target.
Note, that the target does not need to exist at the build time. One of
uses is to put arbitrary symlinks into user's home:
@lisp
(service home-files-service-type
`(("Sync" ,(symlink-to "/storage/Sync"))))
@end lisp
@end deffn
@deffn {Procedure} directory-union name things @deffn {Procedure} directory-union name things
Return a directory that is the union of @var{things}, where @var{things} is a list of Return a directory that is the union of @var{things}, where @var{things} is a list of
file-like objects denoting directories. For example: file-like objects denoting directories. For example:

View file

@ -119,6 +119,7 @@
file-union file-union
directory-union directory-union
references-file references-file
symlink-to
imported-files imported-files
imported-modules imported-modules
@ -2182,6 +2183,10 @@ or dangling symlink ~a" target source)))
files))))) files)))))
#:guile guile)) #:guile guile))
(define (symlink-to target)
"Return an object that is a symlink to TARGET."
(computed-file "link" (gexp (symlink (ungexp target) (ungexp output)))))
(define* (directory-union name things (define* (directory-union name things
#:key (copy? #f) (quiet? #f) #:key (copy? #f) (quiet? #f)
(resolve-collision 'resolve-collision/default)) (resolve-collision 'resolve-collision/default))