Centralize definition of ‘mixed-executable-file’

This commit is contained in:
Tom Willemse 2022-04-15 22:13:33 -07:00
parent af4c5b3ffd
commit b157ecf8ff
3 changed files with 22 additions and 36 deletions

20
oni/gexp.scm Normal file
View file

@ -0,0 +1,20 @@
(define-module (oni gexp)
#:use-module (guix gexp)
#:export (mixed-executable-file))
(define* (mixed-executable-file name #:key guile #:rest text)
"Return an object representing store file NAME containing TEXT and having the
executable bit set. TEXT is a sequence of strings and file-like objects, as in:
(mixed-executable-file \"profile\"
\"export PATH=\" coreutils \"/bin:\" grep \"/bin\")"
(define build
(let ((text (if guile (drop text 2) text)))
(gexp (call-with-output-file (ungexp output "out")
(lambda (port)
(set-port-encoding! port "UTF-8")
(display (string-append (ungexp-splicing text)) port)
(chmod port #o555))))))
(computed-file name build #:guile guile))

View file

@ -7,6 +7,7 @@
#:use-module (guix packages)
#:use-module (guix gexp)
#:use-module (oni home services xsession)
#:use-module (oni gexp)
#:use-module (srfi srfi-1)
#:export (home-herbstluftwm-service-type
@ -47,24 +48,6 @@
(define (add-herbstluftwm-packages config)
(list (home-herbstluftwm-configuration-package config)))
(define* (mixed-executable-file name #:key guile #:rest text)
"Return an object representing store file NAME containing TEXT. TEXT is a
sequence of strings and file-like objects, as in:
(mixed-text-file \"profile\"
\"export PATH=\" coreutils \"/bin:\" grep \"/bin\")
This is the declarative counterpart of 'text-file*'."
(define build
(let ((text (if guile (drop text 2) text)))
(gexp (call-with-output-file (ungexp output "out")
(lambda (port)
(set-port-encoding! port "UTF-8")
(display (string-append (ungexp-splicing text)) port)
(chmod port #o555))))))
(computed-file name build #:guile guile))
(define (home-herbstluftwm-autostart-file config)
(apply mixed-executable-file
"autostart"

View file

@ -4,6 +4,7 @@
#:use-module (gnu home services utils)
#:use-module (guix packages)
#:use-module (guix gexp)
#:use-module (oni gexp)
#:use-module (srfi srfi-1)
#:export (home-xsession-service-type
@ -20,24 +21,6 @@
(text-config '())
"String"))
(define* (mixed-executable-file name #:key guile #:rest text)
"Return an object representing store file NAME containing TEXT. TEXT is a
sequence of strings and file-like objects, as in:
(mixed-text-file \"profile\"
\"export PATH=\" coreutils \"/bin:\" grep \"/bin\")
This is the declarative counterpart of 'text-file*'."
(define build
(let ((text (if guile (drop text 2) text)))
(gexp (call-with-output-file (ungexp output "out")
(lambda (port)
(set-port-encoding! port "UTF-8")
(display (string-append (ungexp-splicing text)) port)
(chmod port #o555))))))
(computed-file name build #:guile guile))
(define (xsession-home-files config)
`((".xsession"
,(mixed-executable-file