~ruther/guix-local

412e6396bbb8b398e8a94427db50271e47db610f — 宋文武 7 years ago d3715a3
services: Add 'imap4d-service-type'.

* gnu/services/mail.scm (<imap4d-configuration>): New record type.
(imap4d-shepherd-service): New procedure.
(%default-imap4d-config-file, imap4d-service-type): New variables.
* gnu/services/mail.scm (Mail Services): Document it.
2 files changed, 74 insertions(+), 1 deletions(-)

M doc/guix.texi
M gnu/services/mail.scm
M doc/guix.texi => doc/guix.texi +30 -0
@@ 16559,6 16559,36 @@ the @code{operating-system}'s @code{user-accounts} in order to deliver
the @code{postmaster} mail to @code{bob} (which subsequently would
deliver mail to @code{bob@@example.com} and @code{bob@@example2.com}).

@subsubheading GNU Mailutils IMAP4 Daemon
@cindex GNU Mailutils IMAP4 Daemon

@deffn {Scheme Variable} imap4d-service-type
This is the type of the GNU Mailutils IMAP4 Daemon (@pxref{(mailutils)
imap4d}), whose value should be an @code{imap4d-configuration} object as in
this example:

@example
(service imap4d-service-type
         (imap4d-configuration
           (config-file (local-file "imap4d.conf"))))
@end example
@end deffn

@deftp {Data Type} imap4d-configuration
Data type representing the configuration of @command{imap4d}.

@table @asis
@item @code{package} (default: @code{mailutils})
The package that provides @command{imap4d}.

@item @code{config-file} (default: @code{%default-imap4d-config-file})
File-like object of the configuration file to use, by default it will listen
on the tcp port 143 of @code{localhost}.  @xref{(mailutils) Conf-imap4d} for
details.

@end table
@end deftp

@node Messaging Services
@subsection Messaging Services


M gnu/services/mail.scm => gnu/services/mail.scm +44 -1
@@ 64,7 64,12 @@
            exim-configuration
            exim-configuration?
            exim-service-type
            %default-exim-config-file))
            %default-exim-config-file

            imap4d-configuration
            imap4d-configuration?
            imap4d-service-type
            %defualt-imap4d-config-file))

;;; Commentary:
;;;


@@ 1776,3 1781,41 @@ exim_group = exim
          (service-extension activation-service-type exim-activation)
          (service-extension profile-service-type exim-profile)
          (service-extension mail-aliases-service-type (const '()))))))


;;;
;;; GNU Mailutils IMAP4 Daemon.
;;;

(define %default-imap4d-config-file
  (plain-file "imap4d.conf" "server localhost {};\n"))

(define-record-type* <imap4d-configuration>
  imap4d-configuration make-imap4d-configuration imap4d-configuration?
  (package     imap4d-configuration-package
               (default mailutils))
  (config-file imap4d-configuration-config-file
               (default %default-imap4d-config-file)))

(define imap4d-shepherd-service
  (match-lambda
    (($ <imap4d-configuration> package config-file)
     (list (shepherd-service
            (provision '(imap4d))
            (requirement '(networking syslogd))
            (documentation "Run the imap4d daemon.")
            (start (let ((imap4d (file-append package "/sbin/imap4d")))
                     #~(make-forkexec-constructor
                        (list #$imap4d "--daemon" "--foreground"
                              "--config-file" #$config-file))))
            (stop #~(make-kill-destructor)))))))

(define imap4d-service-type
  (service-type
   (name 'imap4d)
   (description
    "Run the GNU @command{imap4d} to serve e-mail messages through IMAP.")
   (extensions
    (list (service-extension
           shepherd-root-service-type imap4d-shepherd-service)))
   (default-value (imap4d-configuration))))