You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

74 lines
2.7 KiB

;; SPDX-FileCopyrightText: 2024 Hilton Chain <hako@ultrarare.space>
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
(define-module (rosenthal services mail)
#:use-module (srfi srfi-26)
#:use-module (guix records)
#:use-module (gnu services)
#:use-module (gnu services admin)
#:use-module (gnu services configuration)
#:use-module (gnu services docker)
#:export (docker-mailserver-configuration
docker-mailserver-service-type))
;;;
;;; Docker Mailserver
;;; https://docker-mailserver.github.io/docker-mailserver/latest/
;;;
(define-configuration docker-mailserver-configuration
(data-directory
(string "/var/lib/docker-mailserver")
"Directory to store Docker Mailserver data.")
(log-file
(string "/var/log/docker-mailserver.log")
"Path to log file.")
(shepherd-requirement
(list-of-symbols '())
"List of Shepherd service dependencies.")
(options
(alist '())
"Alist of Docker Mailserver configuration. See also
@url{https://docker-mailserver.github.io/docker-mailserver/latest/config/environment/}.")
(extra-arguments
(list '())
"List of extra Docker arguments.")
(no-serialization))
(define docker-mailserver-log-rotations
(match-record-lambda <docker-mailserver-configuration>
(log-file)
(list (log-rotation
(files (list log-file))))))
(define docker-mailserver-oci-containers
(match-record-lambda <docker-mailserver-configuration>
(data-directory log-file shepherd-requirement options extra-arguments)
(let ((docker-mailserver-path
(cut string-append data-directory <>)))
(list (oci-container-configuration
(environment options)
(image "ghcr.io/docker-mailserver/docker-mailserver:latest")
(provision "docker-mailserver")
(requirement shepherd-requirement)
(log-file log-file)
(network "host")
(volumes
`((,(docker-mailserver-path "/data") . "/var/mail")
(,(docker-mailserver-path "/state") . "/var/mail-state")
(,(docker-mailserver-path "/logs") . "/var/log/mail")
(,(docker-mailserver-path "/config") . "/tmp/docker-mailserver")
("/etc/localtime" . "/etc/localtime:ro")))
(extra-arguments extra-arguments))))))
(define docker-mailserver-service-type
(service-type
(name 'docker-mailserver)
(extensions
(list (service-extension oci-container-service-type
docker-mailserver-oci-containers)
(service-extension rottlog-service-type
docker-mailserver-log-rotations)))
(default-value (docker-mailserver-configuration))
(description "Run Docker Mailserver.")))