Subject: [PATCH 17/21] services: gnome-polkit-settings: Add spice-gtk.

From: Maxim Cournoyer <[email-masked]>
Date: Fri, 17 Feb 2023 12:00:58 -0500

* gnu/services/desktop.scm (gnome-polkit-settings): Add spice-gtk to the GNOME
packages providing polkit rules.
(package-direct-input-selector): Allow passing a list corresponding to the
dependency tree, so that non-propagated transitive inputs can be specified.
---

 gnu/services/desktop.scm | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index fe1f0fd20a..189334dc23 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015 Andy Wingo <[email-masked]>
 ;;; Copyright © 2015 Mark H Weaver <[email-masked]>
 ;;; Copyright © 2016 Sou Bunnbu <[email-masked]>
-;;; Copyright © 2017, 2020, 2022 Maxim Cournoyer <[email-masked]>
+;;; Copyright © 2017, 2020, 2022, 2023 Maxim Cournoyer <[email-masked]>
 ;;; Copyright © 2017 Nikita <[email-masked]>
 ;;; Copyright © 2018, 2020, 2022 Efraim Flashner <[email-masked]>
 ;;; Copyright © 2018 Ricardo Wurmus <[email-masked]>
@@ -183,11 +183,19 @@ (define-module (gnu services desktop)
 (define (bool value)
   (if value "true\n" "false\n"))
 
-(define (package-direct-input-selector input)
+(define (package-direct-input-selector tree)
+  "Return a procedure that selects TREE from the inputs of PACKAGE.  If TREE
+is a list, it recursively searches it until it locates the last item of TREE."
   (lambda (package)
-    (match (assoc-ref (package-direct-inputs package) input)
-      ((package . _) package))))
-
+    (let loop ((tree (if (pair? tree)
+                         tree
+                         (list tree)))
+               (package package))
+      (if (null? tree)
+          package
+          (loop (cdr tree)
+                (car (assoc-ref (package-direct-inputs package)
+                                (car tree))))))))
 
 
 ;;;
@@ -1360,7 +1368,10 @@ (define (gnome-polkit-settings config)
                   '("gnome-settings-daemon"
                     "gnome-control-center"
                     "gnome-system-monitor"
-                    "gvfs")))
+                    "gvfs"
+                    ;; spice-gtk provides polkit actions for USB redirection
+                    ;; in GNOME Boxes.
+                    ("gnome-boxes" "spice-gtk"))))
 
 (define gnome-desktop-service-type
   (service-type
-- 
2.39.1