aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
;;; Copyright © 2015, 2016, 2022 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 services lirc)
  #:use-module (gnu services)
  #:use-module (gnu services shepherd)
  #:use-module (gnu packages lirc)
  #:use-module (guix deprecation)
  #:use-module (guix gexp)
  #:use-module (guix records)
  #:use-module (ice-9 match)
  #:export (lirc-configuration
            lirc-configuation?
            lirc-service  ; deprecated
            lirc-service-type))

;;; Commentary:
;;;
;;; LIRC service.
;;;
;;; Code:

(define-record-type* <lirc-configuration>
  lirc-configuration make-lirc-configuration
  lirc-configuation?
  (lirc          lirc-configuration-lirc          ;file-like
                 (default lirc))
  (device        lirc-configuration-device        ;string
                 (default #f))
  (driver        lirc-configuration-driver        ;string
                 (default #f))
  (config-file   lirc-configuration-file          ;string | file-like object
                 (default #f))
  (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))))
                (description "Run LIRC, a daemon that decodes infrared signals
from remote controls.")
                (default-value (lirc-configuration))))

(define-deprecated (lirc-service #:key (lirc lirc)
                       device driver config-file
                       (extra-options '()))
  lirc-service-type
  "Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
decodes infrared signals from remote controls.

The daemon will use specified @var{device}, @var{driver} and
@var{config-file} (configuration file name).

Finally, @var{extra-options} is a list of additional command-line options
passed to @command{lircd}."
  (service lirc-service-type
           (lirc-configuration
            (lirc lirc)
            (device device) (driver driver)
            (config-file config-file)
            (extra-options extra-options))))

;;; lirc.scm ends here
cc71'>build: Remove check for broken (srfi srfi-37)....Ludovic Courtès 2017-02-20gnu: Add bootstrap-binaries for 'aarch64-linux'....Efraim Flashner 2016-11-25offload: Use Guile-SSH instead of GNU lsh....Ludovic Courtès 2016-08-10build: Correctly determine the system type for GNU/Hurd systems....Manolis Ragkousis 2016-07-20Merge branch 'master' into core-updatesLudovic Courtès 2016-07-19Add (guix zlib)....Ludovic Courtès 2016-06-23build: Remove unneeded conditionals for (guix build syscalls)....Manolis Ragkousis 2016-03-19build: Protect against misconfiguration of localstatedir....Ludovic Courtès 2016-01-13build: Use 127 as the Linux hash-bang limit....Ludovic Courtès 2016-01-12build: 'make check' errors out if file name limits would be hit....Ludovic Courtès 2016-01-12build: Warn against long hash bang lines for tests....Ludovic Courtès 2015-12-01build: Fix detection of ARM systems....Ludovic Courtès 2015-11-25build: Reject ARMv6 systems....Ludovic Courtès 2015-10-09build: Fix libgcrypt detection on FHS systems....Ludovic Courtès 2015-10-06build: Automatically determine libgcrypt's file name....Ludovic Courtès 2015-08-27build: Do not build (guix build syscalls) if 'mount' is missing from libc....Ludovic Courtès 2015-05-19build: Make sure $CXX supports C++11....Ludovic Courtès 2015-02-24build: Reject or warn against file name length limit overruns....Ludovic Courtès 2015-01-07gnu: Add bootstrap binaries for 'armhf-linux'....Mark H Weaver 2014-01-24Add 'guix offload' as a daemon build hook....Ludovic Courtès 2013-11-03Add mips64el-linux to the list of supported systems....Mark H Weaver 2013-07-17build: Provide a replacement (srfi srfi-37) when the user's one is broken....Ludovic Courtès 2013-07-05build: Bail out on unsupported platforms; add `--with-courage'....Ludovic Courtès 2013-07-05build: Correctly determine the system type for non-Linux systems....Ludovic Courtès