Hi Andrew, Am Sonntag, dem 09.01.2022 um 12:12 +0300 schrieb Andrew Tropin: > Before fee0bc serialization for text-config worked this way: > --8<---------------cut here---------------start------------->8--- > `("string here" > ,#~"string valued gexp" > "source \" > ,(local-file "blabla.sh")) > --8<---------------cut here---------------end--------------->8--- > > would yield something like: > > --8<---------------cut here---------------start------------->8--- > string here > string valued gexp > source \ > /gnu/store/00fl96dj2aak4i1vqvdqzlhbmmskc7fx-blabla.sh > --8<---------------cut here---------------end--------------->8--- > > [...] > > The new text-config serialization implementation (after fee0bc > commit) doesn't support gexps and tries to insert the literal content > of the file in place where file-like object was used[.] I agree that the old one looks nicer in this context, but wasn't the new one introduced to solve the issue of (slurp-file-gexp) in the importer? Meaning whichever way we go, we need something that allows us to insert literal file contents of another file at more or less G- exp compile time.
Perhaps that issue could be solved, if instead the importer just reads the file contents and declares it as a variable as in (define %bashrc " ;; Original contents of bashrc ") (define bashrc (plain-file %bashrc)). WDYT? > If we want to insert the file path to file-like object for new-style > text-config internally we do something like > > (mixed-text-file ... > "source \" "\n" > #~(read-everything-from-file > #$(computed-file "unecessary-file-name" > #~#$(local-file "blabla.sh")))) > > when originally it was > (mixed-text-file > "source \" "\n" > (local-file "blabla.sh")) Is unnecessary-file-name ever created in this instance? I think we have something similar in other locations as well, where G-expressions are merged -- public keys for substitutes spring to mind. Perhaps all it'd need to make use of new-style text configs is a better way of quoting such things, e.g. a procedure which takes a file-like object and produces a plain file with its name. For the record, the use of (read-everything-from-file) in your example -- a procedure which I'm unable to find in my local Guix checkout -- makes it somewhat difficult to come up with concrete solutions here, so pardon me for being abstract. Cheers