gnu: services: Add dicod-service.
* gnu/services/dict.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. * doc/guix.texi (Various Services): Document it.
This commit is contained in:
		
							parent
							
								
									64a42a08cd
								
							
						
					
					
						commit
						c3d38b2b9d
					
				
					 3 changed files with 181 additions and 0 deletions
				
			
		|  | @ -9395,6 +9395,55 @@ Finally, @var{extra-options} is a list of additional command-line options | |||
| passed to @command{lircd}. | ||||
| @end deffn | ||||
| 
 | ||||
| @subsubsection Dictionary Services | ||||
| The @code{(gnu services dict)} module provides the following service: | ||||
| 
 | ||||
| @deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)] | ||||
| Return a service that runs the @command{dicod} daemon, an implementation | ||||
| of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}). | ||||
| 
 | ||||
| The optional @var{config} argument specifies the configuration for | ||||
| @command{dicod}, which should be a @code{<dicod-configuration>} object, by | ||||
| default it serves the GNU Collaborative International Dictonary of English. | ||||
| 
 | ||||
| You can add @command{open localhost} to your @file{~/.dico} file to make | ||||
| @code{localhost} the default server for @command{dico} client | ||||
| (@pxref{Initialization File,,, dico, GNU Dico Manual}). | ||||
| @end deffn | ||||
| 
 | ||||
| @deftp {Data Type} dicod-configuration | ||||
| Data type representing the configuration of dicod. | ||||
| 
 | ||||
| @table @asis | ||||
| @item @code{dico} (default: @var{dico}) | ||||
| Package object of the GNU Dico dictionary server. | ||||
| 
 | ||||
| @item @code{databases} (default: @var{(list %dicod-database:gcide)}) | ||||
| List of @code{<dicod-database>} objects denoting dictionaries to be served. | ||||
| @end table | ||||
| @end deftp | ||||
| 
 | ||||
| @deftp {Data Type} dicod-database | ||||
| Data type representing a dictionary database. | ||||
| 
 | ||||
| @table @asis | ||||
| @item @code{name} | ||||
| Name of the database, will be used in DICT commands. | ||||
| 
 | ||||
| @item @code{module} | ||||
| Name of the dicod module used by this database | ||||
| (@pxref{Modules,,, dico, GNU Dico Manual}). | ||||
| 
 | ||||
| @item @code{options} | ||||
| List of strings or gexps representing the arguments for the module handler | ||||
| (@pxref{Handlers,,, dico, GNU Dico Manual}). | ||||
| @end table | ||||
| @end deftp | ||||
| 
 | ||||
| @defvr {Scheme Variable} %dicod-database:gcide | ||||
| A @code{<dicod-database>} object serving the GNU Collaborative International | ||||
| Dictonary of English using the @code{gcide} package. | ||||
| @end defvr | ||||
| 
 | ||||
| @node Setuid Programs | ||||
| @subsection Setuid Programs | ||||
|  |  | |||
|  | @ -374,6 +374,7 @@ GNU_SYSTEM_MODULES =				\ | |||
|   %D%/services/databases.scm			\
 | ||||
|   %D%/services/dbus.scm				\
 | ||||
|   %D%/services/desktop.scm			\
 | ||||
|   %D%/services/dict.scm				\
 | ||||
|   %D%/services/lirc.scm				\
 | ||||
|   %D%/services/mail.scm				\
 | ||||
|   %D%/services/networking.scm			\
 | ||||
|  |  | |||
							
								
								
									
										131
									
								
								gnu/services/dict.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								gnu/services/dict.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,131 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com> | ||||
| ;;; | ||||
| ;;; 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 services dict) | ||||
|   #:use-module (guix gexp) | ||||
|   #:use-module (guix records) | ||||
|   #:use-module (gnu services) | ||||
|   #:use-module (gnu services shepherd) | ||||
|   #:use-module (gnu system shadow) | ||||
|   #:use-module ((gnu packages admin) #:select (shadow)) | ||||
|   #:use-module (gnu packages dico) | ||||
|   #:use-module (gnu packages dictionaries) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:use-module (srfi srfi-26) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:export (dicod-service | ||||
|             dicod-configuration | ||||
|             dicod-database | ||||
|             %dicod-database:gcide)) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; GNU Dico. | ||||
| ;;; | ||||
| 
 | ||||
