services: 'references-file' depends on Guile-Gcrypt.
[jackhill/guix/guix.git] / gnu / services / lirc.scm
index 857f362..e95f542 100644 (file)
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
+;;; Copyright © 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
 
 (define-module (gnu services lirc)
   #:use-module (gnu services)
+  #:use-module (gnu services shepherd)
   #:use-module (gnu packages lirc)
-  #:use-module (guix monads)
-  #:use-module (guix store)
   #:use-module (guix gexp)
-  #:export (lirc-service))
+  #:use-module (guix records)
+  #:use-module (ice-9 match)
+  #:export (lirc-configuration
+            lirc-configuation?
+            lirc-service
+            lirc-service-type))
 
 ;;; Commentary:
 ;;;
-;;; LIRC services.
+;;; LIRC service.
 ;;;
 ;;; Code:
 
+(define-record-type* <lirc-configuration>
+  lirc-configuration make-lirc-configuration
+  lirc-configuation?
+  (lirc          lirc-configuration-lirc          ;<package>
+                 (default lirc))
+  (device        lirc-configuration-device)       ;string
+  (driver        lirc-configuration-driver)       ;string
+  (config-file   lirc-configuration-file)         ;string | file-like object
+  (extra-options lirc-configuration-options       ;list of strings
+                 (default '())))
+
+(define %lirc-activation
+  #~(begin
+      (use-modules (guix build utils))
+      (mkdir-p "/var/run/lirc")))
+
+(define lirc-shepherd-service
+  (match-lambda
+    (($ <lirc-configuration> lirc device driver config-file options)
+     (list (shepherd-service
+            (provision '(lircd))
+            (documentation "Run the LIRC daemon.")
+            (requirement '(user-processes))
+            (start #~(make-forkexec-constructor
+                      (list (string-append #$lirc "/sbin/lircd")
+                            "--nodaemon"
+                            #$@(if device
+                                   #~("--device" #$device)
+                                   #~())
+                            #$@(if driver
+                                   #~("--driver" #$driver)
+                                   #~())
+                            #$@(if config-file
+                                   #~(#$config-file)
+                                   #~())
+                            #$@options)))
+            (stop #~(make-kill-destructor)))))))
+
+(define lirc-service-type
+  (service-type (name 'lirc)
+                (extensions
+                 (list (service-extension shepherd-root-service-type
+                                          lirc-shepherd-service)
+                       (service-extension activation-service-type
+                                          (const %lirc-activation))))))
+
 (define* (lirc-service #:key (lirc lirc)
                        device driver config-file
                        (extra-options '()))
@@ -41,28 +92,11 @@ The daemon will use specified @var{device}, @var{driver} and
 
 Finally, @var{extra-options} is a list of additional command-line options
 passed to @command{lircd}."
-  (with-monad %store-monad
-    (return
-     (service
-      (provision '(lircd))
-      (documentation "Run the LIRC daemon.")
-      (requirement '(user-processes))
-      (start #~(make-forkexec-constructor
-                (list (string-append #$lirc "/sbin/lircd")
-                      "--nodaemon"
-                      #$@(if device
-                             #~("--device" #$device)
-                             #~())
-                      #$@(if driver
-                             #~("--driver" #$driver)
-                             #~())
-                      #$@(if config-file
-                             #~(#$config-file)
-                             #~())
-                      #$@extra-options)))
-      (stop #~(make-kill-destructor))
-      (activate #~(begin
-                    (use-modules (guix build utils))
-                    (mkdir-p "/var/run/lirc")))))))
+  (service lirc-service-type
+           (lirc-configuration
+            (lirc lirc)
+            (device device) (driver driver)
+            (config-file config-file)
+            (extra-options extra-options))))
 
 ;;; lirc.scm ends here