diff options
Diffstat (limited to 'gnu/home/services')
-rw-r--r-- | gnu/home/services/dict.scm | 32 | ||||
-rw-r--r-- | gnu/home/services/mcron.scm | 96 | ||||
-rw-r--r-- | gnu/home/services/shepherd.scm | 4 | ||||
-rw-r--r-- | gnu/home/services/ssh.scm | 8 | ||||
-rw-r--r-- | gnu/home/services/syncthing.scm | 30 |
5 files changed, 80 insertions, 90 deletions
diff --git a/gnu/home/services/dict.scm b/gnu/home/services/dict.scm new file mode 100644 index 0000000000..b8a4653276 --- /dev/null +++ b/gnu/home/services/dict.scm @@ -0,0 +1,32 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu home services dict) + #:use-module (gnu home services) + #:use-module (gnu services) + #:use-module (gnu services dict) + #:use-module ((gnu system shadow) #:select (account-service-type)) + #:export (home-dicod-service-type) + #:re-export (dicod-configuration)) + +(define home-dicod-service-type + (service-type + (inherit (system->home-service-type + (remove-service-extensions dicod-service-type + (list account-service-type)))) + (default-value (for-home (dicod-configuration))))) diff --git a/gnu/home/services/mcron.scm b/gnu/home/services/mcron.scm index f51edd6634..23be44ba07 100644 --- a/gnu/home/services/mcron.scm +++ b/gnu/home/services/mcron.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2021, 2023 Andrew Tropin <andrew@trop.in> ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz> ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com> +;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -19,16 +20,9 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (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) - #:use-module (guix gexp) - #:use-module (srfi srfi-1) - #:use-module (ice-9 match) - + #:use-module (gnu services mcron) ;for the service mapping #:export (home-mcron-configuration home-mcron-service-type)) @@ -55,86 +49,16 @@ ;; ;;; Code: -(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 - (@@ (gnu services mcron) shepherd-schedule-action)) - -(define (home-mcron-shepherd-services config) - (match-record config <home-mcron-configuration> - (mcron jobs log? log-format) - (if (null? jobs) - '() ;no jobs to run - (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 rdelim) - (ice-9 match) - ,@%default-modules)) - (start #~(make-forkexec-constructor - (list (string-append #$mcron "/bin/mcron") - #$@(if log? - #~("--log" "--log-format" #$log-format) - #~()) - #$@files) - #:log-file (string-append - (or (getenv "XDG_STATE_HOME") - (format #f "~a/.local/state" - (getenv "HOME"))) - "/log/mcron.log"))) - (stop #~(make-kill-destructor)) - (actions - (list (shepherd-schedule-action mcron files))))))))) - -(define home-mcron-profile (compose list home-mcron-configuration-mcron)) - -(define (home-mcron-extend config jobs) - (home-mcron-configuration - (inherit config) - (jobs (append (home-mcron-configuration-jobs config) - jobs)))) +(define-syntax-rule (home-mcron-configuration fields ...) + ;; Macro provided for backward compatibility. + (for-home (mcron-configuration fields ...))) (define home-mcron-service-type - (service-type (name 'home-mcron) - (extensions - (list (service-extension - home-shepherd-service-type - home-mcron-shepherd-services) - (service-extension - home-profile-service-type - home-mcron-profile))) - (compose concatenate) - (extend home-mcron-extend) - (default-value (home-mcron-configuration)) - (description - "Install and configure the GNU mcron cron job manager."))) + (service-type + (inherit (system->home-service-type mcron-service-type)) + (default-value (for-home (mcron-configuration))))) - -;;; -;;; Generate documentation. -;;; -(define (generate-doc) - (configuration->documentation 'home-mcron-configuration)) +(define-service-type-mapping + mcron-service-type => home-mcron-service-type) ;;; mcron.scm ends here diff --git a/gnu/home/services/shepherd.scm b/gnu/home/services/shepherd.scm index 5585ef61b2..bd068c37fc 100644 --- a/gnu/home/services/shepherd.scm +++ b/gnu/home/services/shepherd.scm @@ -141,7 +141,7 @@ as shepherd package." (define (shepherd-xdg-configuration-files config) `(("shepherd/init.scm" ,(home-shepherd-configuration-file config)))) -(define-public home-shepherd-service-type +(define home-shepherd-service-type (service-type (name 'home-shepherd) (extensions (list (service-extension @@ -168,4 +168,6 @@ as shepherd package." (default-value (home-shepherd-configuration)) (description "Configure and install userland Shepherd."))) +(define-service-type-mapping + shepherd-root-service-type => home-shepherd-service-type) diff --git a/gnu/home/services/ssh.scm b/gnu/home/services/ssh.scm index ac72129b6c..34b1fe4658 100644 --- a/gnu/home/services/ssh.scm +++ b/gnu/home/services/ssh.scm @@ -203,6 +203,9 @@ first)))) (memq keyword ssh-match-keywords)))) +(define (serialize-match-criteria _ value) + (string-append "Match " value "\n")) + (define-maybe match-criteria) (define-configuration openssh-host @@ -214,7 +217,7 @@ top-level options.") (host-name maybe-string "Host name---e.g., @code{\"foo.example.org\"} or @code{\"192.168.1.2\"}.") - (match-criteria ;TODO implement stricter match-criteria rules + (match-criteria maybe-match-criteria "When specified, this string denotes the set of hosts to which the entry applies, superseding the @code{host-name} field. Its first element must be @@ -288,8 +291,7 @@ through before connecting to the server.") (G_ "define either 'name' or 'match-criteria', not both"))) (string-append "Host " (openssh-host-name config) "\n")) (if (maybe-value-set? (openssh-host-match-criteria config)) - (string-append - "Match " (string-join (openssh-host-match-criteria config) " ") "\n") + (serialize-match-criteria #t (openssh-host-match-criteria config)) (raise (formatted-message (G_ "define either 'name' or 'match-criteria' once"))))) diff --git a/gnu/home/services/syncthing.scm b/gnu/home/services/syncthing.scm new file mode 100644 index 0000000000..9c9eb94ea1 --- /dev/null +++ b/gnu/home/services/syncthing.scm @@ -0,0 +1,30 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu home services syncthing) + #:use-module (gnu services) + #:use-module (gnu home services) + #:use-module (gnu services syncthing) + #:export (home-syncthing-service-type) + #:re-export (syncthing-configuration + syncthing-configuration?)) + +(define home-syncthing-service-type + (service-type + (inherit (system->home-service-type syncthing-service-type)) + (default-value (for-home (syncthing-configuration))))) |