summary refs log tree commit diff
diff options
context:
space:
mode:
authorMarius Bakke <marius@gnu.org>2022-09-09 23:04:13 +0200
committerMarius Bakke <marius@gnu.org>2022-09-09 23:04:13 +0200
commit9ef33dce949214d018774a4ff82f069b1a5e1f0f (patch)
tree232590cdca27fc7c0a047d1903db7dbd0a6b1f40
parent5fcbbe37c08dbe913d62523695a19357a08e2701 (diff)
parent8fbd8c82455e6f1bbbe623965b2452f8f8a01242 (diff)
downloadguix-9ef33dce949214d018774a4ff82f069b1a5e1f0f.tar.gz
Merge branch 'staging' into core-updates
-rw-r--r--doc/guix.texi18
-rw-r--r--etc/news.scm24
-rw-r--r--etc/teams.scm.in4
-rw-r--r--gnu/bootloader.scm53
-rw-r--r--gnu/bootloader/grub.scm73
-rw-r--r--gnu/packages/build-tools.scm34
-rw-r--r--gnu/packages/crates-io.scm2
-rw-r--r--gnu/packages/emacs-xyz.scm67
-rw-r--r--gnu/packages/emulators.scm4
-rw-r--r--gnu/packages/gnome.scm30
-rw-r--r--gnu/packages/imagemagick.scm52
-rw-r--r--gnu/packages/lisp-xyz.scm620
-rw-r--r--gnu/packages/patches/qemu-build-info-manual.patch49
-rw-r--r--gnu/packages/patches/qemu-fix-agent-paths.patch37
-rw-r--r--gnu/packages/python-check.scm8
-rw-r--r--gnu/packages/python-xyz.scm20
-rw-r--r--gnu/packages/rust-apps.scm2
-rw-r--r--gnu/packages/security-token.scm2
-rw-r--r--gnu/packages/spice.scm14
-rw-r--r--gnu/packages/virtualization.scm303
-rw-r--r--gnu/packages/web.scm2
-rw-r--r--gnu/services/virtualization.scm7
22 files changed, 1084 insertions, 341 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 5c249ebbf6..32414b6316 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -37529,6 +37529,24 @@ The list of commands for loading Multiboot modules.  For example:
              @dots{}))
 @end lisp
 
