aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@igalia.com>2016-02-24 23:08:58 +0100
committerAndy Wingo <wingo@igalia.com>2016-03-15 21:03:27 +0100
commit7a2413e46d7651e673dc536d5396cf96f85d452b (patch)
treea026f580952b7ab8863f3b4054c0b9bed2b0e66e
parent20095cc5139666fe67b3ae76b3f46ff85e4956bb (diff)
downloadpatches-7a2413e46d7651e673dc536d5396cf96f85d452b.tar
patches-7a2413e46d7651e673dc536d5396cf96f85d452b.tar.gz
gnu: services: Add GNOME and XFCE desktop services.
* gnu/services/desktop.scm (package-direct-input-selector): New function. (<gnome-desktop-configuration>, gnome-desktop-service-type) (<xfce-desktop-configuration>, xfce-desktop-service-type): New variables. (gnome-desktop-service, xfce-desktop-service): New public variables. * doc/guix.texi (Desktop Services): Document new variables.
-rw-r--r--doc/guix.texi56
-rw-r--r--gnu/services/desktop.scm66
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,
@@ -697,6 +705,64 @@ when they log out."
;;;
+;;; GNOME desktop service.
+;;;
+
+(define-record-type* <gnome-desktop-configuration> 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> 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.
;;;