Message ID | 20221011195430.26160-1-paren@disroot.org |
---|---|
State | Accepted |
Headers | show |
Series | gnu: home: Add home-dbus-service-type. | expand |
Context | Check | Description |
---|---|---|
cbaines/comparison | success | View comparision |
cbaines/git-branch | success | View Git branch |
cbaines/applying patch | success | View Laminar job |
cbaines/issue | success | View issue |
Hi unmatched-paren! Thank you for the patch, it looks good and I think can be merged in the way it is right now, but I wrote a few minor notes/nitpicks below. On 2022-10-11 20:54, "\( via Guix-patches" via wrote: > * gnu/home/services/desktop.scm (home-dbus-service-type): New > variable. > (home-dbus-configuration): New record type. > * doc/guix.texi: Document them. > --- > doc/guix.texi | 17 ++++++++++++ > gnu/home/services/desktop.scm | 52 ++++++++++++++++++++++++++++++++++- > 2 files changed, 68 insertions(+), 1 deletion(-) > > diff --git a/doc/guix.texi b/doc/guix.texi > index 5867acb746..990113703b 100644 > --- a/doc/guix.texi > +++ b/doc/guix.texi > @@ -41262,6 +41262,23 @@ format. > > @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. > + > +@item @code{verbose?} (default: @code{#f}) > +Whether to enable logging. > +@end table > +@end deftp > + > @node Guix Home Services > @subsection Guix Home Services > > diff --git a/gnu/home/services/desktop.scm b/gnu/home/services/desktop.scm > index b0f4d969b0..4cf151762d 100644 > --- a/gnu/home/services/desktop.scm > +++ b/gnu/home/services/desktop.scm > @@ -1,5 +1,6 @@ > ;;; GNU Guix --- Functional package management for GNU > ;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org> > +;;; Copyright © 2022 ( <paren@disroot.org> > ;;; > ;;; 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 shepherd) > #:use-module (gnu services configuration) > + #:autoload (gnu packages glib) (dbus) > #:autoload (gnu packages xdisorg) (redshift) > #:use-module (guix records) > #:use-module (guix gexp) > @@ -27,8 +29,10 @@ (define-module (gnu home services desktop) > #:use-module (ice-9 match) > #:export (home-redshift-configuration > home-redshift-configuration? > + home-redshift-service-type > > - home-redshift-service-type)) > + home-dbus-configuration > + home-dbus-service-type)) > > > ;;; > @@ -172,3 +176,49 @@ (define home-redshift-service-type > (description > "Run Redshift, a program that adjusts the color temperature of display > 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)) > + (verbose? home-dbus-verbose? ;boolean Sounds a little missleading as it doesn't control the verbosity of logging, but the logging as a whole. Also, does logging to file work at all when --syslog-only option provided? > + (default #f))) > + > +(define (home-dbus-shepherd-services config) > + (list (shepherd-service > + (documentation "Run the D-Bus daemon in session-specific mode.") > + (provision '(dbus-session)) > + (start #~(make-forkexec-constructor > + (list #$(file-append (home-dbus-dbus config) > + "/bin/dbus-daemon") > + "--nofork" "--session" "--syslog-only" > + (format #f "--address=unix:path=~a/bus" > + (or (getenv "XDG_RUNTIME_DIR") > + (format #f "/run/user/~a" > + (getuid))))) > + #$@(if (home-dbus-verbose? config) > + (list #:environment-variables > + #~(list "DBUS_VERBOSE=1") > + #:log-file > + (format #f "~a/dbus-daemon.log" > + (or (getenv "XDG_LOG_HOME") > + (format #f "~a/.local/var/log" > + (getenv "HOME"))))) > + '()))) > + (stop #~(make-kill-destructor))))) > + > +(define home-dbus-service-type > + (service-type > + (name 'home-dbus) > + (extensions > + (list (service-extension home-shepherd-service-type > + home-dbus-shepherd-services))) Do we want to extend environment-variables with --8<---------------cut here---------------start------------->8--- '(("DBUS_SESSION_BUS_ADDRESS" . "unix:path=$XDG_RUNTIME_DIR/bus")) --8<---------------cut here---------------end--------------->8--- ? > + (default-value (home-dbus-configuration)) > + (description > + "Run the session-specific D-Bus inter-process message bus.")))
Hi Andrew, On Wed Oct 12, 2022 at 8:25 AM BST, Andrew Tropin wrote: > Sounds a little missleading as it doesn't control the verbosity of > logging, but the logging as a whole. > > Also, does logging to file work at all when --syslog-only option > provided? The system D-Bus service uses ``verbose?'' to turn on logging, and I wanted to keep it consistent. I'm not sure whether ``--syslog-only'' stops logging to the log file, but since system D-Bus uses the flag too, I assumed it doesn't. > Do we want to extend environment-variables with > > --8<---------------cut here---------------start------------->8--- > '(("DBUS_SESSION_BUS_ADDRESS" . "unix:path=$XDG_RUNTIME_DIR/bus")) > --8<---------------cut here---------------end--------------->8--- > > ? Oh, I didn't know about that variable. I'll add that, one moment :) -- (
On 2022-10-12 08:53, ( wrote: > Hi Andrew, > > On Wed Oct 12, 2022 at 8:25 AM BST, Andrew Tropin wrote: >> Sounds a little missleading as it doesn't control the verbosity of >> logging, but the logging as a whole. >> >> Also, does logging to file work at all when --syslog-only option >> provided? > > The system D-Bus service uses ``verbose?'' to turn on logging, and > I wanted to keep it consistent. > I'm not sure whether ``--syslog-only'' stops logging to the log file, > but since system D-Bus uses the flag too, I assumed it doesn't. Can you check it, please? Also, I don't think that we want session dbus output in /var/log/messages and probably we don't need this verbose? field at all and always want to use log-file. > >> Do we want to extend environment-variables with >> >> --8<---------------cut here---------------start------------->8--- >> '(("DBUS_SESSION_BUS_ADDRESS" . "unix:path=$XDG_RUNTIME_DIR/bus")) >> --8<---------------cut here---------------end--------------->8--- >> >> ? > > Oh, I didn't know about that variable. I'll add that, one moment :) Actually, it was a question :) It shouldn't break anything and hardcoding this variable should work in most cases, so I think we can keep it for now. > > > -- (
On Wed Oct 12, 2022 at 11:37 AM BST, Andrew Tropin wrote: > Also, I don't think that we want session dbus output in > /var/log/messages and probably we don't need this verbose? field at all > and always want to use log-file. Fair enough; I'll remove ``verbose?'' and add ``--nosyslog''. -- (
diff --git a/doc/guix.texi b/doc/guix.texi index 5867acb746..990113703b 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -41262,6 +41262,23 @@ format. @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. + +@item @code{verbose?} (default: @code{#f}) +Whether to enable logging. +@end table +@end deftp + @node Guix Home Services @subsection Guix Home Services diff --git a/gnu/home/services/desktop.scm b/gnu/home/services/desktop.scm index b0f4d969b0..4cf151762d 100644 --- a/gnu/home/services/desktop.scm +++ b/gnu/home/services/desktop.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2022 ( <paren@disroot.org> ;;; ;;; 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 shepherd) #:use-module (gnu services configuration) + #:autoload (gnu packages glib) (dbus) #:autoload (gnu packages xdisorg) (redshift) #:use-module (guix records) #:use-module (guix gexp) @@ -27,8 +29,10 @@ (define-module (gnu home services desktop) #:use-module (ice-9 match) #:export (home-redshift-configuration home-redshift-configuration? + home-redshift-service-type - home-redshift-service-type)) + home-dbus-configuration + home-dbus-service-type)) ;;; @@ -172,3 +176,49 @@ (define home-redshift-service-type (description "Run Redshift, a program that adjusts the color temperature of display 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)) + (verbose? home-dbus-verbose? ;boolean + (default #f))) + +(define (home-dbus-shepherd-services config) + (list (shepherd-service + (documentation "Run the D-Bus daemon in session-specific mode.") + (provision '(dbus-session)) + (start #~(make-forkexec-constructor + (list #$(file-append (home-dbus-dbus config) + "/bin/dbus-daemon") + "--nofork" "--session" "--syslog-only" + (format #f "--address=unix:path=~a/bus" + (or (getenv "XDG_RUNTIME_DIR") + (format #f "/run/user/~a" + (getuid))))) + #$@(if (home-dbus-verbose? config) + (list #:environment-variables + #~(list "DBUS_VERBOSE=1") + #:log-file + (format #f "~a/dbus-daemon.log" + (or (getenv "XDG_LOG_HOME") + (format #f "~a/.local/var/log" + (getenv "HOME"))))) + '()))) + (stop #~(make-kill-destructor))))) + +(define home-dbus-service-type + (service-type + (name 'home-dbus) + (extensions + (list (service-extension home-shepherd-service-type + home-dbus-shepherd-services))) + (default-value (home-dbus-configuration)) + (description + "Run the session-specific D-Bus inter-process message bus.")))