summary refs log tree commit diff
path: root/gnu/home/services/mcron.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/home/services/mcron.scm')
-rw-r--r--gnu/home/services/mcron.scm47
1 files changed, 36 insertions, 11 deletions
diff --git a/gnu/home/services/mcron.scm b/gnu/home/services/mcron.scm
index 0b3dbb810b..1d294a997c 100644
--- a/gnu/home/services/mcron.scm
+++ b/gnu/home/services/mcron.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,6 +21,7 @@
 (define-module (gnu home services mcron)
   #:use-module (gnu packages guile-xyz)
   #:use-module (gnu home services)
+  #:use-module (gnu services configuration)
   #:use-module (gnu services shepherd)
   #:use-module (gnu home services shepherd)
   #:use-module (guix records)
@@ -53,13 +55,23 @@
 ;;
 ;;; Code:
 
-(define-record-type* <home-mcron-configuration> home-mcron-configuration
-  make-home-mcron-configuration
-  home-mcron-configuration?
-  (package home-mcron-configuration-package ; package
-           (default mcron))
-  (jobs home-mcron-configuration-jobs   ; list of jobs
-        (default '())))
+(define list-of-gexps?
+  (list-of gexp?))
+
+(define-configuration/no-serialization home-mcron-configuration
+  (mcron (file-like mcron) "The mcron package to use.")
+  (jobs
+   (list-of-gexps '())
+   "This is a list of gexps (@pxref{G-Expressions}), where each gexp
+corresponds to an mcron job specification (@pxref{Syntax, mcron job
+specifications,, mcron, GNU@tie{}mcron}).")
+  (log? (boolean #t) "Log messages to standard output.")
+  (log-format
+   (string "~1@*~a ~a: ~a~%")
+   "@code{(ice-9 format)} format string for log messages.  The default value
+produces messages like \"@samp{@var{pid} @var{name}:
+@var{message}\"} (@pxref{Invoking mcron, Invoking,, mcron, GNU@tie{}mcron}).
+Each message is also prefixed by a timestamp by GNU Shepherd."))
 
 (define job-files (@@ (gnu services mcron) job-files))
 (define shepherd-schedule-action
@@ -69,19 +81,23 @@
   (match-lambda
     (($ <home-mcron-configuration> mcron '()) ; no jobs to run
      '())
-    (($ <home-mcron-configuration> mcron jobs)
+    (($ <home-mcron-configuration> mcron jobs  log? log-format)
      (let ((files (job-files mcron jobs)))
        (list (shepherd-service
               (documentation "User cron jobs.")
               (provision '(mcron))
               (modules `((srfi srfi-1)
                          (srfi srfi-26)
-                         (ice-9 popen)            ; for the 'schedule' action
+                         (ice-9 popen)  ; for the 'schedule' action
                          (ice-9 rdelim)
                          (ice-9 match)
                          ,@%default-modules))
               (start #~(make-forkexec-constructor
-                        (list #$(file-append mcron "/bin/mcron") #$@files)
+                        (list (string-append #$mcron "/bin/mcron")
+                              #$@(if log?
+                                     #~("--log" "--log-format" #$log-format)
+                                     #~())
+                              #$@files)
                         #:log-file (string-append
                                     (or (getenv "XDG_LOG_HOME")
                                         (format #f "~a/.local/var/log"
@@ -91,7 +107,7 @@
               (actions
                (list (shepherd-schedule-action mcron files)))))))))
 
-(define home-mcron-profile (compose list home-mcron-configuration-package))
+(define home-mcron-profile (compose list home-mcron-configuration-mcron))
 
 (define (home-mcron-extend config jobs)
   (home-mcron-configuration
@@ -113,3 +129,12 @@
                 (default-value (home-mcron-configuration))
                 (description
                  "Install and configure the GNU mcron cron job manager.")))
+
+
+;;;
+;;; Generate documentation.
+;;;
+(define (generate-doc)
+  (configuration->documentation 'home-mcron-configuration))
+
+;;; mcron.scm ends here