Subject: [bug#68716] [PATCH gnome-team v4 1/7] gnu: Split gnome into more meta-packages.

From: Maxim Cournoyer <[email-masked]>
Date: Fri, 16 Feb 2024 14:44:27 -0500

Hi,

Liliana Marie Prikler <[email-masked]> writes:

> * gnu/packages/gnome.scm (gnome-meta-package): New syntax rule.
> (gnome-meta-core-services, gnome-meta-core-shell, gnome-meta-core-utilities)
> (gnome-essential-extras): New variables.
> (gnome): Implement in terms of the former.
> ---
>  gnu/packages/gnome.scm | 179 ++++++++++++++++++++++++-----------------
>  1 file changed, 105 insertions(+), 74 deletions(-)
>
> diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
> index 7397148c2b..4fde75f612 100644
> --- a/gnu/packages/gnome.scm
> +++ b/gnu/packages/gnome.scm
> @@ -10154,52 +10154,76 @@ (define-public gnome-weather
>      (home-page "https://wiki.gnome.org/Apps/Weather")
>      (license license:gpl2+)))
>  
> -(define-public gnome
> +(define-syntax-rule (gnome-meta-package %name propagate)

It'd be nice to allow any kind of extra fields to be appended to the
package definition, as done e.g. for the make-openjdk syntax.

>    (package
> -    (name "gnome")
> +    (name %name)

Nitpick: I'd use name*, as %name is often associated with globals in Guix.

>      (version (package-version gnome-shell))
>      (source #f)
>      (build-system trivial-build-system)
> -    (arguments '(#:builder (begin (mkdir %output) #t)))
> -    (propagated-inputs
> -     `(,@(if (string-prefix? "x86_64" (%current-system))
> -             ;; XXX: EoG requires librsvg-next, which depends on Rust, which currently
> -             ;; only works on x86_64, so exclude it on other architectures.
> -             (list eog)
> -             '())
> -       ,@(list
> -          ;; GNOME-Core-OS-Services.
> -          accountsservice
> -          network-manager
> -          packagekit
> -          upower
> -          ;; GNOME-Core-Shell.
> -          adwaita-icon-theme
> -          gdm
> -          glib-networking
> -          gnome-backgrounds
> -          gnome-bluetooth
> -          gnome-color-manager
> -          gnome-control-center
> -          gnome-desktop
> -          gnome-initial-setup
> -          gnome-keyring
> -          gnome-menus
> -          gnome-session
> -          gnome-settings-daemon
> -          gnome-shell
> -          gnome-shell-extensions
> -          gnome-themes-extra
> -          gnome-user-docs
> -          gnome-user-share
> -          gsettings-desktop-schemas
> -          gvfs
> -          mutter
> -          orca
> -          rygel
> -          sushi
> -          ;; GNOME-Core-Utilities.
> -          baobab
> +    (arguments
> +     (list #:builder
> +           #~(begin
> +               (format (current-warning-port)
> +                       "Building ~a is useless.  \
> +Refer to its propagated inputs instead.\n"
> +                       #$name)
> +               (mkdir #$output))))
> +    (propagated-inputs propagate)
> +    (home-page "https://www.gnome.org")
> +    (synopsis "The GNU desktop environment")
> +    (description
> +     "GNOME is the graphical desktop for GNU.  It includes a wide variety of

I think it's misleading to associate GNOME with GNU at this point in
time.  They aren't even a GNU project anymore.

> +applications for browsing the web, editing text and images, creating
> +documents and diagrams, playing media, scanning, and much more.")
> +    (license license:gpl2+)
> +    (properties `((hidden? . #t)))))
> +
> +(define-public gnome-meta-core-services
> +  (gnome-meta-package
> +   "gnome-meta-core-services"
> +   (list accountsservice
> +         network-manager
> +         packagekit
> +         upower)))
> +
> +(define-public gnome-meta-core-shell
> +  (gnome-meta-package
> +   "gnome-meta-core-shell"
> +   (list adwaita-icon-theme
> +         gdm
> +         glib-networking
> +         gnome-backgrounds
> +         gnome-bluetooth
> +         gnome-color-manager
> +         gnome-control-center
> +         gnome-desktop
> +         gnome-initial-setup
> +         gnome-keyring
> +         gnome-menus
> +         gnome-session
> +         gnome-settings-daemon
> +         gnome-shell
> +         gnome-shell-extensions
> +         gnome-themes-extra
> +         gnome-user-docs
> +         gnome-user-share
> +         gsettings-desktop-schemas
> +         gvfs
> +         mutter
> +         orca
> +         rygel
> +         sushi)))
> +
> +(define-public gnome-meta-core-utilities
> +  (gnome-meta-package
> +   "gnome-meta-core-utilities"
> +   (append
> +    ;; XXX: EoG requires librsvg-next, which depends on Rust, which currently
> +    ;; only works on x86_64, so exclude it on other architectures.
> +    (if (string-prefix? "x86_64" (%current-system))
> +        (list eog)
> +        '())
> +    (list baobab
>            cheese
>            epiphany
>            evince
> @@ -10224,38 +10248,45 @@ (define-public gnome
>            totem
>            tracker-miners
>            xdg-desktop-portal-gnome
> -          yelp
> -          ;; Others.
> -          gnome-online-accounts
> -          hicolor-icon-theme
> -
> -          ;; Packages not part of GNOME proper but that are needed for a good
> -          ;; experience.  See <https://bugs.gnu.org/39646>.
> -          ;; XXX: Find out exactly which ones are needed and why.
> -          at-spi2-core
> -          dbus
> -          dconf
> -          desktop-file-utils
> -          font-abattis-cantarell
> -          font-dejavu
> -          gnome-default-applications
> -          gst-plugins-base
> -          gst-plugins-good
> -          gucharmap
> -          pinentry-gnome3
> -          pulseaudio
> -          shared-mime-info
> -          system-config-printer
> -          xdg-user-dirs
> -          yelp
> -          zenity)))
> -    (synopsis "The GNU desktop environment")
> -    (home-page "https://www.gnome.org/")
> -    (description
> -     "GNOME is the graphical desktop for GNU.  It includes a wide variety of
> -applications for browsing the web, editing text and images, creating
> -documents and diagrams, playing media, scanning, and much more.")
> -    (license license:gpl2+)))
> +          yelp))))
> +
> +(define-public gnome-essential-extras
> +  (package
> +    (inherit
> +     (gnome-meta-package
> +      "gnome-essential-extras"
> +      (list at-spi2-core
> +            dbus
> +            dconf
> +            desktop-file-utils
> +            font-abattis-cantarell
> +            font-dejavu
> +            gnome-default-applications
> +            gnome-online-accounts
> +            gst-plugins-base
> +            gst-plugins-good
> +            gucharmap
> +            hicolor-icon-theme
> +            pinentry-gnome3
> +            pulseaudio
> +            shared-mime-info
> +            system-config-printer
> +            xdg-user-dirs
> +            yelp
> +            zenity)))
> +    (description "This package provides a list of packages required for
> +a good GNOME experience, mixed from core dependencies and other implicitly
> +relied-on packages.")))
> +
> +(define-public gnome
> +  (package
> +    (inherit (gnome-meta-package "gnome"
> +                                 (append-map package-propagated-inputs
> +                                             (list gnome-meta-core-services
> +                                                   gnome-meta-core-shell
> +                                                   gnome-meta-core-utilities
> +                                                   gnome-essential-extras))))
> +    (properties (list))))

With the make-openjdk like change I suggested above, this could be
expressed without using inherit as:

--8<---------------cut here---------------start------------->8---
(define-public gnome
  (gnome-meta-package
   "gnome"
   (append-map package-propagated-inputs
               (list gnome-meta-core-services
               gnome-meta-core-shell
               gnome-meta-core-utilities
               gnome-essential-extras))
   (properties '())))
--8<---------------cut here---------------end--------------->8---

which I find more pleasing to read.

Otherwise,

Reviewed-by: Maxim Cournoyer <[email-masked]>

-- 
Thanks,
Maxim