From 677b4962a0dabc9cab9c1684996ce155118b30a8 Mon Sep 17 00:00:00 2001 From: Hilton Chain Date: Mon, 20 Oct 2025 00:38:24 +0800 Subject: [PATCH] service: Add home-goimapnotify-service-type. * modules/rosenthal/services/mail.scm (): New data type. (home-goimapnotify-shepherd): New procedure. (home-goimapnotify-service-type): New variable. --- modules/rosenthal/services/mail.scm | 58 ++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/modules/rosenthal/services/mail.scm b/modules/rosenthal/services/mail.scm index 9898e0c..2c27e1b 100644 --- a/modules/rosenthal/services/mail.scm +++ b/modules/rosenthal/services/mail.scm @@ -1,16 +1,25 @@ -;;; SPDX-FileCopyrightText: 2024 Hilton Chain +;;; SPDX-FileCopyrightText: 2024, 2025 Hilton Chain ;;; ;;; SPDX-License-Identifier: GPL-3.0-or-later (define-module (rosenthal services mail) #:use-module (srfi srfi-26) + #:use-module (guix gexp) #:use-module (guix records) + #:use-module (rosenthal utils serializers yaml) #:use-module (gnu services) #:use-module (gnu services admin) #:use-module (gnu services configuration) #:use-module (gnu services docker) + #:use-module (gnu services shepherd) + #:use-module (gnu home services) + #:use-module (gnu home services shepherd) + #:use-module (gnu packages mail) #:export (docker-mailserver-configuration - docker-mailserver-service-type)) + docker-mailserver-service-type + + home-goimapnotify-service-type + home-goimapnotify-configuration)) ;;; ;;; Docker Mailserver @@ -66,3 +75,48 @@ (compose list docker-mailserver-configuration-log-file)))) (default-value (docker-mailserver-configuration)) (description "Run Docker Mailserver."))) + + +;;; +;;; goimapnotify +;;; + +(define-configuration/no-serialization home-goimapnotify-configuration + (goimapnotify + (file-like goimapnotify) + "") + (config + yaml-config + "") + (shepherd-provision + (list-of-symbols '(goimapnotify)) + "") + (shepherd-requirement + (list-of-symbols '()) + "") + (auto-start? + (boolean #t) + "")) + +(define home-goimapnotify-shepherd + (match-record-lambda + (goimapnotify config shepherd-provision shepherd-requirement auto-start?) + (let ((config-file + (mixed-text-file "goimapnotify.yaml" (yaml-serialize config)))) + (list (shepherd-service + (provision shepherd-provision) + (requirement shepherd-requirement) + (start + #~(make-forkexec-constructor + (list #$(file-append goimapnotify "/bin/goimapnotify") + "-conf" #$config-file))) + (stop #~(make-kill-destructor)) + (auto-start? auto-start?)))))) + +(define home-goimapnotify-service-type + (service-type + (name 'home-goimapnotify) + (extensions + (list (service-extension home-shepherd-service-type + home-goimapnotify-shepherd))) + (description "")))