From 7a2413e46d7651e673dc536d5396cf96f85d452b Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Wed, 24 Feb 2016 23:08:58 +0100 Subject: gnu: services: Add GNOME and XFCE desktop services. * gnu/services/desktop.scm (package-direct-input-selector): New function. (, gnome-desktop-service-type) (, xfce-desktop-service-type): New variables. (gnome-desktop-service, xfce-desktop-service): New public variables. * doc/guix.texi (Desktop Services): Document new variables. --- doc/guix.texi | 56 +++++++++++++++++++++++++++++++++++++--- gnu/services/desktop.scm | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+), 3 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 112c32939d..438189fb34 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -7474,7 +7474,8 @@ makes the good ol' XlockMore usable. The @code{(gnu services desktop)} module provides services that are usually useful in the context of a ``desktop'' setup---that is, on a machine running a graphical display server, possibly with graphical user -interfaces, etc. +interfaces, etc. It also defines services that provide specific desktop +environments like GNOME and XFCE. To simplify things, the module defines a variable containing the set of services that users typically expect on a machine with a graphical @@ -7499,8 +7500,57 @@ The @var{%desktop-services} variable can be used as the @code{services} field of an @code{operating-system} declaration (@pxref{operating-system Reference, @code{services}}). -The actual service definitions provided by @code{(gnu services dbus)} -and @code{(gnu services desktop)} are described below. +Additionally, the @code{gnome-desktop-service} and +@code{xfce-desktop-service} procedures can add GNOME and/or XFCE to a +system. To ``add GNOME'' means that system-level services like the +backlight adjustment helpers and the power management utilities are +added to the system, extending @code{polkit} and @code{dbus} +appropriately, allowing GNOME to operate with elevated privileges on a +limited number of special-purpose system interfaces. Additionally, +adding a service made by @code{gnome-desktop-service} adds the GNOME +metapackage to the system profile. Likewise, adding the XFCE service +not only adds the @code{xfce} metapackage to the system profile, but it +also gives the Thunar file manager the ability to open a ``root-mode'' +file management window, if the user authenticates using the +administrator's password via the standard polkit graphical interface. + +@deffn {Scheme Procedure} gnome-desktop-service +Return a service that adds the @code{gnome} package to the system +profile, and extends polkit with the actions from +@code{gnome-settings-daemon}. +@end deffn + +@deffn {Scheme Procedure} xfce-desktop-service +Return a service that adds the @code{xfce} package to the system profile, +and extends polkit with the abilit for @code{thunar} to manipulate the +file system as root from within a user session, after the user has +authenticated with the administrator's password. +@end deffn + +Because the GNOME and XFCE desktop services pull in so many packages, +the default @code{%desktop-services} variable doesn't include either of +them by default. To add GNOME or XFCE, just @code{cons} them onto +@code{%desktop-services} in the @code{services} field of your +@code{operating-system}: + +@example +(use-modules (gnu)) +(use-service-modules desktop) +(operating-system + ... + ;; cons* adds items to the list given as its last argument. + (services (cons* (gnome-desktop-service) + (xfce-desktop-service) + %desktop-services)) + ...) +@end example + +These desktop environments will then be available as options in the +graphical login window. + +The actual service definitions included in @code{%desktop-services} and +provided by @code{(gnu services dbus)} and @code{(gnu services desktop)} +are described below. @deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()] Return a service that runs the ``system bus'', using @var{dbus}, with diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm index c20569ffde..f427d35777 100644 --- a/gnu/services/desktop.scm +++ b/gnu/services/desktop.scm @@ -32,6 +32,7 @@ #:use-module (gnu packages admin) #:use-module (gnu packages freedesktop) #:use-module (gnu packages gnome) + #:use-module (gnu packages xfce) #:use-module (gnu packages avahi) #:use-module (gnu packages polkit) #:use-module (gnu packages xdisorg) @@ -51,6 +52,8 @@ polkit-service elogind-configuration elogind-service + gnome-desktop-service + xfce-desktop-service %desktop-services)) ;;; Commentary: @@ -67,6 +70,11 @@ (define (bool value) (if value "true\n" "false\n")) +(define (package-direct-input-selector input) + (lambda (package) + (match (assoc-ref (package-direct-inputs package) input) + ((package . _) package)))) + (define (wrapped-dbus-service service program variable value) "Return a wrapper for @var{service}, a package containing a D-Bus service, @@ -695,6 +703,64 @@ types (graphical, console, remote, etc.). It can also clean up after users when they log out." (service elogind-service-type config)) + +;;; +;;; GNOME desktop service. +;;; + +(define-record-type* gnome-desktop-configuration + make-gnome-desktop-configuration + gnome-desktop-configuration + (gnome-package gnome-package (default gnome))) + +(define gnome-desktop-service-type + (service-type + (name 'gnome-desktop) + (extensions + (list (service-extension polkit-service-type + (compose list + (package-direct-input-selector + "gnome-settings-daemon") + gnome-package)) + (service-extension profile-service-type + (compose list + gnome-package)))))) + +(define* (gnome-desktop-service #:key (config (gnome-desktop-configuration))) + "Return a service that adds the @code{gnome} package to the system profile, +and extends polkit with the actions from @code{gnome-settings-daemon}." + (service gnome-desktop-service-type config)) + + +;;; +;;; XFCE desktop service. +;;; + +(define-record-type* xfce-desktop-configuration + make-xfce-desktop-configuration + xfce-desktop-configuration + (xfce xfce-package (default xfce))) + +(define xfce-desktop-service-type + (service-type + (name 'xfce-desktop) + (extensions + (list (service-extension polkit-service-type + (compose list + (package-direct-input-selector + "thunar") + xfce-package)) + (service-extension profile-service-type + (compose list + xfce-package)))))) + +(define* (xfce-desktop-service #:key (config (xfce-desktop-configuration))) + "Return a service that adds the @code{xfce} package to the system profile, +and extends polkit with the abilit for @code{thunar} to manipulate the file +system as root from within a user session, after the user has authenticated +with the administrator's password." + (service xfce-desktop-service-type config)) + ;;; ;;; The default set of desktop services. -- cgit v1.2.3