home: services: msmtp: Accept g-expressions for ‘password-eval’.

This allows users to specify:

  (password-eval #~(string-append
                    #$(file-append libsecret "/bin/secret-tool")
		    "…"))

* gnu/home/services/mail.scm (string-or-gexp?): New variable.
(maybe-string-or-gexp): New record type
(msmtp-configuration-serialize-string-or-gexp): New variable.
(msmtp-configuration) [password-eval]: Change type.

Change-Id: Id3016956250c447b301b40f29a6509d57058be49
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Romain GARBAGE 2025-04-08 16:07:00 +02:00 committed by Ludovic Courtès
parent ac83a22375
commit c88f98bb3c
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -49,9 +49,14 @@
msmtp-account-name
msmtp-account-configuration))
(define (string-or-gexp? obj)
(or (string? obj)
(gexp? obj)))
(define-maybe string (prefix msmtp-configuration-))
(define-maybe boolean (prefix msmtp-configuration-))
(define-maybe integer (prefix msmtp-configuration-))
(define-maybe string-or-gexp (prefix msmtp-configuration-))
;; Serialization of 'msmtp'.
(define (uglify-symbol field-name)
@ -68,6 +73,9 @@
(define (msmtp-configuration-serialize-string field-name value)
#~(string-append #$(uglify-symbol field-name) " " #$value "\n"))
(define msmtp-configuration-serialize-string-or-gexp
msmtp-configuration-serialize-string)
(define (msmtp-configuration-serialize-maybe-string-no-underscore field-name value)
#~(if #$(maybe-value-set? value)
(string-append
@ -148,7 +156,7 @@ unless TLS without STARTTLS is used, in which case it is 465 (\"smtps\").")
"Set the envelope-from address.")
(password-eval
maybe-string
maybe-string-or-gexp
"Set the password for authentication to the output (stdout) of the command cmd."
(serializer msmtp-configuration-serialize-maybe-string-no-underscore))