Hi guix, I'm having trouble with nesting g-expressions when defining a mcron job. I want the job to run the same "mastodon-archive" commands for several accounts, so I define a list of accounts and use 'map' to build the complete command. This works well when there are only strings involved, but I can't make it work with gexps.
Here's a simplified example with only strings: --8<---------------cut here---------------start------------->8--- (define succeeding-job (let* ((accounts '("account1" "account2")) (cmd (apply string-append (map (lambda (acct) (string-append "mastodon-archive archive " acct "; ")) accounts)))) #~(job '(next-second (range 1 61 10)) (lambda () (system (string-append "echo '" #$cmd "'"))) "mastodon-archive"))) --8<---------------cut here---------------end--------------->8--- The job succeeds and the mcron log prints as expected "mastodon-archive archive account1; mastodon-archive archive account2;". Now to use the full path to the mastodon-archive binary, cmd must be a gexp: --8<---------------cut here---------------start------------->8--- (define failing-job (let* ((accounts '("account1" "account2")) (cmd #~(apply string-append (map (lambda (acct) (string-append #$mastodon-archive "/bin/mastodon-archive archive " acct "; ")) #$accounts)))) #~(job '(next-second (range 1 61 10)) (lambda () (system (string-append "echo '" #$cmd "'"))) "mastodon-archive"))) --8<---------------cut here---------------end--------------->8--- The home configuration builds fine, but the mcron job fails with the error: (wrong-type-arg #f Wrong type to apply: ~S (account1) (account1)) I played around with gexp-ing the string-append in the lambda, ungexp-ing acct, and trying every other combination of gexp/ungexp I could think of, but I could only make it worse. Any idea what I'm doing wrong?