services: Add auto-enable? parameter to the bluetooth-service.
* gnu/services/desktop.scm (bluetooth-configuration): New record. (bluetooth-shepherd-service): Use it. (bluetooth-directory): New method. (bluetooth-service-type): Use it to extend the etc-service-type service. (bluetooth-service): Add `auto-enable?' parameter. * doc/guix.texi (Desktop Services): Document it. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
		
							parent
							
								
									65101a2596
								
							
						
					
					
						commit
						b9f67d6dda
					
				
					 2 changed files with 51 additions and 10 deletions
				
			
		| 
						 | 
					@ -39,6 +39,7 @@ Copyright @copyright{} 2017 humanitiesNerd@*
 | 
				
			||||||
Copyright @copyright{} 2017 Christopher Allan Webber@*
 | 
					Copyright @copyright{} 2017 Christopher Allan Webber@*
 | 
				
			||||||
Copyright @copyright{} 2017 Marius Bakke@*
 | 
					Copyright @copyright{} 2017 Marius Bakke@*
 | 
				
			||||||
Copyright @copyright{} 2017 Hartmut Goebel
 | 
					Copyright @copyright{} 2017 Hartmut Goebel
 | 
				
			||||||
 | 
					Copyright @copyright{} 2017 Maxim Cournoyer@*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Permission is granted to copy, distribute and/or modify this document
 | 
					Permission is granted to copy, distribute and/or modify this document
 | 
				
			||||||
under the terms of the GNU Free Documentation License, Version 1.3 or
 | 
					under the terms of the GNU Free Documentation License, Version 1.3 or
 | 
				
			||||||
| 
						 | 
					@ -11818,9 +11819,13 @@ location databases.  See
 | 
				
			||||||
web site} for more information.
 | 
					web site} for more information.
 | 
				
			||||||
@end deffn
 | 
					@end deffn
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@deffn {Scheme Procedure} bluetooth-service [#:bluez @var{bluez}]
 | 
					@deffn {Scheme Procedure} bluetooth-service [#:bluez @var{bluez}] @
 | 
				
			||||||
Return a service that runs the @command{bluetoothd} daemon, which manages
 | 
					       [@w{#:auto-enable? #f}]
 | 
				
			||||||
all the Bluetooth devices and provides a number of D-Bus interfaces.
 | 
					Return a service that runs the @command{bluetoothd} daemon, which
 | 
				
			||||||
 | 
					manages all the Bluetooth devices and provides a number of D-Bus
 | 
				
			||||||
 | 
					interfaces.  When AUTO-ENABLE? is true, the bluetooth controller is
 | 
				
			||||||
 | 
					powered automatically at boot, which can be useful when using a
 | 
				
			||||||
 | 
					bluetooth keyboard or mouse.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Users need to be in the @code{lp} group to access the D-Bus service.
 | 
					Users need to be in the @code{lp} group to access the D-Bus service.
 | 
				
			||||||
@end deffn
 | 
					@end deffn
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,7 @@
 | 
				
			||||||
;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
 | 
					;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
 | 
				
			||||||
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 | 
					;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 | 
				
			||||||
;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
 | 
					;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
 | 
				
			||||||
 | 
					;;; Copyright © 2017 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 | 
				
			||||||
;;;
 | 
					;;;
 | 
				
			||||||
;;; This file is part of GNU Guix.
 | 
					;;; This file is part of GNU Guix.
 | 
				
			||||||
;;;
 | 
					;;;
 | 
				
			||||||
| 
						 | 
					@ -384,32 +385,67 @@ site} for more information."
 | 
				
			||||||
;;; Bluetooth.
 | 
					;;; Bluetooth.
 | 
				
			||||||
;;;
 | 
					;;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define (bluetooth-shepherd-service bluez)
 | 
					(define-record-type* <bluetooth-configuration>
 | 
				
			||||||
 | 
					  bluetooth-configuration make-bluetooth-configuration
 | 
				
			||||||
 | 
					  bluetooth-configuration?
 | 
				
			||||||
 | 
					  (bluez bluetooth-configuration-bluez (default bluez))
 | 
				
			||||||
 | 
					  (auto-enable? bluetooth-configuration-auto-enable? (default #f)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define (bluetooth-configuration-file config)
 | 
				
			||||||
 | 
					  "Return a configuration file for the systemd bluetooth service, as a string."
 | 
				
			||||||
 | 
					  (string-append
 | 
				
			||||||
 | 
					   "[Policy]\n"
 | 
				
			||||||
 | 
					   "AutoEnable=" (bool (bluetooth-configuration-auto-enable?
 | 
				
			||||||
 | 
					                        config))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define (bluetooth-directory config)
 | 
				
			||||||
 | 
					  (computed-file "etc-bluetooth"
 | 
				
			||||||
 | 
					                 #~(begin
 | 
				
			||||||
 | 
					                     (mkdir #$output)
 | 
				
			||||||
 | 
					                     (chdir #$output)
 | 
				
			||||||
 | 
					                     (call-with-output-file "main.conf"
 | 
				
			||||||
 | 
					                       (lambda (port)
 | 
				
			||||||
 | 
					                         (display #$(bluetooth-configuration-file config)
 | 
				
			||||||
 | 
					                                  port))))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define (bluetooth-shepherd-service config)
 | 
				
			||||||
  "Return a shepherd service for @command{bluetoothd}."
 | 
					  "Return a shepherd service for @command{bluetoothd}."
 | 
				
			||||||
  (shepherd-service
 | 
					  (shepherd-service
 | 
				
			||||||
   (provision '(bluetooth))
 | 
					   (provision '(bluetooth))
 | 
				
			||||||
   (requirement '(dbus-system udev))
 | 
					   (requirement '(dbus-system udev))
 | 
				
			||||||
   (documentation "Run the bluetoothd daemon.")
 | 
					   (documentation "Run the bluetoothd daemon.")
 | 
				
			||||||
   (start #~(make-forkexec-constructor
 | 
					   (start #~(make-forkexec-constructor
 | 
				
			||||||
             (string-append #$bluez "/libexec/bluetooth/bluetoothd")))
 | 
					             (string-append #$(bluetooth-configuration-bluez config)
 | 
				
			||||||
 | 
					                            "/libexec/bluetooth/bluetoothd")))
 | 
				
			||||||
   (stop #~(make-kill-destructor))))
 | 
					   (stop #~(make-kill-destructor))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define bluetooth-service-type
 | 
					(define bluetooth-service-type
 | 
				
			||||||
  (service-type
 | 
					  (service-type
 | 
				
			||||||
   (name 'bluetooth)
 | 
					   (name 'bluetooth)
 | 
				
			||||||
   (extensions
 | 
					   (extensions
 | 
				
			||||||
    (list (service-extension dbus-root-service-type list)
 | 
					    (list (service-extension dbus-root-service-type
 | 
				
			||||||
          (service-extension udev-service-type list)
 | 
					                             (compose list bluetooth-configuration-bluez))
 | 
				
			||||||
 | 
					          (service-extension udev-service-type
 | 
				
			||||||
 | 
					                             (compose list bluetooth-configuration-bluez))
 | 
				
			||||||
 | 
					          (service-extension etc-service-type
 | 
				
			||||||
 | 
					                             (lambda (config)
 | 
				
			||||||
 | 
					                               `(("bluetooth"
 | 
				
			||||||
 | 
					                                  ,(bluetooth-directory config)))))
 | 
				
			||||||
          (service-extension shepherd-root-service-type
 | 
					          (service-extension shepherd-root-service-type
 | 
				
			||||||
                             (compose list bluetooth-shepherd-service))))))
 | 
					                             (compose list bluetooth-shepherd-service))))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define* (bluetooth-service #:key (bluez bluez))
 | 
					(define* (bluetooth-service #:key (bluez bluez) (auto-enable? #f))
 | 
				
			||||||
  "Return a service that runs the @command{bluetoothd} daemon, which manages
 | 
					  "Return a service that runs the @command{bluetoothd} daemon, which manages
 | 
				
			||||||
all the Bluetooth devices and provides a number of D-Bus interfaces.
 | 
					all the Bluetooth devices and provides a number of D-Bus interfaces.  When
 | 
				
			||||||
 | 
					AUTO-ENABLE? is true, the bluetooth controller is powered automatically at
 | 
				
			||||||
 | 
					boot.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Users need to be in the @code{lp} group to access the D-Bus service.
 | 
					Users need to be in the @code{lp} group to access the D-Bus service.
 | 
				
			||||||
"
 | 
					"
 | 
				
			||||||
  (service bluetooth-service-type bluez))
 | 
					  (service bluetooth-service-type
 | 
				
			||||||
 | 
					           (bluetooth-configuration
 | 
				
			||||||
 | 
					            (bluez bluez)
 | 
				
			||||||
 | 
					            (auto-enable? auto-enable?))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
;;;
 | 
					;;;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Reference in a new issue