+@item @code{chain-loader} (default: @code{#f})
+A string that can be accepted by @code{grub}'s @code{chainloader}
+directive. This has no effect if either @code{linux} or
+@code{multiboot-kernel} fields are specified. The following is an
+example of chainloading a different GNU/Linux system.
+
+@lisp
+(bootloader
+ (bootloader-configuration
+  ;; @dots{}
+  (menu-entries
+   (list
+    (menu-entry
+     (label "GNU/Linux")
+     (device (uuid "1C31-A17C" 'fat))
+     (chain-loader "/EFI/GNULinux/grubx64.efi"))))))
+@end lisp
+
 @end table
 @end deftp
 
diff --git a/etc/news.scm b/etc/news.scm
index 52c6d189cb..ae40f33cb0 100644
--- a/etc/news.scm
+++ b/etc/news.scm
@@ -28,10 +28,16 @@
 
  (entry (commit "c188cf57f161c0c26e2d7c8516bd1ddd1492d686")
         (title
-          (en "Linux-libre kernel updated to 5.19"))
+          (en "Linux-libre kernel updated to 5.19")
+          (fr "Le noyau linux-libre est mis à jour vers la 5.19")
+          (pt "Kernel linux-libre atualizado para 5.19"))
         (body
           (en "The default version of the linux-libre kernel has been
-              updated to the 5.19 release series.")))
+              updated to the 5.19 release series.")
+          (fr "La version par défaut du noyau linux-libre est mise à jour
+              vers la série des 5.19.")
+          (pt "A versão padrão do kernel linux-libre foi atualizada para a
+              série do kernel 5.19.")))
 
  (entry (commit "a15542d26df42dabdb5e2f76d150ae200230c3b0")
         (title
@@ -73,12 +79,15 @@ Execute @command{info \"(guix) Invoking guix style\"} para mais informações.")
  (entry (commit "2ec7ab2610eb67e26dab52b671eb29e46f64ea0f")
         (title
           (en "Linux-libre kernel updated to 5.18")
-          (de "Linux-libre-Kernel wird auf 5.18 aktualisiert"))
+          (de "Linux-libre-Kernel wird auf 5.18 aktualisiert")
+          (fr "Le noyau linux-libre est mis à jour vers la 5.18"))
         (body
           (en "The default version of the linux-libre kernel has been
               updated to the 5.18 release series.")
           (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert
-jetzt auf der 5.18-Versionsreihe.")))
+jetzt auf der 5.18-Versionsreihe.")
+          (fr "La version par défaut du noyau linux-libre est mise à jour
+              vers la série des 5.18.")))
 
  (entry (commit "bdf422176739b473add66eb8cac9fdd8c654f794")
         (title
@@ -206,12 +215,15 @@ Cela vient avec un nouveau système de construction pour paquets Elm---lancer
 
  (entry (commit "b6b2de2a0d52530bc1ee128c61580bed662ee15c")
         (title (en "Linux-libre kernel updated to 5.17")
-               (de "Linux-libre-Kernel wird auf 5.17 aktualisiert"))
+               (de "Linux-libre-Kernel wird auf 5.17 aktualisiert")
+               (fr "Le noyau linux-libre est mis à jour vers la 5.17"))
         (body
           (en "The default version of the linux-libre kernel has been
               updated to the 5.17 release series.")
           (de "Der standardmäßig verwendete @code{linux-libre}-Kernel basiert
-jetzt auf der 5.17-Versionsreihe.")))
+jetzt auf der 5.17-Versionsreihe.")
+          (fr "La version par défaut du noyau linux-libre est mise à jour
+              vers la série des 5.17.")))
 
  (entry (commit "c42b7baf13c7633b4512e94da7445299c57b247d")
         (title
diff --git a/etc/teams.scm.in b/etc/teams.scm.in
index 38b7ab8e1d..9f220cc489 100644
--- a/etc/teams.scm.in
+++ b/etc/teams.scm.in
@@ -234,6 +234,10 @@ importer."))
                        "jgart@dismail.de")
   python lisp mentors)
 
+(define-member (person "Guillaume Le Vaillant"
+                       "glv@posteo.net")
+  lisp)
+
 (define-member (person "Julien Lepiller"
                        "julien@lepiller.eu")
   java ocaml translations)
diff --git a/gnu/bootloader.scm b/gnu/bootloader.scm
index 77c05e8946..da65b9d5d5 100644
--- a/gnu/bootloader.scm
+++ b/gnu/bootloader.scm
@@ -34,6 +34,8 @@
   #:use-module (guix diagnostics)
   #:use-module (guix i18n)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-34)
+  #:use-module (srfi srfi-35)
   #:use-module (ice-9 match)
   #:export (menu-entry
             menu-entry?
@@ -46,6 +48,7 @@
             menu-entry-multiboot-kernel
             menu-entry-multiboot-arguments
             menu-entry-multiboot-modules
+            menu-entry-chain-loader
 
             menu-entry->sexp
             sexp->menu-entry
@@ -104,8 +107,27 @@
   (multiboot-arguments menu-entry-multiboot-arguments
                        (default '()))      ; list of string-valued gexps
   (multiboot-modules menu-entry-multiboot-modules
-                     (default '())))       ; list of multiboot commands, where
+                     (default '()))        ; list of multiboot commands, where
                                            ; a command is a list of <string>
+  (chain-loader     menu-entry-chain-loader
+                    (default #f)))         ; string, path of efi file
+
+(define (report-menu-entry-error menu-entry)
+  (raise
+   (condition
+    (&message
+     (message
+      (format #f (G_ "invalid menu-entry: ~a") menu-entry)))
+    (&fix-hint
+     (hint
+      (G_ "Please chose only one of:
+@enumerate
+@item direct boot by specifying fields @code{linux},
+@code{linux-arguments} and @code{linux-modules},
+@item multiboot by specifying fields @code{multiboot-kernel},
+@code{multiboot-arguments} and @code{multiboot-modules},
+@item chain-loader by specifying field @code{chain-loader}.
+@end enumerate"))))))
 
 (define (menu-entry->sexp entry)
   "Return ENTRY serialized as an sexp."
@@ -117,8 +139,9 @@
        `(label ,(file-system-label->string label)))
       (_ device)))
   (match entry
-    (($ <menu-entry> label device mount-point linux linux-arguments initrd #f
-                     ())
+    (($ <menu-entry> label device mount-point
+                     (? identity linux) linux-arguments (? identity initrd)
+                     #f () () #f)
      `(menu-entry (version 0)
                   (label ,label)
                   (device ,(device->sexp device))
@@ -127,14 +150,23 @@
                   (linux-arguments ,linux-arguments)
                   (initrd ,initrd)))
     (($ <menu-entry> label device mount-point #f () #f
-                     multiboot-kernel multiboot-arguments multiboot-modules)
+                     (? identity multiboot-kernel) multiboot-arguments
+                     multiboot-modules #f)
      `(menu-entry (version 0)
                   (label ,label)
                   (device ,(device->sexp device))
                   (device-mount-point ,mount-point)
                   (multiboot-kernel ,multiboot-kernel)
                   (multiboot-arguments ,multiboot-arguments)
-                  (multiboot-modules ,multiboot-modules)))))
+                  (multiboot-modules ,multiboot-modules)))
+    (($ <menu-entry> label device mount-point #f () #f #f () ()
+                     (? identity chain-loader))
+     `(menu-entry (version 0)
+                  (label ,label)
+                  (device ,(device->sexp device))
+                  (device-mount-point ,mount-point)
+                  (chain-loader ,chain-loader)))
+    (_ (report-menu-entry-error entry))))
 
 (define (sexp->menu-entry sexp)
   "Turn SEXP, an sexp as returned by 'menu-entry->sexp', into a <menu-entry>
@@ -171,7 +203,16 @@ record."
       (device-mount-point mount-point)
       (multiboot-kernel multiboot-kernel)
       (multiboot-arguments multiboot-arguments)
-      (multiboot-modules multiboot-modules)))))
+      (multiboot-modules multiboot-modules)))
+    (('menu-entry ('version 0)
+                  ('label label) ('device device)
+                  ('device-mount-point mount-point)
+                  ('chain-loader chain-loader) _ ...)
+     (menu-entry
+      (label label)
+      (device (sexp->device device))
+      (device-mount-point mount-point)
+      (chain-loader chain-loader)))))
 
 
 ;;;
diff --git a/gnu/bootloader/grub.scm b/gnu/bootloader/grub.scm
index 4f18c9b518..7283257354 100644
--- a/gnu/bootloader/grub.scm
+++ b/gnu/bootloader/grub.scm
@@ -374,44 +374,57 @@ when booting a root file system on a Btrfs subvolume."
     (let ((label (menu-entry-label entry))
           (linux (menu-entry-linux entry))
           (device (menu-entry-device entry))
-          (device-mount-point (menu-entry-device-mount-point entry)))
-      (if linux
-          (let ((arguments (menu-entry-linux-arguments entry))
-                (linux (normalize-file linux
-                                       device-mount-point
-                                       store-directory-prefix))
-                (initrd (normalize-file (menu-entry-initrd entry)
-                                        device-mount-point
-                                        store-directory-prefix)))
-         ;; Here DEVICE is the store and DEVICE-MOUNT-POINT is its mount point.
-         ;; Use the right file names for LINUX and INITRD in case
-         ;; DEVICE-MOUNT-POINT is not "/", meaning that the store is on a
-         ;; separate partition.
-
-         ;; When BTRFS-SUBVOLUME-FILE-NAME is defined, prepend it the linux and
-         ;; initrd paths, to allow booting from a Btrfs subvolume.
-         #~(format port "menuentry ~s {
+          (device-mount-point (menu-entry-device-mount-point entry))
+          (multiboot-kernel (menu-entry-multiboot-kernel entry))
+          (chain-loader (menu-entry-chain-loader entry)))
+      (cond
+       (linux
+        (let ((arguments (menu-entry-linux-arguments entry))
+              (linux (normalize-file linux
+                                     device-mount-point
+                                     store-directory-prefix))
+              (initrd (normalize-file (menu-entry-initrd entry)
+                                      device-mount-point
+                                      store-directory-prefix)))
+          ;; Here DEVICE is the store and DEVICE-MOUNT-POINT is its mount point.
+          ;; Use the right file names for LINUX and INITRD in case
+          ;; DEVICE-MOUNT-POINT is not "/", meaning that the store is on a
+          ;; separate partition.
+
+          ;; When BTRFS-SUBVOLUME-FILE-NAME is defined, prepend it the linux and
+          ;; initrd paths, to allow booting from a Btrfs subvolume.
+          #~(format port "menuentry ~s {
   ~a
   linux ~a ~a
   initrd ~a
 }~%"
-                   #$label
-                   #$(grub-root-search device linux)
-                   #$linux (string-join (list #$@arguments))
-                   #$initrd))
-          (let ((kernel (menu-entry-multiboot-kernel entry))
-                (arguments (menu-entry-multiboot-arguments entry))
-                (modules (menu-entry-multiboot-modules entry))
-                (root-index 1))            ; XXX EFI will need root-index 2
-        #~(format port "
+                    #$label
+                    #$(grub-root-search device linux)
+                    #$linux (string-join (list #$@arguments))
+                    #$initrd)))
+       (multiboot-kernel
+        (let ((kernel (menu-entry-multiboot-kernel entry))
+              (arguments (menu-entry-multiboot-arguments entry))
+              (modules (menu-entry-multiboot-modules entry))
+              (root-index 1))            ; XXX EFI will need root-index 2
+          #~(format port "
 menuentry ~s {
   multiboot ~a root=device:hd0s~a~a~a
 }~%"
+                    #$label
+                    #$kernel
+                    #$root-index (string-join (list #$@arguments) " " 'prefix)
+                    (string-join (map string-join '#$modules)
+                                 "\n  module " 'prefix))))
+       (chain-loader
+        #~(format port "
+menuentry ~s {
+  ~a
+  chainloader ~a
+}~%"
                   #$label
-                  #$kernel
-                  #$root-index (string-join (list #$@arguments) " " 'prefix)
-                  (string-join (map string-join '#$modules)
-                               "\n  module " 'prefix))))))
+                  #$(grub-root-search device chain-loader)
+                  #$chain-loader)))))
 
   (define (crypto-devices)
     (define (crypto-device->cryptomount dev)
diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm
index 1a7cfae3d1..b5b9d501f9 100644
--- a/gnu/packages/build-tools.scm
+++ b/gnu/packages/build-tools.scm
@@ -263,10 +263,10 @@ files and generates build instructions for the Ninja build system.")
       ;; X11 license.
       (license (list license:bsd-3 license:x11)))))
 
-(define-public meson
+(define-public meson-0.63
   (package
     (name "meson")
-    (version "0.60.3")
+    (version "0.63.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/mesonbuild/meson/"
@@ -274,9 +274,7 @@ files and generates build instructions for the Ninja build system.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "13mrrizg4vl6n5k7fz6amyafnn3i097dcarr552qc0ca6nlmzjl7"))
-              (patches (search-patches
-                        "meson-allow-dirs-outside-of-prefix.patch"))))
+                "1gwba75z47m2hv3w08gw8sgqgbknjr7rj1qwr510bgknxwbjy8hn"))))
     (build-system python-build-system)
     (arguments
      `(;; FIXME: Tests require many additional inputs and patching many
@@ -309,11 +307,10 @@ files}, are written in a custom domain-specific language (@dfn{DSL}) that
 resembles Python.")
     (license license:asl2.0)))
 
-;;; This older Meson variant is kept for now for gtkmm and others that may
-;;; have problems with 0.60.
-(define-public meson-0.59
-  (package/inherit meson
-    (version "0.59.4")
+(define-public meson-0.60
+  (package
+    (inherit meson-0.63)
+    (version "0.60.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/mesonbuild/meson/"
@@ -321,14 +318,16 @@ resembles Python.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "117cm8794h291lca1wljz1pwnzidgbvrpg3mw3np6ksma368hyd7"))
+                "13mrrizg4vl6n5k7fz6amyafnn3i097dcarr552qc0ca6nlmzjl7"))
               (patches (search-patches
                         "meson-allow-dirs-outside-of-prefix.patch"))))))
 
-(define-public meson-0.63
+;;; This older Meson variant is kept for now for gtkmm and others that may
+;;; have problems with 0.60.
+(define-public meson-0.59
   (package
-    (inherit meson)
-    (version "0.63.1")
+    (inherit meson-0.60)
+    (version "0.59.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/mesonbuild/meson/"
@@ -336,7 +335,12 @@ resembles Python.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1sb5rdra5zc6c3ni8x65zs7r7vsnbarammf5440zzmhkf8li7zh6"))))))
+                "117cm8794h291lca1wljz1pwnzidgbvrpg3mw3np6ksma368hyd7"))
+              (patches (search-patches
+                        "meson-allow-dirs-outside-of-prefix.patch"))))))
+
+;; TODO: Bump this in the next rebuild cycle.
+(define-public meson meson-0.60)
 
 (define-public premake4
   (package
diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index e4182499a4..7688efb69d 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -46062,6 +46062,8 @@ in your code.")
        (("rust-unicode-ident" ,rust-unicode-ident-1))
        #:cargo-development-inputs
        (("rust-quote" ,rust-quote-1))))
+    ;; This is necessary for downstream packages such as rust-wayland-scanner
+    (inputs (list rust-unicode-ident-1))
     (home-page "https://github.com/dtolnay/proc-macro2")
     (synopsis "Stable implementation of the upcoming new `proc_macro` API")
     (description "This package provides a stable implementation of the upcoming new
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 2af9fd945b..508418ee92 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -522,6 +522,31 @@ repositories through the
 server}.  The main advantage compared to @code{vc-hg} is speed.")
     (license license:gpl3+)))
 
+(define-public emacs-telephone-line
+  (let ((commit "6f3455a365912e8f0c45a2240ea79507dee45ade")
+        (revision "0"))
+    (package
+      (name "emacs-telephone-line")
+      (version (git-version "0.5" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/dbordak/telephone-line")
+           (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1hnd6wnc52sc0ckriqnhaz64pyjk027y0dpcmh2zhpd27i8d4hmq"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/dbordak/telephone-line")
+      (synopsis "Implementation of Powerline for Emacs")
+      (description
+       "Telephone Line is a new implementation of Powerline for Emacs with
+optional baked-in Evil support, antialiased separators, and an easy
+configuration language which makes it trivial to write your own themes.")
+      (license license:gpl3+))))
+
 (define-public emacs-terminal-here
   (package
     (name "emacs-terminal-here")
@@ -2680,7 +2705,7 @@ shine on top of your cursor so you know where it is.")
 (define-public emacs-counsel-bbdb
   (package
     (name "emacs-counsel-bbdb")
-    (version "0.0.4")
+    (version "0.0.5")
     (source
      (origin
        (method git-fetch)
@@ -2689,9 +2714,9 @@ shine on top of your cursor so you know where it is.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0bki658mvlchqf3prkzxz4217a95cxm58c1qmf84yp2n8h6gd0d8"))))
+        (base32 "1jrj7hx6y518np3xcnarbj0c43lglcf9gww3fhfqp7lzxl9hvi8s"))))
     (build-system emacs-build-system)
-    (propagated-inputs (list emacs-ivy))
+    (propagated-inputs (list emacs-bbdb emacs-ivy))
     (home-page "https://github.com/redguardtoo/counsel-bbdb")
     (synopsis "Ivy interface for BBDB")
     (description "This Ivy extension enables the use of @code{ivy-mode} to input
@@ -3306,7 +3331,7 @@ be regarded as @code{emacs-company-quickhelp} for @code{emacs-corfu}.")
 (define-public emacs-cape
   (package
     (name "emacs-cape")
-    (version "0.8")
+    (version "0.9")
     (source
      (origin
        (method git-fetch)
@@ -3315,7 +3340,7 @@ be regarded as @code{emacs-company-quickhelp} for @code{emacs-corfu}.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0zv3hcnarwyhj4hhfk9kz4gzshks10vd5zfsmpv5nlbhvwp69j3p"))))
+        (base32 "09lzzhx438s9wlpmiyyx9bbb2hlscf415f080bkz6gyw4nsdh0g4"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/minad/cape")
     (synopsis "Completion at point extensions for Emacs")
@@ -6698,14 +6723,14 @@ user.")
 (define-public emacs-subed
   (package
     (name "emacs-subed")
-    (version "1.0.7")
+    (version "1.0.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://elpa.nongnu.org/nongnu/subed-"
                                   version ".tar"))
               (sha256
                (base32
-                "0js48yar8xgj3wjmlkv3k5208q1zvv74sg4lhk6asiy4cq3pqjia"))))
+                "05dx4ywma7n73d0cihf4v8ayihm7gmfqpzvdycq4yk0zkxb958z1"))))
     (arguments
      (list
       #:tests? #t
@@ -8871,7 +8896,7 @@ built-in custom themes.")
 (define-public emacs-gruvbox-theme
   (package
     (name "emacs-gruvbox-theme")
-    (version "1.30.0")
+    (version "1.30.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -8880,7 +8905,7 @@ built-in custom themes.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1dzaivis9cpqzb53qmkmhijr5l4hl2l3yr2412jxrz2jmqi3q4c5"))))
+                "0dgjf86i8179l1nsjyc20chysqmy8yhphpd5lzv2ypx79l4z3jka"))))
     (build-system emacs-build-system)
     (propagated-inputs
      (list emacs-autothemer))
@@ -9230,7 +9255,7 @@ style, or as multiple word prefixes.")
 (define-public emacs-consult
   (package
     (name "emacs-consult")
-    (version "0.18")
+    (version "0.19")
     (source
      (origin
        (method git-fetch)
@@ -9238,7 +9263,7 @@ style, or as multiple word prefixes.")
              (url "https://github.com/minad/consult")
              (commit version)))
        (sha256
-        (base32 "0sy4rn1vjk1g50r8z14hzj8lds6s7ij2zkjqfi6mfash5il75wnq"))
+        (base32 "1lb7ci1kkgv07c4hcfxisr5zjx68hq15bqf4x3bhmnn13x38j7jw"))
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs (list emacs-compat))
@@ -9393,7 +9418,7 @@ expansion and overwriting the marked region with a new snippet completion.")
 (define-public emacs-marginalia
   (package
     (name "emacs-marginalia")
-    (version "0.13")
+    (version "0.14")
     (source
      (origin
        (method git-fetch)
@@ -9402,7 +9427,7 @@ expansion and overwriting the marked region with a new snippet completion.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1qk6j7l39z92h4kvvbwcs85ilyx3d6y0l8zm33iar2pjnyks1kq3"))))
+        (base32 "1gbcjw447vxd3ivfjgnya2ix3w791kvbika1v9bzj8s7i996fb6f"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/minad/marginalia")
     (synopsis "Marginalia in the minibuffer completions")
@@ -15136,7 +15161,7 @@ in Emacs.")
 (define-public emacs-php-mode
   (package
     (name "emacs-php-mode")
-    (version "1.24.0")
+    (version "1.24.1")
     (source
      (origin
        (method git-fetch)
@@ -15145,7 +15170,7 @@ in Emacs.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0bs9q62bd7885c39v7x1qz3w1fhpmpdgm72xwsk2yygw0ii425nn"))))
+        (base32 "06xgmlbvqhkrnk6390mdbpjij34msxxwzqmagi6zpwpsf38mn6qf"))))
     (build-system emacs-build-system)
     (arguments
      `(#:phases
@@ -15217,13 +15242,13 @@ containing words from the Rime project.")
 (define-public emacs-pyim
   (package
     (name "emacs-pyim")
-    (version "5.2.3")
+    (version "5.2.4")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/pyim-" version ".tar"))
        (sha256
-        (base32 "189r0qkd8nv5zjg2ljbzbj086jb8xbl4yd1jliz4azaprv8fhqv0"))))
+        (base32 "1dzl4xaf31nyjb5hnwwf29i75x0i8dakpmmagbn4ks5hi3jl2ig0"))))
     (build-system emacs-build-system)
     (propagated-inputs
      (list emacs-async emacs-popup emacs-posframe emacs-xr))
@@ -19046,7 +19071,7 @@ according to a parsing expression grammar.")
 (define-public emacs-eldev
   (package
     (name "emacs-eldev")
-    (version "1.2.1")
+    (version "1.2.2")
     (source
      (origin
        (method git-fetch)
@@ -19055,7 +19080,7 @@ according to a parsing expression grammar.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1zf3vrk9yw4f4fj31g3vphjd3rhr2hv3q2crkdsgi7z5xlb8frds"))))
+        (base32 "0d6wbfim0q81sm5m45fjc6n0v6nk32qrgas5nzrs0vslym4bfxna"))))
     (build-system emacs-build-system)
     (arguments
      (list
@@ -20153,14 +20178,14 @@ or expressions with SVG rounded box labels that are fully customizable.")
 (define-public emacs-kind-icon
   (package
     (name "emacs-kind-icon")
-    (version "0.1.6")
+    (version "0.1.7")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/kind-icon-"
                            version ".tar"))
        (sha256
-        (base32 "0ac53qrz217b054z51244r7whvjmyrq4941ld0bgl9crssrhb588"))))
+        (base32 "02imi2qj329yrqvs23d4z7fv8bbaz0fvya6zdswb38blpdri4cn1"))))
     (build-system emacs-build-system)
     (propagated-inputs (list emacs-svg-lib))
     (home-page "https://github.com/jdtsmith/kind-icon")
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 92af9adced..85912caf7f 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -773,7 +773,7 @@ and Game Boy Color games.")
 (define-public sameboy
   (package
     (name "sameboy")
-    (version "0.15")
+    (version "0.15.5")
     (source
      (origin
        (method git-fetch)
@@ -782,7 +782,7 @@ and Game Boy Color games.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0rhl9khc5pxbikjsq4aha5cpqfxf3bnxalc94idd4haw0zf892q9"))))
+        (base32 "0ly9x6cch0wdcnsp0qmrdl6r2h8805jp8hwji3fwswj8rlhxkpa7"))))
     (build-system gnu-build-system)
     (native-inputs
      (list rgbds pkg-config))
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 6cde000802..76deba554c 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -884,6 +884,7 @@ tomorrow, the rest of the week and for special occasions.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
+       #:meson ,meson-0.60
        #:configure-flags
        (list "-Ddogtail=false"     ; Not available
              ;; Required for RUNPATH validation.
@@ -955,6 +956,7 @@ cloud integration is offered through GNOME Online Accounts.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
+       #:meson ,meson-0.60
        #:phases
        (modify-phases %standard-phases
          (add-after 'install 'wrap-gnome-music
@@ -1557,6 +1559,7 @@ tour of all gnome components and allows the user to set them up.")
    (build-system meson-build-system)
    (arguments
     `(#:glib-or-gtk? #t
+      #:meson ,meson-0.60
       #:configure-flags
        `("-Dsystemduserunitdir=/tmp/empty"
          ;; Enable nautilus extension for file sharing.
@@ -2034,6 +2037,7 @@ to other formats.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
+       #:meson ,meson-0.60
        #:phases (modify-phases %standard-phases
                   (add-after 'install 'wrap
                     (lambda* (#:key outputs #:allow-other-keys)
@@ -2287,7 +2291,8 @@ The gnome-about program helps find which version of GNOME is installed.")
                 "0hpyi0sz3gcqqs9lkwyk8b6hr39m3n27432x98kxr436jj37dk6j"))))
     (build-system meson-build-system)
     (arguments
-     `(#:phases
+     `(#:meson ,meson-0.60
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-post-install-script
            (lambda _
@@ -2331,7 +2336,8 @@ the font would look under various sizes.")
                 "00fsf82ycac8qi0kkiq759p6jrn63pyz4ksn4wnq7m4ax94zq289"))))
     (build-system meson-build-system)
     (arguments
-     '(#:phases
+     `(#:meson ,meson-0.60
+       #:phases
        (modify-phases %standard-phases
          ;; These fail because /var/lib/dbus/machine-id is not present in the
          ;; build environment.
@@ -2540,6 +2546,7 @@ forgotten when the session ends.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
+       #:meson ,meson-0.60
        #:build-type "release"
        #:configure-flags
        '("-Dnautilus=false"
@@ -3134,6 +3141,7 @@ API add-ons to make GTK+ widgets OpenGL-capable.")
     (build-system meson-build-system)
     (arguments
      (list
+      #:meson meson-0.60
       #:phases
       #~(modify-phases %standard-phases
           (add-after 'unpack 'skip-gtk-update-icon-cache
@@ -5554,6 +5562,7 @@ services for numerous locations.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
+       #:meson ,meson-0.60
        #:configure-flags
        (list (string-append "-Dudev_dir="
                             (assoc-ref %outputs "out") "/lib/udev")
@@ -6402,6 +6411,7 @@ supports playlists, song ratings, and any codecs installed through gstreamer.")
    (build-system meson-build-system)
    (arguments
     `(#:glib-or-gtk? #t
+      #:meson ,meson-0.60
       #:configure-flags
       ;; Otherwise, the RUNPATH will lack the final 'eog' path component.
       (list (string-append "-Dc_link_args=-Wl,-rpath="
@@ -6663,7 +6673,8 @@ USB transfers with your high-level application or system daemon.")
     (build-system meson-build-system)
     ;; TODO: Fix icons in home screen, About dialogue, and scan menu.
     (arguments
-     `(#:glib-or-gtk? #t))
+     `(#:glib-or-gtk? #t
+       #:meson ,meson-0.60))
     (native-inputs
      (list gettext-minimal
            itstool
@@ -7161,7 +7172,8 @@ such as gzip tarballs.")
                (base32
                 "02z0xr6sv9ibl7awbw9j4y05hf4jk1zgvsbbmh7n27hhjvsvc8pl"))))
     (arguments
-     `(#:glib-or-gtk? #t
+     `(#:meson ,meson-0.60
+       #:glib-or-gtk? #t
        #:phases
        (modify-phases %standard-phases
          (add-after 'install 'wrap-gnome-session
@@ -7276,6 +7288,7 @@ javascript engine and the GObject introspection framework.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
+       #:meson ,meson-0.60
        #:configure-flags
        ;; Otherwise, the RUNPATH will lack the final path component.
        (list (string-append "-Dc_link_args=-Wl,-rpath="
@@ -8488,6 +8501,8 @@ usage and information about running processes.")
                (base32
                 "1a9ynlwwkb3wpg293ym517vmrkk63y809mmcv9a21k5yr199x53c"))))
     (build-system meson-build-system)
+    (arguments
+     (list #:meson meson-0.60))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for gdbus-codegen, etc.
        ("gtk+" ,gtk+ "bin") ; gtk-update-icon-cache
@@ -8808,7 +8823,8 @@ like switching to windows and launching applications.")
         (base32 "0jmr6igyzcj2wmx5v5ywaazvdz3hx6a6rys26yb4l4s71l281bvs"))))
     (build-system meson-build-system)
     (arguments
-     `(#:glib-or-gtk? #t))   ; To wrap binaries and/or compile schemas
+     `(#:meson ,meson-0.60
+       #:glib-or-gtk? #t))   ; To wrap binaries and/or compile schemas
     (native-inputs
      (append
       ;; GJS depends on Rust, which is x86_64-only so far, so remove the GJS
@@ -9400,6 +9416,7 @@ associations for GNOME.")
           libhandy))
    (arguments
     `(#:glib-or-gtk? #t
+      #:meson ,meson-0.60
       #:phases
       ,#~(modify-phases %standard-phases
            (add-after 'unpack 'fix-service-file
@@ -9760,6 +9777,7 @@ desktop.  It supports world clock, stop watch, alarms, and count down timer.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
+       #:meson ,meson-0.60
        ;; gnome-calendar has to be installed before the tests can be run
        ;; https://bugzilla.gnome.org/show_bug.cgi?id=788224
        #:tests? #f
@@ -10683,6 +10701,7 @@ photo-booth-like software, such as Cheese.")
                 "1y92glc0d6w323x2bdbc0gdh1jdffvkbv6cwlwm1rx0wgvv1svqh"))))
     (arguments
      `(#:glib-or-gtk? #t
+       #:meson ,meson-0.60
        ;; Tests require GDK.
        #:tests? #f
        #:phases
@@ -11642,6 +11661,7 @@ integrate seamlessly with the GNOME desktop.")
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
+       #:meson ,meson-0.60
        #:configure-flags (list "-Drdp=false"
                                (string-append "-Dc_link_args=-Wl,-rpath="
                                               (assoc-ref %outputs "out")
diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm
index 06ed80cbac..6f6fa63c64 100644
--- a/gnu/packages/imagemagick.scm
+++ b/gnu/packages/imagemagick.scm
@@ -27,6 +27,7 @@
 
 (define-module (gnu packages imagemagick)
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
   #:use-module (guix download)
@@ -212,7 +213,7 @@ script.")
 (define-public graphicsmagick
   (package
     (name "graphicsmagick")
-    (version "1.3.36")
+    (version "1.3.38")
     (source
      (origin
        (method url-fetch)
@@ -225,33 +226,34 @@ script.")
                         "/GraphicsMagick-" version ".tar.xz")))
        (sha256
         (base32
-         "0ilg6fkppb4avzais1dvi3qf6ln7v3mzj7gjm83w7pwwfpg3ynsx"))))
+         "0x96wcspcqmkcy7jagfifgq2iamcf0ql9swvn6f2n79mb7dxj36n"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags
-       (list "--with-frozenpaths"
-             "--enable-shared=yes"
-             "--with-x=yes"
-             "--with-quantum-depth=16" ; required by Octave
-             "--enable-quantum-library-names"
-             (string-append "--with-gs-font-dir="
-                            (assoc-ref %build-inputs "font-ghostscript")
-                            "/share/fonts/type1/ghostscript"))))
+     (list
+      #:configure-flags
+      #~(list "--with-frozenpaths"
+              "--enable-shared=yes"
+              "--with-x=yes"
+              "--with-quantum-depth=16" ;required by Octave
+              "--enable-quantum-library-names"
+              (string-append "--with-gs-font-dir="
+                             (search-input-directory
+                              %build-inputs "share/fonts/type1/ghostscript")))))
     (inputs
-     `(("graphviz" ,graphviz)
-       ("ghostscript" ,ghostscript)
-       ("font-ghostscript" ,font-ghostscript)
-       ("lcms" ,lcms)
-       ("libx11" ,libx11)
-       ("libxml2" ,libxml2)
-       ("libtiff" ,libtiff)
-       ("libpng" ,libpng)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libwebp" ,libwebp)
-       ("freetype" ,freetype)
-       ("bzip2" ,bzip2)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list bzip2
+           font-ghostscript
+           freetype
+           ghostscript
+           graphviz
+           lcms
+           libjpeg-turbo
+           libpng
+           libtiff
+           libwebp
+           libxml2
+           libx11
+           xz
+           zlib))
     (native-inputs
      (list pkg-config))
     (outputs '("out"                  ; 13 MiB
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index c7f2c8bc63..e533aa2a0f 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -117,6 +117,42 @@
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-19))
 
+(define-public sbcl-alexandria-plus
+  (let ((commit "adafb09838a84895bedb119f8253b89b6a04a2c5")
+        (revision "0"))
+    (package
+      (name "sbcl-alexandria-plus")
+      ;; Version is stated in the ASD file.
+      (version (git-version "1.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Symbolics/alexandria-plus")
+               (commit commit)))
+         (file-name (git-file-name "cl-alexandria-plus" version))
+         (sha256
+          (base32 "1w9r19610h599303gqlx2x5n8mmdynss2gyl7xilg5h6v8z3hkfl"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       '(#:asd-systems '("alexandria+")))
+      (native-inputs
+       (list sbcl-parachute))
+      (inputs
+       (list sbcl-alexandria))
+      (home-page "https://symbolics.github.io/alexandria-plus/")
+      (synopsis "Conservative set of extensions to Alexandria utilities")
+      (description
+       "@code{cl-alexandria-plus} is a conservative set of extensions to
+@code{cl-alexandria} utilities.")
+      (license license:ms-pl))))
+
+(define-public cl-alexandria-plus
+  (sbcl-package->cl-source-package sbcl-alexandria-plus))
+
+(define-public ecl-alexandria-plus
+  (sbcl-package->ecl-package sbcl-alexandria-plus))
+
 (define-public sbcl-alexandria
   (package
    (name "sbcl-alexandria")
@@ -22794,6 +22830,37 @@ functionality similar to what was originally found in @code{sdl2kit}.
 (define-public ecl-glkit
   (sbcl-package->ecl-package sbcl-glkit))
 
+(define-public sbcl-doplus
+  (package
+    (name "sbcl-doplus")
+    (version "1.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/alessiostalla/doplus")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "cl-doplus" version))
+       (sha256
+        (base32 "1yvda9psw9m08d3bzdb8a2drvhrnr07a0rhza5ibk30v1dkwfw7c"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-fiveam))
+    (inputs
+     (list sbcl-parse-declarations sbcl-fset))
+    (arguments
+     '(#:asd-systems '("doplus" "doplus-fset")))
+    (synopsis "Iteration macro for Common Lisp")
+    (description "@code{doplus} is an iteration macro for Common Lisp.")
+    (home-page "https://github.com/alessiostalla/doplus")
+    (license license:gpl3+)))
+
+(define-public cl-doplus
+  (sbcl-package->cl-source-package sbcl-doplus))
+
+(define-public ecl-doplus
+  (sbcl-package->ecl-package sbcl-doplus))
+
 (define-public sbcl-trees
   (let ((commit "7b06048af0248c4302088c758208276f9faf2beb"))
     (package
@@ -22890,6 +22957,41 @@ operator in portable Common Lisp.")
 (define-public ecl-amb
   (sbcl-package->ecl-package sbcl-amb))
 
+(define-public sbcl-quicklisp-stats
+  (let ((commit "953b45c2212ae513d48a611d3dd09c846a6102cd")
+        (revision "0"))
+    (package
+      (name "sbcl-quicklisp-stats")
+      (version (git-version "0.0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/phoe/quicklisp-stats")
+               (commit commit)))
+         (file-name (git-file-name "cl-quicklisp-stats" version))
+         (sha256
+          (base32 "0v8dgmlgd283n1g486q4sj2mghgdvgywg2nqp43nnrfc04mkvgc0"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria
+             sbcl-drakma
+             sbcl-split-sequence))
+      (arguments
+       `(#:tests? #f)) ; There are no tests.
+      (synopsis "Fetches and operates on Quicklisp download statistics")
+      (description
+       "@code{cl-quicklisp-stats} is a system that fetches and performs basic
+operations on the Quicklisp download statistics.")
+      (home-page "https://github.com/phoe/quicklisp-stats/")
+      (license license:expat))))
+
+(define-public cl-quicklisp-stats
+  (sbcl-package->cl-source-package sbcl-quicklisp-stats))
+
+(define-public ecl-quicklisp-stats
+  (sbcl-package->ecl-package sbcl-quicklisp-stats))
+
 (define-public sbcl-sketch
   ;; No release in years.
   (let ((commit "4cc00b08e202c7adda41391463096cf9df1705c3"))
@@ -23254,6 +23356,524 @@ especially in a multi-threaded context.")
 (define-public ecl-ndebug
   (sbcl-package->ecl-package sbcl-ndebug))
 
+(define-public sbcl-canonicalized-initargs
+  (package
+    (name "sbcl-canonicalized-initargs")
+    (version "2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Hexstream/canonicalized-initargs")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "cl-canonicalized-initargs" version))
+       (sha256
+        (base32 "0jmmjw86x9mmlfla4kdmdqf1fjrj0p2fmv1lc4k555mcf67mj2fq"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-parachute))
+    (inputs
+     (list sbcl-cesdi
+           sbcl-closer-mop
+           sbcl-compatible-metaclasses
+           sbcl-enhanced-defclass
+           sbcl-enhanced-typep))
+    (home-page
+     "https://www.hexstreamsoft.com/libraries/canonicalized-initargs/")
+    (synopsis "Standard way to canonicalize slot values")
+    (description
+     "This package provides a standard way to canonicalize slot values.")
+    (license license:unlicense)))
+
+(define-public cl-canonicalized-initargs
+  (sbcl-package->cl-source-package sbcl-canonicalized-initargs))
+
+(define-public ecl-canonicalized-initargs
+  (sbcl-package->ecl-package sbcl-canonicalized-initargs))
+
+(define-public sbcl-enhanced-typep
+  (package
+    (name "sbcl-enhanced-typep")
+    (version "1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Hexstream/enhanced-typep")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "cl-enhanced-typep" version))
+       (sha256
+        (base32 "0b22gddkbxnhmi71wa2h51495737lrvsqxnri7g1qdsl1hraml21"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-enhanced-boolean sbcl-parachute))
+    (home-page "https://www.hexstreamsoft.com/libraries/enhanced-typep/")
+    (synopsis "Enhanced version of typep")
+    (description
+     "This package provides an enhanced version of @code{typep} that is exactly
+like the one in the Lisp spec, except it can also accept a single type argument,
+in which case it returns the appropriate closure.")
+      (license license:unlicense)))
+
+(define-public cl-enhanced-typep
+  (sbcl-package->cl-source-package sbcl-enhanced-typep))
+
+(define-public ecl-enhanced-typep
+  (sbcl-package->ecl-package sbcl-enhanced-typep))
+
+(define-public sbcl-enhanced-defclass
+  (package
+    (name "sbcl-enhanced-defclass")
+    (version "2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Hexstream/enhanced-defclass")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "cl-enhanced-defclass" version))
+       (sha256
+        (base32 "142s5c3pl3x7xdawzsj8pdxiqp4wh6fcajf4la5msvnxgf66d8wg"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-parachute))
+    (inputs
+     (list sbcl-cesdi
+           sbcl-closer-mop
+           sbcl-compatible-metaclasses
+           sbcl-enhanced-eval-when
+           sbcl-object-class
+           sbcl-shared-preferences
+           sbcl-simple-guess))
+    (home-page "https://www.hexstreamsoft.com/libraries/enhanced-defclass/")
+    (synopsis "Extensible implementation of defclass")
+    (description
+     "This package provides an extensible implementation of defclass that can
+accurately control the expansion according to the metaclass and automatically
+detect the suitable metaclass by analyzing the @code{defclass} form.")
+    (license license:unlicense)))
+
+(define-public cl-enhanced-defclass
+  (sbcl-package->cl-source-package sbcl-enhanced-defclass))
+
+(define-public ecl-enhanced-defclass
+  (sbcl-package->ecl-package sbcl-enhanced-defclass))
+
+(define-public sbcl-object-class
+  (package
+    (name "sbcl-object-class")
+    (version "1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Hexstream/object-class")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "cl-object-class" version))
+       (sha256
+        (base32 "0qagmd2mxbr8b60l0y3jccj0maxjchds96p935pd3q805ry50683"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-parachute))
+    (inputs
+     (list sbcl-closer-mop
+           sbcl-compatible-metaclasses
+           sbcl-enhanced-find-class))
+    (home-page "https://www.hexstreamsoft.com/libraries/object-class/")
+    (synopsis "Cluster special subclasses of the standard-object")
+    (description
+     "This package ensures that special subclasses of standard-object cluster
+right in front of standard-object in the class precedence list.")
+    (license license:unlicense)))
+
+(define-public cl-object-class
+  (sbcl-package->cl-source-package sbcl-object-class))
+
+(define-public ecl-object-class
+  (sbcl-package->ecl-package sbcl-object-class))
+
+(define-public sbcl-shared-preferences
+  (package
+    (name "sbcl-shared-preferences")
+    (version "1.1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Hexstream/shared-preferences")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "cl-shared-preferences" version))
+       (sha256
+        (base32 "12m4kaba2lxndkjw30a6y2rq16fflh5016lp74l7pf3v0y3j1ydf"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-parachute))
+    (inputs
+     (list sbcl-inheriting-readers
+           sbcl-trivial-garbage))
+    (home-page "https://www.hexstreamsoft.com/libraries/shared-preferences/")
+    (synopsis "Flexible specification of package-local preferences")
+    (description
+     "This package allows flexible specification of package-local preferences.")
+    (license license:unlicense)))
+
+(define-public cl-shared-preferences
+  (sbcl-package->cl-source-package sbcl-shared-preferences))
+
+(define-public ecl-shared-preferences
+  (sbcl-package->ecl-package sbcl-shared-preferences))
+
+(define-public sbcl-inheriting-readers
+  (package
+    (name "sbcl-inheriting-readers")
+    (version "1.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Hexstream/inheriting-readers")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "cl-inheriting-readers" version))
+       (sha256
+        (base32 "0km3mq6vx1q9qv6j3r4sqqcsdbnb5jar66bl0mzzpaacfvzbx68p"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-parachute))
+    (inputs
+     (list sbcl-class-options
+           sbcl-closer-mop
+           sbcl-compatible-metaclasses))
+    (home-page "https://www.hexstreamsoft.com/libraries/inheriting-readers/")
+    (synopsis "Simple yet powerful value inheritance scheme")
+    (description
+     "This package provides a simple yet powerful value inheritance scheme.")
+    (license license:unlicense)))
+
+(define-public cl-inheriting-readers
+  (sbcl-package->cl-source-package sbcl-inheriting-readers))
+
+(define-public ecl-inheriting-readers
+  (sbcl-package->ecl-package sbcl-inheriting-readers))
+
+(define-public sbcl-simple-guess
+  (let ((commit "34744e3200a96e6aba285d70f91cdbd6c25508a6")
+        (revision "0"))
+    (package
+      (name "sbcl-simple-guess")
+      (version (git-version "1.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                (url "https://github.com/Hexstream/simple-guess")
+                (commit commit)))
+          (file-name (git-file-name "cl-simple-guess" version))
+          (sha256
+           (base32 "0404vj7ln97x7rn9ypbw4rshs56nnpyjnh1z9k03s039s5q3kpv0"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       (list sbcl-fakenil sbcl-parachute))
+      (inputs
+       (list sbcl-cesdi
+             sbcl-closer-mop
+             sbcl-compatible-metaclasses
+             sbcl-evaled-when))
+      (home-page "https://www.hexstreamsoft.com/libraries/simple-guess/")
+      (synopsis "Extensible protocol for computing a guess using advisors")
+      (description
+       "This package defines a simple extensible protocol for computing a guess
+using advisors.")
+      (license license:unlicense))))
+
+(define-public cl-simple-guess
+  (sbcl-package->cl-source-package sbcl-simple-guess))
+
+(define-public ecl-simple-guess
+  (sbcl-package->ecl-package sbcl-simple-guess))
+
+(define-public sbcl-fakenil
+  (package
+    (name "sbcl-fakenil")
+    (version "1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Hexstream/fakenil")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "cl-fakenil" version))
+       (sha256
+        (base32 "0ipqax3sgcs1dsgxz8d2pmfg324k6l35pn0nz89w5jl02fia61l3"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-parachute))
+    (home-page "https://www.hexstreamsoft.com/libraries/fakenil/")
+    (synopsis "Provides a canonical stand-in for NIL")
+    (description
+     "This package provides a canonical stand-in for NIL for contexts where
+NIL means no value.")
+    (license license:unlicense)))
+
+(define-public cl-fakenil
+  (sbcl-package->cl-source-package sbcl-fakenil))
+
+(define-public ecl-fakenil
+  (sbcl-package->ecl-package sbcl-fakenil))
+
+(define-public sbcl-evaled-when
+  (let ((commit "c59f8ab20b846cac81d4be80d056a3d65676e8eb")
+        (revision "0"))
+    (package
+      (name "sbcl-evaled-when")
+      (version (git-version "1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Hexstream/evaled-when")
+               (commit commit)))
+         (file-name (git-file-name "cl-evaled-when" version))
+         (sha256
+          (base32 "07g1a50aairvsj57issb18si5a9r3skpbk05nlixmlj0mva3gkl3"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       (list sbcl-enhanced-boolean sbcl-parachute))
+      (inputs
+       (list sbcl-trivial-cltl2))
+      (home-page "https://www.hexstreamsoft.com/libraries/evaled-when/")
+      (synopsis "Extract and replicate the compile-time side-effects of forms")
+      (description
+       "This package provides a way of extracting and replicating the
+compile-time side-effects of forms.")
+      (license license:unlicense))))
+
+(define-public cl-evaled-when
+  (sbcl-package->cl-source-package sbcl-evaled-when))
+
+(define-public ecl-evaled-when
+  (sbcl-package->ecl-package sbcl-evaled-when))
+
+(define-public sbcl-enhanced-eval-when
+  (package
+    (name "sbcl-enhanced-eval-when")
+    (version "1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Hexstream/enhanced-eval-when")
+             (commit (string-append "v" version))))
+          (file-name (git-file-name "cl-enhanced-eval-when" version))
+          (sha256
+           (base32 "1ws1v297plcbqmcvckg7vqzzgnrwfyx5kd7281r1wrhc26998rx2"))))
+    (build-system asdf-build-system/sbcl)
+    ;; https://github.com/Hexstream/enhanced-eval-when/issues/1
+    (arguments
+     (list #:tests? #f)) ; There are no tests in version 1.0.
+    (home-page "https://www.hexstreamsoft.com/libraries/enhanced-eval-when/")
+    (synopsis "Shortcuts for EVAL-WHEN")
+    (description
+     "This package provides an enhanced @code{EVAL-WHEN} macro that supports a
+shorthand for @code{(eval-when (:compile-toplevel :load-toplevel :execute) ...)},
+addressing concerns about verbosity.")
+    (license license:unlicense)))
+
+(define-public cl-enhanced-eval-when
+  (sbcl-package->cl-source-package sbcl-enhanced-eval-when))
+
+(define-public ecl-enhanced-eval-when
+  (sbcl-package->ecl-package sbcl-enhanced-eval-when))
+
+(define-public sbcl-enhanced-boolean
+  (package
+    (name "sbcl-enhanced-boolean")
+    (version "1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Hexstream/enhanced-boolean")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "cl-enhanced-boolean" version))
+       (sha256
+        (base32 "17l18lz07fk2kg835vs6c3189d230n1rm9vghk3ls4i356gbq0gy"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-parachute))
+    (home-page "https://www.hexstreamsoft.com/libraries/enhanced-boolean/")
+    (synopsis "Convert generalized booleans to booleans")
+    (description
+     "This package provides a canonical way of converting generalized booleans
+to booleans.")
+    (license license:unlicense)))
+
+(define-public cl-enhanced-boolean
+  (sbcl-package->cl-source-package sbcl-enhanced-boolean))
+
+(define-public ecl-enhanced-boolean
+  (sbcl-package->ecl-package sbcl-enhanced-boolean))
+
+(define-public sbcl-cesdi
+  (package
+    (name "sbcl-cesdi")
+    (version "1.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Hexstream/cesdi")
+             (commit version)))
+       (file-name (git-file-name "cl-cesdi" version))
+       (sha256
+        (base32 "02f2pz5rw79ljkkx1ywh8nkpjj4g3z3s1lyvzqb8krbnx11wl0q9"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-parachute))
+    (inputs
+     (list sbcl-closer-mop))
+    (home-page "https://www.hexstreamsoft.com/libraries/cesdi/")
+    (synopsis "Ergonomic initialization of effective slot definition objects")
+    (description
+     "This package provides a @code{compute-effective-slot-definition-initargs}
+generic function that allows for more ergonomic initialization of effective slot
+definition objects.")
+    (license license:unlicense)))
+
+(define-public cl-cesdi
+  (sbcl-package->cl-source-package sbcl-cesdi))
+
+(define-public ecl-cesdi
+  (sbcl-package->ecl-package sbcl-cesdi))
+
+(define-public sbcl-compatible-metaclasses
+  (package
+    (name "sbcl-compatible-metaclasses")
+    (version "1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Hexstream/compatible-metaclasses")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "cl-compatible-metaclasses" version))
+       (sha256
+        (base32 "17cf74j400cl6sjslfhkv13lir85k705v63mx3dd4y6dl5hvsdh6"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-parachute))
+    (inputs
+     (list sbcl-class-options
+           sbcl-closer-mop
+           sbcl-enhanced-find-class))
+    (home-page "https://www.hexstreamsoft.com/libraries/compatible-metaclasses/")
+    (synopsis "Simplifies class mixins by validating superclasses")
+    (description
+     "This library validates superclasses according to a simple substitution
+model, thereby greatly simplifying the definition of class mixins.")
+    (license license:unlicense)))
+
+(define-public cl-compatible-metaclasses
+  (sbcl-package->cl-source-package sbcl-compatible-metaclasses))
+
+(define-public ecl-compatible-metaclasses
+  (sbcl-package->ecl-package sbcl-compatible-metaclasses))
+
+(define-public sbcl-class-options
+  (package
+    (name "sbcl-class-options")
+    (version "1.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Hexstream/class-options")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "cl-class-options" version))
+       (sha256
+        (base32 "1dkgr1vbrsra44jznzz2bvdf8nlpdrrkjcqrfs8aa7axksda3bqk"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-enhanced-boolean sbcl-parachute))
+    (inputs
+     (list sbcl-closer-mop sbcl-enhanced-find-class))
+    (home-page "https://www.hexstreamsoft.com/libraries/class-options/")
+    (synopsis "Accessing defining class and its options during modification")
+    (description
+     "This package provides easy access to the defining class and its options
+during initialization or reinitialization of its subcomponents.")
+    (license license:unlicense)))
+
+(define-public cl-class-options
+  (sbcl-package->cl-source-package sbcl-class-options))
+
+(define-public ecl-class-options
+  (sbcl-package->ecl-package sbcl-class-options))
+
+(define-public sbcl-enhanced-find-class
+  (package
+    (name "sbcl-enhanced-find-class")
+    (version "1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Hexstream/enhanced-find-class")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "cl-enhanced-find-class" version))
+       (sha256
+        (base32 "1pf1mxb238zrmvgm9s0456s1x0m317ls23ls1d987riw69y3w9vx"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-parachute))
+    (inputs
+     (list sbcl-closer-mop))
+    (home-page "https://www.hexstreamsoft.com/libraries/enhanced-find-class/")
+    (synopsis "Canonical way of converting class designators to classes")
+    (description
+     "This package provides a canonical way of converting class designators
+to classes.")
+    (license license:unlicense)))
+
+(define-public cl-enhanced-find-class
+  (sbcl-package->cl-source-package sbcl-enhanced-find-class))
+
+(define-public ecl-enhanced-find-class
+  (sbcl-package->ecl-package sbcl-enhanced-find-class))
+
+(define-public sbcl-definitions-systems
+  (package
+    (name "sbcl-definitions-systems")
+    (version "2.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Hexstream/definitions-systems")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "cl-definitions-systems" version))
+       (sha256
+        (base32 "009392mj0qdq4jy0dw5r41schnygwj286759yvyg7xja30a0psfq"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-parachute))
+    (inputs
+     (list sbcl-canonicalized-initargs
+           sbcl-enhanced-defclass
+           sbcl-enhanced-find-class
+           sbcl-shared-preferences))
+    (home-page "https://www.hexstreamsoft.com/libraries/definitions-systems/")
+    (synopsis "Unified extensible way of processing named definitions")
+    (description
+     "@code{definitions-systems} provides a simple unified extensible way of
+processing named definitions.")
+    (license license:unlicense)))
+
+(define-public cl-definitions-systems
+  (sbcl-package->cl-source-package sbcl-definitions-systems))
+
+(define-public ecl-definitions-systems
+  (sbcl-package->ecl-package sbcl-definitions-systems))
+
 (define-public sbcl-smug
   (let ((commit "647a2428df297e1dd183ba7c19574bdb1320ae79")
         (revision "0"))
diff --git a/gnu/packages/patches/qemu-build-info-manual.patch b/gnu/packages/patches/qemu-build-info-manual.patch
index 945c48a0e2..ff28266aaa 100644
--- a/gnu/packages/patches/qemu-build-info-manual.patch
+++ b/gnu/packages/patches/qemu-build-info-manual.patch
@@ -8,53 +8,14 @@ manual.  The Texinfo format allows for more structure and info readers
 provide more advanced navigation capabilities compared to manpages
 readers.
 
-* configure (infodir): Add an --infodir option, which allows
-configuring the directory under which the info manuals are installed.
 * docs/meson.build (texi, info): New targets.
 
 Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
 
-diff --git a/configure b/configure
---- a/configure
-+++ b/configure
-@@ -951,6 +951,8 @@ for opt do
-     static="yes"
-     QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
-   ;;
-+  --infodir=*) infodir="$optarg"
-+  ;;
-   --mandir=*) mandir="$optarg"
-   ;;
-   --bindir=*) bindir="$optarg"
-@@ -978,7 +980,7 @@ for opt do
-   --host=*|--build=*|\
-   --disable-dependency-tracking|\
-   --sbindir=*|--sharedstatedir=*|\
--  --oldincludedir=*|--datarootdir=*|--infodir=*|\
-+  --oldincludedir=*|--datarootdir=*|\
-   --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
-     # These switches are silently ignored, for compatibility with
-     # autoconf-generated configure scripts. This allows QEMU's
-@@ -1599,6 +1601,7 @@ else
- fi
- mandir="${mandir:-$prefix/share/man}"
- datadir="${datadir:-$prefix/share}"
-+infodir="${infodir:-$datadir/info}"
- docdir="${docdir:-$prefix/share/doc}"
- sysconfdir="${sysconfdir:-$prefix/etc}"
- local_statedir="${local_statedir:-$prefix/var}"
-@@ -1736,6 +1739,7 @@ Advanced options (experts only):
-   --with-git-submodules=validate fail if git submodules are not up to date
-   --with-git-submodules=ignore   do not update or check git submodules (default if no .git dir)
-   --static                 enable static build [$static]
-+  --infodir=PATH           install info manual in PATH
-   --mandir=PATH            install man pages in PATH
-   --datadir=PATH           install firmware in PATH/$qemu_suffix
-   --localedir=PATH         install translation in PATH/$qemu_suffix
 diff --git a/docs/meson.build b/docs/meson.build
 --- a/docs/meson.build
 +++ b/docs/meson.build
-@@ -104,4 +104,25 @@ if build_docs
+@@ -92,4 +92,25 @@ if build_docs
    alias_target('sphinxdocs', sphinxdocs)
    alias_target('html', sphinxdocs)
    alias_target('man', sphinxmans)
@@ -83,7 +44,7 @@ diff --git a/docs/meson.build b/docs/meson.build
 diff --git a/meson.build b/meson.build
 --- a/meson.build
 +++ b/meson.build
-@@ -35,6 +35,7 @@ endif
+@@ -37,6 +37,7 @@ endif
  qemu_confdir = get_option('sysconfdir') / get_option('qemu_suffix')
  qemu_datadir = get_option('datadir') / get_option('qemu_suffix')
  qemu_docdir = get_option('docdir') / get_option('qemu_suffix')
@@ -91,11 +52,11 @@ diff --git a/meson.build b/meson.build
  qemu_moddir = get_option('libdir') / get_option('qemu_suffix')
  
  qemu_desktopdir = get_option('datadir') / 'applications'
-@@ -2433,6 +2434,7 @@ else
+@@ -3698,6 +3699,7 @@ else
    summary_info += {'local state directory': 'queried at runtime'}
  endif
- summary_info += {'Doc directory':     get_option('docdir')}
-+summary_info += {'Info directory':    get_option('infodir')}
+ summary_info += {'Doc directory':     get_option('prefix') / get_option('docdir')}
++summary_info += {'Info directory':    get_option('prefix') / get_option('infodir')}
  summary_info += {'Build directory':   meson.current_build_dir()}
  summary_info += {'Source path':       meson.current_source_dir()}
  summary_info += {'GIT submodules':    config_host['GIT_SUBMODULES']}
diff --git a/gnu/packages/patches/qemu-fix-agent-paths.patch b/gnu/packages/patches/qemu-fix-agent-paths.patch
index bae62fadbf..0c29890206 100644
--- a/gnu/packages/patches/qemu-fix-agent-paths.patch
+++ b/gnu/packages/patches/qemu-fix-agent-paths.patch
@@ -4,7 +4,6 @@ after the patch from the Nix package:
 https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/virtualization/qemu/fix-qemu-ga.patch
 
 diff --git a/qga/commands-posix.c b/qga/commands-posix.c
-index 75dbaab..b416b03 100644
 --- a/qga/commands-posix.c
 +++ b/qga/commands-posix.c
 @@ -84,6 +84,7 @@ static void ga_wait_child(pid_t pid, int *status, Error **errp)
@@ -15,33 +14,33 @@ index 75dbaab..b416b03 100644
      Error *local_err = NULL;
      pid_t pid;
      int status;
-@@ -91,10 +92,13 @@ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **errp)
+@@ -101,10 +102,13 @@ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **errp)
      slog("guest-shutdown called, mode: %s", mode);
      if (!has_mode || strcmp(mode, "powerdown") == 0) {
-         shutdown_flag = "-P";
+         shutdown_flag = powerdown_flag;
 +        command = "shutdown";
      } else if (strcmp(mode, "halt") == 0) {
-         shutdown_flag = "-H";
+         shutdown_flag = halt_flag;
 +        command = "halt";
      } else if (strcmp(mode, "reboot") == 0) {
-         shutdown_flag = "-r";
+         shutdown_flag = reboot_flag;
 +        command = "reboot";
      } else {
          error_setg(errp,
                     "mode is invalid (valid values are: halt|powerdown|reboot");
-@@ -109,6 +113,11 @@ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **errp)
-         reopen_fd_to_null(1);
-         reopen_fd_to_null(2);
- 
+@@ -123,6 +127,11 @@ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **errp)
+         execl("/sbin/shutdown", "shutdown", shutdown_flag, "-g0", "-y",
+               "hypervisor initiated shutdown", (char *)NULL);
+ #else
 +        /* try Guix’s shutdown/halt/reboot first */
 +        char *path = g_strdup_printf("/run/current-system/profile/sbin/%s", command);
-+        execle(path, command, (char *)NULL, environ);
++        execl(path, command, (char *)NULL);
 +        g_free(path);
 +
-         execle("/sbin/shutdown", "shutdown", "-h", shutdown_flag, "+0",
-                "hypervisor initiated shutdown", (char *)NULL, environ);
-         _exit(EXIT_FAILURE);
-@@ -158,10 +167,12 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
+         execl("/sbin/shutdown", "shutdown", "-h", shutdown_flag, "+0",
+                "hypervisor initiated shutdown", (char *)NULL);
+ #endif
+@@ -159,10 +168,12 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
      Error *local_err = NULL;
      struct timeval tv;
      static const char hwclock_path[] = "/sbin/hwclock";
@@ -55,12 +54,12 @@ index 75dbaab..b416b03 100644
      }
  
      if (!hwclock_available) {
-@@ -207,6 +218,8 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
+@@ -208,6 +219,8 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
  
          /* Use '/sbin/hwclock -w' to set RTC from the system time,
           * or '/sbin/hwclock -s' to set the system time from RTC. */
-+        execle(hwclock_path_guix, "hwclock", has_time ? "-w" : "-s",
-+               NULL, environ);
-         execle(hwclock_path, "hwclock", has_time ? "-w" : "-s",
-                NULL, environ);
++        execl(hwclock_path_guix, "hwclock", has_time ? "-w" : "-s",
++               NULL);
+         execl(hwclock_path, "hwclock", has_time ? "-w" : "-s", NULL);
          _exit(EXIT_FAILURE);
+     } else if (pid < 0) {
diff --git a/gnu/packages/python-check.scm b/gnu/packages/python-check.scm
index 9930b8c8ec..77ddaf00b0 100644
--- a/gnu/packages/python-check.scm
+++ b/gnu/packages/python-check.scm
@@ -1249,19 +1249,21 @@ for the @code{pytest} framework.")
 (define-public python-pytest-benchmark
   (package
     (name "python-pytest-benchmark")
-    (version "3.2.3")
+    (version "3.4.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-benchmark" version))
        (sha256
         (base32
-         "0a4mpb4j73dsyk47hd1prrjpfk4r458s102cn80rf253jg818hxd"))))
+         "0ivvrnhax2xr62grlgw4hlyjmmjp6nc35431j7c82nny2bwn7qj0"))))
     (build-system python-build-system)
+    (arguments
+     '(#:test-target "check"))
     (propagated-inputs
      (list python-py-cpuinfo))
     (native-inputs
-     (list python-pathlib2 python-pytest))
+     (list python-pytest))
     (home-page "https://github.com/ionelmc/pytest-benchmark")
     (synopsis "Pytest fixture for benchmarking code")
     (description
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 2afb4a4ca7..82eb42dffa 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -1204,13 +1204,13 @@ access the technical and tag data for video and audio files.")
 (define-public python-psutil
   (package
     (name "python-psutil")
-    (version "5.9.0")
+    (version "5.9.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "psutil" version))
        (sha256
-        (base32 "09fa4vfhansixvxd3lv664xcrbnfdyfn53hm2wr0rf3bsvdl5646"))))
+        (base32 "0p1bf6ndcssqh0ic828ggwhzhm67mzj3ffq6043v0fvc1fhn3f7y"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: some tests do not return and time out.  Some tests fail because
@@ -8077,14 +8077,14 @@ functions like pickle, json or PyYAML module.")
 (define-public python-pathlib2
   (package
     (name "python-pathlib2")
-    (version "2.3.6")
+    (version "2.3.7.post1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pathlib2" version))
        (sha256
         (base32
-         "0psyg60vk8wca473djrh0v9gb853z8wcawi8im5dyg00amawp2vx"))))
+         "0hf62d0lsf37vnr5fxqp5rfn85njgsr45j4rw71w10wbi6nyvq4z"))))
     (build-system python-build-system)
     (propagated-inputs
      (list python-scandir python-six))
@@ -9384,15 +9384,23 @@ the GObject Introspection bindings to libnotify for non-GTK applications.")
 (define-public python-beautifulsoup4
   (package
     (name "python-beautifulsoup4")
-    (version "4.10.0")
+    (version "4.11.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "beautifulsoup4" version))
        (sha256
         (base32
-         "14c8z4gh9bi38agx9ls8ym5rscc02pc6f6hmliaqk08xa8yd4fn2"))))
+         "14v68cpfzckfz63n9hnbsm271jvzvxscyijz83mhha7gcmdsb6md"))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (invoke "pytest" "-vv")))))))
+    (native-inputs
+     (list python-pytest))
     (propagated-inputs
      (list python-soupsieve python-html5lib python-lxml))
     (home-page
diff --git a/gnu/packages/rust-apps.scm b/gnu/packages/rust-apps.scm
index 7d84516c83..b89eff4eb0 100644
--- a/gnu/packages/rust-apps.scm
+++ b/gnu/packages/rust-apps.scm
@@ -1659,7 +1659,7 @@ support for Rust.")
     (native-inputs
      (list pkg-config))
     (inputs
-     (list curl libgit2-1.3 libssh2 openssl zlib))
+     (list curl libgit2-1.3 libssh2 openssl-1.1 zlib))
     (home-page "https://github.com/lu-zero/cargo-c")
     (synopsis "Build and install C-compatible libraries")
     (description
diff --git a/gnu/packages/security-token.scm b/gnu/packages/security-token.scm
index 204fd19d4a..d89714b577 100644
--- a/gnu/packages/security-token.scm
+++ b/gnu/packages/security-token.scm
@@ -312,7 +312,7 @@ website for more information about Yubico and the YubiKey.")
                   (string-append
                    "DEFAULT_PCSC_PROVIDER=\"" libpcsclite "\"")))))))))
     (inputs
-     (list readline openssl pcsc-lite ccid))
+     (list readline openssl-1.1 pcsc-lite ccid))
     (native-inputs
      (list libxslt docbook-xsl pkg-config))
     (home-page "https://github.com/OpenSC/OpenSC/wiki")
diff --git a/gnu/packages/spice.scm b/gnu/packages/spice.scm
index b0bf2bc939..5d505b0ee2 100644
--- a/gnu/packages/spice.scm
+++ b/gnu/packages/spice.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2016 David Craven <david@craven.ch>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
-;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -47,6 +47,7 @@
   #:use-module (guix build-system meson)
   #:use-module (guix download)
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix utils))
 
@@ -149,7 +150,7 @@ which allows users to view a desktop computing environment.")
             ;; These are required by the pkg-config files.
             gtk+
             pixman
-            openssl))
+            openssl-1.1))
     (inputs
       `(("glib-networking" ,glib-networking)
         ("gobject-introspection" ,gobject-introspection)
@@ -221,7 +222,7 @@ which allows users to view a desktop computing environment.")
                 "1xd0xffw0g5vvwbq4ksmm3jjfq45f9dw20xpmi82g1fj9f7wy85k"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      (list openssl pixman spice-protocol))
+      (list openssl-1.1 pixman spice-protocol))
     (inputs
       (list cyrus-sasl
             glib
@@ -340,6 +341,13 @@ resolution scaling on graphical console window resize.")
                (base32
                 "1rrjlclm6ad63gah1fa4yfwrz4z6vgq2yrybbvzvvdbxrgl4vgzv"))))
     (build-system meson-build-system)
+    (arguments
+     (list #:configure-flags
+           ;; XXX: For some reason NSS is not automatically added on RUNPATH
+           ;; with newer versions of Meson (after 0.60).
+           #~(list (string-append "-Dc_link_args=-Wl,-rpath="
+                                  (search-input-directory
+                                   %build-inputs "lib/nss")))))
     (propagated-inputs
      (list glib ; Requires: in the pkg-config file
            nss ; Requires.private: in the pkg-config
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 73e6f89166..2860894bbd 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -158,7 +158,7 @@
 (define-public qemu
   (package
     (name "qemu")
-    (version "6.2.0")
+    (version "7.1.0")
     (source
      (origin
        (method url-fetch)
@@ -166,7 +166,7 @@
                            version ".tar.xz"))
        (sha256
         (base32
-         "0iavlsy9hin8k38230j8lfmyipx3965zljls1dp34mmc8n75vqb8"))
+         "1rmvrgqjhrvcmchnz170dxvrrf14n6nm39y8ivrprmfydd9lwqx0"))
        (patches (search-patches "qemu-build-info-manual.patch"
                                 "qemu-fix-agent-paths.patch"))
        (modules '((guix build utils)))
@@ -177,154 +177,155 @@
     (outputs '("out" "static" "doc"))   ;5.3 MiB of HTML docs
     (build-system gnu-build-system)
     (arguments
-     ;; FIXME: Disable tests on i686 to work around
-     ;; <https://bugs.gnu.org/40527>.
-     `(#:tests? ,(or (%current-target-system)
-                     (not (string=? "i686-linux" (%current-system))))
-       #:configure-flags
-       (let ((gcc (search-input-file %build-inputs "/bin/gcc"))
-             (out (assoc-ref %outputs "out")))
-         (list (string-append "--cc=" gcc)
-               ;; Some architectures insist on using HOST_CC.
-               (string-append "--host-cc=" gcc)
-               (string-append "--prefix=" out)
-               "--sysconfdir=/etc"
-               (string-append "--smbd=" out "/libexec/samba-wrapper")
-               "--disable-debug-info"   ;for space considerations
-               ;; The binaries need to be linked against -lrt.
-               (string-append "--extra-ldflags=-lrt")))
-       ;; Make build and test output verbose to facilitate investigation upon failure.
-       #:make-flags '("V=1")
-       #:modules ((srfi srfi-1)
+     (list
+      ;; FIXME: Disable tests on i686 to work around
+      ;; <https://bugs.gnu.org/40527>.
+      #:tests? (or (%current-target-system)
+                   (not (string=? "i686-linux" (%current-system))))
+      #:configure-flags
+      #~(let ((gcc (search-input-file %build-inputs "/bin/gcc"))
+              (out #$output))
+          (list (string-append "--cc=" gcc)
+                ;; Some architectures insist on using HOST_CC.
+                (string-append "--host-cc=" gcc)
+                (string-append "--prefix=" out)
+                "--sysconfdir=/etc"
+                (string-append "--smbd=" out "/libexec/samba-wrapper")
+                "--disable-debug-info"  ;for space considerations
+                ;; The binaries need to be linked against -lrt.
+                (string-append "--extra-ldflags=-lrt")))
+      ;; Make build and test output verbose to facilitate investigation upon failure.
+      #:make-flags #~'("V=1")
+      #:modules `((srfi srfi-1)
                   (srfi srfi-26)
                   (ice-9 ftw)
                   (ice-9 match)
                   ,@%gnu-build-system-modules)
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'extend-test-time-outs
-           (lambda _
-             ;; These tests can time out on heavily-loaded and/or slow storage.
-             (substitute* (cons* "tests/qemu-iotests/common.qemu"
-                                 (find-files "tests/qemu-iotests" "^[0-9]+$"))
-               (("QEMU_COMM_TIMEOUT=[0-9]+" match)
-                (string-append match "9")))))
-         (add-after 'unpack 'disable-unusable-tests
-           (lambda _
-             (substitute* "tests/unit/meson.build"
-               ;; Comment out the test-qga test, which needs /sys and
-               ;; fails within the build environment.
-               (("tests.*test-qga.*$" all)
-                (string-append "# " all))
-               ;; Comment out the test-char test, which needs networking and
-               ;; fails within the build environment.
-               ((".*'test-char':.*" all)
-                (string-append "# " all)))))
-         ,@(if (target-riscv64?)
-             `((add-after 'unpack 'disable-some-tests
-                 (lambda _
-                   ;; qemu.qmp.QMPConnectError: Unexpected empty reply from server
-                   (delete-file "tests/qemu-iotests/040")
-                   (delete-file "tests/qemu-iotests/041")
-                   (delete-file "tests/qemu-iotests/256")
-
-                   ;; No 'PCI' bus found for device 'virtio-scsi-pci'
-                   (delete-file "tests/qemu-iotests/127")
-                   (delete-file "tests/qemu-iotests/267"))))
-             '())
-         (add-after 'patch-source-shebangs 'patch-embedded-shebangs
-           (lambda* (#:key native-inputs inputs #:allow-other-keys)
-             ;; Ensure the executables created by these source files reference
-             ;; /bin/sh from the store so they work inside the build container.
-             (substitute* '("block/cloop.c" "migration/exec.c"
-                            "net/tap.c" "tests/qtest/libqtest.c"
-                            "tests/qtest/vhost-user-blk-test.c")
-               (("/bin/sh") (search-input-file inputs "/bin/sh")))
-             (substitute* "tests/qemu-iotests/testenv.py"
-               (("#!/usr/bin/env python3")
-                (string-append "#!" (search-input-file (or native-inputs inputs)
-                                                       "/bin/python3"))))))
-         (add-before 'configure 'fix-optionrom-makefile
-           (lambda _
-             ;; Work around the inability of the rules defined in this
-             ;; Makefile to locate the firmware files (e.g.: No rule to make
-             ;; target 'multiboot.bin') by extending the VPATH.
-             (substitute* "pc-bios/optionrom/Makefile"
-               (("^VPATH = \\$\\(SRC_DIR\\)")
-                "VPATH = $(SRC_DIR):$(TOPSRC_DIR)/pc-bios"))))
-         ;; XXX ./configure is being re-run at beginning of build phase...
-         (replace 'configure
-           (lambda* (#:key inputs outputs configure-flags #:allow-other-keys)
-             ;; The `configure' script doesn't understand some of the
-             ;; GNU options.  Thus, add a new phase that's compatible.
-             (let ((out (assoc-ref outputs "out")))
-               (setenv "SHELL" (which "bash"))
-               ;; Ensure config.status gets the correct shebang off the bat.
-               ;; The build system gets confused if we change it later and
-               ;; attempts to re-run the whole configuration, and fails.
-               (substitute* "configure"
-                 (("#!/bin/sh")
-                  (string-append "#!" (which "sh"))))
-               (mkdir-p "b/qemu")
-               (chdir "b/qemu")
-               (apply invoke "../../configure" configure-flags))))
-         ;; Configure, build and install QEMU user-emulation static binaries.
-         (add-after 'configure 'configure-user-static
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((gcc (search-input-file inputs "/bin/gcc"))
-                    (static (assoc-ref outputs "static"))
-                    ;; This is the common set of configure flags; it is
-                    ;; duplicated here to isolate this phase from manipulations
-                    ;; to the #:configure-flags build argument, as done in
-                    ;; derived packages such as qemu-minimal.
-                    (configure-flags (list (string-append "--cc=" gcc)
-                                           (string-append "--host-cc=" gcc)
-                                           "--sysconfdir=/etc"
-                                           "--disable-debug-info")))
-               (mkdir-p "../user-static")
-               (with-directory-excursion "../user-static"
-                 (apply invoke "../../configure"
-                        "--static"
-                        "--disable-docs" ;already built
-                        "--disable-system"
-                        "--enable-linux-user"
-                        (string-append "--prefix=" static)
-                        configure-flags)))))
-         (add-after 'build 'build-user-static
-           (lambda args
-             (with-directory-excursion "../user-static"
-               (apply (assoc-ref %standard-phases 'build) args))))
-         (add-after 'install 'install-user-static
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((static (assoc-ref outputs "static"))
-                    (bin (string-append static "/bin")))
-               (with-directory-excursion "../user-static"
-                 (for-each (cut install-file <> bin)
-                           (append-map (cut find-files <> "^qemu-" #:stat stat)
-                                       (scandir "."
-                                                (cut string-suffix?
-                                                     "-linux-user" <>))))))))
-         ;; Create a wrapper for Samba. This allows QEMU to use Samba without
-         ;; pulling it in as an input. Note that you need to explicitly install
-         ;; Samba in your Guix profile for Samba support.
-         (add-after 'install 'create-samba-wrapper
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out    (assoc-ref outputs "out"))
-                    (libexec (string-append out "/libexec")))
-               (call-with-output-file "samba-wrapper"
-                 (lambda (port)
-                   (format port "#!/bin/sh
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'extend-test-time-outs
+            (lambda _
+              ;; These tests can time out on heavily-loaded and/or slow storage.
+              (substitute* (cons* "tests/qemu-iotests/common.qemu"
+                                  (find-files "tests/qemu-iotests" "^[0-9]+$"))
+                (("QEMU_COMM_TIMEOUT=[0-9]+" match)
+                 (string-append match "9")))))
+          (add-after 'unpack 'disable-unusable-tests
+            (lambda _
+              (substitute* "tests/unit/meson.build"
+                ;; Comment out the test-qga test, which needs /sys and
+                ;; fails within the build environment.
+                (("tests.*test-qga.*$" all)
+                 (string-append "# " all))
+                ;; Comment out the test-char test, which needs networking and
+                ;; fails within the build environment.
+                ((".*'test-char':.*" all)
+                 (string-append "# " all)))))
+          #$@(if (target-riscv64?)
+                 '((add-after 'unpack 'disable-some-tests
+                     (lambda _
+                       ;; qemu.qmp.QMPConnectError:
+                       ;; Unexpected empty reply from server
+                       (delete-file "tests/qemu-iotests/040")
+                       (delete-file "tests/qemu-iotests/041")
+                       (delete-file "tests/qemu-iotests/256")
+
+                       ;; No 'PCI' bus found for device 'virtio-scsi-pci'
+                       (delete-file "tests/qemu-iotests/127")
+                       (delete-file "tests/qemu-iotests/267"))))
+                 '())
+          (add-after 'patch-source-shebangs 'patch-embedded-shebangs
+            (lambda* (#:key native-inputs inputs #:allow-other-keys)
+              ;; Ensure the executables created by these source files reference
+              ;; /bin/sh from the store so they work inside the build container.
+              (substitute* '("block/cloop.c" "migration/exec.c"
+                             "net/tap.c" "tests/qtest/libqtest.c"
+                             "tests/qtest/vhost-user-blk-test.c")
+                (("/bin/sh") (search-input-file inputs "/bin/sh")))
+              (substitute* "tests/qemu-iotests/testenv.py"
+                (("#!/usr/bin/env python3")
+                 (string-append "#!" (search-input-file (or native-inputs inputs)
+                                                        "/bin/python3"))))))
+          (add-before 'configure 'fix-optionrom-makefile
+            (lambda _
+              ;; Work around the inability of the rules defined in this
+              ;; Makefile to locate the firmware files (e.g.: No rule to make
+              ;; target 'multiboot.bin') by extending the VPATH.
+              (substitute* "pc-bios/optionrom/Makefile"
+                (("^VPATH = \\$\\(SRC_DIR\\)")
+                 "VPATH = $(SRC_DIR):$(TOPSRC_DIR)/pc-bios"))))
+          ;; XXX ./configure is being re-run at beginning of build phase...
+          (replace 'configure
+            (lambda* (#:key inputs configure-flags #:allow-other-keys)
+              ;; The `configure' script doesn't understand some of the
+              ;; GNU options.  Thus, add a new phase that's compatible.
+              (setenv "SHELL" (which "bash"))
+              ;; Ensure config.status gets the correct shebang off the bat.
+              ;; The build system gets confused if we change it later and
+              ;; attempts to re-run the whole configuration, and fails.
+              (substitute* "configure"
+                (("#!/bin/sh")
+                 (string-append "#!" (which "sh"))))
+              (mkdir-p "b/qemu")
+              (chdir "b/qemu")
+              (apply invoke "../../configure" configure-flags)))
+          ;; Configure, build and install QEMU user-emulation static binaries.
+          (add-after 'configure 'configure-user-static
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (let* ((static (assoc-ref outputs "static"))
+                     (gcc (search-input-file inputs "/bin/gcc"))
+                     ;; This is the common set of configure flags; it is
+                     ;; duplicated here to isolate this phase from manipulations
+                     ;; to the #:configure-flags build argument, as done in
+                     ;; derived packages such as qemu-minimal.
+                     (configure-flags (list (string-append "--cc=" gcc)
+                                            (string-append "--host-cc=" gcc)
+                                            "--sysconfdir=/etc"
+                                            "--disable-debug-info")))
+              (mkdir-p "../user-static")
+              (with-directory-excursion "../user-static"
+                (apply invoke "../../configure"
+                       "--static"
+                       "--disable-docs" ;already built
+                       "--disable-system"
+                       "--enable-linux-user"
+                       (string-append "--prefix=" static)
+                       configure-flags)))))
+          (add-after 'build 'build-user-static
+            (lambda args
+              (with-directory-excursion "../user-static"
+                (apply (assoc-ref %standard-phases 'build) args))))
+          (add-after 'install 'install-user-static
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((static (assoc-ref outputs "static"))
+                     (bin (string-append static "/bin")))
+                (with-directory-excursion "../user-static"
+                  (for-each (cut install-file <> bin)
+                            (append-map (cut find-files <> "^qemu-" #:stat stat)
+                                        (scandir "."
+                                                 (cut string-suffix?
+                                                      "-linux-user" <>))))))))
+          ;; Create a wrapper for Samba. This allows QEMU to use Samba without
+          ;; pulling it in as an input. Note that you need to explicitly install
+          ;; Samba in your Guix profile for Samba support.
+          (add-after 'install 'create-samba-wrapper
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let ((libexec (string-append #$output "/libexec")))
+                (call-with-output-file "samba-wrapper"
+                  (lambda (port)
+                    (format port "#!/bin/sh
 exec smbd $@")))
-               (chmod "samba-wrapper" #o755)
-               (install-file "samba-wrapper" libexec))))
-         (add-after 'install 'move-html-doc
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (doc (assoc-ref outputs "doc"))
-                    (qemu-doc (string-append doc "/share/doc/qemu-" ,version)))
-               (mkdir-p qemu-doc)
-               (rename-file (string-append out "/share/doc/qemu")
-                            (string-append qemu-doc "/html"))))))))
+                (chmod "samba-wrapper" #o755)
+                (install-file "samba-wrapper" libexec))))
+          (add-after 'install 'move-html-doc
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (let* ((out #$output)
+                     (doc #$output:doc)
+                     (qemu-doc (string-append doc "/share/doc/qemu-"
+                                              #$(package-version this-package))))
+                (mkdir-p qemu-doc)
+                (rename-file (string-append out "/share/doc/qemu")
+                             (string-append qemu-doc "/html"))))))))
     (inputs
      (list alsa-lib
            bash-minimal
@@ -405,7 +406,7 @@ server and embedded PowerPC, and S390 guests.")
      "Machine emulator and virtualizer (without GUI) for the host architecture")
     (arguments
      (substitute-keyword-arguments (package-arguments qemu)
-       ((#:configure-flags configure-flags '(list))
+       ((#:configure-flags configure-flags #~'())
         ;; Restrict to the host's architecture.
         (let* ((system (or (%current-target-system)
                            (%current-system)))
@@ -436,12 +437,12 @@ server and embedded PowerPC, and S390 guests.")
                    "--target-list=riscv32-softmmu,riscv64-softmmu")
                   (else       ; An empty list actually builds all the targets.
                    '()))))
-          `(cons ,target-list-arg ,configure-flags)))
+          #~(cons #$target-list-arg #$configure-flags)))
        ((#:phases phases)
-        `(modify-phases ,phases
-           (delete 'configure-user-static)
-           (delete 'build-user-static)
-           (delete 'install-user-static)))))
+        #~(modify-phases #$phases
+            (delete 'configure-user-static)
+            (delete 'build-user-static)
+            (delete 'install-user-static)))))
 
     ;; Remove dependencies on optional libraries, notably GUI libraries.
     (native-inputs (filter (lambda (input)
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 445c33d01f..e2ae3626e7 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -1948,7 +1948,7 @@ from streaming URLs.  It is a command-line wrapper for the libquvi library.")
         (base32 "1k47gbgpp52049andr28y28nbwh9m36bbb0g8p0aka3pqlhjv72l"))))
     (build-system scons-build-system)
     (propagated-inputs
-     (list apr apr-util openssl))
+     (list apr apr-util openssl-1.1))
     (inputs
      (list ;; TODO: Fix build with gss.
            ;;("gss" ,gss)
diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm
index 406752b35c..8b480e1bd3 100644
--- a/gnu/services/virtualization.scm
+++ b/gnu/services/virtualization.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2018, 2020-2022 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020,2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2021 Timotej Lazar <timotej.lazar@araneo.si>
+;;; Copyright © 2022 Oleg Pykhalov <go.wigust@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -470,13 +471,15 @@ potential infinite waits blocking libvirt."))
 
 (define (libvirt-shepherd-service config)
   (let* ((config-file (libvirt-conf-file config))
-         (libvirt (libvirt-configuration-libvirt config)))
+         (libvirt (libvirt-configuration-libvirt config))
+         (listen-tcp? (libvirt-configuration-listen-tcp? config)))
     (list (shepherd-service
            (documentation "Run the libvirt daemon.")
            (provision '(libvirtd))
            (start #~(make-forkexec-constructor
                      (list (string-append #$libvirt "/sbin/libvirtd")
-                           "-f" #$config-file)
+                           "-f" #$config-file
+                           #$@(if listen-tcp? '("--listen") '()))
                      ;; For finding qemu and ip binaries.
                      #:environment-variables
                      (list (string-append