summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
Diffstat (limited to 'gnu')
-rw-r--r--gnu/home/services/dict.scm32
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/services/dict.scm27
3 files changed, 51 insertions, 9 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/local.mk b/gnu/local.mk
index e4f5b2078a..a85f9561a6 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -91,6 +91,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/home.scm					\
   %D%/home/services.scm			\
   %D%/home/services/desktop.scm			\
+  %D%/home/services/dict.scm			\
   %D%/home/services/symlink-manager.scm		\
   %D%/home/services/fontutils.scm		\
   %D%/home/services/gnupg.scm			\
diff --git a/gnu/services/dict.scm b/gnu/services/dict.scm
index f542921302..a4e25f5302 100644
--- a/gnu/services/dict.scm
+++ b/gnu/services/dict.scm
@@ -56,7 +56,9 @@
   (handlers    dicod-configuration-handlers       ;list of <dicod-handler>
                (default '()))
   (databases   dicod-configuration-databases      ;list of <dicod-database>
-               (default (list %dicod-database:gcide))))
+               (default (list %dicod-database:gcide)))
+  (home-service? dicod-configuration-home-service? ;boolean
+                 (default for-home?) (innate)))
 
 (define-record-type* <dicod-handler>
   dicod-handler make-dicod-handler
@@ -152,20 +154,26 @@ database {
 (define (dicod-shepherd-service config)
   (let* ((dicod.conf (dicod-configuration-file config))
          (interfaces (dicod-configuration-interfaces config))
+         (home-service? (dicod-configuration-home-service? config))
+         (mappings  `(,@(if home-service?
+                            '()
+                            (list (file-system-mapping
+                                   (source "/dev/log")
+                                   (target source))))
+                      ,(file-system-mapping
+                        (source dicod.conf)
+                        (target source))))
          (dicod      (least-authority-wrapper
                       (file-append (dicod-configuration-dico config)
                                    "/bin/dicod")
                       #:name "dicod"
-                      #:mappings (list (file-system-mapping
-                                        (source "/dev/log")
-                                        (target source))
-                                       (file-system-mapping
-                                        (source dicod.conf)
-                                        (target source)))
+                      #:mappings mappings
                       #:namespaces (delq 'net %namespaces))))
     (list (shepherd-service
            (provision '(dicod))
-           (requirement '(user-processes))
+           (requirement (if home-service?
+                            '()
+                            '(user-processes)))
            (documentation "Run the dicod daemon.")
            (start #~(make-inetd-constructor
                      (list #$dicod "--inetd" "--foreground"
@@ -176,7 +184,8 @@ database {
                               (car (getaddrinfo interface "dict")))))
                           '#$interfaces)
                      #:requirements '#$requirement
-                     #:user "dicod" #:group "dicod"
+                     #:user #$(and (not home-service?) "dicod")
+                     #:group #$(and (not home-service?) "dicod")
                      #:service-name-stem "dicod"))
            (stop #~(make-inetd-destructor))
            (actions (list (shepherd-configuration-action dicod.conf)))))))