Subject: [PATCH] services: Add gvfs-service-type.

From: [email-masked]
Date: Mon, 22 Apr 2024 20:42:13 +0800

From: 宋文武 <[email-masked]>

* gnu/services/desktop.scm (gvfs-service-type): New variable.
(gvfs-configuration, make-gvfs-configuration, gvfs-configuration?,
gvfs-package): New procedures.
(<gvfs-configuration>): New record.
* doc/guix.texi (Desktop Services): Document it.

Change-Id: I584819500e2ce7d2b14e57dac238a96e9888e75e
---
 doc/guix.texi            | 19 +++++++++++++++++++
 gnu/services/desktop.scm | 28 ++++++++++++++++++++++++++++
 2 files changed, 47 insertions(+)

diff --git a/doc/guix.texi b/doc/guix.texi
index 65af136e61..8a31bff121 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -24942,6 +24942,25 @@ Desktop Services
 @end table
 @end deftp
 
+@defvar gvfs-service-type
+Type for the service that provides virtual file systems for GIO
+applicaitons, which enables support for @code{trash:///}, @code{ftp://},
+@code{sftp://} and many other location schemas in file managers like
+Nautilus (GNOME Files) and Thunar.
+
+The value for this service is a @code{<gvfs-configuration>} object.
+@end defvar
+
+@deftp {Data Type} gvfs-configuration
+Data type representing the configuration for @code{gvfs-service-type}.
+
+@table @asis
+@item @code{gvfs} (default: @code{gvfs}) (type: file-like)
+Package object for GVfs.
+
+@end table
+@end deftp
+
 @defvar colord-service-type
 This is the type of the service that runs @command{colord}, a system
 service with a D-Bus
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 02a7802d58..d0b9728d4a 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -109,6 +109,10 @@ (define-module (gnu services desktop)
             udisks-service  ; deprecated
             udisks-service-type
 
+            gvfs-configuration
+            gvfs-configuration?
+            gvfs-service-type
+
             colord-service-type
 
             geoclue-application
@@ -989,6 +993,30 @@ (define-deprecated (udisks-service #:key (udisks udisks))
   (service udisks-service-type
            (udisks-configuration (udisks udisks))))
 
+
+
+;;;
+;;; GVfs virtual file system.
+;;;
+
+(define-record-type* <gvfs-configuration>
+  gvfs-configuration make-gvfs-configuration
+  gvfs-configuration?
+  (gvfs gvfs-package (default gvfs)))
+
+(define gvfs-service-type
+  (service-type (name 'gvfs)
+                (extensions
+                 (list
+                  (service-extension profile-service-type
+                                     (compose list gvfs-package))
+                  ;; Required for gvfs-udisks2-volume-monitor.
+                  (service-extension udisks-service-type (const #t))))
+                (description
+                 "Make GVfs virtual file systems (Trash, SFTP, SMB, HTTP,
+and many other) available for GIO applications.")
+                (default-value (gvfs-configuration))))
+
 
 ;;;
 ;;; Elogind login and seat management service.

base-commit: af4db17122d759705f3fd0ab03ef36c76ec90338
-- 
2.41.0