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.
This commit is contained in:
Andy Wingo 2016-02-24 23:08:58 +01:00
parent 20095cc513
commit 7a2413e46d
2 changed files with 119 additions and 3 deletions

View file

@ -7474,7 +7474,8 @@ makes the good ol' XlockMore usable.
The @code{(gnu services desktop)} module provides services that are The @code{(gnu services desktop)} module provides services that are
usually useful in the context of a ``desktop'' setup---that is, on a usually useful in the context of a ``desktop'' setup---that is, on a
machine running a graphical display server, possibly with graphical user 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 To simplify things, the module defines a variable containing the set of
services that users typically expect on a machine with a graphical 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 field of an @code{operating-system} declaration (@pxref{operating-system
Reference, @code{services}}). Reference, @code{services}}).
The actual service definitions provided by @code{(gnu services dbus)} Additionally, the @code{gnome-desktop-service} and
and @code{(gnu services desktop)} are described below. @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 '()] @deffn {Scheme Procedure} dbus-service [#:dbus @var{dbus}] [#:services '()]
Return a service that runs the ``system bus'', using @var{dbus}, with Return a service that runs the ``system bus'', using @var{dbus}, with

View file

@ -32,6 +32,7 @@ (define-module (gnu services desktop)
#:use-module (gnu packages admin) #:use-module (gnu packages admin)
#:use-module (gnu packages freedesktop) #:use-module (gnu packages freedesktop)
#:use-module (gnu packages gnome) #:use-module (gnu packages gnome)
#:use-module (gnu packages xfce)
#:use-module (gnu packages avahi) #:use-module (gnu packages avahi)
#:use-module (gnu packages polkit) #:use-module (gnu packages polkit)
#:use-module (gnu packages xdisorg) #:use-module (gnu packages xdisorg)
@ -51,6 +52,8 @@ (define-module (gnu services desktop)
polkit-service polkit-service
elogind-configuration elogind-configuration
elogind-service elogind-service
gnome-desktop-service
xfce-desktop-service
%desktop-services)) %desktop-services))
;;; Commentary: ;;; Commentary:
@ -67,6 +70,11 @@ (define-module (gnu services desktop)
(define (bool value) (define (bool value)
(if value "true\n" "false\n")) (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) (define (wrapped-dbus-service service program variable value)
"Return a wrapper for @var{service}, a package containing a D-Bus service, "Return a wrapper for @var{service}, a package containing a D-Bus service,
@ -695,6 +703,64 @@ (define* (elogind-service #:key (config (elogind-configuration)))
when they log out." when they log out."
(service elogind-service-type config)) (service elogind-service-type config))
;;;
;;; 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. ;;; The default set of desktop services.