gnu: home: Add home-dbus-service-type.

* gnu/home/services/desktop.scm (home-dbus-service-type): New variable.
(home-dbus-configuration): New record type.
* doc/guix.texi: Document them.

Signed-off-by: Andrew Tropin <andrew@trop.in>
This commit is contained in:
( via Guix-patches via 2022-10-12 21:21:39 +01:00 committed by Andrew Tropin
parent 4bc5383b3b
commit 4ab434958b
No known key found for this signature in database
GPG key ID: 2208D20958C1DEB0
2 changed files with 67 additions and 1 deletions

View file

@ -41262,6 +41262,20 @@ format.
@end deftp @end deftp
@defvr {Scheme Variable} home-dbus-service-type
This is the service type for running a session-specific D-Bus, for
unprivileged applications that require D-Bus to be running.
@end defvr
@deftp {Data Type} home-dbus-configuration
The configuration record for @code{home-dbus-service-type}.
@table @asis
@item @code{dbus} (default: @code{dbus})
The package providing the @code{/bin/dbus-daemon} command.
@end table
@end deftp
@node Guix Home Services @node Guix Home Services
@subsection Guix Home Services @subsection Guix Home Services

View file

@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2022 ( <paren@disroot.org>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -20,6 +21,7 @@ (define-module (gnu home services desktop)
#:use-module (gnu home services) #:use-module (gnu home services)
#:use-module (gnu home services shepherd) #:use-module (gnu home services shepherd)
#:use-module (gnu services configuration) #:use-module (gnu services configuration)
#:autoload (gnu packages glib) (dbus)
#:autoload (gnu packages xdisorg) (redshift) #:autoload (gnu packages xdisorg) (redshift)
#:use-module (guix records) #:use-module (guix records)
#:use-module (guix gexp) #:use-module (guix gexp)
@ -27,8 +29,10 @@ (define-module (gnu home services desktop)
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:export (home-redshift-configuration #:export (home-redshift-configuration
home-redshift-configuration? home-redshift-configuration?
home-redshift-service-type
home-redshift-service-type)) home-dbus-configuration
home-dbus-service-type))
;;; ;;;
@ -172,3 +176,51 @@ (define home-redshift-service-type
(description (description
"Run Redshift, a program that adjusts the color temperature of display "Run Redshift, a program that adjusts the color temperature of display
according to time of day."))) according to time of day.")))
;;;
;;; D-Bus.
;;;
(define-record-type* <home-dbus-configuration>
home-dbus-configuration make-home-dbus-configuration
home-dbus-configuration?
(dbus home-dbus-dbus ;file-like
(default dbus)))
(define (home-dbus-shepherd-services config)
(list (shepherd-service
(documentation "Run the D-Bus daemon in session-specific mode.")
(provision '(dbus))
(start #~(make-forkexec-constructor
(list #$(file-append (home-dbus-dbus config)
"/bin/dbus-daemon")
"--nofork" "--session"
(format #f "--address=unix:path=~a/bus"
(or (getenv "XDG_RUNTIME_DIR")
(format #f "/run/user/~a"
(getuid)))))
#:environment-variables
#~(list "DBUS_VERBOSE=1")
#:log-file
(format #f "~a/dbus.log"
(or (getenv "XDG_LOG_HOME")
(format #f "~a/.local/var/log"
(getenv "HOME"))))))
(stop #~(make-kill-destructor)))))
(define (home-dbus-environment-variables config)
'(("DBUS_SESSION_BUS_ADDRESS"
. "unix:path=${XDG_RUNTIME_DIR:-/run/user/$UID}/bus")))
(define home-dbus-service-type
(service-type
(name 'home-dbus)
(extensions
(list (service-extension home-shepherd-service-type
home-dbus-shepherd-services)
(service-extension home-environment-variables-service-type
home-dbus-environment-variables)))
(default-value (home-dbus-configuration))
(description
"Run the session-specific D-Bus inter-process message bus.")))