Fredrik Salomonsson writes: […] > This is what I tried. Note that I only tested this on my mic.sh script > to see if it worked. > > #+begin_src scheme > (define-public (get-services host) > "Return services for HOST." > (let ((storage-script (program-file > "storage.sh" > #~(execl #$(local-file "files/waybar/modules-storage.sh") "storage.sh")))) > (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/mic.sh" > ,(computed-file > "mic-wrapper" > #~(begin > (let ((script #$(local-file "files/waybar/modules-mic.sh"))) > (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.sh" > ,storage-script) > ))))) > #+end_src Well, if you don't want to put the content of files/waybar/modules-mic.sh 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 home-files-service-type (list `("local/bin/shellcheck" ,(computed-file "shellcheck-wrapper" #~(begin (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.