| (define-record-type* <dicod-configuration> | ||||
|   dicod-configuration make-dicod-configuration | ||||
|   dicod-configuration? | ||||
|   (dico        dicod-configuration-dico       (default dico)) | ||||
|   (databases   dicod-configuration-databases | ||||
|                ;; list of <dicod-database> | ||||
|                (default (list %dicod-database:gcide)))) | ||||
| 
 | ||||
| (define-record-type* <dicod-database> | ||||
|   dicod-database make-dicod-database | ||||
|   dicod-database? | ||||
|   (name        dicod-database-name) | ||||
|   (module      dicod-database-module) | ||||
|   (options     dicod-database-options        (default '()))) | ||||
| 
 | ||||
| (define %dicod-database:gcide | ||||
|   (dicod-database | ||||
|    (name "gcide") | ||||
|    (module "gcide") | ||||
|    (options (list #~(string-append "dbdir=" #$gcide "/share/gcide") | ||||
|                   "idxdir=/var/run/dicod")))) | ||||
| 
 | ||||
| (define %dicod-accounts | ||||
|   (list (user-group | ||||
|          (name "dicod") | ||||
|          (system? #t)) | ||||
|         (user-account | ||||
|          (name "dicod") | ||||
|          (group "dicod") | ||||
|          (system? #t) | ||||
|          (home-directory "/var/empty") | ||||
|          (shell #~(string-append #$shadow "/sbin/nologin"))))) | ||||
| 
 | ||||
| (define (dicod-configuration-file config) | ||||
|   (define dicod-configuration->text | ||||
|     (match-lambda | ||||
|       (($ <dicod-configuration> dico databases) | ||||
|        (append-map (match-lambda | ||||
|                      (($ <dicod-database> name module options) | ||||
|                       `(" | ||||
| load-module " ,module "; | ||||
| database { | ||||
|    name \"" ,name "\"; | ||||
|    handler \"" ,module | ||||
|    (string-join (list ,@options) " " 'prefix) "\"; | ||||
| }\n"))) | ||||
|                    databases)))) | ||||
|   (apply mixed-text-file "dicod.conf" (dicod-configuration->text config))) | ||||
| 
 | ||||
| (define %dicod-activation | ||||
|   #~(begin | ||||
|       (use-modules (guix build utils)) | ||||
|       (let ((user   (getpwnam "dicod")) | ||||
|             (rundir "/var/run/dicod")) | ||||
|         (mkdir-p rundir) | ||||
|         (chown rundir (passwd:uid user) (passwd:gid user))))) | ||||
| 
 | ||||
| (define (dicod-shepherd-service config) | ||||
|   (list (shepherd-service | ||||
|          (provision '(dicod)) | ||||
|          (documentation "Run the dicod daemon.") | ||||
|          (start #~(make-forkexec-constructor | ||||
|                    (list (string-append #$dico "/bin/dicod") "--foreground" | ||||
|                          (string-append | ||||
|                           "--config=" #$(dicod-configuration-file config))) | ||||
|                    #:user "dicod" #:group "dicod")) | ||||
|          (stop #~(make-kill-destructor))))) | ||||
| 
 | ||||
| (define dicod-service-type | ||||
|   (service-type | ||||
|    (name 'dict) | ||||
|    (extensions | ||||
|     (list (service-extension account-service-type | ||||
|                              (const %dicod-accounts)) | ||||
|           (service-extension activation-service-type | ||||
|                              (const %dicod-activation)) | ||||
|           (service-extension shepherd-root-service-type | ||||
|                              dicod-shepherd-service))))) | ||||
| 
 | ||||
| (define* (dicod-service #:key (config (dicod-configuration))) | ||||
|   "Return a service that runs the @command{dicod} daemon, an implementation | ||||
| of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}). | ||||
| 
 | ||||
| The optional @var{config} argument specifies the configuration for | ||||
| @command{dicod}, which should be a @code{<dicod-configuration>} object, by | ||||
| default it serves the GNU Collaborative International Dictonary of English. | ||||
| 
 | ||||
| You can add @command{open localhost} to your @file{~/.dico} file to make | ||||
| @code{localhost} the default server for @command{dico} | ||||
| client (@pxref{Initialization File,,, dico, GNU Dico Manual})." | ||||
|   (service dicod-service-type config)) | ||||
		Reference in a new issue