Subject: Re: [bug#60699] [PATCH 1/2] gnu: Add fwupd service.

From: Jelle Licht <[email-masked]>
Date: Tue, 10 Jan 2023 11:21:49 +0100

Hello Petr,

phodina via Guix-patches via <[email-masked]> writes:

> Hello,
>
> this patch adds the service for the fwupd package (commit 23152ff70f0ed4966d8207846f54c793d7cb4f86).
>
> Also the Gnome Shell provides nice GUI integration as shown in the attached screenshot.
>
> The package in the service configuration is there so users can choose the fwupd they want to use as the
> one in Guix upstream does not support non-libre firmware.
>
> ----
> Petr
> From 9eba8a2400ad296ed3ee8bc581528cabff969cd5 Mon Sep 17 00:00:00 2001
> From: Petr Hodina <[email-masked]>
> Date: Wed, 7 Sep 2022 07:48:41 +0200
> Subject: [PATCH 1/2] gnu: Add fwupd service.
>
> * gnu/services/firmware.scm (fwupd): New variable.
>
> diff --git a/gnu/services/firmware.scm b/gnu/services/firmware.scm
> new file mode 100644
> index 0000000000..7539c56202
> --- /dev/null
> +++ b/gnu/services/firmware.scm
> @@ -0,0 +1,70 @@
> +;;; GNU Guix --- Functional package management for GNU
> +;;; Copyright ?? 2022 Petr Hodina <[email-masked]>
                 ^
                 Something seems to have gone wrong with the encoding
                 here. Could you try resending it?
                 
> +;;;
> +;;; This file is part of GNU Guix.
> +;;;
> +;;; GNU Guix is free software; you can redistribute it and/or modify it
> +;;; under the terms of the GNU General Public License as published by
> +;;; the Free Software Foundation; either version 3 of the License, or (at
> +;;; your option) any later version.
> +;;;
> +;;; GNU Guix is distributed in the hope that it will be useful, but
> +;;; WITHOUT ANY WARRANTY; without even the implied warranty of
> +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +;;; GNU General Public License for more details.
> +;;;
> +;;; You should have received a copy of the GNU General Public License
> +;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
> +
> +(define-module (gnu services firmware)
> +  #:use-module (guix diagnostics)
> +  #:use-module (guix gexp)
> +  #:use-module (guix records)
> +  #:use-module (guix modules)
> +  #:use-module (guix i18n)
> +  #:use-module (guix ui)
> +  #:use-module (gnu services)
> +  #:use-module (gnu services base)
> +  #:use-module (gnu services shepherd)
> +  #:use-module (gnu packages firmware)
> +  #:use-module (srfi srfi-1)
> +  #:use-module (srfi srfi-26)
> +  #:use-module (srfi srfi-34)
> +  #:use-module (srfi srfi-35)
> +  #:use-module (ice-9 match)
> +  #:export (fwupd-configuration fwupd-service-type))
> +
> +
> +;;;
> +;;; Fwupd daemon.
> +;;;
> +
> +(define-record-type* <fwupd-configuration> fwupd-configuration
> +                     make-fwupd-configuration fwupd-configuration?
> +                     (fwupd fwupd-configuration-fwupd
> +                            (default fwupd)))
> +
> +(define fwupd-activation-service
> +  #~(begin
> +      (use-modules (guix build utils))
> +      (mkdir-p "/var/lib/fwupd")))
> +
> +(define (fwupd-shepherd-service config)
> +  (shepherd-service (documentation "Run the fwupd daemon.")
> +                    (provision '(fwupd))
> +                    (requirement '(dbus-system udev))
> +                    (start #~(make-forkexec-constructor (list (string-append #$fwupd
> +                                                               "/libexec/fwupd/fwupd"))))
> +                    (stop #~(make-kill-destructor))))
> +
> +(define fwupd-service-type
> +  (service-type (name 'fwupd)
> +                (default-value (fwupd-configuration))
> +                (extensions (list (service-extension activation-service-type
> +                                                     (const
> +                                                      fwupd-activation-service))
> +                                  (service-extension
> +                                   shepherd-root-service-type
> +                                   (compose list fwupd-shepherd-service))))
> +                (description
> +                 "Run @command{fwupd}, the Firmware update daemon.")))

Looks great! Does this actually work in practice though? I ran into some
issues trying to run fwupd myself w.r.t. polkit (see
https://issues.guix.gnu.org/60065). Never mind if it actually works for
you though, IWBN if no further tweaks are required to get this to work.

> base-commit: 437718442ca758a3857702cecfe5c80aa5df272b
> -- 
> 2.38.1
>
> From 108b4e57aa1682359195205e8b5679eae81445dd Mon Sep 17 00:00:00 2001
> From: Petr Hodina <[email-masked]>
> Date: Tue, 6 Sep 2022 06:06:26 +0200
> Subject: [PATCH 2/2] gnu: Add gnome-firmware.
>
> * gnu/packages/gnome.scm (gnome-firmware): New variable.
>
> diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
> index 78e65d7400..f9c627b56a 100644
> --- a/gnu/packages/gnome.scm
> +++ b/gnu/packages/gnome.scm
> @@ -123,6 +123,7 @@ (define-module (gnu packages gnome)
>    #:use-module (gnu packages flex)
>    #:use-module (gnu packages fonts)
>    #:use-module (gnu packages file-systems)
> +  #:use-module (gnu packages firmware)
>    #:use-module (gnu packages fontutils)
>    #:use-module (gnu packages freedesktop)
>    #:use-module (gnu packages game-development)
> @@ -2330,6 +2331,41 @@ (define-public gnome-disk-utility
>      (description "Disk management utility for GNOME.")
>      (license license:gpl2+)))
>  
> +(define-public gnome-firmware
> +  (package
> +    (name "gnome-firmware")
> +    (version "42.2")
> +    (source (origin
> +              (method git-fetch)
> +              (uri (git-reference
> +                    (url "https://gitlab.gnome.org/World/gnome-firmware")
> +                    (commit version)))
> +              (sha256
> +               (base32
> +                "0p9fyqy3d5x6ap2ixw0wabmpdpzh7sdspaxl4f6qxx1sfnapci1g"))))
> +    (build-system meson-build-system)
> +    (arguments
> +     (list #:glib-or-gtk? #t
> +           #:configure-flags #~(list "-Dsystemd=false" "-Delogind=true")))
> +    (native-inputs (list desktop-file-utils
> +                         gettext-minimal
> +                         `(,glib "bin")
> +                         `(,gtk "bin")
> +                         help2man
> +                         pkg-config))
> +    (inputs (list gtk fwupd libadwaita libxmlb elogind))
> +    (synopsis "Manage firmware on devices")
'Manage' is a word that does not really with low signal-to-noise
ratio. Would there be a way to rephrase this?

> +    (description
> +     "This package provides integration of firmware manager:
> +   @itemize
> +@item Upgrade, Downgrade, & Reinstall firmware on devices supported by fwupd.
> +@item Unlock locked fwupd devices
> +@item Verify firmware on supported devices
> +@item Display all releases for a fwupd device
Releases of what? What's a fwupd device? 

Thanks for the patches!
- Jelle