[Top][All Lists]

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

Re: Question about scripts in guix-home

From: Oleg Pykhalov
Subject: Re: Question about scripts in guix-home
Date: Sun, 17 Oct 2021 13:33:48 +0300
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

Fredrik Salomonsson <> writes:


> This is what I tried. Note that I only tested this on my script
> to see if it worked.
> #+begin_src scheme
>   (define-public (get-services host)
>     "Return services for HOST."
>     (let ((storage-script (program-file
>                            ""
>                            #~(execl #$(local-file 
> "files/waybar/") ""))))
>       (list
>        (simple-service 'plt-waybar-config
>                        home-files-service-type
>                        `(
>                          ("config/waybar/config"
>                           ,(local-file (format #f "~a/files/waybar/~a.conf" 
> %source-dir host)))
>                          ("config/waybar/style.css"
>                           ,(local-file (format #f 
> "~a/files/waybar/~a-style.css" %source-dir host)))
>                          ("config/waybar/modules/"
>                           ,(computed-file
>                             "mic-wrapper"
>                             #~(begin
>                                 (let ((script #$(local-file 
> "files/waybar/")))
>                                   (with-output-to-file #$output
>                                     (lambda ()
>                                       (format #t "\
>   #!/bin/sh
>   exec -a \"$0\" ~a --shell=bash \"$@\"\n"
>                                               script)))
>                                   (chmod script #o555)) ;; <-- trying to 
> chmod the script
>                                 (chmod #$output #o555))))
>                          ("config/waybar/modules/"
>                           ,storage-script)
>                          )))))
> #+end_src

Well, if you don't want to put the content of
files/waybar/ file inside a Scheme string, then you need
to read the file to a string, e.g.:
--8<---------------cut here---------------start------------->8---
(simple-service 'shellcheck-wrapper
                   (list `("local/bin/shellcheck"
                                 (use-modules (ice-9 rdelim))
                                 (with-output-to-file #$output
                                   (lambda ()
                                     (display #$(with-input-from-file 
"/tmp/foo" read-string))))
                                 (chmod #$output #o555))))))
--8<---------------cut here---------------end--------------->8---

Note that it's just an example which you should change according to your
needs.  ;-)  Also, it creates not an executable but a symlink to an
executable in a store, which I missed in a previous answer.

Attachment: signature.asc
Description: PGP signature

reply via email to

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