summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2023-01-13 17:04:21 -0500
committerDavid Thompson <dthompson2@worcester.edu>2023-01-14 07:53:21 -0500
commit202ac747e697a2373f0201be490e668695283eb4 (patch)
treef9722f6120e5ae133f0a1ac2267c2b23d339787f
parent77a34996000acf43b668ebf491afb6d02e85b0ec (diff)
downloadguix-202ac747e697a2373f0201be490e668695283eb4.tar.gz
gnu: services: Add joycond-service.
* gnu/services/games.scm (joycond-configuration): New configuration type.
(joycond-shepherd-service): New procedure.
(joycond-service-type): New variable.
* doc/guix.texi (Game Services): Document it.
-rw-r--r--doc/guix.texi19
-rw-r--r--gnu/services/games.scm36
2 files changed, 54 insertions, 1 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 751d0957d8..c07ec89b2f 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -36277,6 +36277,25 @@ like to serve.
 @node Game Services
 @subsection Game Services
 
+@subsubheading Joycond service
+@cindex joycond
+The joycond service allows the pairing of Nintendo joycon game
+controllers over Bluetooth. (@pxref{Desktop Services} for setting up
+Bluetooth.)
+
+@deftp {Data Type} joycond-configuration
+Data type representing the configuration of @command{joycond}.
+
+@table @asis
+@item @code{package} (default: @code{joycond})
+The joycond package to use.
+@end table
+@end deftp
+
+@defvar joycond-service-type
+Service type for the joycond service.
+@end defvar
+
 @subsubheading The Battle for Wesnoth Service
 @cindex wesnothd
 @uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn
diff --git a/gnu/services/games.scm b/gnu/services/games.scm
index 6c2af44b49..e63c1c1299 100644
--- a/gnu/services/games.scm
+++ b/gnu/services/games.scm
@@ -19,6 +19,7 @@
 
 (define-module (gnu services games)
   #:use-module (gnu services)
+  #:use-module (gnu services configuration)
   #:use-module (gnu services shepherd)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages games)
@@ -28,13 +29,46 @@
   #:autoload   (guix least-authority) (least-authority-wrapper)
   #:use-module (guix gexp)
   #:use-module (guix modules)
+  #:use-module (guix packages)
   #:use-module (guix records)
   #:use-module (ice-9 match)
-  #:export (wesnothd-configuration
+  #:export (joycond-configuration
+            joycond-configuration?
+            joycond-service-type
+
+            wesnothd-configuration
             wesnothd-configuration?
             wesnothd-service-type))
 
 ;;;
+;;; Joycond
+;;;
+
+(define-configuration/no-serialization joycond-configuration
+  (package (package joycond) "The joycond package to use"))
+
+(define (joycond-shepherd-service config)
+  (let ((joycond (joycond-configuration-package config)))
+    (list (shepherd-service
+           (documentation "Run joycond.")
+           (provision '(joycond))
+           (requirement '(bluetooth))
+           (start #~(make-forkexec-constructor
+                     (list #$(file-append joycond "/bin/joycond"))))
+           (stop #~(make-kill-destructor))))))
+
+(define joycond-service-type
+  (service-type
+   (name 'joycond)
+   (description
+    "Run @command{joycond} for pairing Nintendo joycons via Bluetooth.")
+   (extensions
+    (list (service-extension shepherd-root-service-type
+                             joycond-shepherd-service)))
+   (default-value (joycond-configuration))))
+
+
+;;;
 ;;; The Battle for Wesnoth server
 ;;;