help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: how to use a variable in a plain-file object?


From: Tomas Volf
Subject: Re: how to use a variable in a plain-file object?
Date: Thu, 16 May 2024 20:39:54 +0200

On 2024-05-16 17:57:55 +0200, Giovanni Biscuolo wrote:
> Hello,
>
> sorry for the very guile-absolute-beginner question, but I'd like to use
> a declared variable in a plain-file object, so I can write something
> like in this pseudo-code snippet:
>
> --8<---------------cut here---------------start------------->8---
>
> (define variable1 "var1-value")
> (define variable2 "var2-value")
>
> [...]
>
> (define %my-file-object
>   ,(plain-file "something.conf" "
> # This is an example configuration file
>
> attribute1 =" variable1 "
>
> attribute2 =" variable2 "
>
> "))
>
> --8<---------------cut here---------------end--------------->8---
>
> and obtain a "something.conf" file like this:
>
> --8<---------------cut here---------------start------------->8---
> # This is an example configuration file
>
> attribute1 = var1-value
>
> attribute2 = var2-value
>
> --8<---------------cut here---------------end--------------->8---
>
> how can I do, please?

I believe you can use mixed-text-file for this purpose:

  /tmp/xx.scm:

    (use-modules (guix gexp))

    (define var1 "var1-value")
    (define var2 "var2-value")

    (define %my-file-object
      (mixed-text-file "something.conf" "\
    # This is an example configuration file
    attribute1 = " var1 "
    attribute2 = " var2 "
    "))

    %my-file-object

When I build it and inspect the result:

    $ cat $(guix build -e '(load "/tmp/xx.scm")')
    # This is an example configuration file
    attribute1 = var1-value
    attribute2 = var2-value

The mixed-text-file accepts string *and* file-like objects as arguments.  That
makes it very suitable for constructing configuration files, since you can
expand paths, for example like this:

  /tmp/yy.scm:

    (use-modules (gnu packages base)
                 (guix gexp))

    (define %my-file-object
      (mixed-text-file "something.conf" "\
    SED_PATH = " sed "/bin/sed
    "))

    %my-file-object

And here is the result:

    $ cat $(guix build -e '(load "/tmp/yy.scm")')
    SED_PATH = /gnu/store/6kkygybkxkzqy3lf6k5kzimk5mjasrvw-sed-4.8/bin/sed


Hope this is useful and have a nice day,
Tomas Volf

--
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]