@@ -37,6 +37,7 @@ (define-module (gnu services desktop)
#:use-module (gnu services)
#:use-module (gnu services shepherd)
#:use-module (gnu services base)
+ #:use-module (gnu services configuration)
#:use-module (gnu services dbus)
#:use-module (gnu services avahi)
#:use-module (gnu services xorg)
@@ -56,10 +57,16 @@ (define-module (gnu services desktop)
#:use-module (gnu packages admin)
#:use-module (gnu packages cups)
#:use-module (gnu packages freedesktop)
+ #:use-module (gnu packages fonts)
+ #:use-module (gnu packages geo)
+ #:use-module (gnu packages gstreamer)
+ #:use-module (gnu packages gtk)
#:use-module (gnu packages gnome)
+ #:use-module (gnu packages gnupg)
#:use-module (gnu packages kde)
#:use-module (gnu packages kde-frameworks)
#:use-module (gnu packages kde-plasma)
+ #:use-module (gnu packages pulseaudio)
#:use-module (gnu packages xfce)
#:use-module (gnu packages avahi)
#:use-module (gnu packages xdisorg)
@@ -73,6 +80,7 @@ (define-module (gnu services desktop)
#:use-module (gnu packages nfs)
#:use-module (gnu packages enlightenment)
#:use-module (guix deprecation)
+ #:use-module (guix diagnostics)
#:use-module (guix records)
#:use-module (guix packages)
#:use-module (guix store)
@@ -81,6 +89,7 @@ (define-module (gnu services desktop)
#:use-module (guix gexp)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
+ #:use-module (srfi srfi-35)
#:use-module (ice-9 format)
#:use-module (ice-9 match)
#:export (<upower-configuration>
@@ -137,8 +146,16 @@ (define-module (gnu services desktop)
cups-pk-helper-service-type
sane-service-type
+ %gnome-core-services
+ %gnome-core-shell
+ %gnome-core-utilities
+ %gnome-essential-extras
gnome-desktop-configuration
gnome-desktop-configuration?
+ gnome-desktop-configuration-core-services
+ gnome-desktop-configuration-shell
+ gnome-desktop-configuration-utilities
+ gnome-desktop-configuration-extra-packages
gnome-desktop-service
gnome-desktop-service-type
@@ -1382,11 +1399,100 @@ (define sane-service-type
;;; GNOME desktop service.
;;;
-(define-record-type* <gnome-desktop-configuration> gnome-desktop-configuration
- make-gnome-desktop-configuration
- gnome-desktop-configuration?
- (gnome gnome-desktop-configuration-gnome
- (default gnome)))
+(define %gnome-core-services
+ (list accountsservice network-manager packagekit upower))
+
+(define %gnome-core-shell
+ (list gdm
+ gnome-backgrounds
+ gnome-bluetooth
+ gnome-color-manager
+ gnome-desktop
+ gnome-initial-setup
+ gnome-keyring
+ gnome-menus
+ gnome-session
+ gnome-settings-daemon
+ gnome-shell-extensions
+ gnome-shell
+ gnome-user-docs
+ gnome-user-share
+ gvfs
+ mutter
+ orca
+ rygel
+ sushi
+ adwaita-icon-theme
+ glib-networking
+ gsettings-desktop-schemas))
+
+(define %gnome-core-utilities
+ (list baobab
+ cheese
+ eog
+ epiphany
+ evince
+ file-roller
+ gnome-calculator
+ gnome-calendar
+ gnome-characters
+ gnome-clocks
+ gnome-console
+ gnome-contacts
+ gnome-disk-utility
+ gnome-font-viewer
+ gnome-maps
+ gnome-music
+ gnome-photos
+ gnome-screenshot
+ gnome-system-monitor
+ gnome-text-editor
+ gnome-weather
+ nautilus
+ simple-scan
+ totem
+ tracker-miners
+ xdg-desktop-portal-gnome
+ yelp))
+
+(define %gnome-essential-extras
+ (list at-spi2-core
+ dbus
+ dconf
+ desktop-file-utils
+ font-abattis-cantarell
+ font-dejavu
+ gnome-default-applications ; XXX: Allow customization by records
+ gst-plugins-base
+ gst-plugins-good
+ gucharmap
+ pinentry-gnome3
+ pulseaudio ; XXX: Replace with pipewire
+ shared-mime-info
+ system-config-printer
+ xdg-user-dirs
+ zenity))
+
+(define-maybe/no-serialization package)
+
+(define-configuration/no-serialization gnome-desktop-configuration
+ (core-services
+ (list-of-packages %gnome-core-services)
+ "A list of packages that the GNOME Shell and applications may rely on.")
+ (shell
+ (list-of-packages %gnome-core-shell)
+ "A list of packages that constitute the GNOME Shell, without applications.")
+ (utilities
+ (list-of-packages %gnome-core-utilities)
+ "A list of packages that serve as applications to use on top of the \
+GNOME Shell.")
+ (gnome (maybe-package) "Deprecated. Do not use.")
+ (extra-packages
+ (list-of-packages %gnome-essential-extras)
+ "A list of GNOME-adjacent packages to also include. This field is intended
+for users to add their own packages to their GNOME experience. Note, that it
+already includes some packages that are considered essential by some (most?)
+GNOME users."))
(define (gnome-package gnome name)
"Return the package NAME among the GNOME package inputs. NAME can be a
@@ -1400,18 +1506,56 @@ (define (gnome-packages gnome names)
(define (gnome-udev-rules config)
"Return the list of GNOME dependencies that provide udev rules."
- (let ((gnome (gnome-desktop-configuration-gnome config)))
- (gnome-packages gnome '("gnome-settings-daemon"))))
+ (let* ((gnome (gnome-desktop-configuration-gnome config))
+ (shell (gnome-desktop-configuration-shell config)))
+ (or (any (match-lambda
+ ((and pkg (= package-name "gnome-settings-daemon"))
+ (list pkg))
+ (_ #f))
+ shell)
+ (and (maybe-value-set? gnome)
+ (gnome-packages gnome '("gnome-settings-daemon")))
+ (raise
+ (condition
+ (&error-location
+ (location (gnome-desktop-configuration-source-location config)))
+ (&message (message (G_ "Missing gnome-settings-daemon"))))))))
(define (gnome-polkit-settings config)
"Return the list of GNOME dependencies that provide polkit actions and
rules."
- (let ((gnome (gnome-desktop-configuration-gnome config)))
- (gnome-packages gnome
- '("gnome-settings-daemon"
- "gnome-control-center"
- "gnome-system-monitor"
- "gvfs"))))
+ (let ((gnome (gnome-desktop-configuration-gnome config))
+ (shell (gnome-desktop-configuration-shell config)))
+ (or (any (match-lambda ((and pkg (= package-name "gvfs")) (list pkg))
+ (_ #f))
+ shell)
+ (and (maybe-value-set? gnome)
+ (gnome-packages gnome
+ '("gnome-settings-daemon"
+ "gnome-control-center"
+ "gnome-system-monitor"
+ "gvfs")))
+ (raise
+ (condition
+ (&error-location
+ (location (gnome-desktop-configuration-source-location config)))
+ (&message (message (G_ "Missing gvfs"))))))))
+
+(define (gnome-profile config)
+ "Return a list of packages propagated through CONFIG."
+ (append
+ (gnome-desktop-configuration-core-services config)
+ (gnome-desktop-configuration-shell config)
+ (gnome-desktop-configuration-utilities config)
+ (let ((gnome-meta (gnome-desktop-configuration-gnome config)))
+ (if (maybe-value-set? gnome-meta)
+ (begin
+ (warning
+ (gnome-desktop-configuration-source-location config)
+ (G_ "Using a meta-package for gnome-desktop is discouraged.~%"))
+ (list gnome-meta))
+ (list)))
+ (gnome-desktop-configuration-extra-packages config)))
(define gnome-desktop-service-type
(service-type
@@ -1422,7 +1566,7 @@ (define gnome-desktop-service-type
(service-extension polkit-service-type
gnome-polkit-settings)
(service-extension profile-service-type
- (compose list gnome-desktop-configuration-gnome))))
+ gnome-profile)))
(default-value (gnome-desktop-configuration))
(description "Run the GNOME desktop environment.")))