summary refs log tree commit diff
diff options
context:
space:
mode:
authorMarius Bakke <marius@gnu.org>2022-06-27 19:23:48 +0200
committerMarius Bakke <marius@gnu.org>2022-06-27 19:23:48 +0200
commit2a7648774f1bba5bb443c00b8ab1a2ab75b7416f (patch)
tree3e081532d1d4f83706b62b499f655ea3ed836e5b
parent43519035f954b3dc41ac50a9a877fd802b864fdb (diff)
parent0bd1c4fbbc8a438876d6efa4feb275de461a2484 (diff)
downloadguix-2a7648774f1bba5bb443c00b8ab1a2ab75b7416f.tar.gz
Merge branch 'master' into core-updates
-rw-r--r--doc/guix.texi75
-rw-r--r--etc/news.scm26
-rw-r--r--gnu/bootloader/grub.scm32
-rw-r--r--gnu/build/bootloader.scm37
-rw-r--r--gnu/build/image.scm14
-rw-r--r--gnu/local.mk3
-rw-r--r--gnu/packages/admin.scm7
-rw-r--r--gnu/packages/algebra.scm3
-rw-r--r--gnu/packages/astronomy.scm104
-rw-r--r--gnu/packages/backup.scm1
-rw-r--r--gnu/packages/benchmark.scm63
-rw-r--r--gnu/packages/bootloaders.scm13
-rw-r--r--gnu/packages/c.scm68
-rw-r--r--gnu/packages/calendar.scm1
-rw-r--r--gnu/packages/check.scm24
-rw-r--r--gnu/packages/chromium.scm20
-rw-r--r--gnu/packages/cluster.scm132
-rw-r--r--gnu/packages/cpp.scm8
-rw-r--r--gnu/packages/databases.scm13
-rw-r--r--gnu/packages/dav.scm1
-rw-r--r--gnu/packages/dezyne.scm4
-rw-r--r--gnu/packages/diffoscope.scm4
-rw-r--r--gnu/packages/django.scm8
-rw-r--r--gnu/packages/dlang.scm401
-rw-r--r--gnu/packages/docker.scm657
-rw-r--r--gnu/packages/education.scm27
-rw-r--r--gnu/packages/emacs-xyz.scm522
-rw-r--r--gnu/packages/emacs.scm2
-rw-r--r--gnu/packages/engineering.scm19
-rw-r--r--gnu/packages/erlang.scm6
-rw-r--r--gnu/packages/file-systems.scm4
-rw-r--r--gnu/packages/fonts.scm50
-rw-r--r--gnu/packages/fontutils.scm73
-rw-r--r--gnu/packages/freedesktop.scm27
-rw-r--r--gnu/packages/ftp.scm8
-rw-r--r--gnu/packages/gcc.scm16
-rw-r--r--gnu/packages/geo.scm45
-rw-r--r--gnu/packages/gnome-xyz.scm97
-rw-r--r--gnu/packages/graph.scm4
-rw-r--r--gnu/packages/graphics.scm66
-rw-r--r--gnu/packages/guile-xyz.scm98
-rw-r--r--gnu/packages/guile.scm4
-rw-r--r--gnu/packages/hardware.scm206
-rw-r--r--gnu/packages/ibus.scm47
-rw-r--r--gnu/packages/icu4c.scm16
-rw-r--r--gnu/packages/image.scm100
-rw-r--r--gnu/packages/java.scm34
-rw-r--r--gnu/packages/kde.scm4
-rw-r--r--gnu/packages/license.scm5
-rw-r--r--gnu/packages/linux.scm36
-rw-r--r--gnu/packages/lisp-xyz.scm75
-rw-r--r--gnu/packages/lisp.scm4
-rw-r--r--gnu/packages/llvm.scm17
-rw-r--r--gnu/packages/mail.scm158
-rw-r--r--gnu/packages/maths.scm2
-rw-r--r--gnu/packages/maven-parent-pom.scm5
-rw-r--r--gnu/packages/maven.scm27
-rw-r--r--gnu/packages/messaging.scm27
-rw-r--r--gnu/packages/monitoring.scm52
-rw-r--r--gnu/packages/music.scm58
-rw-r--r--gnu/packages/networking.scm84
-rw-r--r--gnu/packages/openstack.scm12
-rw-r--r--gnu/packages/package-management.scm15
-rw-r--r--gnu/packages/patches/cmh-support-fplll.patch27
-rw-r--r--gnu/packages/patches/docker-fix-tests.patch28
-rw-r--r--gnu/packages/patches/phoronix-test-suite-fsdg.patch308
-rw-r--r--gnu/packages/pep.scm1
-rw-r--r--gnu/packages/presentation.scm10
-rw-r--r--gnu/packages/python-build.scm71
-rw-r--r--gnu/packages/python-check.scm31
-rw-r--r--gnu/packages/python-crypto.scm27
-rw-r--r--gnu/packages/python-science.scm4
-rw-r--r--gnu/packages/python-web.scm97
-rw-r--r--gnu/packages/python-xyz.scm418
-rw-r--r--gnu/packages/radio.scm36
-rw-r--r--gnu/packages/ruby.scm97
-rw-r--r--gnu/packages/samba.scm60
-rw-r--r--gnu/packages/search.scm40
-rw-r--r--gnu/packages/shellutils.scm5
-rw-r--r--gnu/packages/sphinx.scm10
-rw-r--r--gnu/packages/suckless.scm81
-rw-r--r--gnu/packages/task-management.scm1
-rw-r--r--gnu/packages/text-editors.scm51
-rw-r--r--gnu/packages/time.scm1
-rw-r--r--gnu/packages/tls.scm24
-rw-r--r--gnu/packages/video.scm4
-rw-r--r--gnu/packages/virtualization.scm13
-rw-r--r--gnu/packages/wm.scm152
-rw-r--r--gnu/services/configuration.scm64
-rw-r--r--gnu/services/mail.scm6
-rw-r--r--gnu/services/vpn.scm5
-rw-r--r--gnu/system/image.scm19
-rw-r--r--gnu/tests/docker.scm6
-rw-r--r--gnu/tests/ldap.scm4
-rw-r--r--guix/build-system/dub.scm9
-rw-r--r--guix/build/chicken-build-system.scm12
-rw-r--r--guix/build/dub-build-system.scm26
-rw-r--r--guix/scripts/refresh.scm22
-rw-r--r--guix/scripts/style.scm3
-rwxr-xr-xguix/scripts/substitute.scm102
-rw-r--r--guix/scripts/system.scm11
-rw-r--r--guix/self.scm5
-rw-r--r--guix/status.scm16
-rw-r--r--guix/utils.scm6
-rw-r--r--po/guix/POTFILES.in1
-rw-r--r--tests/services/configuration.scm13
-rw-r--r--tests/status.scm83
-rw-r--r--tests/style.scm12
108 files changed, 4070 insertions, 1723 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 2c144ee7e4..8affc235e1 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -682,6 +682,20 @@ chmod +x guix-install.sh
 ./guix-install.sh
 @end example
 
+If you're running Debian or a derivative such as Ubuntu, you can instead
+install the package (it might be a version older than @value{VERSION}
+but you can update it afterwards by running @samp{guix pull}):
+
+@example
+sudo apt install guix
+@end example
+
+Likewise on openSUSE:
+
+@example
+sudo zypper install guix
+@end example
+
 When you're done, @pxref{Application Setup} for extra configuration you
 might need, and @ref{Getting Started} for your first steps!
 @end quotation
@@ -7379,8 +7393,25 @@ The build system that should be used to build the package (@pxref{Build
 Systems}).
 
 @item @code{arguments} (default: @code{'()})
-The arguments that should be passed to the build system.  This is a
-list, typically containing sequential keyword-value pairs.
+The arguments that should be passed to the build system (@pxref{Build
+Systems}).  This is a list, typically containing sequential
+keyword-value pairs, as in this example:
+
+@lisp
+(package
+  (name "example")
+  ;; several fields omitted
+  (arguments
+    (list #:tests? #f                     ;skip tests
+          #:make-flags #~'("VERBOSE=1")   ;pass flags to 'make'
+          #:configure-flags #~'("--enable-frobbing"))))
+@end lisp
+
+The exact set of supported keywords depends on the build system
+(@pxref{Build Systems}), but you will find that almost all of them honor
+@code{#:configure-flags}, @code{#:make-flags}, @code{#:tests?}, and
+@code{#:phases}.  The @code{#:phases} keyword in particular lets you
+modify the set of build phases for your package (@pxref{Build Phases}).
 
 @item @code{inputs} (default: @code{'()})
 @itemx @code{native-inputs} (default: @code{'()})
@@ -9713,8 +9744,7 @@ phase before the @code{build} phase, called
                         (substitute* "Makefile"
                           (("PREFIX =.*")
                            (string-append "PREFIX = "
-                                          out "\n")))
-                        #true))))))))
+                                          out "\n")))))))))))
 @end lisp
 
 The new phase that is inserted is written as an anonymous procedure,
@@ -13724,7 +13754,6 @@ gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11
 @end example
 
 @item --list-updaters
-@itemx -L
 List available updaters and exit (see @option{--type} above).
 
 For each updater, display the fraction of packages it covers; at the
@@ -13855,6 +13884,7 @@ the user whether to download it or not.  This is the default behavior.
 Use @var{host} as the OpenPGP key server when importing a public key.
 
 @item --load-path=@var{directory}
+@itemx -L @var{directory}
 Add @var{directory} to the front of the package module search path
 (@pxref{Package Modules}).
 
@@ -14921,8 +14951,8 @@ The command output looks like this:
 
 @smallexample
 $ guix challenge --substitute-urls="https://@value{SUBSTITUTE-SERVER-1} https://guix.example.org"
-updating list of substitutes from 'https://@value{SUBSTITUTE-SERVER-1}'... 100.0%
-updating list of substitutes from 'https://guix.example.org'... 100.0%
+updating substitutes from 'https://@value{SUBSTITUTE-SERVER-1}'... 100.0%
+updating substitutes from 'https://guix.example.org'... 100.0%
 /gnu/store/@dots{}-openssl-1.0.2d contents differ:
   local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
   https://@value{SUBSTITUTE-SERVER-1}/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
@@ -15209,7 +15239,7 @@ Here's a sample run:
 $ guix weather --substitute-urls=https://guix.example.org
 computing 5,872 package derivations for x86_64-linux...
 looking for 6,128 store items on https://guix.example.org..
-updating list of substitutes from 'https://guix.example.org'... 100.0%
+updating substitutes from 'https://guix.example.org'... 100.0%
 https://guix.example.org
   43.4% substitutes available (2,658 out of 6,128)
   7,032.5 MiB of nars (compressed)
@@ -15830,6 +15860,11 @@ file, the @command{guix system reconfigure my-system-config.scm} command
 instantiates that configuration, and makes it the default GRUB boot
 entry (@pxref{Invoking guix system}).
 
+@quotation Note
+We recommend that you keep this @file{my-system-config.scm} file safe
+and under version control to easily track changes to your configuration.
+@end quotation
+
 The normal way to change the system configuration is by updating this
 file and re-running @command{guix system reconfigure}.  One should never
 have to touch files in @file{/etc} or to run commands that modify the
@@ -18699,7 +18734,7 @@ starting with static network configuration.
 This is the type for statically-configured network interfaces.  Its
 value must be a list of @code{static-networking} records.  Each of them
 declares a set of @dfn{addresses}, @dfn{routes}, and @dfn{links}, as
-show below.
+shown below.
 
 @cindex network interface controller (NIC)
 @cindex NIC, networking interface controller
@@ -21105,9 +21140,11 @@ You can do that directly, like this (you need to use the
              (list cups-filters epson-inkjet-printer-escpr hplip-minimal))))
 @end lisp
 
-Note: If you wish to use the Qt5 based GUI which comes with the hplip
+@quotation Note
+If you wish to use the Qt5 based GUI which comes with the hplip
 package then it is suggested that you install the @code{hplip} package,
 either in your OS configuration file or as your user.
+@end quotation
 
 The available configuration parameters follow.  Each parameter
 definition is preceded by its type; for example, @samp{string-list foo}
@@ -25555,13 +25592,15 @@ example if you want your users to have addresses like
 @samp{"john.smith@@example.com"} then you need to add a host
 @samp{"example.com"}.  All options in this list will apply only to this host.
 
-Note: the name @emph{virtual} host is used in configuration to avoid confusion with
+@quotation Note
+The name @emph{virtual} host is used in configuration to avoid confusion with
 the actual physical host that Prosody is installed on.  A single Prosody
 instance can serve many domains, each one defined as a VirtualHost entry in
 Prosody's configuration.  Conversely a server that hosts a single domain would
 have just one VirtualHost entry.
 
 See @url{https://prosody.im/doc/configure#virtual_host_settings}.
+@end quotation
 
 Available @code{virtualhost-configuration} fields are:
 
@@ -26162,8 +26201,10 @@ After setting this option, it is recommend that you inspect your Mumble
 server log to ensure that Mumble is using the cipher suites that you
 expected it to.
 
-Note: Changing this option may impact the backwards compatibility of your
+@quotation Note
+Changing this option may impact the backwards compatibility of your
 Mumble-Server server, and can remove the ability for older Mumble clients to be able to connect to it.
+@end quotation
 
 @item @code{public-registration} (default: @code{#f})
 Must be a @code{<mumble-server-public-registration-configuration>}
@@ -37538,6 +37579,10 @@ $ guix system extension-graph @var{file} | xdot -
 
 shows the extension relations among services.
 
+@quotation Note
+The @command{dot} program is provided by the @code{graphviz} package.
+@end quotation
+
 @anchor{system-shepherd-graph}
 @item shepherd-graph
 Emit to standard output the @dfn{dependency
@@ -38862,12 +38907,6 @@ Return a G-expression that contains the values corresponding to the
 disk by using something like @code{mixed-text-file}.
 @end deffn
 
-@deffn {Scheme Procedure} validate-configuration @var{configuration}
-@var{fields}
-Type-check @var{fields}, a list of field names of @var{configuration}, a
-configuration record created by @code{define-configuration}.
-@end deffn
-
 @deffn {Scheme Procedure} empty-serializer @var{field-name} @var{value}
 A serializer that just returns an empty string.  The
 @code{serialize-package} procedure is an alias for this.
diff --git a/etc/news.scm b/etc/news.scm
index 7b14dfb6c6..7de781db13 100644
--- a/etc/news.scm
+++ b/etc/news.scm
@@ -25,6 +25,32 @@
 (channel-news
  (version 0)
 
+ (entry (commit "bdf422176739b473add66eb8cac9fdd8c654f794")
+        (title
+         (en "@option{-L} option of @command{guix refresh} repurposed")
+         (de "Option @option{-L} von @command{guix refresh} wechselt Bedeutung")
+         (fr "Option @option{-L} de @command{guix refresh} réutilisée"))
+        (body
+         (en "The @option{-L} option of @command{guix refresh} has been
+repurposed: it used to be synonymous with @option{--list-updaters}; it is now
+synonymous with @option{--load-path} as is the case with most other commands.
+
+Run @command{info \"(guix) Invoking guix refresh\"} for more info.")
+         (de "Die Befehlszeilenoption @option{-L} von @command{guix refresh} hat
+einen anderen Zweck bekommen: Früher war sie gleichbedeutend mit
+@option{--list-updaters}; jetzt ist sie gleichbedeutend mit
+@option{--load-path}, wie bereits beim Großteil der anderen Befehle.
+
+Führen Sie @command{info \"(guix.de) Aufruf von guix refresh\"} aus, wenn Sie
+mehr wissen möchten.")
+         (fr "L'option @option{-L} de @command{guix refresh} a changé de
+signification : elle était auparavant synonyme de @option{--list-updaters} ;
+elle est maintenant synonyme de @option{--load-path} comme c'est le cas pour
+la plupart des autres commandes.
+
+Lancer @command{info \"(guix.fr) Invoquer guix refresh\"} pour plus
+d'informations.")))
+
  (entry (commit "35c1edb20ad07250728d3bdcd0296bd0cedaf6bb")
         (title
          (en "New @command{edit} sub-commands for services")
diff --git a/gnu/bootloader/grub.scm b/gnu/bootloader/grub.scm
index 65d7171432..4f18c9b518 100644
--- a/gnu/bootloader/grub.scm
+++ b/gnu/bootloader/grub.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Stefan <stefan-guix@vodafonemail.de>
 ;;; Copyright © 2022 Karl Hallsby <karl@hallsby.com>
+;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -57,6 +58,7 @@
             grub-bootloader
             grub-efi-bootloader
             grub-efi-removable-bootloader
+            grub-efi32-bootloader
             grub-efi-netboot-bootloader
             grub-mkrescue-bootloader
             grub-minimal-bootloader
@@ -636,6 +638,29 @@ fi~%"))))
                         "--bootloader-id=Guix"
                         "--efi-directory" target-esp)))))
 
+(define install-grub-efi32
+  #~(lambda (bootloader efi-dir mount-point)
+      ;; There is nothing useful to do when called in the context of a disk
+      ;; image generation.
+      (when efi-dir
+        ;; Install GRUB onto the EFI partition mounted at EFI-DIR, for the
+        ;; system whose root is mounted at MOUNT-POINT.
+        (let ((grub-install (string-append bootloader "/sbin/grub-install"))
+              (install-dir (string-append mount-point "/boot"))
+              ;; When installing Guix, it's common to mount EFI-DIR below
+              ;; MOUNT-POINT rather than /boot/efi on the live image.
+              (target-esp (if (file-exists? (string-append mount-point efi-dir))
+                              (string-append mount-point efi-dir)
+                              efi-dir)))
+          ;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or
+          ;; root partition.
+          (setenv "GRUB_ENABLE_CRYPTODISK" "y")
+          (invoke/quiet grub-install "--boot-directory" install-dir
+                        "--bootloader-id=Guix"
+			(cond ((target-x86?) "--target=i386-efi")
+                              ((target-arm?) "--target=arm-efi"))
+                        "--efi-directory" target-esp)))))
+
 (define (install-grub-efi-netboot subdir)
   "Define a grub-efi-netboot bootloader installer for installation in SUBDIR,
 which is usually efi/Guix or efi/boot."
@@ -768,6 +793,13 @@ considered for security aspects."
    (name 'grub-efi-removable-bootloader)
    (installer install-grub-efi-removable)))
 
+(define grub-efi32-bootloader
+  (bootloader
+   (inherit grub-efi-bootloader)
+   (installer install-grub-efi32)
+   (name 'grub-efi32)
+   (package grub-efi32)))
+
 (define grub-efi-netboot-bootloader
   (bootloader
    (inherit grub-efi-bootloader)
diff --git a/gnu/build/bootloader.scm b/gnu/build/bootloader.scm
index 9a89fe55cb..af6063a884 100644
--- a/gnu/build/bootloader.scm
+++ b/gnu/build/bootloader.scm
@@ -1,6 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
+;;; Copyright © 2022 Timothy Sample <samplet@ngyro.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -54,8 +56,12 @@
 ;;; EFI bootloader.
 ;;;
 
-(define (install-efi grub grub-config esp)
-  "Write a self-contained GRUB EFI loader to the mounted ESP using GRUB-CONFIG."
+(define* (install-efi grub grub-config esp #:key targets)
+  "Write a self-contained GRUB EFI loader to the mounted ESP using
+GRUB-CONFIG.
+
+If TARGETS is set, use its car as the GRUB image format and its cdr as
+the output filename.  Otherwise, use defaults for the host platform."
   (let* ((system %host-type)
          ;; Hard code the output location to a well-known path recognized by
          ;; compliant firmware. See "3.5.1.1 Removable Media Boot Behaviour":
@@ -63,14 +69,15 @@
          (grub-mkstandalone (string-append grub "/bin/grub-mkstandalone"))
          (efi-directory (string-append esp "/EFI/BOOT"))
          ;; Map grub target names to boot file names.
-         (efi-targets (cond ((string-prefix? "x86_64" system)
-                             '("x86_64-efi" . "BOOTX64.EFI"))
-                            ((string-prefix? "i686" system)
-                             '("i386-efi" . "BOOTIA32.EFI"))
-                            ((string-prefix? "armhf" system)
-                             '("arm-efi" . "BOOTARM.EFI"))
-                            ((string-prefix? "aarch64" system)
-                             '("arm64-efi" . "BOOTAA64.EFI")))))
+         (efi-targets (or targets
+                          (cond ((string-prefix? "x86_64" system)
+                                 '("x86_64-efi" . "BOOTX64.EFI"))
+                                ((string-prefix? "i686" system)
+                                 '("i386-efi" . "BOOTIA32.EFI"))
+                                ((string-prefix? "armhf" system)
+                                 '("arm-efi" . "BOOTARM.EFI"))
+                                ((string-prefix? "aarch64" system)
+                                 '("arm64-efi" . "BOOTAA64.EFI"))))))
     ;; grub-mkstandalone requires a TMPDIR to prepare the firmware image.
     (setenv "TMPDIR" esp)
 
@@ -81,9 +88,12 @@
             ;; Graft the configuration file onto the image.
             (string-append "boot/grub/grub.cfg=" grub-config))))
 
-(define (install-efi-loader grub-efi esp)
+(define* (install-efi-loader grub-efi esp #:key targets)
   "Install in ESP directory the given GRUB-EFI bootloader.  Configure it to
-load the Grub bootloader located in the 'Guix_image' root partition."
+load the Grub bootloader located in the 'Guix_image' root partition.
+
+If TARGETS is set, use its car as the GRUB image format and its cdr as
+the output filename.  Otherwise, use defaults for the host platform."
   (let ((grub-config "grub.cfg"))
     (call-with-output-file grub-config
       (lambda (port)
@@ -97,5 +107,6 @@ load the Grub bootloader located in the 'Guix_image' root partition."
                insmod part_gpt~@
                search --set=root --label Guix_image~@
                configfile /boot/grub/grub.cfg~%")))
-    (install-efi grub-efi grub-config esp)
+    (install-efi grub-efi grub-config esp #:targets targets)
     (delete-file grub-config)))
+
diff --git a/gnu/build/image.scm b/gnu/build/image.scm
index ddfd34c111..321be8e4b1 100644
--- a/gnu/build/image.scm
+++ b/gnu/build/image.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2020, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2022 Pavel Shlyak <p.shlyak@pantherx.org>
+;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +28,7 @@
   #:use-module (guix build syscalls)
   #:use-module (guix build utils)
   #:use-module (guix store database)
+  #:use-module (guix utils)
   #:use-module (gnu build bootloader)
   #:use-module (gnu build install)
   #:use-module (gnu build linux-boot)
@@ -41,6 +43,7 @@
             convert-disk-image
             genimage
             initialize-efi-partition
+            initialize-efi32-partition
             initialize-root-partition
 
             make-iso9660-image))
@@ -169,6 +172,17 @@ produced by #:references-graphs.  Pass WAL-MODE? to call-with-database."
   "Install in ROOT directory, an EFI loader using GRUB-EFI."
   (install-efi-loader grub-efi root))
 
+(define* (initialize-efi32-partition root
+                                     #:key
+                                     grub-efi32
+                                     #:allow-other-keys)
+  "Install in ROOT directory, an EFI 32bit loader using GRUB-EFI32."
+  (install-efi-loader grub-efi32 root
+                      #:targets (cond ((target-x86?)
+                                       '("i386-efi" . "BOOTIA32.EFI"))
+                                      ((target-arm?)
+                                       '("arm-efi" . "BOOTARM.EFI")))))
+
 (define* (initialize-root-partition root
                                     #:key
                                     bootcfg
diff --git a/gnu/local.mk b/gnu/local.mk
index e557e5be08..d2617f771f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -960,6 +960,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/cling-use-shared-library.patch		\
   %D%/packages/patches/clucene-pkgconfig.patch			\
   %D%/packages/patches/cmake-curl-certificates.patch		\
+  %D%/packages/patches/cmh-support-fplll.patch      		\
   %D%/packages/patches/coda-use-system-libs.patch		\
   %D%/packages/patches/collectd-5.11.0-noinstallvar.patch		\
   %D%/packages/patches/combinatorial-blas-awpm.patch		\
@@ -1000,7 +1001,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/docbook-xsl-support-old-url.patch	\
   %D%/packages/patches/doc++-include-directives.patch		\
   %D%/packages/patches/doc++-segfault-fix.patch			\
-  %D%/packages/patches/docker-fix-tests.patch			\
   %D%/packages/patches/dovecot-trees-support-dovecot-2.3.patch	\
   %D%/packages/patches/dstat-fix-crash-when-specifying-delay.patch	\
   %D%/packages/patches/dstat-skip-devices-without-io.patch	\
@@ -1611,6 +1611,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/perl-reproducible-build-date.patch	\
   %D%/packages/patches/perl-www-curl-fix-struct-void.patch	\
   %D%/packages/patches/perl-www-curl-remove-symbol.patch	\
+  %D%/packages/patches/phoronix-test-suite-fsdg.patch		\
   %D%/packages/patches/php-bug-74093-test.patch \
   %D%/packages/patches/php-openssl_x509_checkpurpose_basic.patch	\
   %D%/packages/patches/picard-fix-id3-rename-test.patch		\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 2a3e962858..49c3256651 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -1156,8 +1156,7 @@ IPv6, proxies, and Unix sockets.")
                  (lambda _
                    ;; These #defines aren't well-documented and, e.g., POWER was
                    ;; not actually tested on every possible TARGET-POWERPC?.
-                   (let* ((system #$(cond ((target-x86-32?) "X86")
-                                          ((target-x86-64?) "X86")
+                   (let* ((system #$(cond ((target-x86?) "X86")
                                           ((target-arm?) "ARM")
                                           ((target-powerpc?) "POWER")
                                           (else "CROSS_FINGERS"))))
@@ -1845,7 +1844,7 @@ system administrator.")
 (define-public sudo
   (package
     (name "sudo")
-    (version "1.9.11p2")
+    (version "1.9.11p3")
     (source (origin
               (method url-fetch)
               (uri
@@ -1855,7 +1854,7 @@ system administrator.")
                                     version ".tar.gz")))
               (sha256
                (base32
-                "1lli4z10b5j238cn7471jb8vcjlj5px68x48ysa3f1n0kzmih6d2"))
+                "0w0z9w4vnhjsc4jjghi6wlyv4v055hsy38ncb67p08b7yp9fg1s6"))
               (modules '((guix build utils)))
               (snippet
                '(begin
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 3dd476ace9..6823531cc0 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -302,7 +302,8 @@ GP2C, the GP to C compiler, translates GP scripts to PARI programs.")
                                 version ".tar.gz"))
             (sha256
              (base32
-              "1ws2yhzxmm2l5xqqqcjcimmg40f9qq5l9i6d4i5434an9v9s8531"))))
+              "1ws2yhzxmm2l5xqqqcjcimmg40f9qq5l9i6d4i5434an9v9s8531"))
+             (patches (search-patches "cmh-support-fplll.patch"))))
    (build-system gnu-build-system)
    (inputs
      (list gmp
diff --git a/gnu/packages/astronomy.scm b/gnu/packages/astronomy.scm
index 93c45d5780..82a67ce5ef 100644
--- a/gnu/packages/astronomy.scm
+++ b/gnu/packages/astronomy.scm
@@ -26,18 +26,15 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages astronomy)
-  #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:)
-  #:use-module (guix download)
-  #:use-module (guix git-download)
-  #:use-module (guix utils)
-  #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
+  #:use-module (gnu packages flex)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
@@ -49,16 +46,20 @@
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages ncurses)
   #:use-module (gnu packages netpbm)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pretty-print)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
+  #:use-module (gnu packages readline)
   #:use-module (gnu packages time)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages video)
@@ -66,9 +67,15 @@
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
+  #:use-module (gnu packages)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
+  #:use-module (guix download)
+  #:use-module (guix gexp)
+  #:use-module (guix git-download)
+  #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1))
 
@@ -107,6 +114,93 @@ moment, supported SPICE files are:
 @end itemize\n")
     (license license:cecill)))
 
+(define-public casacore
+  (package
+    (name "casacore")
+    (version "3.4.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/casacore/casacore")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32
+         "05ar5gykgh4dm826xplj5ri5rw7znhxrvin2l67a3mjwfys7r2a0"))
+       (file-name (git-file-name name version))))
+    (build-system cmake-build-system)
+    (arguments
+     (list
+      ;; Note: There are multiple failures in
+      ;; tests which require additional measures data. They are
+      ;; distributed via FTP without any license:
+      ;; ftp://ftp.astron.nl/outgoing/Measures/
+      ;; TODO: Check how to fix tests.
+      #:tests? #f
+      #:parallel-build? #t
+      #:configure-flags
+      #~(list "-DBUILD_PYTHON3=ON"
+              "-DBUILD_PYTHON=OFF"
+              "-DBUILD_TESTING=TRUE"
+              "-DUSE_HDF5=ON"
+              "-DUSE_OPENMP=OFF"
+              "-DUSE_THREADS=ON"
+              (string-append "-DDATA_DIR=" #$output "/data")
+              (string-append "-DPYTHON3_EXECUTABLE="
+                             #$(this-package-input "python") "/bin")
+              (string-append "-DPYTHON3_INCLUDE_DIR="
+                             #$(this-package-input "python") "/include")
+              (string-append "-DPYTHON3_LIBRARY="
+                             #$(this-package-input "python") "/lib"))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'set-env
+            (lambda _
+              (setenv "HOME" "/tmp")))
+          (add-after 'unpack 'use-absolute-rm
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "casa/OS/test/tFile.run"
+                (("/bin/rm")
+                 (search-input-file inputs "/bin/rm")))))
+          (add-after 'unpack 'use-absolute-python3
+            (lambda _
+              (substitute* "build-tools/casacore_floatcheck"
+                (("#!/usr/bin/env python")
+                 (string-append "#!" (which "python3"))))))
+          ;; NOTE: (Sharlatan-20220611T200837+0100): Workaround for casacore
+          ;; tests stuck with missing "qsub" issue.
+          ;; https://github.com/casacore/casacore/issues/1122
+          (add-after 'unpack 'patch-pre-test-checks
+            (lambda _
+              (substitute* "build-tools/casacore_assay"
+                (("QSUBP=.*$") "QSUBP=\n")
+                (("YODP=.*$") "YODP=\n")))))))
+    (native-inputs
+     (list bison
+           boost
+           flex
+           readline))
+    (inputs
+     (list cfitsio
+           fftw
+           fftwf
+           gfortran
+           hdf5
+           lapack
+           ncurses
+           openblas
+           python
+           python-numpy
+           wcslib))
+    (home-page "http://casacore.github.io/casacore/")
+    (synopsis "Suite of C++ libraries for radio astronomy data processing")
+    (description
+     "The casacore package contains the core libraries of the old
+AIPS++/CASA (Common Astronomy Software Application) package.  This split was
+made to get a better separation of core libraries and applications.
+@url{https://casa.nrao.edu/, CASA} is now built on top of Casacore.")
+    (license license:gpl2+)))
+
 (define-public cfitsio
   (package
     (name "cfitsio")
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 38f5c24ba3..2517da85dd 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -86,6 +86,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
diff --git a/gnu/packages/benchmark.scm b/gnu/packages/benchmark.scm
index b167c6de6e..f0e05483f0 100644
--- a/gnu/packages/benchmark.scm
+++ b/gnu/packages/benchmark.scm
@@ -39,20 +39,23 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages c)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages kde-frameworks)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages docbook)
+  #:use-module (gnu packages kde-frameworks)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages mpi)
   #:use-module (gnu packages opencl)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages php)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
@@ -60,6 +63,11 @@
   #:use-module (gnu packages xml)
   #:use-module (ice-9 match))
 
+;; Lazily resolve the gcc-toolchain to avoid a circular dependency.
+(define gcc-toolchain*
+  (delay (module-ref (resolve-interface '(gnu packages commencement))
+                     'gcc-toolchain)))
+
 (define-public fio
   (package
     (name "fio")
@@ -263,6 +271,59 @@ speed, the number of seeks that can be performed per second, and the number of
 file metadata operations that can be performed per second.")
     (license license:gpl2)))   ;GPL 2 only, see copyright.txt
 
+(define-public phoronix-test-suite
+  (package
+    (name "phoronix-test-suite")
+    (version "10.8.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://phoronix-test-suite.com/releases/"
+                           name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "105shk78jy46nwj6vnlmgp3y3lv9klar3dmcgasy4bslm4l2wx2b"))
+       (patches (search-patches "phoronix-test-suite-fsdg.patch"))))
+    (arguments
+     (list
+      #:tests? #f                       ;no test suite
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure)
+          (delete 'build)
+          (replace 'install
+            (lambda _
+              (invoke "./install-sh" #$output "--free-software-only")))
+          (add-after 'install 'wrap-binary
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let ((pts (string-append #$output "/bin/phoronix-test-suite")))
+                (wrap-program pts
+                  (list "PATH" 'prefix
+                        (map (lambda (binary)
+                               (dirname (search-input-file
+                                         inputs (string-append "bin/" binary))))
+                             '("bash" "cat" ;coreutils
+                               "gzip" "make" "php" "sed" "tar" "which"))))))))))
+    (build-system gnu-build-system)
+    (native-inputs (list python which))
+    ;; Wrap the most basic build tools needed by Phoronix Test Suite to build
+    ;; simple tests such as 'fio'.
+    (inputs (list bash coreutils gnu-make gzip php sed tar which))
+    ;; Phoronix Test Suite builds and caches the benchmarking tools itself;
+    ;; the user is required to manually install extra libraries depending on
+    ;; the selected test; but at least a working C/C++ toolchain is assumed to
+    ;; be available.
+    (propagated-inputs (list (force gcc-toolchain*)))
+    (home-page "https://www.phoronix-test-suite.com/")
+    (synopsis "Automated testing/benchmarking software")
+    (description
+     "The Phoronix Test Suite is a comprehensive testing and benchmarking platform
+that provides an extensible framework for which new tests can be easily added.
+It can carry out both qualitative and quantitative benchmarks in a clean,
+reproducible, and easy-to-use manner, making it easy to compare one particular
+setup against another one.")
+    (license license:gpl3+)))
+
 (define-public python-locust
   (package
     (name "python-locust")
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index 91d259475a..71a10f54d5 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -15,6 +15,7 @@
 ;;; Copyright © 2020, 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2021 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -332,6 +333,18 @@ menu to select one of the installed operating systems.")
                                        "/bin/mcopy\"")))
                      #t))))))))))
 
+(define-public grub-efi32
+  (package
+    (inherit grub-efi)
+    (name "grub-efi32")
+    (synopsis "GRand Unified Boot loader (UEFI 32bit version)")
+    (arguments
+     `(,@(substitute-keyword-arguments (package-arguments grub-efi)
+           ((#:configure-flags flags
+             ''()) `(cons* ,(cond ((target-x86?) "--target=i386")
+                                  ((target-arm?) "--target=arm"))
+                           ,flags)))))))
+
 ;; Because grub searches hardcoded paths it's easiest to just build grub
 ;; again to make it find both grub-pc and grub-efi.  There is a command
 ;; line argument which allows you to specify ONE platform - but
diff --git a/gnu/packages/c.scm b/gnu/packages/c.scm
index 3e49539473..1ce507119f 100644
--- a/gnu/packages/c.scm
+++ b/gnu/packages/c.scm
@@ -147,44 +147,38 @@ compiler while still keeping it small, simple, fast and understandable.")
     (license (list license:bsd-2 license:bsd-3))))
 
 (define-public qbe
-  (let ((commit "2caa26e388b1c904d2f12fb09f84df7e761d8331")
-        (revision "1"))
-    (package
-      (name "qbe")
-      (version (git-version "0.0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "git://c9x.me/qbe")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "1gv03ym0gqrl4wkbhysa82025xwrkr1fg44z814b6vnggwlqgljc"))))
-      (build-system gnu-build-system)
-      (arguments
-       (list #:make-flags
-             #~(list (string-append "CC=" #$(cc-for-target))
-                     (string-append "PREFIX=" #$output))
-             #:phases
-             #~(modify-phases %standard-phases
-                 (add-after 'unpack 'allow-cross-compilation
-                   (lambda _
-                     (substitute* "Makefile"
-                       (("`uname -m`") #$(or (%current-target-system)
-                                             (%current-system))))))
-                 (add-after 'allow-cross-compilation 'use-$CC-for-tests
-                   (lambda _
-                     (substitute* "tools/test.sh"
-                       (("cc=\"cc -no-pie\"") "cc=\"${CC} -no-pie\""))))
-                 (delete 'configure))))
-      (supported-systems (list "x86_64-linux" "aarch64-linux" "riscv64-linux"))
-      (synopsis "Simple compiler backend")
-      (description
-       "QBE is a small compiler backend using an SSA-based intermediate
+  (package
+    (name "qbe")
+    (version "1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "git://c9x.me/qbe")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0qx4a3fjjrp2m4dsn19rpbjf89k9w7w7l09s96jx8vv15vzsdgis"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   (string-append "PREFIX=" #$output))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'allow-cross-compilation
+                 (lambda _
+                   (substitute* "Makefile"
+                     (("`uname -m`") #$(or (%current-target-system)
+                                           (%current-system))))))
+               (delete 'configure))))
+    (supported-systems (list "x86_64-linux" "aarch64-linux" "riscv64-linux"))
+    (synopsis "Simple compiler backend")
+    (description
+     "QBE is a small compiler backend using an SSA-based intermediate
 language as input.")
-      (home-page "https://c9x.me/compile/")
-      (license license:expat))))
+    (home-page "https://c9x.me/compile/")
+    (license license:expat)))
 
 (define-public python-pcpp
   (package
diff --git a/gnu/packages/calendar.scm b/gnu/packages/calendar.scm
index 129eb58aa0..fa55822762 100644
--- a/gnu/packages/calendar.scm
+++ b/gnu/packages/calendar.scm
@@ -50,6 +50,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages sphinx)
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 175f77f115..962dff9ae7 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -7,7 +7,7 @@
 ;;; Copyright © 2015, 2017 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2015, 2016, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2018-2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016 Christine Lemmer-Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2016, 2017 Danny Milosavljevic <dannym+a@scratchpost.org>
@@ -892,18 +892,28 @@ available via the @code{unittest.mock} module.")
 (define-public python-nose2
   (package
     (name "python-nose2")
-    (version "0.9.2")
+    (version "0.11.0")
       (source
         (origin
           (method url-fetch)
           (uri (pypi-uri "nose2" version))
           (sha256
            (base32
-            "0pmbb6nk31yhgh4zkcblzxsznml7f7pf5q1ihgrwvbxv4mwzfql7"))))
+            "1scxwvwbgfdj41acma41xzdhcfdwjj9irj6sfifdbyf9dryqs83d"))))
     (build-system python-build-system)
-    (arguments `(#:tests? #f)) ; 'module' object has no attribute 'collector'
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     ;; Tests require nose2 itself.
+                     (setenv "PYTHONPATH" (getcwd))
+                     (invoke (string-append #$output "/bin/nose2") "-v")))))))
+    (native-inputs
+     (list python-coverage))
     (propagated-inputs
-     (list python-cov-core python-pytest-cov python-six))
+     (list python-six))
     (home-page "https://github.com/nose-devs/nose2")
     (synopsis "Next generation of nicer testing for Python")
     (description
@@ -2036,14 +2046,14 @@ programs, something like CSmith, a random generator of C programs.")
 (define-public python-lit
   (package
     (name "python-lit")
-    (version "12.0.1")
+    (version "14.0.3")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "lit" version))
         (sha256
          (base32
-          "01yggsb73s2gbq36xwifxl6k5ll5lkss5rwz59k9h3jnbnn7m5fj"))))
+          "162x7pddwl395c3mdb0mfn3f5z24x1jz6g27x303lfxpzidnn4m4"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/chromium.scm b/gnu/packages/chromium.scm
index bdfebed99e..e9e20ab7b9 100644
--- a/gnu/packages/chromium.scm
+++ b/gnu/packages/chromium.scm
@@ -50,6 +50,7 @@
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages kerberos)
+  #:use-module (gnu packages maths)
   #:use-module (gnu packages ninja)
   #:use-module (gnu packages node)
   #:use-module (gnu packages nss)
@@ -122,6 +123,7 @@
     "third_party/ced" ;BSD-3
     "third_party/cld_3" ;ASL2.0
     "third_party/closure_compiler" ;ASL2.0
+    "third_party/cpuinfo" ;BSD-2
     "third_party/crashpad" ;ASL2.0
     "third_party/crashpad/crashpad/third_party/lss" ;ASL2.0
     "third_party/crashpad/crashpad/third_party/zlib/zlib_crashpad.h" ;Zlib
@@ -233,6 +235,7 @@
     "third_party/private-join-and-compute" ;ASL2.0
     "third_party/protobuf" ;BSD-3
     "third_party/protobuf/third_party/six" ;Expat
+    "third_party/pthreadpool" ;BSD-2
     "third_party/pyjson5" ;ASL2.0
     "third_party/qcms" ;Expat
     "third_party/rnnoise" ;BSD-3
@@ -290,6 +293,7 @@
     "third_party/wuffs" ;ASL2.0
     "third_party/xcbproto" ;X11
     "third_party/xdg-utils" ;Expat
+    "third_party/xnnpack" ;BSD-3
 
     ;; These are forked components of the X11 keybinding code.
     "third_party/libxcb-keysyms" ;X11
@@ -312,7 +316,7 @@
   ;; run the Blink performance tests, just remove everything to save ~70MiB.
   '("third_party/blink/perf_tests"))
 
-(define %chromium-version "102.0.5005.115")
+(define %chromium-version "103.0.5060.53")
 (define %ungoogled-revision (string-append %chromium-version "-1"))
 (define %debian-revision "debian/102.0.5005.61-1")
 
@@ -324,7 +328,7 @@
     (file-name (git-file-name "ungoogled-chromium" %ungoogled-revision))
     (sha256
      (base32
-      "1z2xkxxviggyyksga74cqa4v73gynlgzi22ckg8yv84qxrklik6p"))))
+      "1g5ciwzrhg9g13gvhrwqf19djk9jhj1d6nx2f6a8d5ch1mhi2z8s"))))
 
 (define %debian-origin
   (origin
@@ -347,11 +351,7 @@
 
 (define %debian-patches
   (map debian-patch
-       '("upstream/libxml.patch"
-         "upstream/dawn-version-fix.patch"
-         "upstream/blink-ftbfs.patch"
-         "upstream/nested-nested-nested-nested-nested-nested-regex-patterns.patch"
-         "system/jsoncpp.patch"
+       '("system/jsoncpp.patch"
          "system/zlib.patch"
          "system/openjpeg.patch")))
 
@@ -477,7 +477,7 @@
                                   %chromium-version ".tar.xz"))
               (sha256
                (base32
-                "1rj7vy824vn513hiivc90lnxvxyi2s0qkdmfqsdssv9v6zjl079h"))
+                "00di0nw6h3kb0qp2wp3ny3zsar1ayn1lyx5zr28dl1h5cwaaxjqf"))
               (modules '((guix build utils)))
               (snippet (force ungoogled-chromium-snippet))))
     (build-system gnu-build-system)
@@ -880,12 +880,14 @@
            flac
            ffmpeg
            fontconfig
+           fp16
            freetype
+           fxdiv
            gdk-pixbuf
            glib
            gtk+
            harfbuzz-3.0
-           icu4c
+           icu4c-71
            jsoncpp
            lcms
            libevent
diff --git a/gnu/packages/cluster.scm b/gnu/packages/cluster.scm
index d27544e992..db610d5fed 100644
--- a/gnu/packages/cluster.scm
+++ b/gnu/packages/cluster.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2018 Sou Bunnbu <iyzsong@member.fsf.org>
 ;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Andrew Miloradovsky <andrew@interpretmath.pw>
-;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2021 Dion Mendel <guix@dm9.info>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -22,6 +22,7 @@
 
 (define-module (gnu packages cluster)
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix gexp)
   #:use-module (guix build-system gnu)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -29,27 +30,30 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages docbook)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages ruby)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages texinfo)
-  #:use-module (gnu packages tls))
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages xml))
 
 (define-public drbd-utils
   (package
     (name "drbd-utils")
-    (version "9.19.1")
+    (version "9.21.2")
     (source (origin
               (method url-fetch)
               (uri (list (string-append "https://pkg.linbit.com/downloads/drbd"
                                         "/utils/drbd-utils-" version ".tar.gz")))
               (sha256
                (base32
-                "1l99kcrb0j85wxxmrdihpx9bk1a4sdi7wlp5m1x5l24k8ck1m5cf"))
+                "1zhinblhpfb7wq3wkaim4xzx1m89671djvnrf4vjabfzpclkz60h"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -65,62 +69,73 @@
                   (substitute* "configure"
                     ;; Use a sensible default udev rules directory.
                     (("default_udevdir=/lib/udev")
-                     "default_udevdir='${prefix}/lib/udev'"))
-                  #t))))
+                     "default_udevdir='${prefix}/lib/udev'"))))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags '(;; Do not install sysv or systemd init scripts.
-                           "--with-initscripttype=none"
-                           ;; Use the pre-built manual pages present in release
-                           ;; tarballs instead of generating them from scratch.
-                           "--with-prebuiltman"
-                           ;; Disable support for DRBD 8.3 as it is only for
-                           ;; Linux-Libre versions < 3.8.  8.4 is the latest
-                           ;; kernel driver as of Linux 5.7.
-                           "--without-83support"
-                           "--sysconfdir=/etc"
-                           "--localstatedir=/var")
-       #:test-target "test"
-       #:make-flags '("WANT_DRBD_REPRODUCIBLE_BUILD=yesplease")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'patch-generated-file-shebangs 'patch-documentation
-           (lambda _
-             ;; The preceding phase misses some Makefiles with unusual file
-             ;; names, so we handle those here.
-             (for-each patch-makefile-SHELL (find-files "documentation/common"
-                                                        "^Makefile"))
-             #t))
-         (add-before 'configure 'use-absolute-/lib/drbd
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               ;; Look for auxiliary executables below exec_prefix instead
-               ;; of assuming /lib/drbd (see TODO comment in the file).
-               (substitute* "user/v9/drbdtool_common.c"
-                 (("\"/lib/drbd\"")
-                  (string-append "\"" out "/lib/drbd\"")))
-               #t)))
-         (add-after 'configure 'adjust-installation-directories
-           (lambda _
-             ;; Do not attempt to create /etc or /var.
-             (substitute* "scripts/Makefile"
-               (("\\$\\(DESTDIR\\)\\$\\(sysconfdir\\)")
-                "$(DESTDIR)$(prefix)$(sysconfdir)"))
-             (substitute* "user/v84/Makefile"
-               (("\\$\\(DESTDIR\\)\\$\\(localstatedir\\)")
-                "$(DESTDIR)$(prefix)$(localstatedir)")
-               (("\\$\\(DESTDIR\\)/lib/drbd")
-                "$(DESTDIR)$(prefix)/lib/drbd"))
-             (substitute* "user/v9/Makefile"
-               (("\\$\\(DESTDIR\\)\\$\\(localstatedir\\)")
-                "$(DESTDIR)$(prefix)$(localstatedir)")
-               (("\\$\\(DESTDIR\\)\\$\\(DRBD_LIB_DIR\\)")
-                "$(DESTDIR)$(prefix)$(DRBD_LIB_DIR)"))
-             #t)))))
+     (list
+      #:configure-flags
+      #~(list "--sysconfdir=/etc"
+              "--localstatedir=/var"
+              ;; Do not install sysv or systemd init scripts.
+              "--with-initscripttype=none"
+              ;; Disable support for DRBD 8.3 as it is only for
+              ;; Linux-Libre versions < 3.8.  8.4 is the latest
+              ;; kernel driver as of Linux 5.18.
+              "--without-83support")
+      #:test-target "test"
+      #:make-flags #~(list "WANT_DRBD_REPRODUCIBLE_BUILD=yesplease")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'disable-ja-translation
+            (lambda _
+              ;; XXX: The japanese documentation cannot be created due to
+              ;; several "Invalid po file" and "use of uninitialized variable"
+              ;; in po4a.
+              (substitute* "Makefile.in"
+                (("(DOC_DIRS.*)documentation/ja/v[[:digit:]]+" _ match)
+                 match)
+                (("[[:blank:]]+\\$\\(MAKE\\) -C documentation/ja/v[[:digit:]]+.*")
+                 ""))))
+          (add-after 'patch-generated-file-shebangs 'patch-documentation
+            (lambda _
+              ;; The preceding phase misses some Makefiles with unusual file
+              ;; names, so we handle those here.
+              (for-each patch-makefile-SHELL (find-files "documentation/common"
+                                                         "^Makefile"))))
+          (add-before 'configure 'use-absolute-/lib/drbd
+            (lambda _
+              ;; Look for auxiliary executables below exec_prefix instead
+              ;; of assuming /lib/drbd (see TODO comment in the file).
+              (substitute* "user/v9/drbdtool_common.c"
+                (("\"/lib/drbd\"")
+                 (string-append "\"" #$output "/lib/drbd\"")))))
+          (add-after 'configure 'adjust-installation-directories
+            (lambda _
+              ;; Do not attempt to create /etc or /var.
+              (substitute* "scripts/Makefile"
+                (("\\$\\(DESTDIR\\)\\$\\(sysconfdir\\)")
+                 "$(DESTDIR)$(prefix)$(sysconfdir)"))
+              (substitute* "user/v84/Makefile"
+                (("\\$\\(DESTDIR\\)\\$\\(localstatedir\\)")
+                 "$(DESTDIR)$(prefix)$(localstatedir)")
+                (("\\$\\(DESTDIR\\)/lib/drbd")
+                 "$(DESTDIR)$(prefix)/lib/drbd"))
+              (substitute* "user/v9/Makefile"
+                (("\\$\\(DESTDIR\\)\\$\\(localstatedir\\)")
+                 "$(DESTDIR)$(prefix)$(localstatedir)")
+                (("\\$\\(DESTDIR\\)\\$\\(DRBD_LIB_DIR\\)")
+                 "$(DESTDIR)$(prefix)$(DRBD_LIB_DIR)")))))))
     (native-inputs
-     `(("clitest" ,clitest)
-       ("flex" ,flex)
-       ("udev" ,eudev)))          ;just to satisfy a configure check
+     (list clitest
+           eudev                        ;just to satisfy a configure check
+           flex
+           ;; For the documentation.
+           docbook-xml
+           docbook-xml-4.4              ;used by documentation/ra2refentry.xsl
+           docbook-xsl
+           libxml2                      ;for XML_CATALOG_FILES
+           libxslt                      ;for xsltproc
+           ruby-asciidoctor))
     (home-page "https://www.linbit.com/drbd/")
     (synopsis "Replicate block devices between machines")
     (description
@@ -128,6 +143,9 @@
 shared-nothing, replicated storage solution mirroring the content of block
 devices (hard disks, partitions, logical volumes etc.) over any network
 connection.  This package contains the userland utilities.")
+    (properties
+     '((release-monitoring-url
+        . "https://www.linbit.com/en/drbd-community/drbd-download/")))
     (license license:gpl2+)))
 
 (define-public keepalived
diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm
index 78e4f3bd8e..5ae5efc330 100644
--- a/gnu/packages/cpp.scm
+++ b/gnu/packages/cpp.scm
@@ -406,7 +406,7 @@ combination of these streams.")
 (define-public xsimd
   (package
     (name "xsimd")
-    (version "8.0.5")
+    (version "8.1.0")
     (source
      (origin
        (method git-fetch)
@@ -414,7 +414,7 @@ combination of these streams.")
              (url "https://github.com/QuantStack/xsimd")
              (commit version)))
        (sha256
-        (base32 "0fph1gzrj13knfkl3fvg098ccvqkbzs0jb8n323m7pnxajpzhzij"))
+        (base32 "16b9fdvhhsbs93llbzccgpxjdkj8kfvac3wx0b30i306k5f3maq2"))
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
@@ -435,7 +435,7 @@ operating on batches.")
 (define-public google-highway
   (package
     (name "google-highway")
-    (version "0.15.0")
+    (version "0.17.0")
     (source
      (origin
        (method git-fetch)
@@ -444,7 +444,7 @@ operating on batches.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1yjwgnrpd9m99x2nqf6ld28zc6y9nlsxqg128bxxmja1gg4g4qdz"))))
+        (base32 "0iwn7m8f1j7bchwbi5h84nzkzmzqd7byddbr4lh6i6lpd87wny08"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags (list "-DHWY_SYSTEM_GTEST=on")))
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 92ab94f453..9e9b584f7a 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -131,6 +131,7 @@
   #:use-module (gnu packages popt)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-science)
@@ -650,13 +651,13 @@ replacement for the code@{python-memcached} library.")
 (define-public litecli
  (package
   (name "litecli")
-  (version "1.8.0")
+  (version "1.9.0")
   (source
    (origin
      (method url-fetch)
      (uri (pypi-uri "litecli" version))
      (sha256
-      (base32 "0ghh8hq5bw3y2ybiy4ibbdfz55jxvilg1s6zmhxmqikhg5s95xh2"))))
+      (base32 "1897divrdqlhl1p5jvvm29rg3d99f48s58na7hgdzm1x13x2rbr1"))))
   (build-system python-build-system)
   (propagated-inputs
    (list python-cli-helpers
@@ -1184,14 +1185,14 @@ and high-availability (HA).")
 (define-public postgresql-14
   (package
     (name "postgresql")
-    (version "14.3")
+    (version "14.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://ftp.postgresql.org/pub/source/v"
                                   version "/postgresql-" version ".tar.bz2"))
               (sha256
                (base32
-                "0f5gm43hx8j67nfad8mrfhzb9aq4brfgka5d0nf936pmicv5g417"))
+                "0slg7ld5mldmv3pn1wxxwglm4s3xc6c91ixx24apj713qlvn4fy2"))
               (patches (search-patches "postgresql-disable-resolve_symlinks.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -1426,7 +1427,7 @@ PostgreSQL extension, providing automatic partitioning across time and space
 (define-public pgloader
   (package
     (name "pgloader")
-    (version "3.6.3")
+    (version "3.6.4")
     (source
      (origin
        (method git-fetch)
@@ -1434,7 +1435,7 @@ PostgreSQL extension, providing automatic partitioning across time and space
              (url "https://github.com/dimitri/pgloader")
              (commit (string-append "v" version))))
        (sha256
-        (base32 "147dcf0rmi94p95dvifx8qy7602fvs041dv9wlg3q31ly13agwb5"))
+        (base32 "05lpa0r5l7pvx97ljfb0cryxz11krczbb86gi1i1ixp0h9bvqw2a"))
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
diff --git a/gnu/packages/dav.scm b/gnu/packages/dav.scm
index 59015baa40..995a7b50d5 100644
--- a/gnu/packages/dav.scm
+++ b/gnu/packages/dav.scm
@@ -30,6 +30,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages check)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
diff --git a/gnu/packages/dezyne.scm b/gnu/packages/dezyne.scm
index af1abf11a9..ccdf7fe09f 100644
--- a/gnu/packages/dezyne.scm
+++ b/gnu/packages/dezyne.scm
@@ -31,14 +31,14 @@
 (define-public dezyne
   (package
     (name "dezyne")
-    (version "2.15.1")
+    (version "2.15.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://dezyne.org/download/dezyne/"
                            name "-" version ".tar.gz"))
        (sha256
-        (base32 "0yid2a9xvp4hc7fry07zp0q2hva89czri6i1m2d1n22srh7r0my6"))))
+        (base32 "0yy4cmpxhw4z82bc1mvxyic4fnmb9a1d3w8fijvk1y2kqx2fiq6f"))))
     (inputs (list bash-minimal
                   guile-3.0-latest
                   guile-json-4
diff --git a/gnu/packages/diffoscope.scm b/gnu/packages/diffoscope.scm
index 01628b5ccc..0c4acdee0b 100644
--- a/gnu/packages/diffoscope.scm
+++ b/gnu/packages/diffoscope.scm
@@ -73,7 +73,7 @@
 (define-public diffoscope
   (package
     (name "diffoscope")
-    (version "216")
+    (version "217")
     (source
      (origin
        (method git-fetch)
@@ -82,7 +82,7 @@
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "066w4mcrjvymwii5j5hylcslpz18wgd5afl11z1n3588j8c1zw15"))
+        (base32 "0vbyg8lm5ddrdkhahcs70rhdmz42blppzliryghxcyyxs7g3gzq5"))
        (patches
         (search-patches "diffoscope-fix-llvm-test.patch"))))
     (build-system python-build-system)
diff --git a/gnu/packages/django.scm b/gnu/packages/django.scm
index b7d739bea8..d723e30f0d 100644
--- a/gnu/packages/django.scm
+++ b/gnu/packages/django.scm
@@ -1198,13 +1198,13 @@ FileFields during tests.")
 (define-public python-django-auth-ldap
   (package
     (name "python-django-auth-ldap")
-    (version "4.0.0")
+    (version "4.1.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "django-auth-ldap" version))
               (sha256
                (base32
-                "0fajn4bk7m1hk0mjz97q7vlfzh7ibzv8f4qn7zhkq26f4kk7jvr7"))))
+                "0jd9jms9qpa92fk5n7gqcxjk3zs6ay79r73ann7cw1vqn79lkxvp"))))
     (build-system python-build-system)
     (arguments
      (list #:phases
@@ -1271,13 +1271,13 @@ to ElasticSearch.")
 (define-public python-django-netfields
   (package
     (name "python-django-netfields")
-    (version "1.2.4")
+    (version "1.3.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "django-netfields" version))
               (sha256
                (base32
-                "0jwlbyaxk91fq69g2y0zpfjgmjgh6l0lqm5mhys7m5968lkihvgp"))))
+                "122d0db1f420cwzrd7hynfbnnpqkjj2ridym5mrnj0l736nin5rr"))))
     (build-system python-build-system)
     (arguments '(#:tests? #f))      ;XXX: Requires a running PostgreSQL server
     (propagated-inputs
diff --git a/gnu/packages/dlang.scm b/gnu/packages/dlang.scm
index 403fcbbd6b..9a972182cc 100644
--- a/gnu/packages/dlang.scm
+++ b/gnu/packages/dlang.scm
@@ -3,10 +3,12 @@
 ;;; Copyright © 2015, 2018 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2017 Frederick Muriithi <fredmanglis@gmail.com>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2017, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2019, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
-;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022 ( <paren@disroot.org>
+;;; Copyright © 2022 Esther Flashner <esther@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,19 +30,23 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module ((guix build utils) #:hide (delete which))
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system copy)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gdb)
   #:use-module (gnu packages libedit)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages ninja)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
@@ -48,137 +54,161 @@
   #:use-module (gnu packages xorg)
   #:use-module (srfi srfi-1))
 
-(define-public rdmd
+(define-public d-tools
   (package
-    (name "rdmd")
-    (version "2.077.1")
-    (source (origin
-      (method url-fetch)
-      (uri (string-append "https://github.com/dlang/tools/archive/v" version ".tar.gz"))
-      (file-name (string-append name "-" version ".tar.gz"))
-      (sha256
-       (base32
-        "0c8w373rv6iz3xfid94w40ncv2lr2ncxi662qsr4lda4aghczmq7"))))
+    (name "d-tools")
+    (version "2.100.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/dlang/tools")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1jbn0hyskv4ykcckw0iganpyrm0bq2lggswspw21r4hgnxkmjbyw"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (delete 'check) ; There is no Makefile, so there's no 'make check'.
-         (replace
-          'build
-          (lambda _
-            (invoke "ldc2" "rdmd.d")))
-         (replace
-          'install
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
-              (install-file "rdmd" bin)))))))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)
+               (replace 'build
+                 (lambda _
+                   (mkdir-p "bin")
+                   (setenv "CC" #$(cc-for-target))
+                   (setenv "LD" #$(ld-for-target))
+                   (invoke "ldc2" "rdmd.d" "--of" "bin/rdmd")
+                   (apply invoke "ldc2" "--of=bin/dustmite"
+                          (find-files "DustMite" ".*\\.d"))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "bin/rdmd" "rdmd_test.d" "bin/rdmd"
+                             "--rdmd-default-compiler" "ldmd2"))))
+               (replace 'install
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out"))
+                          (bin (string-append out "/bin"))
+                          (man (string-append out "/man")))
+                     (for-each delete-file (find-files "bin" "\\.o$"))
+                     (copy-recursively "bin" bin)
+                     (copy-recursively "man" man)))))))
     (native-inputs
-     (list ldc))
-    (home-page "https://github.com/D-Programming-Language/tools/")
-    (synopsis "Specialized equivalent to 'make' for the D language")
+     (list ldc
+           (module-ref (resolve-interface
+                        '(gnu packages commencement))
+                       'ld-gold-wrapper)))
+    (home-page "https://github.com/dlang/tools")
+    (synopsis "Useful D-related tools")
     (description
-     "rdmd is a companion to the dmd compiler that simplifies the typical
-edit-compile-link-run or edit-make-run cycle to a rapid edit-run cycle.  Like
-make and other tools, rdmd uses the relative dates of the files involved to
-minimize the amount of work necessary.  Unlike make, rdmd tracks dependencies
-and freshness without requiring additional information from the user.")
+     "@code{d-tools} provides two useful tools for the D language: @code{rdmd},
+which runs D source files as scripts, and @code{dustmite}, which reduces D code
+to a minimal test case.")
     (license license:boost1.0)))
 
-;;; The 0.17.6 version is the last release to support being bootstrapped
-;;; without a D compiler (requiring only a C++ compiler).
-;;; TODO: Bootstrap ldc from GDC (the D frontend for GCC).
-(define ldc-bootstrap-0.17
+(define-public gdmd
+  (let ((commit "ff2c97a47408fb71c18a2d453294d18808a97cc5")
+        (revision "1"))
+    (package
+      (name "gdmd")
+      (version (git-version "0.1.0" revision commit))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/D-Programming-GDC/gdmd")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+           (base32 "0pd70clk70069xcjysaas7zszzmigrcw1zl2xxv8kzdg7y7xrzvm"))))
+      (build-system copy-build-system)
+      (arguments
+       (list
+         #:install-plan
+         #~'(("dmd-script" "bin/gdmd")
+             ("dmd-script.1" "share/man/man1/gdmd.1"))
+         #:phases
+         #~(modify-phases %standard-phases
+             (add-after 'unpack 'adjust-gdc-location
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (substitute* "dmd-script"
+                   (("my \\$gdc_dir.*")
+                    (string-append "my $gdc_dir = \""
+                                   (dirname (search-input-file inputs "/bin/gdc"))
+                                   "\";\n"))))))))
+      (inputs
+       (list gdc-10 perl))
+      (home-page "https://github.com/D-Programming-GDC/gdmd")
+      (synopsis "DMD-like wrapper for GDC")
+      (description "This package provides a DMD-like wrapper for the
+@acronym{GNU D Compiler,GDC}.")
+      (license license:gpl3+))))
+
+;; We use GDC, the D frontend for GCC, to bootstrap ldc.  We then use
+;; ldc to bootstrap itself so that no reference remains to GDC.
+(define ldc-bootstrap
   (package
     (name "ldc")
-    (version "0.17.6")
+    (version "1.27.1")
     (source
      (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/ldc-developers/ldc")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
+       (method url-fetch)
+       (uri (string-append "https://github.com/ldc-developers/ldc/releases"
+                           "/download/v" version "/ldc-" version "-src.tar.gz"))
        (sha256
-        (base32 "1q6hm4fkrcwys83x0p4kfg9xrc1b9g2qicqif2zy5z4nsfsb5vgs"))))
+        (base32 "1775001ba6n8w46ln530kb5r66vs935ingnppgddq8wqnc0gbj4k"))))
     (build-system cmake-build-system)
-    (supported-systems '("x86_64-linux" "i686-linux" "armhf-linux"))
-    (properties
-     ;; Some of the tests take a very long time on ARMv7.  See
-     ;; <https://lists.gnu.org/archive/html/guix-devel/2018-02/msg00312.html>.
-     `((max-silent-time . ,(* 3600 3))))
     (arguments
-     `(#:tests? #f               ;requires obsolete python-lit test dependency
+     `(#:tests? #f                  ;skip in the bootstrap
+       #:build-type "Release"
+       #:configure-flags
+        (list "-GNinja")
+       #:make-flags                 ;used as build targets
+        (list "all")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'unpack-submodule-sources
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((unpack (lambda (input target)
-                             (let ((source (assoc-ref inputs input)))
-                               ;; Git checkouts are directories as long as
-                               ;; there are no patches; tarballs otherwise.
-                               (if (file-is-directory? source)
-                                   (copy-recursively source target)
-                                   (with-directory-excursion target
-                                     (invoke "tar" "xvf" source
-                                             "--strip-components=1")))))))
-               (unpack "phobos-src" "runtime/phobos")
-               (unpack "druntime-src" "runtime/druntime")
-               (unpack "dmd-testsuite-src" "tests/d2/dmd-testsuite"))))
-         (add-after 'unpack-submodule-sources 'patch-paths
+         (add-after 'unpack 'patch-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "runtime/phobos/std/process.d"
                (("/bin/sh") (which "sh"))
-               (("echo") (which "echo")))
-             (substitute* "runtime/phobos/std/datetime.d"
-               (("/usr/share/zoneinfo/")
-                (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo"))
-               (("tzName == \"[+]VERSION\"")
-                "(tzName == \"+VERSION\" || \
-std.algorithm.endsWith(tzName, \"/leapseconds\"))")))))))
+               (("echo") (which "echo")))))
+         (replace 'build
+           ;; Building with Make would result in "make: *** [Makefile:166:
+           ;; all] Error 2".
+           (lambda* (#:key make-flags parallel-tests? #:allow-other-keys)
+             (let ((job-count (number->string (or (and parallel-tests?
+                                                       (parallel-job-count))
+                                                  1))))
+               (apply invoke "cmake" "--build" "." "-j" job-count
+                      "--target" make-flags))))
+         (replace 'install
+           (lambda _
+             (invoke "cmake" "--install" "."))))))
     (inputs
      `(("libconfig" ,libconfig)
        ("libedit" ,libedit)
        ("tzdata" ,tzdata)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("llvm" ,llvm-6)
+     ;; Importing (gnu packages commencement) would introduce a cycle.
+     `(("ld-gold-wrapper" ,(module-ref (resolve-interface
+                                        '(gnu packages commencement))
+                                       'ld-gold-wrapper))
+       ("llvm" ,llvm-11)
+       ("ldc" ,gdmd)
+       ("ninja" ,ninja)
        ("python-wrapper" ,python-wrapper)
-       ("unzip" ,unzip)
-       ("phobos-src"
-        ,(origin
-           (method git-fetch)
-           (uri (git-reference
-                 (url "https://github.com/ldc-developers/phobos")
-                 (commit (string-append "ldc-v" version))))
-           (file-name (git-file-name "phobos" version))
-           (sha256
-            (base32 "15jzs38wanks2jfp2izzl7zqrp4c8ai54ppsgm8ws86p3sbbkmj8"))))
-       ("druntime-src"
-        ,(origin
-           (method git-fetch)
-           (uri (git-reference
-                 (url "https://github.com/ldc-developers/druntime")
-                 (commit (string-append "ldc-v" version))))
-           (file-name (git-file-name "druntime" version))
-           (sha256
-            (base32 "00wr2kiggwnd8h7by51fhj1xc65hv1ysip5gbgdbkfar58p2d0bb"))))
-       ("dmd-testsuite-src"
-        ,(origin
-           (method git-fetch)
-           (uri (git-reference
-                 (url "https://github.com/ldc-developers/dmd-testsuite")
-                 (commit (string-append "ldc-v" version))))
-           (file-name (git-file-name "dmd-testsuite" version))
-           (sha256
-            (base32 "1d1c0979wbippldrkjf7szyj4n87hxz8dwqg1r5b3aai37g9kcky"))))))
+       ("unzip" ,unzip)))
     (home-page "http://wiki.dlang.org/LDC")
     (synopsis "LLVM-based compiler for the D programming language")
     (description
      "LDC is an LLVM compiler for the D programming language.  It is based on
 the latest DMD compiler that was written in C and is used for
 bootstrapping more recent compilers written in D.")
+    (properties
+     ;; Some of the tests take a very long time on ARMv7.  See
+     ;; <https://lists.gnu.org/archive/html/guix-devel/2018-02/msg00312.html>.
+     `((max-silent-time . ,(* 3600 3))))
     ;; Most of the code is released under BSD-3, except for code originally
     ;; written for GDC, which is released under GPLv2+, and the DMD frontend,
     ;; which is released under the "Boost Software License version 1.0".
@@ -186,108 +216,19 @@ bootstrapping more recent compilers written in D.")
                    license:gpl2+
                    license:boost1.0))))
 
-;;; This is the last version that supports being built with 32 bit machines
-;;; from 0.17.
-(define ldc-bootstrap-1.12
-  (package
-    (inherit ldc-bootstrap-0.17)
-    (version "1.12.0")
-    (source
-     (origin
-       (method url-fetch)
-       ;; The official release include the matching source code releases of
-       ;; phobos, druntime and dmd-testsuite.
-       (uri (string-append "https://github.com/ldc-developers/ldc/releases"
-                           "/download/v" version "/ldc-" version "-src.tar.gz"))
-       (sha256
-        (base32 "1fdma1w8j37wkr0pqdar11slkk36qymamxnk6d9k8ybhjmxaaawm"))))
-    (arguments
-     (substitute-keyword-arguments (package-arguments ldc-bootstrap-0.17)
-       ((#:build-type _ #f) "Release")
-       ((#:configure-flags _ #f)
-        `(list "-GNinja"))
-       ((#:make-flags _ #f)             ;used as build targets
-        `(list "all"))
-       ((#:tests? _) #f)
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (delete 'unpack-submodule-sources)
-           (replace 'patch-paths
-             (lambda* (#:key inputs #:allow-other-keys)
-               (substitute* '("runtime/phobos/std/process.d")
-                 (("/bin/sh") (which "sh"))
-                 (("echo") (which "echo")))))
-           (replace 'build
-             ;; Building with Make would result in "make: *** [Makefile:166:
-             ;; all] Error 2".
-             (lambda* (#:key make-flags parallel-tests? #:allow-other-keys)
-               (let ((job-count (number->string (or (and parallel-tests?
-                                                         (parallel-job-count))
-                                                    1))))
-                 (apply invoke "cmake" "--build" "." "-j" job-count
-                        "--target" make-flags))))
-           (replace 'install
-             (lambda _
-               (invoke "cmake" "--install" ".")))))))
-    (native-inputs
-     ;; Importing (gnu packages commencement) would introduce a cycle.
-     `(("ld-gold-wrapper" ,(module-ref (resolve-interface
-                                        '(gnu packages commencement))
-                                       'ld-gold-wrapper))
-       ("llvm" ,llvm-6)
-       ("ldc" ,ldc-bootstrap-0.17)
-       ("ninja" ,ninja)
-       ("python-wrapper" ,python-wrapper)
-       ("unzip" ,unzip)))))
-
-;;; For 32 bits systems, 1.12 cannot build 1.27 directly, so we need another
-;;; hop.
-(define ldc-bootstrap-1.24
-  (package
-    (inherit ldc-bootstrap-1.12)
-    (version "1.24.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/ldc-developers/ldc/releases"
-                           "/download/v" version "/ldc-" version "-src.tar.gz"))
-       (sha256
-        (base32 "0g5svf55i0kq55q49awmwqj9qi1n907cyrn1vjdjgs8nx6nn35gx"))))
-    (native-inputs
-     (fold alist-replace
-           (package-native-inputs ldc-bootstrap-1.12)
-           '("ldc" "llvm")
-           `((,ldc-bootstrap-1.12) (,llvm-11))))))
-
-(define ldc-bootstrap-1.27
-  (package
-    (inherit ldc-bootstrap-1.24)
-    (version "1.27.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/ldc-developers/ldc/releases"
-                           "/download/v" version "/ldc-" version "-src.tar.gz"))
-       (sha256
-        (base32 "1775001ba6n8w46ln530kb5r66vs935ingnppgddq8wqnc0gbj4k"))))
-    (native-inputs
-     (fold alist-replace
-           (package-native-inputs ldc-bootstrap-1.24)
-           '("ldc" "llvm")
-           `((,ldc-bootstrap-1.24) (,llvm-11))))))
-
 (define-public ldc
   (package
-    (inherit ldc-bootstrap-1.27)
+    (inherit ldc-bootstrap)
     (arguments
-     (substitute-keyword-arguments (package-arguments ldc-bootstrap-1.27)
+     (substitute-keyword-arguments (package-arguments ldc-bootstrap)
        ((#:make-flags _ #f)
         '(list "all"
                ;; Also build the test runner binaries.
                "ldc2-unittest" "all-test-runners"))
        ((#:configure-flags flags)
         `(,@flags "-DBUILD_SHARED_LIBS=ON"
-                  "-DLDC_LINK_MANUALLY=OFF"))
+                  "-DLDC_LINK_MANUALLY=OFF"
+                  "-DLDC_DYNAMIC_COMPILE=OFF"))
        ((#:tests? _) #t)
        ((#:phases phases)
         `(modify-phases ,phases
@@ -308,7 +249,8 @@ bootstrapping more recent compilers written in D.")
                                            system)))))
                      (matches ("x86_64"      => "x86_64")
                               ("i686"        => "i386")
-                              ("armhf"       => "armhf"))))
+                              ("armhf"       => "armhf")
+                              ("aarch64"     => "aarch64"))))
                  ;; Coax LLVM into agreeing with Clang about system target
                  ;; naming.
                  (substitute* "driver/linker-gcc.cpp"
@@ -358,30 +300,28 @@ bootstrapping more recent compilers written in D.")
                (substitute* "runtime/druntime/test/exceptions/Makefile"
                  ((".*TESTS\\+=rt_trap_exceptions_drt_gdb.*")
                   ""))
-               ;; The following tests fail on the supported 32 bit systems,
-               ;; which are not tested upstream.
+               ;; The following tests fail on some systems, not all of
+               ;; which are tested upstream.
                (with-directory-excursion "tests"
-                 (let ((system ,(or (%current-target-system)
-                                    (%current-system))))
-                   (when (or (string-prefix? "armhf" system )
-                             (string-prefix? "i686" system ))
+                 (cond
+                   (,(or (target-x86-32?)
+                         (target-arm32?))
                      (for-each delete-file
                                '("PGO/profile_rt_calls.d"
                                  "codegen/mangling.d"
-                                 "debuginfo/print_gdb.d"
-                                 "dynamiccompile/bind.d"
-                                 "dynamiccompile/bind_bool.d"
-                                 "dynamiccompile/bind_func_opt.d"
-                                 "dynamiccompile/bind_nested_opt.d"
-                                 "dynamiccompile/bind_opt.d"
-                                 "dynamiccompile/compiler_context.d"
-                                 "dynamiccompile/compiler_context_parallel.d"
                                  "instrument/xray_check_pipeline.d"
                                  "instrument/xray_link.d"
                                  "instrument/xray_simple_execution.d"
                                  "sanitizers/msan_noerror.d"
                                  "sanitizers/msan_uninitialized.d"
-                                 "d2/dmd-testsuite/runnable_cxx/cppa.d")))))))
+                                 "d2/dmd-testsuite/runnable_cxx/cppa.d")))
+                   (,(target-aarch64?)
+                     (for-each delete-file
+                               '("d2/dmd-testsuite/runnable/ldc_cabi1.d"
+                                 "sanitizers/fuzz_basic.d"
+                                 "sanitizers/msan_noerror.d"
+                                 "sanitizers/msan_uninitialized.d")))
+                   (#t '())))))
            (add-before 'configure 'set-cc-and-cxx-to-use-clang
              ;; The tests require to be built with Clang; build everything
              ;; with it, for simplicity.
@@ -414,15 +354,15 @@ integration tests...\n")
                            "-E" "dmd-testsuite|lit-tests|ldc2-unittest")))))))))
     (native-inputs
      (append (delete "llvm"
-                     (alist-replace "ldc" (list ldc-bootstrap-1.27)
-                                    (package-native-inputs ldc-bootstrap-1.27)))
+                     (alist-replace "ldc" (list ldc-bootstrap)
+                                    (package-native-inputs ldc-bootstrap)))
          `(("clang" ,clang-11)          ;propagates llvm and clang-runtime
            ("python-lit" ,python-lit))))))
 
 (define-public dub
   (package
     (name "dub")
-    (version "1.7.2")
+    (version "1.23.0")
     (source
      (origin
        (method git-fetch)
@@ -431,26 +371,31 @@ integration tests...\n")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "073ibvgm1gphcqs1yjrav9ryp677nh3b194nxmvicwgvdc0sb6w9"))))
+        (base32 "06a4whsl1m600k096nwif83n7za3vr7pj1xwapncy5fcad1gmady"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; it would have tested itself by installing some packages (vibe etc)
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)            ; no configure script
-         (replace 'build
-           (lambda _
-             (invoke "./build.sh")))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin")))
-               (install-file "bin/dub" bin)
-               #t))))))
+     (list #:tests? #f                  ; tests try to install packages
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)      ; no configure script
+               (replace 'build
+                 (lambda _
+                   (setenv "CC" #$(cc-for-target))
+                   (setenv "LD" #$(ld-for-target))
+                   (invoke "./build.d")))
+               (replace 'install
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out"))
+                          (bin (string-append out "/bin")))
+                     (install-file "bin/dub" bin)))))))
     (inputs
      (list curl))
     (native-inputs
-     (list ldc))
+     (list d-tools
+           ldc
+           (module-ref (resolve-interface
+                        '(gnu packages commencement))
+                       'ld-gold-wrapper)))
     (home-page "https://code.dlang.org/getting_started")
     (synopsis "Package and build manager for D projects")
     (description
diff --git a/gnu/packages/docker.scm b/gnu/packages/docker.scm
index 07731886ae..ae4ee419af 100644
--- a/gnu/packages/docker.scm
+++ b/gnu/packages/docker.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2020 Katherine Cox-Buday <cox.katherine.e@gmail.com>
 ;;; Copyright © 2020 Jesse Dowell <jessedowell@gmail.com>
 ;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2022 Pierre Langlois <pierre.langlois@gmx.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,6 +29,7 @@
   #:use-module (gnu packages)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
@@ -52,7 +54,7 @@
 
 ;; Note - when changing Docker versions it is important to update the versions
 ;; of several associated packages (docker-libnetwork and go-sctp).
-(define %docker-version "19.03.15")
+(define %docker-version "20.10.17")
 
 (define-public python-docker
   (package
@@ -173,7 +175,7 @@ Python without keeping their credentials in a Docker configuration file.")
 (define-public containerd
   (package
     (name "containerd")
-    (version "1.4.4")
+    (version "1.6.6")
     (source
      (origin
        (method git-fetch)
@@ -182,51 +184,58 @@ Python without keeping their credentials in a Docker configuration file.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0qjbfj1dw6pykxhh8zahcxlgpyjzgnrngk5vjaf34akwyan8nrxb"))))
+        (base32 "1vsl747i3wyy68j4lp4nprwxadbyga8qxlrk892afcd2990zp5mr"))))
     (build-system go-build-system)
     (arguments
-     (let ((make-flags (list (string-append "VERSION=" version)
-                             "REVISION=0")))
-       `(#:import-path "github.com/containerd/containerd"
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'chdir 'patch-paths
-             (lambda* (#:key inputs import-path outputs #:allow-other-keys)
-               (with-directory-excursion (string-append "src/" import-path)
-                 (substitute* "runtime/v1/linux/runtime.go"
-                   (("defaultRuntime[ \t]*=.*")
-                    (string-append "defaultRuntime = \""
-                                   (assoc-ref inputs "runc")
-                                   "/sbin/runc\"\n"))
-                   (("defaultShim[ \t]*=.*")
-                    (string-append "defaultShim = \""
-                                   (assoc-ref outputs "out")
-                                   "/bin/containerd-shim\"\n")))
-                 (substitute* "vendor/github.com/containerd/go-runc/runc.go"
-                   (("DefaultCommand[ \t]*=.*")
-                    (string-append "DefaultCommand = \""
-                                   (assoc-ref inputs "runc")
-                                   "/sbin/runc\"\n")))
-                 (substitute* "vendor/github.com/containerd/continuity/testutil\
+     (let ((make-flags #~(list (string-append "VERSION=" #$version)
+                               (string-append "DESTDIR=" #$output)
+                               "PREFIX="
+                               "REVISION=0")))
+       (list
+        #:import-path "github.com/containerd/containerd"
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'patch-paths
+              (lambda* (#:key inputs import-path outputs #:allow-other-keys)
+                (with-directory-excursion (string-append "src/" import-path)
+                  (substitute* "runtime/v1/linux/runtime.go"
+                    (("defaultRuntime[ \t]*=.*")
+                     (string-append "defaultRuntime = \""
+                                    (search-input-file inputs "/sbin/runc")
+                                    "\"\n"))
+                    (("defaultShim[ \t]*=.*")
+                     (string-append "defaultShim = \""
+                                    (assoc-ref outputs "out")
+                                    "/bin/containerd-shim\"\n")))
+                  (substitute* "pkg/cri/config/config_unix.go"
+                    (("DefaultRuntimeName: \"runc\"")
+                     (string-append "DefaultRuntimeName: \""
+                                    (search-input-file inputs "/sbin/runc")
+                                    "\"")))
+                  (substitute* "vendor/github.com/containerd/go-runc/runc.go"
+                    (("DefaultCommand[ \t]*=.*")
+                     (string-append "DefaultCommand = \""
+                                    (search-input-file inputs "/sbin/runc")
+                                    "\"\n")))
+                  (substitute* "vendor/github.com/containerd/continuity/testutil\
 /loopback/loopback_linux.go"
-                   (("exec\\.Command\\(\"losetup\"")
-                    (string-append "exec.Command(\""
-                                   (assoc-ref inputs "util-linux")
-                                   "/sbin/losetup\"")))
-                 (substitute* "archive/compression/compression.go"
-                   (("exec\\.LookPath\\(\"unpigz\"\\)")
-                    (string-append "\"" (assoc-ref inputs "pigz")
-                                   "/bin/unpigz\", error(nil)"))))))
-           (replace 'build
-             (lambda* (#:key import-path #:allow-other-keys)
-               (with-directory-excursion (string-append "src/" import-path)
-                 (apply invoke "make" ',make-flags))))
-           (replace 'install
-             (lambda* (#:key import-path outputs #:allow-other-keys)
-               (with-directory-excursion (string-append "src/" import-path)
-                 (let* ((out (assoc-ref outputs "out")))
-                   (apply invoke "make" (string-append "DESTDIR=" out) "install"
-                          ',make-flags)))))))))
+                    (("exec\\.Command\\(\"losetup\"")
+                     (string-append "exec.Command(\""
+                                    (search-input-file inputs "/sbin/losetup")
+                                    "\"")))
+                  (substitute* "archive/compression/compression.go"
+                    (("exec\\.LookPath\\(\"unpigz\"\\)")
+                     (string-append "\""
+                                    (search-input-file inputs "/bin/unpigz")
+                                    "\", error(nil)"))))))
+            (replace 'build
+              (lambda* (#:key import-path #:allow-other-keys)
+                (with-directory-excursion (string-append "src/" import-path)
+                  (apply invoke "make" #$make-flags))))
+            (replace 'install
+              (lambda* (#:key import-path #:allow-other-keys)
+                (with-directory-excursion (string-append "src/" import-path)
+                  (apply invoke "make" "install" #$make-flags))))))))
     (inputs
      (list btrfs-progs libseccomp pigz runc util-linux))
     (native-inputs
@@ -243,11 +252,10 @@ network attachments.")
 ;;; anyway, as it needs many dependencies that aren't being satisfied.
 (define docker-libnetwork
   ;; There are no recent release for libnetwork, so choose the last commit of
-  ;; the branch that Docker uses, as can be seen in the Docker source file
-  ;; 'hack/dockerfile/install/proxy.installer'. NOTE - It is important that
-  ;; this version is kept in sync with the version of Docker being used.
-  ;; This commit is the "bump_19.03" branch, as mentioned in Docker's vendor.conf.
-  (let ((commit "55e924b8a84231a065879156c0de95aefc5f5435")
+  ;; the branch that Docker uses, as can be seen in the 'vendor.conf' Docker
+  ;; source file.  NOTE - It is important that this version is kept in sync
+  ;; with the version of Docker being used.
+  (let ((commit "f6ccccb1c082a432c2a5814aaedaca56af33d9ea")
         (version (version-major+minor %docker-version))
         (revision "1"))
     (package
@@ -262,12 +270,10 @@ network attachments.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "19syb3scwiykn44gqfaqrgqv8a0df4ps0ykf3za9xkjc5cyi99mp"))
+                  "0nxpr0h0smv4n641g41vxibr5r85ixfcvs9cp3c4fc7zvrhjc49s"))
                 ;; Delete bundled ("vendored") free software source code.
                 (modules '((guix build utils)))
-                (snippet '(begin
-                            (delete-file-recursively "vendor")
-                            #t))))
+                (snippet '(delete-file-recursively "vendor"))))
       (build-system go-build-system)
       (arguments
        `(#:import-path "github.com/moby/libnetwork/"))
@@ -315,278 +321,269 @@ built-in registry server of Docker.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0419iha9zmwlhzhnbfxlsa13vgd04yifnsr8qqnj2ks5dxrcajl8"))
-       (patches
-        (search-patches "docker-fix-tests.patch"))))
+        (base32 "0hn7fg717rggwk6dbicrwa7aglqp7dp0jp5rvn6p9gfcnrp2w97d"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:modules
-       ((guix build gnu-build-system)
+     (list
+      #:modules
+      '((guix build gnu-build-system)
         ((guix build go-build-system) #:prefix go:)
         (guix build union)
         (guix build utils))
-       #:imported-modules
-       (,@%gnu-build-system-modules
+      #:imported-modules
+      `(,@%gnu-build-system-modules
         (guix build union)
         (guix build go-build-system))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "builder/builder-next/executor_unix.go"
-               (("CommandCandidates:.*runc.*")
-                (string-append "CommandCandidates: []string{\""
-                               (assoc-ref inputs "runc")
-                               "/sbin/runc\"},\n")))
-             (substitute* "vendor/github.com/containerd/go-runc/runc.go"
-               (("DefaultCommand = .*")
-                (string-append "DefaultCommand = \""
-                               (assoc-ref inputs "runc")
-                               "/sbin/runc\"\n")))
-             (substitute* "vendor/github.com/containerd/containerd/runtime/v1/linux/runtime.go"
-               (("defaultRuntime[ \t]*=.*")
-                (string-append "defaultRuntime = \""
-                               (assoc-ref inputs "runc")
-                               "/sbin/runc\"\n"))
-               (("defaultShim[ \t]*=.*")
-                (string-append "defaultShim = \""
-                               (assoc-ref inputs "containerd")
-                               "/bin/containerd-shim\"\n")))
-             (substitute* "daemon/daemon_unix.go"
-               (("DefaultShimBinary = .*")
-                (string-append "DefaultShimBinary = \""
-                               (assoc-ref inputs "containerd")
-                               "/bin/containerd-shim\"\n"))
-               (("DefaultRuntimeBinary = .*")
-                (string-append "DefaultRuntimeBinary = \""
-                               (assoc-ref inputs "runc")
-                               "/sbin/runc\"\n"))
-               (("DefaultRuntimeName = .*")
-                (string-append "DefaultRuntimeName = \""
-                               (assoc-ref inputs "runc")
-                               "/sbin/runc\"\n")))
-             (substitute* "daemon/config/config.go"
-               (("StockRuntimeName = .*")
-                (string-append "StockRuntimeName = \""
-                               (assoc-ref inputs "runc")
-                               "/sbin/runc\"\n"))
-               (("DefaultInitBinary = .*")
-                (string-append "DefaultInitBinary = \""
-                               (assoc-ref inputs "tini")
-                               "/bin/tini-static\"\n")))
-             (substitute* "daemon/config/config_common_unix_test.go"
-               (("expectedInitPath: \"docker-init\"")
-                (string-append "expectedInitPath: \""
-                               (assoc-ref inputs "tini")
-                               "/bin/tini-static\"")))
-             (substitute* "vendor/github.com/moby/buildkit/executor/runcexecutor/executor.go"
-               (("var defaultCommandCandidates = .*")
-                (string-append "var defaultCommandCandidates = []string{\""
-                               (assoc-ref inputs "runc") "/sbin/runc\"}")))
-             (substitute* "vendor/github.com/docker/libnetwork/portmapper/proxy.go"
-               (("var userlandProxyCommandName = .*")
-                (string-append "var userlandProxyCommandName = \""
-                               (assoc-ref inputs "docker-proxy")
-                               "/bin/proxy\"\n")))
-             (substitute* "pkg/archive/archive.go"
-               (("string\\{\"xz")
-                (string-append "string{\"" (assoc-ref inputs "xz") "/bin/xz")))
-             ;; TODO: Remove when Docker proper uses v1.14.x to build
-             (substitute* "registry/resumable/resumablerequestreader_test.go"
-               (("I%27m%20not%20an%20url" all)
-                (string-append "\"" all "\"")))
-             ;; TODO: Remove when Docker proper uses v1.14.x to build
-             (substitute* "vendor/gotest.tools/x/subtest/context.go"
-               (("func \\(tc \\*testcase\\) Cleanup\\(" all)
-                (string-append all "func()"))
-               (("tc\\.Cleanup\\(" all)
-                (string-append all "nil")))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-paths
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "builder/builder-next/executor_unix.go"
+                (("CommandCandidates:.*runc.*")
+                 (string-append "CommandCandidates: []string{\""
+                                (search-input-file inputs "/sbin/runc")
+                                "\"},\n")))
+              (substitute* "vendor/github.com/containerd/go-runc/runc.go"
+                (("DefaultCommand = .*")
+                 (string-append "DefaultCommand = \""
+                                (search-input-file inputs "/sbin/runc")
+                                "\"\n")))
+              (substitute* "vendor/github.com/containerd/containerd/\
+runtime/v1/linux/runtime.go"
+                (("defaultRuntime[ \t]*=.*")
+                 (string-append "defaultRuntime = \""
+                                (search-input-file inputs "/sbin/runc")
+                                "\"\n"))
+                (("defaultShim[ \t]*=.*")
+                 (string-append "defaultShim = \""
+                                (search-input-file inputs "/bin/containerd-shim")
+                                "\"\n")))
+              (substitute* "daemon/daemon_unix.go"
+                (("DefaultShimBinary = .*")
+                 (string-append "DefaultShimBinary = \""
+                                (search-input-file inputs "/bin/containerd-shim")
+                                "\"\n"))
+                (("DefaultRuntimeBinary = .*")
+                 (string-append "DefaultRuntimeBinary = \""
+                                (search-input-file inputs "/sbin/runc")
+                                "\"\n")))
+              (substitute* "daemon/runtime_unix.go"
+                (("defaultRuntimeName = .*")
+                 (string-append "defaultRuntimeName = \""
+                                (search-input-file inputs "/sbin/runc")
+                                "\"\n")))
+              (substitute* "daemon/config/config.go"
+                (("StockRuntimeName = .*")
+                 (string-append "StockRuntimeName = \""
+                                (search-input-file inputs "/sbin/runc")
+                                "\"\n"))
+                (("DefaultInitBinary = .*")
+                 (string-append "DefaultInitBinary = \""
+                                (search-input-file inputs "/bin/tini-static")
+                                "\"\n")))
+              (substitute* "daemon/config/config_common_unix_test.go"
+                (("expectedInitPath: \"docker-init\"")
+                 (string-append "expectedInitPath: \""
+                                (search-input-file inputs "/bin/tini-static")
+                                "\"")))
+              (substitute* "vendor/github.com/moby/buildkit/executor/\
+runcexecutor/executor.go"
+                (("var defaultCommandCandidates = .*")
+                 (string-append "var defaultCommandCandidates = []string{\""
+                                (search-input-file inputs "/sbin/runc") "\"}")))
+              (substitute* "vendor/github.com/docker/libnetwork/portmapper/proxy.go"
+                (("var userlandProxyCommandName = .*")
+                 (string-append "var userlandProxyCommandName = \""
+                                (search-input-file inputs "/bin/proxy")
+                                "\"\n")))
+              (substitute* "pkg/archive/archive.go"
+                (("string\\{\"xz")
+                 (string-append "string{\"" (search-input-file inputs "/bin/xz"))))
 
-             (let ((source-files (filter (lambda (name)
-                                           (not (string-contains name "test")))
-                                         (find-files "." "\\.go$"))))
-               (let-syntax ((substitute-LookPath*
-                             (syntax-rules ()
-                               ((_ (source-text package relative-path) ...)
-                                (substitute* source-files
-                                  (((string-append "\\<exec\\.LookPath\\(\""
-                                                   source-text
-                                                   "\")"))
-                                   (string-append "\""
-                                                  (assoc-ref inputs package)
-                                                  "/" relative-path
-                                                  "\", error(nil)")) ...))))
-                            (substitute-Command*
-                             (syntax-rules ()
-                               ((_ (source-text package relative-path) ...)
-                                (substitute* source-files
-                                  (((string-append "\\<(re)?exec\\.Command\\(\""
-                                                   source-text
-                                                   "\"") _ re?)
-                                   (string-append (if re? re? "")
-                                                  "exec.Command(\""
-                                                  (assoc-ref inputs package)
-                                                  "/" relative-path
-                                                  "\"")) ...)))))
-                 (substitute-LookPath*
-                  ("containerd" "containerd" "bin/containerd")
-                  ("ps" "procps" "bin/ps")
-                  ("mkfs.xfs" "xfsprogs" "bin/mkfs.xfs")
-                  ("lvmdiskscan" "lvm2" "sbin/lvmdiskscan")
-                  ("pvdisplay" "lvm2" "sbin/pvdisplay")
-                  ("blkid" "util-linux" "sbin/blkid")
-                  ("unpigz" "pigz" "bin/unpigz")
-                  ("iptables" "iptables" "sbin/iptables")
-                  ("iptables-legacy" "iptables" "sbin/iptables")
-                  ("ip" "iproute2" "sbin/ip"))
+              (let ((source-files (filter (lambda (name)
+                                            (not (string-contains name "test")))
+                                          (find-files "." "\\.go$"))))
+                (let-syntax ((substitute-LookPath*
+                              (syntax-rules ()
+                                ((_ (source-text path) ...)
+                                 (substitute* source-files
+                                   (((string-append "\\<exec\\.LookPath\\(\""
+                                                    source-text
+                                                    "\")"))
+                                    (string-append "\""
+                                                   (search-input-file inputs path)
+                                                   "\", error(nil)")) ...))))
+                             (substitute-Command*
+                              (syntax-rules ()
+                                ((_ (source-text path) ...)
+                                 (substitute* source-files
+                                   (((string-append "\\<(re)?exec\\.Command\\(\""
+                                                    source-text
+                                                    "\"") _ re?)
+                                    (string-append (if re? re? "")
+                                                   "exec.Command(\""
+                                                   (search-input-file inputs path)
+                                                   "\"")) ...)))))
+                  (substitute-LookPath*
+                   ("containerd" "/bin/containerd")
+                   ("ps" "/bin/ps")
+                   ("mkfs.xfs" "/sbin/mkfs.xfs")
+                   ("lvmdiskscan" "/sbin/lvmdiskscan")
+                   ("pvdisplay" "/sbin/pvdisplay")
+                   ("blkid" "/sbin/blkid")
+                   ("unpigz" "/bin/unpigz")
+                   ("iptables" "/sbin/iptables")
+                   ("ip6tables" "/sbin/ip6tables")
+                   ("iptables-legacy" "/sbin/iptables")
+                   ("ip" "/sbin/ip"))
 
-                 (substitute-Command*
-                  ("modprobe" "kmod" "bin/modprobe")
-                  ("pvcreate" "lvm2" "sbin/pvcreate")
-                  ("vgcreate" "lvm2" "sbin/vgcreate")
-                  ("lvcreate" "lvm2" "sbin/lvcreate")
-                  ("lvconvert" "lvm2" "sbin/lvconvert")
-                  ("lvchange" "lvm2" "sbin/lvchange")
-                  ("mkfs.xfs" "xfsprogs" "sbin/mkfs.xfs")
-                  ("xfs_growfs" "xfsprogs" "sbin/xfs_growfs")
-                  ("mkfs.ext4" "e2fsprogs" "sbin/mkfs.ext4")
-                  ("tune2fs" "e2fsprogs" "sbin/tune2fs")
-                  ("blkid" "util-linux" "sbin/blkid")
-                  ("resize2fs" "e2fsprogs" "sbin/resize2fs")
-                  ("ps" "procps" "bin/ps")
-                  ("losetup" "util-linux" "sbin/losetup")
-                  ("uname" "coreutils" "bin/uname")
-                  ("dbus-launch" "dbus" "bin/dbus-launch")
-                  ("git" "git" "bin/git")))
-               ;; docker-mountfrom ??
-               ;; docker
-               ;; docker-untar ??
-               ;; docker-applyLayer ??
-               ;; /usr/bin/uname
-               ;; grep
-               ;; apparmor_parser
+                  (substitute-Command*
+                   ("modprobe" "/bin/modprobe")
+                   ("pvcreate" "/sbin/pvcreate")
+                   ("vgcreate" "/sbin/vgcreate")
+                   ("lvcreate" "/sbin/lvcreate")
+                   ("lvconvert" "/sbin/lvconvert")
+                   ("lvchange" "/sbin/lvchange")
+                   ("mkfs.xfs" "/sbin/mkfs.xfs")
+                   ("xfs_growfs" "/sbin/xfs_growfs")
+                   ("mkfs.ext4" "/sbin/mkfs.ext4")
+                   ("tune2fs" "/sbin/tune2fs")
+                   ("blkid" "/sbin/blkid")
+                   ("resize2fs" "/sbin/resize2fs")
+                   ("ps" "/bin/ps")
+                   ("losetup" "/sbin/losetup")
+                   ("uname" "/bin/uname")
+                   ("dbus-launch" "/bin/dbus-launch")
+                   ("git" "/bin/git")))
+                ;; docker-mountfrom ??
+                ;; docker
+                ;; docker-untar ??
+                ;; docker-applyLayer ??
+                ;; /usr/bin/uname
+                ;; grep
+                ;; apparmor_parser
 
-               ;; Make compilation fail when, in future versions, Docker
-               ;; invokes other programs we don't know about and thus don't
-               ;; substitute.
-               (substitute* source-files
-                 ;; Search for Java in PATH.
-                 (("\\<exec\\.Command\\(\"java\"")
-                  "xxec.Command(\"java\"")
-                 ;; Search for AUFS in PATH (mainline Linux doesn't support it).
-                 (("\\<exec\\.Command\\(\"auplink\"")
-                  "xxec.Command(\"auplink\"")
-                 ;; Fail on other unsubstituted commands.
-                 (("\\<exec\\.Command\\(\"([a-zA-Z0-9][a-zA-Z0-9_-]*)\""
-                   _ executable)
-                  (string-append "exec.Guix_doesnt_want_Command(\""
-                                 executable "\""))
-                 (("\\<xxec\\.Command")
-                  "exec.Command")
-                 ;; Search for ZFS in PATH.
-                 (("\\<LookPath\\(\"zfs\"\\)") "LooxPath(\"zfs\")")
-                 ;; Fail on other unsubstituted LookPaths.
-                 (("\\<LookPath\\(\"") "Guix_doesnt_want_LookPath\\(\"")
-                 (("\\<LooxPath") "LookPath")))
-             #t))
-         (add-after 'patch-paths 'delete-failing-tests
-           (lambda _
-             ;; Needs internet access.
-             (delete-file "builder/remotecontext/git/gitutils_test.go")
-             ;; Permission denied.
-             (delete-file "daemon/graphdriver/devmapper/devmapper_test.go")
-             ;; Operation not permitted (idtools.MkdirAllAndChown).
-             (delete-file "daemon/graphdriver/vfs/vfs_test.go")
-             ;; Timeouts after 5 min.
-             (delete-file "plugin/manager_linux_test.go")
-             ;; Operation not permitted.
-             (delete-file "daemon/graphdriver/aufs/aufs_test.go")
-             (delete-file "daemon/graphdriver/btrfs/btrfs_test.go")
-             (delete-file "daemon/graphdriver/overlay/overlay_test.go")
-             (delete-file "daemon/graphdriver/overlay2/overlay_test.go")
-             (delete-file "pkg/chrootarchive/archive_unix_test.go")
-             (delete-file "daemon/container_unix_test.go")
-             ;; This file uses cgroups and /proc.
-             (delete-file "pkg/sysinfo/sysinfo_linux_test.go")
-             ;; This file uses cgroups.
-             (delete-file "runconfig/config_test.go")
-             ;; This file uses /var.
-             (delete-file "daemon/oci_linux_test.go")
-             ;; Signal tests fail in bizarre ways
-             (delete-file "pkg/signal/signal_linux_test.go")
-             #t))
-         (replace 'configure
-           (lambda _
-             (setenv "DOCKER_BUILDTAGS" "seccomp")
-             (setenv "DOCKER_GITCOMMIT" (string-append "v" ,%docker-version))
-             (setenv "VERSION" (string-append ,%docker-version "-ce"))
-             ;; Automatically use bundled dependencies.
-             ;; TODO: Unbundle - see file "vendor.conf".
-             (setenv "AUTO_GOPATH" "1")
-             ;; Respectively, strip the symbol table and debug
-             ;; information, and the DWARF symbol table.
-             (setenv "LDFLAGS" "-s -w")
-             ;; Make build faster
-             (setenv "GOCACHE" "/tmp")
-             #t))
-         (add-before 'build 'setup-go-environment
-           (assoc-ref go:%standard-phases 'setup-go-environment))
-         (replace 'build
-           (lambda _
-             ;; Our LD doesn't like the statically linked relocatable things
-             ;; that go produces, so install the dynamic version of
-             ;; dockerd instead.
-             (invoke "hack/make.sh" "dynbinary")))
-         (replace 'check
-           (lambda _
-             ;; The build process generated a file because the environment
-             ;; variable "AUTO_GOPATH" was set.  Use it.
-             (setenv "GOPATH" (string-append (getcwd) "/.gopath"))
-             ;; ".gopath/src/github.com/docker/docker" is a link to the current
-             ;; directory and chdir would canonicalize to that.
-             ;; But go needs to have the uncanonicalized directory name, so
-             ;; store that.
-             (setenv "PWD" (string-append (getcwd)
-                                          "/.gopath/src/github.com/docker/docker"))
-             (with-directory-excursion ".gopath/src/github.com/docker/docker"
-               (invoke "hack/test/unit"))
-             (setenv "PWD" #f)
-             #t))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (out-bin (string-append out "/bin")))
-               (install-file "bundles/dynbinary-daemon/dockerd" out-bin)
-               (install-file (string-append "bundles/dynbinary-daemon/dockerd-"
-                                            (getenv "VERSION"))
-                             out-bin)
-               #t)))
-         (add-after 'install 'remove-go-references
-           (assoc-ref go:%standard-phases 'remove-go-references)))))
+                ;; Make compilation fail when, in future versions, Docker
+                ;; invokes other programs we don't know about and thus don't
+                ;; substitute.
+                (substitute* source-files
+                  ;; Search for Java in PATH.
+                  (("\\<exec\\.Command\\(\"java\"")
+                   "xxec.Command(\"java\"")
+                  ;; Search for AUFS in PATH (mainline Linux doesn't support it).
+                  (("\\<exec\\.Command\\(\"auplink\"")
+                   "xxec.Command(\"auplink\"")
+                  ;; Fail on other unsubstituted commands.
+                  (("\\<exec\\.Command\\(\"([a-zA-Z0-9][a-zA-Z0-9_-]*)\""
+                    _ executable)
+                   (string-append "exec.Guix_doesnt_want_Command(\""
+                                  executable "\""))
+                  (("\\<xxec\\.Command")
+                   "exec.Command")
+                  ;; Search for ZFS in PATH.
+                  (("\\<LookPath\\(\"zfs\"\\)") "LooxPath(\"zfs\")")
+                 ;; Do not fail when buildkit-qemu-<target> isn't found.
+                 ;; FIXME: We might need to package buildkit and docker's
+                 ;; buildx plugin, to support qemu-based docker containers.
+                  (("\\<LookPath\\(\"buildkit-qemu-\"") "LooxPath(\"buildkit-qemu-\"")
+                  ;; Fail on other unsubstituted LookPaths.
+                  (("\\<LookPath\\(\"") "Guix_doesnt_want_LookPath\\(\"")
+                  (("\\<LooxPath") "LookPath")))))
+          (add-after 'patch-paths 'delete-failing-tests
+            (lambda _
+              ;; Needs internet access.
+              (delete-file "builder/remotecontext/git/gitutils_test.go")
+              ;; Permission denied.
+              (delete-file "daemon/graphdriver/devmapper/devmapper_test.go")
+              ;; Operation not permitted (idtools.MkdirAllAndChown).
+              (delete-file "daemon/graphdriver/vfs/vfs_test.go")
+              ;; Timeouts after 5 min.
+              (delete-file "plugin/manager_linux_test.go")
+              ;; Operation not permitted.
+              (delete-file "daemon/graphdriver/aufs/aufs_test.go")
+              (delete-file "daemon/graphdriver/btrfs/btrfs_test.go")
+              (delete-file "daemon/graphdriver/overlay/overlay_test.go")
+              (delete-file "daemon/graphdriver/overlay2/overlay_test.go")
+              (delete-file "pkg/chrootarchive/archive_unix_test.go")
+              (delete-file "daemon/container_unix_test.go")
+              ;; This file uses cgroups and /proc.
+              (delete-file "pkg/sysinfo/sysinfo_linux_test.go")
+              ;; This file uses cgroups.
+              (delete-file "runconfig/config_test.go")
+              ;; This file uses /var.
+              (delete-file "daemon/oci_linux_test.go")
+              ;; Signal tests fail in bizarre ways
+              (delete-file "pkg/signal/signal_linux_test.go")))
+          (replace 'configure
+            (lambda _
+              (setenv "DOCKER_BUILDTAGS" "seccomp")
+              (setenv "DOCKER_GITCOMMIT" (string-append "v" #$%docker-version))
+              (setenv "VERSION" (string-append #$%docker-version "-ce"))
+              ;; Automatically use bundled dependencies.
+              ;; TODO: Unbundle - see file "vendor.conf".
+              (setenv "AUTO_GOPATH" "1")
+              ;; Respectively, strip the symbol table and debug
+              ;; information, and the DWARF symbol table.
+              (setenv "LDFLAGS" "-s -w")
+              ;; Make build faster
+              (setenv "GOCACHE" "/tmp")))
+          (add-before 'build 'setup-go-environment
+            (assoc-ref go:%standard-phases 'setup-go-environment))
+          (replace 'build
+            (lambda _
+              ;; Our LD doesn't like the statically linked relocatable things
+              ;; that go produces, so install the dynamic version of
+              ;; dockerd instead.
+              (invoke "hack/make.sh" "dynbinary")))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                ;; The build process generated a file because the environment
+                ;; variable "AUTO_GOPATH" was set.  Use it.
+                (setenv "GOPATH" (string-append (getcwd) "/.gopath"))
+                ;; ".gopath/src/github.com/docker/docker" is a link to the current
+                ;; directory and chdir would canonicalize to that.
+                ;; But go needs to have the uncanonicalized directory name, so
+                ;; store that.
+                (setenv "PWD" (string-append
+                               (getcwd) "/.gopath/src/github.com/docker/docker"))
+                (with-directory-excursion ".gopath/src/github.com/docker/docker"
+                  (invoke "hack/test/unit"))
+                (setenv "PWD" #f))))
+          (replace 'install
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (out-bin (string-append out "/bin")))
+                (install-file "bundles/dynbinary-daemon/dockerd" out-bin)
+                (install-file (string-append "bundles/dynbinary-daemon/dockerd-"
+                                             (getenv "VERSION"))
+                              out-bin))))
+          (add-after 'install 'remove-go-references
+            (assoc-ref go:%standard-phases 'remove-go-references)))))
     (inputs
-     `(("btrfs-progs" ,btrfs-progs)
-       ("containerd" ,containerd)       ; for containerd-shim
-       ("coreutils" ,coreutils)
-       ("dbus" ,dbus)
-       ("docker-proxy" ,docker-libnetwork-cmd-proxy)
-       ("e2fsprogs" ,e2fsprogs)
-       ("git" ,git)
-       ("iproute2" ,iproute)
-       ("iptables" ,iptables)
-       ("kmod" ,kmod)
-       ("libseccomp" ,libseccomp)
-       ("pigz" ,pigz)
-       ("procps" ,procps)
-       ("runc" ,runc)
-       ("util-linux" ,util-linux)
-       ("lvm2" ,lvm2)
-       ("tini" ,tini)
-       ("xfsprogs" ,xfsprogs)
-       ("xz" ,xz)))
+     (list btrfs-progs
+           containerd       ; for containerd-shim
+           coreutils
+           dbus
+           docker-libnetwork-cmd-proxy
+           e2fsprogs
+           git
+           iproute
+           iptables
+           kmod
+           libseccomp
+           pigz
+           procps
+           runc
+           util-linux
+           lvm2
+           tini
+           xfsprogs
+           xz))
     (native-inputs
      (list eudev ; TODO: Should be propagated by lvm2 (.pc -> .pc)
-           go-1.14 gotestsum pkg-config))
-    (synopsis "Docker container component library, and daemon")
+           go gotestsum pkg-config))
+    (synopsis "Container component library and daemon")
     (description "This package provides a framework to assemble specialized
 container systems.  It includes components for orchestration, image
 management, secret management, configuration management, networking,
@@ -600,13 +597,13 @@ provisioning etc.")
     (version %docker-version)
     (source
      (origin
-      (method git-fetch)
-      (uri (git-reference
-            (url "https://github.com/docker/cli")
-            (commit (string-append "v" version))))
-      (file-name (git-file-name name version))
-      (sha256
-       (base32 "1asapjj8brvbkd5irgdq82fx1ihrc14qaq30jxvjwflfm5yb7lv0"))))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/docker/cli")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ksicj4iqvgp9jabd4xmhkf3vax6dwn4f5dsr73bdqj4mf3ahav0"))))
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/docker/cli"
@@ -626,21 +623,20 @@ provisioning etc.")
              ;; Make build reproducible.
              (setenv "BUILDTIME" "1970-01-01 00:00:01.000000000+00:00")
              (symlink "src/github.com/docker/cli/scripts" "./scripts")
-             (symlink "src/github.com/docker/cli/docker.Makefile" "./docker.Makefile")
-             #t))
+             (symlink "src/github.com/docker/cli/docker.Makefile" "./docker.Makefile")))
          (replace 'build
            (lambda _
-             (invoke "./scripts/build/dynbinary")))
+             (setenv "GO_LINKMODE" "dynamic")
+             (invoke "./scripts/build/binary")))
          (replace 'check
            (lambda* (#:key make-flags tests? #:allow-other-keys)
              (setenv "PATH" (string-append (getcwd) "/build:" (getenv "PATH")))
-             (if tests?
-                 ;; Use the newly-built docker client for the tests.
-                 (with-directory-excursion "src/github.com/docker/cli"
-                   ;; TODO: Run test-e2e as well?
-                   (apply invoke "make" "-f" "docker.Makefile" "test-unit"
-                          (or make-flags '())))
-                 #t)))
+             (when tests?
+               ;; Use the newly-built docker client for the tests.
+               (with-directory-excursion "src/github.com/docker/cli"
+                 ;; TODO: Run test-e2e as well?
+                 (apply invoke "make" "-f" "docker.Makefile" "test-unit"
+                        (or make-flags '()))))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -653,8 +649,7 @@ provisioning etc.")
                                (string-append etc "/fish/completions"))
                  (install-file "zsh/_docker"
                                (string-append etc "/zsh/site-functions")))
-               (install-file "build/docker" out-bin)
-               #t))))))
+               (install-file "build/docker" out-bin)))))))
     (native-inputs
      (list go libltdl pkg-config))
     (synopsis "Command line interface to Docker")
diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index 3b9c01c786..9e5a17a6ae 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -579,7 +579,7 @@ a pen-tablet display and a beamer.")
 (define-public fet
   (package
     (name "fet")
-    (version "6.2.2")
+    (version "6.5.3")
     (source
      (origin
        (method url-fetch)
@@ -588,20 +588,21 @@ a pen-tablet display and a beamer.")
               (list (string-append directory base)
                     (string-append directory "old/" base))))
        (sha256
-        (base32 "1x8m543n88iqprh4zccx1zcfm20balmh0h6syrbv03cszmkvfw07"))))
+        (base32 "030njv53azzw6fn2d5mkxn7hyvyb45yss2y49wxb8bgj3ayv1rgp"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-hardcoded-directories
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* (list "fet.pro"
-                                "src/src.pro"
-                                "src/src-cl.pro"
-                                "src/interface/fet.cpp")
-               (("/usr") (assoc-ref outputs "out")))))
-         (replace 'configure
-           (lambda _ (invoke "qmake" "fet.pro"))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-hardcoded-directories
+            (lambda _
+              (substitute* (list "fet.pro"
+                                 "src/src.pro"
+                                 "src/src-cl.pro"
+                                 "src/interface/fet.cpp")
+                (("/usr") #$output))))
+          (replace 'configure
+            (lambda _ (invoke "qmake" "fet.pro"))))))
     (inputs
      (list qtbase))
     (home-page "https://www.lalescu.ro/liviu/fet/")
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index d02e1dc7d5..ff2ed00c47 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -114,6 +114,7 @@
 ;;; Copyright © 2022 Luis Felipe López Acevedo <luis.felipe.la@protonmail.com>
 ;;; Copyright © 2022 Thomas Albers Raviola <thomas@thomaslabs.org>
 ;;; Copyright © 2022 Haider Mirza <haider@haider.gq>
+;;; Copyright © 2022 Jose G Perez Taveras <josegpt27@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -778,10 +779,10 @@ information in the mode line.")
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/project-" version ".tar"))
        (sha256
-        (base32 "1x3zkbjsi04v5ny3yxqrb75vcacrj9kxmpm9mvkp0n07j5g34f68"))))
+        (base32 "0q2js8qihlhchpx2mx0f992ygslsqri2q4iv8kcl4fx31lpp7c1k"))))
     (build-system emacs-build-system)
     (propagated-inputs (list emacs-xref))
-    (home-page "http://elpa.gnu.org/packages/project.html")
+    (home-page "https://elpa.gnu.org/packages/project.html")
     (synopsis "Operations on the current project")
     (description
      "This library contains generic infrastructure for dealing with projects,
@@ -1627,92 +1628,99 @@ replacement.")
       (license license:gpl3+))))
 
 (define-public emacs-haskell-mode
-  (package
-    (name "emacs-haskell-mode")
-    (version "17.2")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/haskell/haskell-mode")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0zxbacqzr84krmhqpvzndnvlcjh1gs1x20ys0dykgd7chyhci5j5"))))
-    (propagated-inputs
-     (list emacs-dash))
-    (native-inputs
-     (list emacs-minimal emacs-el-search emacs-stream texinfo))
-    (build-system gnu-build-system)
-    (arguments
-     (list
-      #:make-flags #~(list
-                      (string-append "EMACS=" #$emacs-minimal "/bin/emacs"))
-      #:modules `((ice-9 match)
-                  (srfi srfi-26)
-                  ((guix build emacs-build-system) #:prefix emacs:)
-                  ,@%gnu-build-system-modules)
-      #:imported-modules `(,@%gnu-build-system-modules
-                           (guix build emacs-build-system)
-                           (guix build emacs-utils))
-      #:phases
-      #~(modify-phases %standard-phases
-          (delete 'configure)
-          (add-before 'build 'pre-build
-            (lambda* (#:key inputs #:allow-other-keys)
-              (define (el-dir store-dir)
-                (match (find-files store-dir "\\.el$")
-                  ((f1 f2 ...) (dirname f1))
-                  (_ "")))
-
-              (let ((sh (search-input-file inputs "/bin/sh")))
-                (define emacs-prefix? (cut string-prefix? "emacs-" <>))
-
-                (setenv "SHELL" "sh")
-                (setenv "EMACSLOADPATH"
-                        (string-concatenate
-                         (map (match-lambda
-                                (((? emacs-prefix? name) . dir)
-                                 (string-append (el-dir dir) ":"))
-                                (_ ""))
-                              inputs)))
-                (substitute* (find-files "." "\\.el") (("/bin/sh") sh)))))
-          (add-before 'check 'delete-failing-tests
-            ;; XXX: these tests require GHC executable, which would be a big
-            ;; native input.
-            (lambda _
-              (with-directory-excursion "tests"
-                ;; File `haskell-indent-tests.el' fails with
-                ;; `haskell-indent-put-region-in-literate-2'
-                ;; on Emacs 27.1+
-                ;; XXX: https://github.com/haskell/haskell-mode/issues/1714
-                (for-each delete-file
-                          '("haskell-indent-tests.el"
-                            "haskell-customize-tests.el"
-                            "inferior-haskell-tests.el")))))
-          (replace 'install
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let* ((out (assoc-ref outputs "out"))
-                     (el-dir (emacs:elpa-directory out))
-                     (doc (string-append
-                           out "/share/doc/haskell-mode-" #$version))
-                     (info (string-append out "/share/info")))
-                (define (copy-to-dir dir files)
-                  (for-each (lambda (f)
-                              (install-file f dir))
-                            files))
-
-                (with-directory-excursion "doc"
-                  (invoke "makeinfo" "haskell-mode.texi")
-                  (install-file "haskell-mode.info" info))
-                (copy-to-dir doc '("CONTRIBUTING.md" "NEWS" "README.md"))
-                (copy-to-dir el-dir (find-files "." "\\.elc?"))))))))
-    (home-page "https://github.com/haskell/haskell-mode")
-    (synopsis "Haskell mode for Emacs")
-    (description
-     "This is an Emacs mode for editing, debugging and developing Haskell
+  (let ((revision "0")
+        (commit "5a9f8072c7b9168f0a8409adf9d62a3e4ad4ea3d"))
+    (package
+      (name "emacs-haskell-mode")
+      (version (git-version "17.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/haskell/haskell-mode")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0np1wrwdq7b9hpqpl9liampacnkx6diphyk8h2sbz2mfn9qr7pxs"))))
+      (propagated-inputs
+       (list emacs-dash))
+      (native-inputs
+       (list emacs-minimal emacs-el-search emacs-stream texinfo))
+      (build-system gnu-build-system)
+      (arguments
+       (list
+        #:make-flags #~(list
+                        (string-append "EMACS=" #$emacs-minimal "/bin/emacs"))
+        #:modules `((ice-9 match)
+                    (srfi srfi-26)
+                    ((guix build emacs-build-system) #:prefix emacs:)
+                    ,@%gnu-build-system-modules)
+        #:imported-modules `(,@%gnu-build-system-modules
+                             (guix build emacs-build-system)
+                             (guix build emacs-utils))
+        #:phases
+        #~(modify-phases %standard-phases
+            (delete 'configure)
+            (add-before 'build 'pre-build
+              (lambda* (#:key inputs #:allow-other-keys)
+                (define (el-dir store-dir)
+                  (match (find-files store-dir "\\.el$")
+                    ((f1 f2 ...) (dirname f1))
+                    (_ "")))
+
+                (let ((sh (search-input-file inputs "/bin/sh")))
+                  (define emacs-prefix? (cut string-prefix? "emacs-" <>))
+
+                  (setenv "SHELL" "sh")
+                  (setenv "EMACSLOADPATH"
+                          (string-concatenate
+                           (map (match-lambda
+                                  (((? emacs-prefix? name) . dir)
+                                   (string-append (el-dir dir) ":"))
+                                  (_ ""))
+                                inputs)))
+                  (substitute* (find-files "." "\\.el") (("/bin/sh") sh)))))
+            (add-before 'check 'delete-failing-tests
+              ;; XXX: these tests require GHC executable, which would be a big
+              ;; native input.
+              (lambda _
+                (with-directory-excursion "tests"
+                  ;; File `haskell-indent-tests.el' fails with
+                  ;; `haskell-indent-put-region-in-literate-2'
+                  ;; on Emacs 27.1+
+                  ;; XXX: https://github.com/haskell/haskell-mode/issues/1714
+                  (for-each delete-file
+                            '("haskell-indent-tests.el"
+                              "haskell-customize-tests.el"
+                              "inferior-haskell-tests.el"))
+
+                  ;; requires many external tools (e.g. git, hasktags)
+                  (substitute* "haskell-mode-tests.el"
+                    (("\\(ert-deftest haskell-generate-tags.*" all)
+                     (string-append all " (skip-unless nil)"))))))
+            (replace 'install
+              (lambda* (#:key outputs #:allow-other-keys)
+                (let* ((out (assoc-ref outputs "out"))
+                       (el-dir (emacs:elpa-directory out))
+                       (doc (string-append
+                             out "/share/doc/haskell-mode-" #$version))
+                       (info (string-append out "/share/info")))
+                  (define (copy-to-dir dir files)
+                    (for-each (lambda (f)
+                                (install-file f dir))
+                              files))
+
+                  (with-directory-excursion "doc"
+                    (invoke "makeinfo" "haskell-mode.texi")
+                    (install-file "haskell-mode.info" info))
+                  (copy-to-dir doc '("CONTRIBUTING.md" "NEWS" "README.md"))
+                  (copy-to-dir el-dir (find-files "." "\\.elc?"))))))))
+      (home-page "https://github.com/haskell/haskell-mode")
+      (synopsis "Haskell mode for Emacs")
+      (description
+       "This is an Emacs mode for editing, debugging and developing Haskell
 programs.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-dante
   (let ((commit "38b589417294c7ea44bf65b73b8046d950f9531b")
@@ -1746,47 +1754,44 @@ supports type hints, definition-jumping, completion, and more.")
       (license license:gpl3+))))
 
 (define-public emacs-flycheck
-  ;; Last release version was more than 500 commits ago.
-  (let ((commit "9bcf6b665e15db94870bebc81dc8248c3eec20d3")
-        (revision "2"))
-    (package
-      (name "emacs-flycheck")
-      (version (git-version "31" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/flycheck/flycheck/")
-               (commit commit)))
-         (sha256
-          (base32 "015ixss5bjr7gvhj8mkw5x2x1hy6fvvsjarr2xpv0gskkkngs7pg"))
-         (file-name (git-file-name name version))))
-      (build-system emacs-build-system)
-      (propagated-inputs
-       (list emacs-dash))
-      (native-inputs
-       (list emacs-shut-up))
-      (arguments
-       (list
-        #:phases
-        #~(modify-phases %standard-phases
-            (add-after 'unpack 'change-flycheck-version
-              (lambda _
-                (substitute* "flycheck.el"
-                  (("\\(pkg-info-version-info 'flycheck\\)")
-                   (string-append "\"" #$version "\""))))))
-        ;; TODO: many failing tests
-        #:tests? #f
-        #:test-command
-        #~(list "emacs" "-Q" "--batch"
-                "-L" "."
-                "--load" "test/flycheck-test"
-                "--load" "test/run.el"
-                "-f" "flycheck-run-tests-main")))
-      (home-page "https://www.flycheck.org")
-      (synopsis "On-the-fly syntax checking")
-      (description
-       "This package provides on-the-fly syntax checking for GNU Emacs.  It is a
+  (package
+    (name "emacs-flycheck")
+    (version "32")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/flycheck/flycheck/")
+             (commit version)))
+       (sha256
+        (base32 "0dx6wqxz1yfp4shas4yn6abqc8bz21ks3glcyzznm3xspjdaq21s"))
+       (file-name (git-file-name name version))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     (list emacs-dash))
+    (native-inputs
+     (list emacs-shut-up))
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'change-flycheck-version
+            (lambda _
+              (substitute* "flycheck.el"
+                (("\\(pkg-info-version-info 'flycheck\\)")
+                 (string-append "\"" #$version "\""))))))
+      ;; TODO: many failing tests
+      #:tests? #f
+      #:test-command
+      #~(list "emacs" "-Q" "--batch"
+              "-L" "."
+              "--load" "test/flycheck-test"
+              "--load" "test/run.el"
+              "-f" "flycheck-run-tests-main")))
+    (home-page "https://www.flycheck.org")
+    (synopsis "On-the-fly syntax checking")
+    (description
+     "This package provides on-the-fly syntax checking for GNU Emacs.  It is a
 replacement for the older Flymake extension which is part of GNU Emacs, with
 many improvements and additional features.
 
@@ -1794,7 +1799,7 @@ Flycheck provides fully-automatic, fail-safe, on-the-fly background syntax
 checking for over 30 programming and markup languages with more than 70
 different tools.  It highlights errors and warnings inline in the buffer, and
 provides an optional IDE-like error list.")
-      (license license:gpl3+))))                     ;+GFDLv1.3+ for the manual
+    (license license:gpl3+)))                     ;+GFDLv1.3+ for the manual
 
 (define-public emacs-flymake-flycheck
   (package
@@ -2571,14 +2576,14 @@ directories or regex patterns.")
 (define-public emacs-bbdb
   (package
     (name "emacs-bbdb")
-    (version "3.2.1")
+    (version "3.2.2.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "bbdb-" version ".tar"))
        (sha256
-        (base32 "01vsnifs47krq1srgdkk9agbv3p2fykl9nydr4nrfjxbqpnyh3ij"))))
+        (base32 "0bf20r5xhxln6z4qp8zrlln0303dkci2ydsr74pxcj08aqgk5xxf"))))
     (build-system emacs-build-system)
     (arguments
      ;; XXX: The following file cannot be byte-compiled, because et requires
@@ -2897,14 +2902,14 @@ as a library for other Emacs packages.")
 (define-public emacs-auctex
   (package
     (name "emacs-auctex")
-    (version "13.1.1")
+    (version "13.1.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "auctex-" version ".tar"))
        (sha256
-        (base32 "193sqq2wiq3lg99m8hifl9rjxdazpy638r99sqvmxmkfm98cr34r"))))
+        (base32 "0v9rxwz6ngnwrgvzgdki861s136gq30lqhy2gcd9q0a36gb6zhwk"))))
     (build-system emacs-build-system)
     ;; We use 'emacs' because AUCTeX requires dbus at compile time
     ;; ('emacs-minimal' does not provide dbus).
@@ -6778,6 +6783,37 @@ tupfiles, such as rule definitions, user-defined variables, macros, flags, bin
 variables, and so on.  The mode also allows you to execute Tup commands.")
     (license license:gpl3+)))
 
+(define-public emacs-compat
+  (package
+    (name "emacs-compat")
+    (version "28.1.1.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://git.sr.ht/~pkal/compat")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "19abp29rnbkw91q0h2yqm2z7awzzjhci8h6v875g5ahvplrp6337"))))
+    (build-system emacs-build-system)
+    (propagated-inputs (list emacs-nadvice))
+    (home-page "https://git.sr.ht/~pkal/compat")
+    (synopsis "Emacs Lisp Compatibility Library")
+    (description
+     "To allow for the usage of Emacs functions and macros that are defined
+in newer versions of Emacs, @code{compat.el} provides definitions that
+are installed ONLY if necessary.  These reimplementations of functions
+and macros are at least subsets of the actual implementations.  Be
+sure to read the documentation string to make sure.
+
+Not every function provided in newer versions of Emacs is provided
+here.  Some depend on new features from the core, others cannot be
+implemented to a meaningful degree.  The main audience for this
+library are not regular users, but package maintainers.  Therefore
+commands and user options are usually not implemented here.")
+    (license license:gpl3+)))
+
 (define-public emacs-company
   (package
     (name "emacs-company")
@@ -7797,8 +7833,39 @@ using @code{python-isort}.")
                (base32
                 "1bckxppfzd5gwn0aw4h86igb7igal9axqncq7j8zmflg7zppncf1"))))
     (build-system emacs-build-system)
-    (native-inputs
-     (list emacs-mocker))
+    (arguments
+     (list
+      #:imported-modules `(,@%emacs-build-system-modules
+                           (guix build python-build-system))
+      #:modules '((guix build emacs-build-system)
+                  ((guix build python-build-system) #:prefix python:)
+                  (guix build emacs-utils)
+                  (guix build utils))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'ensure-no-mtimes-pre-1980
+            (assoc-ref python:%standard-phases
+                       'ensure-no-mtimes-pre-1980))
+          (add-after 'ensure-no-mtimes-pre-1980 'relax-python-requirements
+            (lambda _
+              ;; Argparse should only be required for Python < 3.2
+              ;; (see: https://github.com/tkf/emacs-jedi/issues/365).
+              (substitute* "setup.py"
+                ((".*argparse.*") ""))))
+          (add-after 'relax-python-requirements 'python:add-install-to-pythonpath
+            (assoc-ref python:%standard-phases 'add-install-to-pythonpath))
+          (add-after 'python:add-install-to-pythonpath 'python:install
+            ;; This is needed to get the Python-built 'jediepcserver' command.
+            (assoc-ref python:%standard-phases 'install))
+          (add-after 'python:install 'python:wrap
+            (assoc-ref python:%standard-phases 'wrap))
+          (add-after 'python:wrap 'patch-jedi:server-command
+            (lambda* (#:key outputs #:allow-other-keys)
+              (emacs-substitute-variables "jedi-core.el"
+                ("jedi:server-command"
+                 (search-input-file outputs "bin/jediepcserver"))))))))
+    (native-inputs (list emacs-mocker python-wrapper))
+    (inputs (list python-wrapper python-epc python-jedi)) ;wrapped
     (propagated-inputs
      (list emacs-auto-complete emacs-python-environment emacs-epc))
     (home-page "https://github.com/tkf/emacs-jedi")
@@ -8499,7 +8566,7 @@ variants.")
 (define-public emacs-solarized-theme
   (package
     (name "emacs-solarized-theme")
-    (version "1.3.1")
+    (version "2.0.0")
     (source
      (origin
        (method git-fetch)
@@ -8508,7 +8575,7 @@ variants.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "15ql8xcixgm7mbs7rsbybwszanqibq057j5b5ds89a31dw7zxf1g"))))
+        (base32 "17z6cj8ids88xj2i6zs1s0mxs0fhn3gr7g5nhhy8s8khnzmyy2vj"))))
     (build-system emacs-build-system)
     (propagated-inputs
      (list emacs-dash))
@@ -8834,7 +8901,7 @@ them easier to distinguish from other, less important buffers.")
 (define-public emacs-embark
   (package
     (name "emacs-embark")
-    (version "0.16")
+    (version "0.17")
     (source
      (origin
        (method git-fetch)
@@ -8842,7 +8909,7 @@ them easier to distinguish from other, less important buffers.")
              (url "https://github.com/oantolin/embark")
              (commit version)))
        (sha256
-        (base32 "04xxwhh577aam0fqfmprxqaw0v1l6yidikr6chajcf16mf1wd2gv"))
+        (base32 "1s0ssf4q9kg4c5w87h2ypyvrhi31mz3s6k4h7pxi9a47lkccq8n1"))
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
@@ -8952,7 +9019,7 @@ style, or as multiple word prefixes.")
 (define-public emacs-consult
   (package
     (name "emacs-consult")
-    (version "0.17")
+    (version "0.18")
     (source
      (origin
        (method git-fetch)
@@ -8960,9 +9027,10 @@ style, or as multiple word prefixes.")
              (url "https://github.com/minad/consult")
              (commit version)))
        (sha256
-        (base32 "08l3h7b5j1q9nwcq660667b245qspl20ikhfdvd9k3g3n2p6p5kz"))
+        (base32 "0sy4rn1vjk1g50r8z14hzj8lds6s7ij2zkjqfi6mfash5il75wnq"))
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
+    (propagated-inputs (list emacs-compat))
     (home-page "https://github.com/minad/consult")
     (synopsis "Consulting completing-read")
     (description "This package provides various handy commands based on the
@@ -9018,6 +9086,27 @@ replaced with the directory you choose.")
 and present results either as single emails or full trees.")
     (license license:gpl3+)))
 
+(define-public emacs-consult-eglot
+  (package
+   (name "emacs-consult-eglot")
+   (version "0.2.0")
+   (source (origin
+            (method git-fetch)
+            (uri (git-reference
+                  (url "https://github.com/mohkale/consult-eglot")
+                  (commit (string-append "v" version))))
+            (sha256
+             (base32 "1qxk1npxbf8m3g9spikgdxcf6mzjx6cwy3f5vn6zz5ksh14xw3sd"))
+            (file-name (git-file-name name version))))
+   (build-system emacs-build-system)
+   (propagated-inputs (list emacs-consult emacs-eglot))
+   (home-page "https://github.com/mohkale/consult-eglot")
+   (synopsis "Consulting-read interface for eglot")
+   (description "This package acts as a parallel of consult-lsp for eglot and
+provides a front-end interface for the workspace/symbols LSP procedure
+call.")
+   (license license:gpl3+)))
+
 (define-public emacs-marginalia
   (package
     (name "emacs-marginalia")
@@ -9071,6 +9160,35 @@ features found in other packages it also brings many improvements as
 well as completely new features.")
     (license license:gpl3+)))
 
+(define-public emacs-dumbparens
+  ;; There are no releases.
+  (let ((commit "18b668772f25e5f7b62c0a000b8169eaf7515057")
+        (revision "0"))
+    (package
+      (name "emacs-dumbparens")
+      (version (git-version "0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/raxod502/dumbparens")
+           (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0xv2yzjzq2450z007jppf86knnwzb2s3sxvqyk1yp6qs9mgrmnyp"))))
+      (build-system emacs-build-system)
+      (arguments
+       (list
+        #:tests? #t
+        #:test-command #~(list "make" "test")))
+      (home-page "https://github.com/raxod502/dumbparens/")
+      (synopsis "Minor mode that provides improvements on Smartparens")
+      (description
+       "@code{emacs-dumbparens} is a minor mode for Emacs that deals with parens
+pairs and doesn't try to be smart about it.")
+      (license license:expat))))
+
 (define-public emacs-highlight-symbol
   ;; We prefer a more recent commit that provides an option to squelch
   ;; echo-area alerts that can drown out useful information like eldoc
@@ -9982,8 +10100,9 @@ state and will work even without lispy being enabled.")
       (license license:gpl3+))))
 
 (define-public emacs-lpy
-  (let ((commit "43b401fe15f0f0d01edb189378b9498121e9f766")
-        (revision "3"))
+  ;; There is no proper release/tag.
+  (let ((commit "076ce9acb68f6ac1b39127b634a91ffd865d13d8")
+        (revision "4"))
     (package
       (name "emacs-lpy")
       (version (git-version "0.1.0" revision commit))
@@ -9995,7 +10114,7 @@ state and will work even without lispy being enabled.")
                (commit commit)))
          (sha256
           (base32
-           "0xj1r7cn1rivaxhvawvmgx9fg3xilpfw4lkf2x2aqplr4s85ijas"))
+           "10sab50wmr3zn7jgzx93201ymhmacqacn3m2qllsqkfw2gpsi6dn"))
          (file-name (git-file-name name version))))
       (propagated-inputs
        (list emacs-zoutline emacs-lispy))
@@ -11575,7 +11694,7 @@ Emacs.")
 (define-public emacs-web-mode
   (package
     (name "emacs-web-mode")
-    (version "17")
+    (version "17.2.1")
     (source
      (origin
        (method git-fetch)
@@ -11584,7 +11703,7 @@ Emacs.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0jr5a1nzp8nbdng0k2fcaymiiv9ngrbknbrqaswgqn3akvx793jk"))))
+        (base32 "0sd2ysysn8x4iwz2fhnvh8knr3pdqgkvhkhsl948smmfl0dwj42f"))))
     (build-system emacs-build-system)
     (synopsis "Major mode for editing web templates")
     (description "Web mode is an Emacs major mode for editing web templates
@@ -16006,8 +16125,8 @@ which avoids some of the issues with using Emacs’s built-in Url library.")
     (license license:gpl3+)))
 
 (define-public emacs-ement
-  (let ((commit "c951737dc855604aba389166bb0e7366afadc533")
-        (revision "1"))
+  (let ((commit "45b7882c8a8f28eb59113f78db0e79918f2c58ee")
+        (revision "2"))
     (package
       (name "emacs-ement")
       (version (git-version "0.1-pre" revision commit))
@@ -16019,12 +16138,15 @@ which avoids some of the issues with using Emacs’s built-in Url library.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "00iwwz4hzg4g59wrb5df6snqz3ppvrsadhfp61w1pa8gvg2z9bvy"))))
+          (base32 "1f79h9l7chazan7kh2g73banqim5p4gz2nyx3cvp9jjfz32c4k46"))))
       (build-system emacs-build-system)
       (arguments
        `(#:emacs ,emacs))               ;need libxml support
       (propagated-inputs
-       (list emacs-plz emacs-ts))
+       (list emacs-plz
+             emacs-svg-lib
+             emacs-taxy
+             emacs-ts))
       (home-page "https://github.com/alphapapa/ement.el")
       (synopsis "Matrix client for Emacs")
       (description "Ement.el is a Matrix client for Emacs.")
@@ -16359,8 +16481,8 @@ key.  Optionally, a mouse pop-up can be added by binding
     (license license:gpl3+)))
 
 (define-public emacs-idris-mode
-  (let ((commit "b77eadd8ac2048d5c882b4464bd9673e45dd6a59")
-        (revision "0"))
+  (let ((commit "9bc7697406f719258d93835df3c1761efbfecaa7")
+        (revision "1"))
     (package
       (name "emacs-idris-mode")
       (version (git-version "1.0" revision commit))
@@ -16373,7 +16495,7 @@ key.  Optionally, a mouse pop-up can be added by binding
          (file-name (git-file-name name commit))
          (sha256
           (base32
-           "1v8av6jza1j00ln75zjwaca0vmmv0fhhhi94p84rlfzgzykyb9g1"))))
+           "1d1f7kx0fw632js7qd1sra5wbpwyamcqs5wpzhyynmr5ybb0vyl7"))))
       (build-system emacs-build-system)
       (propagated-inputs
        (list emacs-prop-menu))
@@ -26600,14 +26722,14 @@ well as an option for visually flashing evaluated s-expressions.")
 (define-public emacs-tramp
   (package
     (name "emacs-tramp")
-    (version "2.5.2.2")
+    (version "2.5.2.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "tramp-" version ".tar"))
        (sha256
-        (base32 "104nn6xdmcviqqv4cx5llhwj1sh4q04w3h9s8gimmi2kg0z8s36r"))))
+        (base32 "05f59x7jl4m187y2cidhnfz7p8q85gav4xpipazfvm5dicxz4j7c"))))
     (build-system emacs-build-system)
     (arguments
      (list
@@ -27248,7 +27370,7 @@ it forcibly
 (define-public emacs-elpher
   (package
     (name "emacs-elpher")
-    (version "3.3.3")
+    (version "3.4.1")
     (source
      (origin
        (method git-fetch)
@@ -27257,7 +27379,7 @@ it forcibly
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "166fjq9d883hifa35zklyjrm4c575nd6zxdx7akbwibrgwi65bl0"))))
+        (base32 "0dv71zc95m5sa4824vk3d1xk726nh2v50i0yp6w3ydfzzsfph6j6"))))
     (build-system emacs-build-system)
     (arguments
      (list
@@ -31029,7 +31151,7 @@ and preferred services can easily be configured.")
 (define-public emacs-vertico
   (package
     (name "emacs-vertico")
-    (version "0.23")
+    (version "0.24")
     (source
      (origin
        (method git-fetch)
@@ -31038,7 +31160,7 @@ and preferred services can easily be configured.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1lyvnpqplwdawlplriz0rphsjsaqdcbc3nwzpd7bs9qghpsfb56z"))))
+        (base32 "03p9rf80jnralxpydvxi88igs0r6qa6v41xf1fafwgsf235b49yi"))))
     (build-system emacs-build-system)
     (arguments
      `(#:phases
@@ -31205,6 +31327,30 @@ to the @url{https://multitran.com} online dictionary.")
 @command{python} buffers.")
     (license license:gpl3)))
 
+(define-public emacs-code-cells
+  ;; No tagged release upstream
+  (let ((commit "8660bdeedee360e5eb632f1eb1356eb09d7dfbee")
+        (revision "0"))
+    (package
+      (name "emacs-code-cells")
+      (version (git-version "0.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/astoff/code-cells.el")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0mvfsdlhc3znc0d2p8vm7apkbpvbs688wmwvd0sms33qly53f546"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/astoff/code-cells.el")
+      (synopsis "Emacs utilities for code split into cells, including Jupyter
+notebooks")
+      (description "This package lets you efficiently navigate, edit and
+execute code split into cells according to certain magic comments.")
+      (license license:gpl3+))))
+
 (define-public emacs-kibit-helper
   (package
     (name "emacs-kibit-helper")
@@ -31398,14 +31544,14 @@ are prefixed with @code{seq-} and work on lists, strings, and vectors.")
 (define-public emacs-setup
   (package
     (name "emacs-setup")
-    (version "1.2.0")
+    (version "1.3.0")
     (source
       (origin
         (method url-fetch)
         (uri (string-append "https://elpa.gnu.org/packages/setup-"
                             version ".tar"))
         (sha256
-          (base32 "1fyzkm42gsvsjpk3vahfb7asfldarixm0wsw3g66q3ad0r7cbjnz"))))
+          (base32 "0r13ry73jm31j8fq7v1sh0k113fr4blfkiz85696bdpah2pnca87"))))
     (build-system emacs-build-system)
     (home-page "https://git.sr.ht/~pkal/setup")
     (synopsis "Helpful configuration macro")
@@ -31565,6 +31711,60 @@ headlines, keywords, tables and source blocks.")
 "@code{emacs-pyimport} manages python imports from Emacs via @code{python-pyflakes}.")
       (license license:gpl3+)))) ; License is in pyimport.el
 
+(define-public emacs-straight-el
+  (let ((commit "4517e118ee43f849f708025dbb2cf4f281793121")
+        (revision "0"))
+    (package
+      (name "emacs-straight-el")
+      (version (git-version "0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/raxod502/straight.el")
+           (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0idhgh203rac9c046286gir9rq0lgnlllzj4b4hrjpd3idg9v0r8"))))
+      (build-system emacs-build-system)
+      (arguments
+       (list
+        #:tests? #t
+        #:test-command
+        #~(list "emacs" "-Q" "--batch"
+                "-L" "."
+                "--load" "ert"
+                "--load" "tests/straight-test.el"
+                "--eval" "(progn (require 'straight-ert-print-hack) (ert-run-tests-batch-and-exit))")
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'patch-git-executable
+              (lambda* (#:key inputs #:allow-other-keys)
+                (make-file-writable "straight.el")
+                (substitute* "straight.el"
+                  (("\"git\"")
+                   (string-append "\""
+                                  (search-input-file inputs "/bin/git")
+                                  "\"")))))
+            (add-after 'check 'delete-tests
+              ;; "tests" directory includes bogus ".el" files that can make
+              ;; `patch-el-files' phase fail.
+              (lambda _
+                (delete-file-recursively "tests"))))))
+      (native-inputs
+       (list texinfo))
+      (inputs
+       (list git))
+      (propagated-inputs
+       (list emacs-magit))
+      (home-page "https://github.com/raxod502/straight.el/")
+      (synopsis "Purely functional package manager for the Emacs hacker")
+      (description
+       "@code{emacs-straight-el} is a purely functional package manager for the Emacs
+hacker.")
+      (license license:expat))))
+
 (define-public emacs-osm
   (package
     (name "emacs-osm")
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 31b5c04324..0de4b7a5d5 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -106,7 +106,7 @@
                   ;; Make sure Tramp looks for binaries in the right places on
                   ;; remote Guix System machines, where 'getconf PATH' returns
                   ;; something bogus.
-                  (substitute* "net/tramp-sh.el"
+                  (substitute* "net/tramp.el"
                     ;; Patch the line after "(defcustom tramp-remote-path".
                     (("\\(tramp-default-remote-path")
                      (format #f "(tramp-default-remote-path ~s ~s ~s ~s "
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index 190af4edfb..fe8ab13298 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -33,6 +33,7 @@
 ;;; Copyright © 2022 Malte Frank Gerdes <malte.f.gerdes@gmail.com>
 ;;; Copyright © 2022 Konstantinos Agiannis <agiannis.kon@gmail.com>
 ;;; Copyright © 2022 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -942,7 +943,7 @@ Emacs).")
 (define-public kicad
   (package
     (name "kicad")
-    (version "6.0.5")
+    (version "6.0.6")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -950,7 +951,7 @@ Emacs).")
                     (commit version)))
               (sha256
                (base32
-                "19mg672h1gjdvnkp13cpkhk67xpwms72y4gd6g8983fcsxr8nq23"))
+                "0cb9zba812dlmn2w27s1q38mjpfdwhv0nnbilwsxchpvwg8j4k2j"))
               (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
@@ -1057,7 +1058,7 @@ electrical diagrams), gerbview (viewing Gerber files) and others.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "190pnrf2cy06wnnskyb4fqj4a4nfmz17i3y79rnrz3j62h3fmg0w"))))
+                "1kxv0j3nx6zn45znrhqq6bdqrsd60mgmgvr1gjv5p8g3cbkkslrx"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags (list "-DBUILD_FORMATS=html")
@@ -1091,7 +1092,7 @@ electrical diagrams), gerbview (viewing Gerber files) and others.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1dhgdp08ah08fc5nvwkqmgpl2any9vgy1gykmyzsd4dl8hhvznh5"))))
+                "02z3vqhz1rlf57zi8vyrlxvvdl1hpsh447p41qdgcpn5dyjycb9d"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ; no tests exist
@@ -1120,7 +1121,7 @@ libraries.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0sxzd4dr1g12ck8b2wsyg9r2s1j3472nksrjrwpzjdyfc8rqbjai"))))
+                "1phynxisha2pq2knbx5l1hkdz1bmjm0qxl3lcb4ab82h8d35r37c"))))
     (synopsis "Official KiCad footprint libraries")
     (description "This package contains the official KiCad footprint libraries.")))
 
@@ -1137,7 +1138,7 @@ libraries.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "00i6mybg3pprzb283b26z5b2g7a8sbghlvc0fwk9gwrp3wz1yqzc"))))
+                "0ci9gxbpfnfqwah95ki4qcwlca78s1z6s7hckisnp58a1cm9siya"))))
     (synopsis "Official KiCad 3D model libraries")
     (description "This package contains the official KiCad 3D model libraries.")))
 
@@ -1154,7 +1155,7 @@ libraries.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "13h9ly6amiwm7zkwa2fd9730kh295ls8j95fszlfjp9rczv2yyzm"))))
+                "08zxh83fbygh1x2jhca8nrp3f9kihf7kmg65qmyp95wvps4p5h8v"))))
     (synopsis "Official KiCad project and worksheet templates")
     (description "This package contains the official KiCad project and
 worksheet templates.")))
@@ -3169,7 +3170,7 @@ visualization, matrix manipulation.")
 (define-public prusa-slicer
   (package
     (name "prusa-slicer")
-    (version "2.4.1")
+    (version "2.4.2")
     (source
      (origin
        (method git-fetch)
@@ -3178,7 +3179,7 @@ visualization, matrix manipulation.")
          (url "https://github.com/prusa3d/PrusaSlicer")
          (commit (string-append "version_" version))))
        (file-name (git-file-name name version))
-       (sha256 (base32 "0q1m8fcz39s03r9csq411ss8vbbpjx45icj8vgkysy8hqgqz3gz0"))
+       (sha256 (base32 "17p56f0zmiryy8k4da02in1l6yxniz286gf9yz8s1gaz5ksqj4af"))
        (modules '((guix build utils)))
        (snippet
         '(begin
diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm
index 53b58aec60..b3fc881397 100644
--- a/gnu/packages/erlang.scm
+++ b/gnu/packages/erlang.scm
@@ -44,7 +44,7 @@
 (define-public erlang
   (package
     (name "erlang")
-    (version "24.3.4")
+    (version "25.0.2")
     (source (origin
               (method git-fetch)
               ;; The tarball from http://erlang.org/download contains many
@@ -56,7 +56,7 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0rrnppglh261x81w9bzmh6wvxy8xjqiiw3nvv4q2214pmc1pxilr"))
+                "0xgp035vy0yy5m155rpmf22m6rq7pvw3m65s5mz22bcpj2rw4b0x"))
               (patches (search-patches "erlang-man-path.patch"))))
     (build-system gnu-build-system)
     (native-inputs
@@ -70,7 +70,7 @@
                                (version-major+minor version) ".tar.gz"))
            (sha256
             (base32
-             "057nrw8563nyd98l5zp9ffi3npw6h3jx06j1hv110wzpxqi25bb8"))))))
+             "17ap4kawlbqmcl13c543gh54p1ng8ivxmbn6lbbij07k81ry5p1y"))))))
     (inputs
      (list ncurses openssl wxwidgets))
     (propagated-inputs
diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
index 216e4cfcda..9f6ca10831 100644
--- a/gnu/packages/file-systems.scm
+++ b/gnu/packages/file-systems.scm
@@ -1146,7 +1146,7 @@ with the included @command{xfstests-check} helper.")
 (define-public zfs
   (package
     (name "zfs")
-    (version "2.1.4")
+    (version "2.1.5")
     (outputs '("out" "module" "src"))
     (source
       (origin
@@ -1155,7 +1155,7 @@ with the included @command{xfstests-check} helper.")
                               "/download/zfs-" version
                               "/zfs-" version ".tar.gz"))
           (sha256
-           (base32 "1xmcy4f0damf1pkb1sy1339ir1jkky0dwzd8vhwgc1pqjgac0liv"))))
+           (base32 "0371j5k28cymqngfl76dfxzggvdf8n0ssij37350gzs4bhg084qr"))))
     (build-system linux-module-build-system)
     (arguments
      (list
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index eaa11b1c81..1630c80925 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -212,43 +212,31 @@ Cyrillic, Canadian Syllabics and most Latin based languages are supported.")
     (version "0.303")
     (source
      (origin
-       (method url-fetch/zipbomb)
-       (uri (string-append "https://gitlab.gnome.org/GNOME/cantarell-fonts/-/"
-                           "jobs/1515399/artifacts/download"))
-       (file-name (string-append name "-" version "-static"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.gnome.org/GNOME/cantarell-fonts")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1dz551xrrhx6l40j57ksk2alllrihghg4947z1r88dpcq3snpn1s"))))
-    (build-system font-build-system)
+        (base32
+         "1d1ay0fdqchk0wa5yqxis2c98imvzsbbd2kjv0x8sk4fm419847b"))))
+    (build-system meson-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'unpack-source
-           ;; The actual OTF fonts are prebuilt (building them requires at least
-           ;; the currently unpackaged psautohint and its numerous dependencies;
-           ;; TODO), but unpack the source so that COPYING is installed later.
-           (lambda* (#:key outputs #:allow-other-keys)
-             (invoke "tar" "--strip-components=1" "-xvf"
-                     (string-append "build/meson-dist/cantarell-fonts-"
-                                    ,version ".tar.xz"))))
-         (add-after 'unpack 'unpack-variable-font
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((variable-font (assoc-ref inputs "variable-font")))
-               (copy-recursively (string-append variable-font "/prebuilt")
-                                 ".")))))))
+     (list #:configure-flags #~(list "-Dbuildstatics=true")))
     (native-inputs
-     `(("variable-font"
-        ,(origin
-           (method url-fetch/zipbomb)
-           (uri (string-append "https://gitlab.gnome.org/GNOME/cantarell-fonts/-/"
-                               "jobs/1515398/artifacts/download"))
-           (file-name (string-append name "-" version "-variable"))
-           (sha256
-            (base32 "0z93pbkxidsx3y98rsl2jm2qpvxv5pj0w870xhnsciglw6pc9a9i"))))
-       ("unzip" ,unzip)))
+     (list gettext-minimal
+           psautohint
+           python
+           python-cffsubr
+           python-fontmath
+           python-statmake
+           python-ufo2ft))
     (home-page "https://wiki.gnome.org/Projects/CantarellFonts")
     (synopsis "Cantarell sans-serif typeface")
     (description "The Cantarell font family is a contemporary Humanist
-sans-serif designed for on-screen reading.  It is used by GNOME@tie{}3.")
+sans-serif designed for on-screen reading.  It is used by GNOME@tie{}3.
+This package contains both the non-variable as well as the variable versions
+of the font.")
     (license license:silofl1.1)))
 
 (define-public font-lato
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index c2686c380f..123d477838 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -1396,6 +1396,79 @@ generate bitmaps.")
      `(("python" ,python-2)
        ,@(alist-delete "python" (package-inputs fontforge))))))
 
+(define-public python-statmake
+  (package
+    (name "python-statmake")
+    (version "0.5.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/daltonmaag/statmake")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0qavzspxhwnaayj5mxq6ncjjziggabxj157ls04h2rdrpq167706"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; XXX: PEP 517 manual build copied from python-isort.
+          (add-after 'unpack 'adjust-for-older-attrs
+            ;; Our older attrs package is using the 'attr' rather than 'attrs'
+            ;; namespace.
+            ;; TODO: Remove after python-attrs is updated to >= 21.4.0.
+            (lambda _
+              (substitute* "pyproject.toml"
+                (("attrs = \">=21.3\"")
+                 "attrs = \">=21.2\""))
+              (substitute* (find-files "." "\\.py$")
+                (("from attrs\\b")
+                 "from attr")
+                (("import attrs")
+                 "import attr")
+                (("@attrs")
+                 "@attr")
+                (("\\battrs\\.")
+                 "attr."))))
+          (replace 'build
+            (lambda _
+              (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+          (replace 'install
+            (lambda _
+              (let ((whl (car (find-files "dist" "\\.whl$"))))
+                (invoke "pip" "--no-cache-dir" "--no-input"
+                        "install" "--no-deps" "--prefix" #$output whl))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "pytest" "-vv" "tests"
+                        ;;"-n" (number->string (parallel-job-count))
+                        ;; This test requires orjson, which needs the maturin
+                        ;; build system and new Rust dependencies.
+                        ;;"--ignore" "tests/test_preconf.py"
+                        )))))))
+    (native-inputs
+     (list python-poetry-core
+           python-pypa-build
+           python-pytest
+           python-ufo2ft))
+    (propagated-inputs
+     (list python-attrs
+           python-cattrs
+           python-fonttools))
+    (home-page "https://github.com/daltonmaag/statmake")
+    (synopsis "Apply OpenType STAT information to a variable font")
+    (description
+     "@command{statmake} takes a user-written Stylespace that defines
+@url{https://docs.microsoft.com/en-us/typography/opentype/spec/stat, OpenType
+STAT information} for an entire font family and then (potentially subsets and)
+applies it to a specific variable font.  This spares users from having to deal
+with @url{https://github.com/fonttools/fonttools/, raw TTX dumps} and juggling
+with @samp{nameIDs}.")
+    (license license:expat)))
+
 (define-public python-ufolib2
   (package
     (name "python-ufolib2")
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 36b792ccf0..adb2212610 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -31,6 +31,7 @@
 ;;; Copyright © 2022 Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de>
 ;;; Copyright © 2022 Wamm K. D. <jaft.r@outlook.com>
 ;;; Copyright © 2022 Petr Hodina <phodina@protonmail.com>
+;;; Copyright © 2022 muradm <mail@muradm.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -704,6 +705,32 @@ the org.freedesktop.login1 interface over the system bus, allowing other parts
 of a the system to know what users are logged in, and where.")
     (license license:lgpl2.1+)))
 
+(define-public basu
+  (package
+    (name "basu")
+    (version "0.2.0")
+    (home-page "https://git.sr.ht/~emersion/basu")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url home-page)
+         (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0h23n7wg18xc7xwldca18wi00iajyliixwicqyvv38qx831d8q18"))))
+    (build-system meson-build-system)
+    (native-inputs
+     (list pkg-config python gperf))
+    (inputs
+     (list libcap))
+    (synopsis "The sd-bus library, extracted from systemd")
+    (description "Some projects rely on the sd-bus library for DBus support.
+However not all systems have systemd or elogind installed.
+This library provides just sd-bus (and the busctl utility).")
+    (license license:lgpl2.1+)))
+
 (define-public localed
   ;; XXX: This package is extracted from systemd but we retain so little of it
   ;; that it would make more sense to maintain a fork of the bits we need.
diff --git a/gnu/packages/ftp.scm b/gnu/packages/ftp.scm
index 3f17dcf407..7a69e3b4e2 100644
--- a/gnu/packages/ftp.scm
+++ b/gnu/packages/ftp.scm
@@ -177,14 +177,14 @@ as required.")
 (define-public libfilezilla
   (package
     (name "libfilezilla")
-    (version "0.36.0")
+    (version "0.37.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.filezilla-project.org/"
                            "libfilezilla/libfilezilla-" version ".tar.bz2"))
        (sha256
-        (base32 "0wm8acwbrsblilfwj5asxr26gy8grg175j91df1bryz7xlc1q9y0"))))
+        (base32 "1mg2zqmpkkcimx6kq3a1ab26v515zzxw2s8rwhmajsv4cgp404g5"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -217,14 +217,14 @@ output.
 (define-public filezilla
   (package
     (name "filezilla")
-    (version "3.58.0")
+    (version "3.60.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.filezilla-project.org/client/"
                            "FileZilla_" version "_src.tar.bz2"))
        (sha256
-        (base32 "122x72rvd178y2rffvidyvzr33kf325q2rk4l2x44xqzw1r7zznh"))))
+        (base32 "1bv643abf8jai552j9fqcl4i54h1yrs5hgn6w0w1ibwccdinryc1"))))
     (build-system gnu-build-system)
     (arguments
       ;; Don't let filezilla phone home to check for updates.
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index 5fc3159136..3682368c03 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -1101,6 +1101,14 @@ provides the GNU compiler for the Go programming language."))
   (custom-gcc gcc-10 "gcc-objc" '("objc")
               %objc-search-paths))
 
+(define-public gcc-objc-11
+  (custom-gcc gcc-11 "gcc-objc" '("objc")
+              %objc-search-paths))
+
+(define-public gcc-objc-12
+  (custom-gcc gcc-12 "gcc-objc" '("objc")
+              %objc-search-paths))
+
 (define-public gcc-objc gcc-objc-10)
 
 (define %objc++-search-paths
@@ -1143,6 +1151,14 @@ provides the GNU compiler for the Go programming language."))
   (custom-gcc gcc-10 "gcc-objc++" '("obj-c++")
               %objc++-search-paths))
 
+(define-public gcc-objc++-11
+  (custom-gcc gcc-11 "gcc-objc++" '("obj-c++")
+              %objc++-search-paths))
+
+(define-public gcc-objc++-12
+  (custom-gcc gcc-12 "gcc-objc++" '("obj-c++")
+              %objc++-search-paths))
+
 (define-public gcc-objc++ gcc-objc++-10)
 
 (define (make-libstdc++-doc gcc)
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 7b29c55088..2e737373a8 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -18,6 +18,7 @@
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2021 Nikolay Korotkiy <sikmir@disroot.org>
+;;; Copyright © 2022 Roman Scherer <roman.scherer@burningswell.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -113,6 +114,7 @@
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages time)
+  #:use-module (gnu packages tls)
   #:use-module (gnu packages web)
   #:use-module (gnu packages webkit)
   #:use-module (gnu packages wxwidgets)
@@ -914,7 +916,7 @@ development.")
 (define-public gdal
   (package
     (name "gdal")
-    (version "3.3.3")
+    (version "3.5.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -922,7 +924,7 @@ development.")
                      version ".tar.gz"))
               (sha256
                (base32
-                "0nk09lws1hk873yn5f4wzqfvr82gm4hw3gq8w9g1h0kvf6j5x4i8"))
+                "0h7dgjx8nk3dd17wwqm2yjnaqciyrd2mz9gcjswpcnmap09wbzrs"))
               (modules '((guix build utils)))
               (snippet
                 `(begin
@@ -946,27 +948,23 @@ development.")
                              (string-append option "="
                                             (assoc-ref %build-inputs input))))))
          (list
-           ;; TODO: --with-pcidsk, --with-pcraster
-           (with "--with-freexl" "freexl")
-           (with "--with-libjson-c" "json-c")
-           (with "--with-png" "libpng")
-           (with "--with-webp" "libwebp")
-           (with "--with-gif" "giflib")
-           (with "--with-jpeg" "libjpeg-turbo")
-           (with "--with-libtiff" "libtiff")
-           (with "--with-geotiff" "libgeotiff")
-           (with "--with-libz" "zlib")
-           (with "--with-expat" "expat")
-           (with "--with-sqlite3" "sqlite")
-           "--with-pcre"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'fix-path
-           (lambda _
-             (substitute* "frmts/mrf/mrf_band.cpp"
-               (("\"../zlib/zlib.h\"") "<zlib.h>")))))))
+          ;; TODO: --with-pcidsk, --with-pcraster
+          (with "--with-expat" "expat")
+          (with "--with-freexl" "freexl")
+          (with "--with-geotiff" "libgeotiff")
+          (with "--with-gif" "giflib")
+          (with "--with-jpeg" "libjpeg-turbo")
+          (with "--with-libjson-c" "json-c")
+          (with "--with-libtiff" "libtiff")
+          (with "--with-libz" "zlib")
+          (with "--with-png" "libpng")
+          (with "--with-sqlite3" "sqlite")
+          (with "--with-webp" "libwebp")
+          "--without-jpeg12"
+          "--with-pcre"))))
     (inputs
-     (list expat
+     (list curl
+           expat
            freexl
            geos
            giflib
@@ -977,6 +975,7 @@ development.")
            libtiff
            libwebp
            netcdf
+           openssl
            pcre
            postgresql ; libpq
            proj
@@ -1147,6 +1146,7 @@ Shapely capabilities
            json-c
            libjpeg-turbo
            libxml2
+           openssl
            pcre
            postgresql
            protobuf-c
@@ -2485,6 +2485,7 @@ growing set of geoscientific methods.")
                              "PyQgsProviderConnectionSpatialite"
                              "PyQgsPythonProvider"
                              "PyQgsRasterLayer"
+                             "PyQgsRasterResampler"
                              "PyQgsRulebasedRenderer"
                              "PyQgsSelectiveMasking"
                              "PyQgsSettings"
diff --git a/gnu/packages/gnome-xyz.scm b/gnu/packages/gnome-xyz.scm
index 9e5d319291..da316186d5 100644
--- a/gnu/packages/gnome-xyz.scm
+++ b/gnu/packages/gnome-xyz.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2021 Attila Lendvai <attila@lendvai.name>
 ;;; Copyright © 2021 Charles Jackson <charles.b.jackson@protonmail.com>
 ;;; Copyright © 2022 Eric Bavier <bavier@posteo.net>
+;;; Copyright © 2022 Sughosha <sughosha@proton.me>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -985,6 +986,102 @@ animation of closing windowed applications.")
 GNOME Shell, including the top panel, dash and overview.")
     (license license:gpl3)))
 
+(define-public gnome-shell-extension-radio
+  (package
+    (name "gnome-shell-extension-radio")
+    (version "19")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url
+                     "https://github.com/hslbck/gnome-shell-extension-radio")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1qsi6c57hxh4jqdw18knm06601lhag6jdbvzg0r79aa9572zy8a0"))))
+    (build-system copy-build-system)
+    (arguments
+     (list
+      #:install-plan #~'(("radio@hslbck.gmail.com"
+                          "/share/gnome-shell/extensions/"))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'install 'glib-compile-schemas
+            (lambda _
+              (invoke "glib-compile-schemas"
+                      "radio@hslbck.gmail.com/schemas"))))))
+    (native-inputs (list `(,glib "bin")))
+    (home-page "https://github.com/hslbck/gnome-shell-extension-radio")
+    (synopsis "Internet radio for GNOME Shell")
+    (description "This extension implements an internet radio player
+directly inside GNOME Shell.  It can manage stations and play streams.")
+    (license license:gpl3+)))
+
+(define-public gnome-shell-extension-sound-output-device-chooser
+  (package
+    (name "gnome-shell-extension-sound-output-device-chooser")
+    (version "43")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/kgshank/gse-sound-output-device-chooser")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1qk6ypyqbv8zwwlky6cgk9hgp1zh32jmzw4wza200g4v94ifkwm9"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:tests? #f ; no check target
+      #:make-flags #~(list (string-append "INSTALL_DIR="
+                                          #$output
+                                          "/share/gnome-shell/extensions"))
+      #:phases
+      #~(modify-phases %standard-phases (delete 'configure))))
+    (native-inputs (list gettext-minimal `(,glib "bin")))
+    (inputs (list python))
+    (home-page
+     "https://extensions.gnome.org/extension/906/sound-output-device-chooser")
+    (synopsis "Sound output chooser for GNOME Shell")
+    (description "This extension shows a list of sound output and input devices
+in the status menu below the volume slider.  Various active ports like HDMI,
+Speakers etc. of the same device are also displayed for selection.")
+    (license license:gpl3+)))
+
+(define-public gnome-shell-extension-transparent-window
+  (let ((commit "cc9bc70c192dd565fa6f1d1b28d9a20f99684f2a")
+        (revision "45"))
+    (package
+      (name "gnome-shell-extension-transparent-window")
+      (version (git-version "0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url (string-append "https://github.com/pbxqdown/"
+                                   "gnome-shell-extension-transparent-window"))
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1f9iqqjpmmylqz0ws8cy5rs475bwzi7jy44q9ip44ig2acz2wxzp"))))
+      (build-system copy-build-system)
+      (arguments
+       (list
+        #:install-plan
+        #~'(("."
+             #$(string-append "/share/gnome-shell/extensions"
+                              "/transparent-window@pbxqdown.github.com")))))
+      (home-page
+       "https://github.com/pbxqdown/gnome-shell-extension-transparent-window")
+      (synopsis "Change the opacity of windows in GNOME Shell")
+      (description "This extension adds keybindings to change the opacity
+of windows.")
+      (license license:expat))))
+
 (define-public arc-theme
   (package
     (name "arc-theme")
diff --git a/gnu/packages/graph.scm b/gnu/packages/graph.scm
index 3dc6eac33a..734f24d6c3 100644
--- a/gnu/packages/graph.scm
+++ b/gnu/packages/graph.scm
@@ -461,8 +461,8 @@ contains supporting code for evaluation and parameter tuning.")
                (lambda ()
                  (let ((python-version ,(version-major+minor (package-version python))))
                    (format #t "\
-PYTHONCFLAGS =-I~a/include/python~am/ -I~a/lib/python~a/site-packages/numpy/core/include
-LIBS = -lpython~am -lfaiss
+PYTHONCFLAGS =-I~a/include/python~a/ -I~a/lib/python~a/site-packages/numpy/core/include
+LIBS = -lpython~a -lfaiss
 SHAREDFLAGS = -shared -fopenmp
 CXXFLAGS = -fpermissive -fopenmp -fPIC
 CPUFLAGS = ~{~a ~}~%"
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 0b66d9442f..c193be1efb 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -30,6 +30,7 @@
 ;;; Copyright © 2022 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
 ;;; Copyright © 2022 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2022 Tobias Kortkamp <tobias.kortkamp@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -2054,3 +2055,68 @@ and build scripts for the OpenXR loader.")
 such as VR and AR on mobile, PC/desktop, and any other device.  Monado aims to be
 a complete and conforming implementation of the OpenXR API made by Khronos.")
     (license license:boost1.0)))
+
+(define-public azpainter
+  (package
+    (name "azpainter")
+    (version "3.0.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/azelpg/azpainter")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1iplp3p8pw9q44kb43hrk89sv2aff6bdy9fk58j2v6k5lqbk6kvf"))))
+    (build-system gnu-build-system) ;actually a home grown build system
+    (arguments
+     (list #:tests? #f
+           #:phases
+           #~(modify-phases %standard-phases
+               (replace 'configure
+                 (lambda _
+                   (invoke "./configure"
+                           (string-append "--prefix="
+                                          #$output))))
+               (replace 'build
+                 (lambda* (#:key parallel-build? #:allow-other-keys)
+                   (let ((job-count (if parallel-build?
+                                        (number->string (parallel-job-count))
+                                        "1")))
+                     (invoke "ninja" "-j" job-count "-C" "build"))))
+               (add-before 'install 'disable-cache-generation
+                 (lambda _
+                   (setenv "DESTDIR" "/") #t))
+               (replace 'install
+                 (lambda _
+                   (invoke "ninja" "-C" "build" "install"))))))
+    (inputs (list fontconfig
+                  freetype
+                  libjpeg-turbo
+                  libpng
+                  libtiff
+                  libwebp
+                  libx11
+                  libxcursor
+                  libxext
+                  libxi
+                  zlib))
+    (native-inputs (list ninja pkg-config))
+    (home-page "http://azsky2.html.xdomain.jp/soft/azpainter.html")
+    (synopsis "Paint software for editing illustrations and images")
+    (description
+     "AzPainter is a lightweight full color painting application for editing
+illustrations and images.
+
+Features include:
+@itemize
+@item Layers
+@item Many artistic filters
+@item Good range of selection tools
+@item Pen pressure support with automatic brush size adjustment
+@item Support for 16-bit color images with transparency (RGBA)
+@item Support for image formats like PSD, PNG, JPEG, TIFF, WebP
+@end itemize
+")
+    (license license:gpl3+)))
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 2ed6617fd2..2456509b97 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012-2022 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015, 2017 Christine Lemmer-Webber <cwebber@dustycloud.org>
+;;; Copyright © 2015, 2017, 2022 Christine Lemmer-Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2016 Alex Sassmannshausen <alex@pompo.co>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Erik Edrosa <erik.edrosa@gmail.com>
@@ -496,34 +496,31 @@ and then run @command{scm example.scm}.")
        ,@(package-arguments guile2.0-bash)))))
 
 (define-public guile-8sync
-  (package
-    (name "guile-8sync")
-    (version "0.4.2")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/8sync/8sync-" version
-                                  ".tar.gz"))
-              (sha256
-               (base32
-                "031wm13srak3wsnll7j2mbbi29g1pcm4swdb71ds9yn567pn20qw"))))
-    (build-system gnu-build-system)
-    (native-inputs (list autoconf automake guile-2.2 pkg-config texinfo))
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-before 'configure 'setenv
-                    (lambda _
-                      ;; quiet warnings
-                      (setenv "GUILE_AUTO_COMPILE" "0")
-                      #t)))))
-    (home-page "https://gnu.org/s/8sync/")
-    (synopsis "Asynchronous actor model library for Guile")
-    (description
-     "GNU 8sync (pronounced \"eight-sync\") is an asynchronous programming
-library for GNU Guile based on the actor model.
-
-Note that 8sync is only available for Guile 2.2.")
-    (properties '((upstream-name . "8sync")))
-    (license license:lgpl3+)))
+  (let ((commit "183b4f02e68279d4984e79b79e06bfcf1861fcbf") (revision "0"))
+    (package
+      (name "guile-8sync")
+      (version (git-version "0.4.2" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (commit commit)
+                      (url "https://git.savannah.gnu.org/git/8sync.git")))
+                (sha256
+                 (base32
+                  "0r22kxasv1zqnf1ykzyx6c226qxn1wgjb1gc54526bid24x508ij"))
+                (file-name (git-file-name name version))))
+      (build-system gnu-build-system)
+      (native-inputs (list autoconf automake guile-3.0 pkg-config texinfo))
+      (arguments
+       (list #:make-flags
+             #~(list "GUILE_AUTO_COMPILE=0")))
+      (home-page "https://gnu.org/s/8sync/")
+      (synopsis "Asynchronous actor model library for Guile")
+      (description
+       "GNU 8sync (pronounced \"eight-sync\") is an asynchronous programming
+library for GNU Guile based on the actor model.")
+      (properties '((upstream-name . "8sync")))
+      (license license:lgpl3+))))
 
 (define-public guile-daemon
   (package
@@ -5103,3 +5100,46 @@ Protocol (TAP).  It comes with an experimental harness (tap-harness).")
 termios API is used.  GNU Guile doesn't have an interface for that built in.
 This module implements this interface by use of Guile's dynamic FFI.")
     (license license:bsd-2)))
+
+(define-public guile-goblins
+  (package
+    (name "guile-goblins")
+    (version "0.8")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.com/spritely/guile-goblins/")
+             (commit (string-append "v" version))))
+       (file-name (string-append name "-" version))
+       (sha256
+        (base32
+         "1mmyykh79jwhrfgnhhw94aw7a8m6qw249kj7k60ynj16mcfm5iyy"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:make-flags
+           #~(list "GUILE_AUTO_COMPILE=0")))
+    (native-inputs
+     (list autoconf automake pkg-config texinfo))
+    (inputs (list guile-3.0))
+    (propagated-inputs
+     (list guile-fibers guile-gcrypt))
+    (home-page "https://spritely.institute/goblins")
+    (synopsis "Distributed programming environment for Guile")
+    ;; In guile-goblins 0.9, OCapN support will be added (it already
+    ;; exists in racket-goblins).  At that point we should add the
+    ;; following to this description:
+    ;;
+    ;;   Goblins allows for cooperation between networked programs
+    ;;   in a mutually suspicious network through OCapN, the Object
+    ;;   Capability Network.  This includes collaboration across
+    ;;   runtimes; for instance, programs written in the Guile and Racket
+    ;;   versions of Goblins are able to speak to each other.
+    (description
+     "@code{guile-goblins} is the Guile version of
+@url{https://spritely.institute/goblins, Spritely Goblins},
+a transactional, distributed programming environment following object
+capability security designs.  Goblins is a general toolkit, and also
+the core layer of Spritely's work to support healthy distributed
+networked communities.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 63aed09a9b..8ba4711ca0 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -650,14 +650,14 @@ specification.  These are the main features:
   (package
     (inherit guile-json-3)
     (name "guile-json")
-    (version "4.5.2")
+    (version "4.7.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://savannah/guile-json/guile-json-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0cqr0ljqmzlc2bwrapcsmcgxg147h66mcxf23824ri5i6vn4dc0s"))))))
+                "0hv8jjb6wdhvfrprwdi36125sci1ip4zfflv79hqlz7nh0irld65"))))))
 
 (define-public guile2.2-json
   (package-for-guile-2.2 guile-json-4))
diff --git a/gnu/packages/hardware.scm b/gnu/packages/hardware.scm
index 1471c28fa2..acc3fb3059 100644
--- a/gnu/packages/hardware.scm
+++ b/gnu/packages/hardware.scm
@@ -34,23 +34,34 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages avahi)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cpp)
   #:use-module (gnu packages crypto)
+  #:use-module (gnu packages cups)
   #:use-module (gnu packages curl)
+  #:use-module (gnu packages debian)
+  #:use-module (gnu packages disk)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages flex)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
+  #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages guile)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lxqt)
+  #:use-module (gnu packages package-management)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages networking)
   #:use-module (gnu packages openldap)
   #:use-module (gnu packages pciutils)
   #:use-module (gnu packages perl)
@@ -62,8 +73,12 @@
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
+  #:use-module (gnu packages scanner)
+  #:use-module (gnu packages security-token)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages video)
   #:use-module (gnu packages virtualization)
+  #:use-module (gnu packages vulkan)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
@@ -71,6 +86,7 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
+  #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
   #:use-module (guix download)
   #:use-module (guix gexp)
@@ -84,7 +100,6 @@
 ;; This is a module for packages related to physical hardware that don't (yet)
 ;; have a more specific home like gps.scm, security-token.scm, &c.
 
-
 (define-public envytools
   (let ((commit "9014a51b1436461c7b3b005bdae72bf4912f4e72")
         (revision "1"))
@@ -111,6 +126,195 @@ drivers, including an assembler and a disassembler for several GPU instruction
 sets, and tools to deal with register databases.")
       (license license:expat))))
 
+(define-public hw-probe
+  (package
+    (name "hw-probe")
+    (version "1.6.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/linuxhw/hw-probe")
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "028wnhrbn10lfxwmcpzdbz67ygldimv7z1k1bm64ggclykvg5aim"))))
+    (build-system perl-build-system)
+    (arguments
+     (list
+      #:tests? #f                       ;no test suite
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-source
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              ;; Correct install prefix.
+              (substitute* "Makefile"
+                (("/usr") #$output))
+
+              (define preserve
+                ;; Either not available in Guix or better left untouched.
+                '("$HWInfoCmd" "$CurlCmd" "$NvidiaSmi_Path" ;perl variables
+                  "vblank_mode=0" "DRI_PRIME=1" ;environment variables
+                  "sha512"                      ;fall-back to sha512sum
+                  ;; hp-probe comes from the full 'hplib' package, which would
+                  ;; pull Qt and increase the size of the closure by 600 MiB.
+                  "hp-probe"
+
+                  ;; Android.
+                  "apk" "getprop"
+
+                  ;; BSD-related.
+                  "atactl" "acpiconf"
+                  "bsdhwmon" "camcontrol"
+                  "devinfo" "diskinfo" "disklabel"
+                  "freebsd-version" "ghostbsd-version"
+                  "hwstat" "kldstat" "mfiutil" "modstat" "mport"
+                  "ofwdump" "opnsense-version"
+                  "pcictl" "pcidump" "pciconf" "pkg" "pkg_info" "pkgin"
+                  "start-hello" "sysinfo" "usbconfig" "usbdevs"
+
+                  ;; Package managers.
+                  "eopkg" "pacman" "swupd"
+
+                  ;; Not packaged in Guix (TODO).
+                  "apm"                                      ;apmd
+                  "drm_info"                                 ;drm_info
+                  "megactl"                                  ;megactl
+                  "lspnp"                                    ;pnputils
+                  "lsb_release"                              ;lsb-release
+                  "lsinitrd"                                 ;dracut
+                  "optirun"                                  ;bumblebee
+                  "usbctl"                                   ;usbctl
+                  "monitor-get-edid"                         ;monitor-edid
+                  "journalctl" "systemctl" "systemd-analyze" ;systemd
+                  "superiotool"                              ;superiotool
+                  "x86info"                                  ;x86info
+
+                  ;; Other.
+                  "arcconf"               ;proprietary
+                  "config"                ;unknown origin (Linux-related)
+                  "dkms"                  ;unknown origin (Linux-related)
+                  "amdconfig" "fglrxinfo" ;proprietary/obsolete
+                  "geom"                  ;unknown origin
+                  "hciconfig" "hcitool"   ;deprecated from bluez
+                  "nm-tool"))           ;replaced by nmcli in network-manager
+
+              (substitute* "hw-probe.pl"
+                (("(check|find|run)Cmd\\(\"([^\" ]+)" _ prefix command)
+                 (string-append
+                  prefix "Cmd(\""
+                  (if (member command preserve)
+                      command
+                      (or (false-if-exception
+                           (search-input-file
+                            inputs (string-append "bin/" command)))
+                          (search-input-file
+                           inputs (string-append "sbin/" command))))))
+                (("(my \\$HWInfoCmd = \")hwinfo" _ head)
+                 (string-append head (search-input-file inputs "sbin/hwinfo")))
+                (("(my \\$CurlCmd = \")curl" _ head)
+                 (string-append head (search-input-file inputs "bin/curl")))
+                (("(\\$LsblkCmd = \")lsblk" _ head)
+                 (string-append head (search-input-file inputs "bin/lsblk")))
+                (("(\\$SmartctlCmd = \")smartctl" _ head)
+                 (string-append head (search-input-file inputs "sbin/smartctl")))
+                (("(my \\$FindmntCmd = \")findmnt" _ head)
+                 (string-append head (search-input-file inputs "bin/findmnt")))
+                (("(\\$DDCUtilCmd = \")ddcutil" _ head)
+                 (string-append head (search-input-file inputs "bin/ddcutil")))
+                (("(my \\$VaInfoCmd = \")vainfo" _ head)
+                 (string-append head (search-input-file inputs "bin/vainfo")))
+                (("(\\$CheckHddCmd = \")hdparm" _ head)
+                 (string-append head (search-input-file inputs "sbin/hdparm")))
+                (("(\\$USE_DIGEST_ALT = \")sha512sum" _ head)
+                 (string-append head (search-input-file inputs "bin/sha512sum"))))))
+          (delete 'configure)
+          (add-after 'install 'wrap
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (define hw-probe (search-input-file outputs "bin/hw-probe"))
+              ;; 'NeedProgs' core utilities are specially checked for
+              ;; availability.  It's easier to wrap them in PATH than patching
+              ;; their references.
+              ;; TODO: package edid-decode and add "bin/edid-decode" below:
+              (define need-progs (list "sbin/dmidecode" "sbin/smartctl"
+                                       "sbin/lspci" "bin/lsusb"))
+              (wrap-script hw-probe
+                (list "PERL5LIB" 'prefix (list (getenv "PERL5LIB")))
+                (list "PATH" 'prefix
+                      (map (lambda (command)
+                             (dirname (search-input-file inputs command)))
+                           need-progs))))))))
+    (inputs
+     (list acpi
+           acpica
+           alsa-utils
+           avahi
+           bash-minimal
+           coreutils
+           cpuid
+           cpupower
+           curl
+           ddcutil
+           dmidecode
+           dpkg
+           edid-decode
+           efibootmgr
+           efivar
+           ethtool
+           eudev
+           findutils
+           gpart
+           grep
+           guile-3.0                    ;for wrap-script
+           hddtemp
+           hdparm
+           i2c-tools
+           inxi
+           iproute
+           iw
+           libva-utils
+           lm-sensors
+           mcelog
+           memtester
+           mesa-utils
+           modem-manager
+           module-init-tools
+           neofetch
+           net-tools
+           network-manager
+           numactl
+           nvme-cli
+           opensc
+           openssl
+           p7zip
+           pciutils
+           perl-data-dumper
+           perl-digest-sha
+           perl-libwww
+           procps
+           psmisc                       ;for pstree
+           rpm
+           sane-backends
+           smartmontools
+           sysstat
+           upower
+           usbutils
+           util-linux
+           wireless-tools
+           vdpauinfo
+           vulkan-tools
+           xdpyinfo
+           xinput
+           xrandr
+           xvinfo))
+    (propagated-inputs (list hwinfo))
+    (home-page "https://linux-hardware.org")
+    (synopsis "Hardware Probe")
+    (description "Hardware Probe is a tool to probe for hardware, check its
+operability and find drivers.")
+    (license (list license:lgpl2.1+ license:bsd-4)))) ;dual-licensed
+
 (define-public hwinfo
   (package
     (name "hwinfo")
diff --git a/gnu/packages/ibus.scm b/gnu/packages/ibus.scm
index edaeb59641..234d4bd75f 100644
--- a/gnu/packages/ibus.scm
+++ b/gnu/packages/ibus.scm
@@ -9,6 +9,8 @@
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Songlin Jiang <hollowman@hollowman.ml>
+;;; Copyright © 2021 Taiju HIGASHI <higashi@taiju.info>
+;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -307,7 +309,7 @@ Chinese pinyin input methods.")
 (define-public ibus-anthy
   (package
     (name "ibus-anthy")
-    (version "1.5.9")
+    (version "1.5.14")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -315,34 +317,41 @@ Chinese pinyin input methods.")
                     version "/ibus-anthy-" version ".tar.gz"))
               (sha256
                (base32
-                "1y8sf837rmp662bv6zakny0xcm7c9c5qda7f9kq9riv9ywpcbw6x"))))
+                "16vd0k8wm13s38869jqs3dnwmjvywgn0snnpyi41m28binhlssf8"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
        ;; Use absolute exec path in the anthy.xml.
        (list (string-append "--libexecdir=" %output "/libexec"))
+       ;; The test suite fails (see:
+       ;; https://github.com/ibus/ibus-anthy/issues/28).
+       #:tests? #f
        #:phases
        (modify-phases %standard-phases
          (add-after 'install 'wrap-programs
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (for-each
-                (lambda (prog)
-                  (wrap-program (string-append out "/libexec/" prog)
-                    `("GUIX_PYTHONPATH" ":" prefix
-                      (,(getenv "GUIX_PYTHONPATH")))
-                    `("GI_TYPELIB_PATH" ":" prefix
-                      (,(getenv "GI_TYPELIB_PATH")
-                       ,(string-append out "/lib/girepository-1.0")))))
-                '("ibus-engine-anthy" "ibus-setup-anthy"))
-               #t))))))
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (for-each (lambda (prog)
+                         (wrap-program (search-input-file
+                                        outputs (string-append "libexec/" prog))
+                           `("GUIX_PYTHONPATH" ":" prefix
+                             (,(getenv "GUIX_PYTHONPATH")))
+                           `("GI_TYPELIB_PATH" ":" prefix
+                             (,(getenv "GI_TYPELIB_PATH")
+                              ,(search-input-directory
+                                inputs "lib/girepository-1.0")))))
+                       '("ibus-engine-anthy" "ibus-setup-anthy")))))))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)))
+     (list gettext-minimal
+           `(,glib "bin")
+           intltool
+           pkg-config
+           python))
     (inputs
-     (list anthy gtk+ ibus gobject-introspection python-pygobject))
+     (list anthy
+           gtk+
+           ibus
+           gobject-introspection
+           python-pygobject))
     (synopsis "Anthy Japanese language input method for IBus")
     (description "IBus-Anthy is an engine for the input bus \"IBus\").  It
 adds the Anthy Japanese language input method to IBus.  Because most graphical
diff --git a/gnu/packages/icu4c.scm b/gnu/packages/icu4c.scm
index 6032da11d1..1be214f67f 100644
--- a/gnu/packages/icu4c.scm
+++ b/gnu/packages/icu4c.scm
@@ -106,6 +106,22 @@ C/C++ part.")
    (license x11)
    (home-page "http://site.icu-project.org/")))
 
+(define-public icu4c-71
+  (package
+    (inherit icu4c)
+    (version "71.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/unicode-org/icu/releases/download/release-"
+                    (string-map (lambda (x) (if (char=? x #\.) #\- x)) version)
+                    "/icu4c-"
+                    (string-map (lambda (x) (if (char=? x #\.) #\_ x)) version)
+                    "-src.tgz"))
+              (sha256
+               (base32
+                "1gqywaqj9jmdwrng9lm6inyqmi5j2cz36db9dcqg3yk13zjyd9v7"))))))
+
 (define-public icu4c-70
   (package
     (inherit icu4c)
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 18db5a1d9e..307b91864c 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -80,6 +80,7 @@
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages photo)
+  #:use-module (gnu packages popt)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
@@ -2233,56 +2234,57 @@ Format) file format decoder and encoder.")
     (license license:lgpl3+)))
 
 (define-public libjxl
-  (package
-    (name "libjxl")
-    (version "0.6.1")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/libjxl/libjxl")
-             (commit (string-append "v" version))
-             (recursive? #t)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "17pvc5zgm9az5hfg2p80325f42w3dqspyb03iakrwg9x4n3vjckx"))
-       (modules '((guix build utils)))
-       (snippet
-        ;; Delete the bundles that will not be used.  libjxl bundles LCMS
-        ;; which is in Guix but there is no option to use the system package.
-        ;; This option will be introduced after version 0.6.1 and then we
-        ;; probably won't need to download the submodules.
-        '(begin
-           (for-each (lambda (directory)
-                       (delete-file-recursively
-                        (string-append "third_party/" directory)))
-                     '("brotli" "googletest" "highway"))))))
-    (build-system cmake-build-system)
-    (arguments
-     `(#:configure-flags
-       (list "-DJPEGXL_FORCE_SYSTEM_GTEST=true"
-             "-DJPEGXL_FORCE_SYSTEM_BROTLI=true"
-             ;; "-DJPEGXL_FORCE_SYSTEM_LCMS2=true" ; next version after 0.6.1
-             "-DJPEGXL_FORCE_SYSTEM_HWY=true")))
-    (native-inputs
-     (list asciidoc doxygen googletest pkg-config python))
-    (inputs
-     (list freeglut
-           giflib
-           google-brotli
-           google-highway
-           imath
-           ;; lcms ; next version after 0.6.1
-           libavif
-           libjpeg-turbo
-           libpng
-           libwebp
-           openexr))
-    (home-page "https://github.com/libjxl/libjxl")
-    (synopsis "JPEG XL image format reference implementation")
-    (description "This package contains a reference implementation of JPEG XL
+  (let ((commit "b7076f1869914eee47b3eae107750f3a3ce43a76")
+        (revision "0"))
+    (package
+      (name "libjxl")
+      (version (git-version "0.6.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/libjxl/libjxl")
+               (commit commit)
+               (recursive? #t)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0jx0hkd2nk15mmnzlk7y7fp644w336il7nsnp5yhf14j8zfaiqz8"))
+         (modules '((guix build utils)))
+         (snippet
+          ;; Delete the bundles that will not be used. libjxl bundles LCMS,
+          ;; which is in Guix, but a newer version is required.
+          '(begin
+             (for-each (lambda (directory)
+                         (delete-file-recursively
+                          (string-append "third_party/" directory)))
+                       '("brotli" "googletest" "highway"))))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:configure-flags
+         (list "-DJPEGXL_FORCE_SYSTEM_GTEST=true"
+               "-DJPEGXL_FORCE_SYSTEM_BROTLI=true"
+               ;; "-DJPEGXL_FORCE_SYSTEM_LCMS2=true" ; requires lcms@2.13
+               "-DJPEGXL_FORCE_SYSTEM_HWY=true")))
+      (native-inputs
+       (list asciidoc doxygen googletest pkg-config python))
+      (inputs
+       (list freeglut
+             gflags
+             giflib
+             google-brotli
+             google-highway
+             imath
+             ;; lcms ; requires lcms@2.13
+             libavif
+             libjpeg-turbo
+             libpng
+             libwebp
+             openexr))
+      (home-page "https://github.com/libjxl/libjxl")
+      (synopsis "JPEG XL image format reference implementation")
+      (description "This package contains a reference implementation of JPEG XL
 (encoder and decoder).")
-    (license license:bsd-3)))
+      (license license:bsd-3))))
 
 (define-public mtpaint
   (package
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 7b0507d93c..16bd0d155a 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -7908,6 +7908,40 @@ Commons CLI supports different types of options:
 This is a part of the Apache Commons Project.")
     (license license:asl2.0)))
 
+(define-public java-commons-text
+  (package
+    (name "java-commons-text")
+    (version "1.9")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/text/source/"
+                                  "commons-text-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "1k99ib2dxlqxb5y94kpzf4ix8xgxz1j3n9kq3ddssqqcccsp5ik2"))))
+    (build-system ant-build-system)
+    (arguments
+     (list #:jar-name "java-commons-text.jar"
+           #:source-dir "src/main/java"
+           #:test-dir "src/test"
+           #:tests? #f                  ; Tests require JUnit5.
+           #:phases
+           #~(modify-phases %standard-phases
+               (replace 'install
+                 (install-from-pom "pom.xml")))))
+    (inputs
+     (list java-commons-io))
+    (propagated-inputs
+     (list java-commons-lang3
+           apache-commons-parent-pom-51))
+    (home-page "https://commons.apache.org/text/")
+    (synopsis "Library focused on algorithms working on strings")
+    (description "Apache Commons Text is a library focused on algorithms
+working on strings.
+
+This is a part of the Apache Commons Project.")
+    (license license:asl2.0)))
+
 (define-public java-commons-codec
   (package
     (name "java-commons-codec")
diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm
index ba81e1c387..b56b63e784 100644
--- a/gnu/packages/kde.scm
+++ b/gnu/packages/kde.scm
@@ -479,7 +479,7 @@ expression library, that is used in Krita.")
 (define-public krita
   (package
     (name "krita")
-    (version "5.0.2")
+    (version "5.0.8")
     (source
      (origin
        (method url-fetch)
@@ -487,7 +487,7 @@ expression library, that is used in Krita.")
              "mirror://kde/stable/krita/" version "/krita-" version
              ".tar.gz"))
        (sha256
-        (base32 "1gww95fyd5r3x2260j2ls7d8fp4rsfxnwdqai2j7fjahxg3iyxg6"))))
+        (base32 "0iaypyv21zxvhr989r9j9nlhx642jc89xphz1qaw9q1y0yjiy7gd"))))
     (build-system qt-build-system)
     (arguments
      `(#:tests? #f
diff --git a/gnu/packages/license.scm b/gnu/packages/license.scm
index cc6b03b412..3146f38c1c 100644
--- a/gnu/packages/license.scm
+++ b/gnu/packages/license.scm
@@ -25,6 +25,7 @@
   #:use-module (gnu packages check)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (guix build-system perl)
@@ -168,13 +169,13 @@ belonging to various licenses.")
 (define-public reuse
   (package
     (name "reuse")
-    (version "0.14.0")
+    (version "1.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "reuse" version))
        (sha256
-        (base32 "1q84qv982y67inqb67iy3r6z7339593w7zdaaxswjqxfrd1by7bp"))))
+        (base32 "1m78q5x19xvhywi1xl0prrag89ihvqiq14lba27rrxl75nz24c6v"))))
     (build-system python-build-system)
     (native-inputs
      (list python-pytest python-setuptools-scm))
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index fe4dc2219b..16a73902a6 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -370,92 +370,92 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
 ;; The "longterm" kernels — the older releases with long-term upstream support.
 ;; Here are the support timelines:
 ;; <https://www.kernel.org/category/releases.html>
-(define-public linux-libre-5.15-version "5.15.47")
+(define-public linux-libre-5.15-version "5.15.49")
 (define-public linux-libre-5.15-gnu-revision "gnu")
 (define deblob-scripts-5.15
   (linux-libre-deblob-scripts
    linux-libre-5.15-version
    linux-libre-5.15-gnu-revision
    (base32 "1n57mz5agvf1d0ggbg080d7hvx8p9y0iqxkq4ypg10a7n96zy7y5")
-   (base32 "17xsn91h0c2d8igpzgmjm1g58nfpihlhgg9wm8zbfyd5g4airs8f")))
+   (base32 "129qlhwdv2mfb85gbvq03kkbdfp73b444rryr4rrbvi0jmq4cp24")))
 (define-public linux-libre-5.15-pristine-source
   (let ((version linux-libre-5.15-version)
-        (hash (base32 "1700js21yimx8rz4bsglszry564l2ycmmcr36rdqspzbmlx5w8wb")))
+        (hash (base32 "1p2r02h2z0j34hpkp3kr4741pr15ii72b94zllravx27pa9phj9j")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.15)))
 
-(define-public linux-libre-5.10-version "5.10.122")
+(define-public linux-libre-5.10-version "5.10.124")
 (define-public linux-libre-5.10-gnu-revision "gnu1")
 (define deblob-scripts-5.10
   (linux-libre-deblob-scripts
    linux-libre-5.10-version
    linux-libre-5.10-gnu-revision
    (base32 "0mw7qn77y9c6wrnw4rjvf75cpm1w6n1aqqhf8cnghcb97p2yxxrf")
-   (base32 "1ryfc8fppigssrzz5lfbqgli49cgs3lmf0yh46lpi2k0j2x30qcc")))
+   (base32 "1981axxswghza3iadp94q54y8w30h9w9vyq4cbjiiv9alvbv0pb8")))
 (define-public linux-libre-5.10-pristine-source
   (let ((version linux-libre-5.10-version)
-        (hash (base32 "0h0gfi3p1dd4p8xxklrl8sc3rv4xd08q7nv0i4m166w8188v62wj")))
+        (hash (base32 "0yz3yw02b6b1sq800r46x5b3dagswb6z4clrfq485c4669sb2ipc")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.10)))
 
-(define-public linux-libre-5.4-version "5.4.198")
+(define-public linux-libre-5.4-version "5.4.200")
 (define-public linux-libre-5.4-gnu-revision "gnu1")
 (define deblob-scripts-5.4
   (linux-libre-deblob-scripts
    linux-libre-5.4-version
    linux-libre-5.4-gnu-revision
    (base32 "1nlgk8ajb5wl3aa96h9a0pb9j5a5wmrbpk63varn557x1d00r7wj")
-   (base32 "05i286d98fm2pdf9724x1dsmfcm7gsd7yyyvxqlpisyj1kx14hda")))
+   (base32 "1vnjbdyssa7dwyjl9kg35alwvf7yh597cl74yr1wy2gk5bc9paw6")))
 (define-public linux-libre-5.4-pristine-source
   (let ((version linux-libre-5.4-version)
-        (hash (base32 "0wvscr5wia2xdiqfxxdwl8kxf1s085qdj5h4423mraj7dh6l0ihh")))
+        (hash (base32 "1f15al9g4cd17fm43im5rqqrbz1cqhz2hq5ycpqvwa02pydprsga")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.4)))
 
-(define-public linux-libre-4.19-version "4.19.247")
+(define-public linux-libre-4.19-version "4.19.248")
 (define-public linux-libre-4.19-gnu-revision "gnu1")
 (define deblob-scripts-4.19
   (linux-libre-deblob-scripts
    linux-libre-4.19-version
    linux-libre-4.19-gnu-revision
    (base32 "06pqv050bkii0hc2v7ymny5264w1bca8db0dp1pw9mfmjg865am5")
-   (base32 "1dnjgx1nmawm9gm0yf15nl80nmg7hy7q2vl3jxjbwj6hlrfv5dmx")))
+   (base32 "00i91lx938nqlgy63hiricqd0fnbbf26vgya9c5lb7m1f4x324im")))
 (define-public linux-libre-4.19-pristine-source
   (let ((version linux-libre-4.19-version)
-        (hash (base32 "136gmsmvgb2nid4by2ld003w06lsr7hgn9ajx0wfziag7pfnjsv2")))
+        (hash (base32 "0cdflfk6l13slw1cawpkhpjzbbnffcbyffrh29p9jg73pdqx23y4")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.19)))
 
-(define-public linux-libre-4.14-version "4.14.283")
+(define-public linux-libre-4.14-version "4.14.284")
 (define-public linux-libre-4.14-gnu-revision "gnu1")
 (define deblob-scripts-4.14
   (linux-libre-deblob-scripts
    linux-libre-4.14-version
    linux-libre-4.14-gnu-revision
    (base32 "02rxvr0gmxb3zfsyyzdmzgfq04gkdkv1cc38md0xfl0mxzdzdfyk")
-   (base32 "1dnjgx1nmawm9gm0yf15nl80nmg7hy7q2vl3jxjbwj6hlrfv5dmx")))
+   (base32 "00i91lx938nqlgy63hiricqd0fnbbf26vgya9c5lb7m1f4x324im")))
 (define-public linux-libre-4.14-pristine-source
   (let ((version linux-libre-4.14-version)
-        (hash (base32 "191gybhnck4mh9yjzwgv1crrbxjc90p12bcif721rbs6xzszmxzh")))
+        (hash (base32 "1f7bidisa6b4ff0mgn66h1nmf94j5mcx4wnkwnd9f49im6hcqllq")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.14)))
 
-(define-public linux-libre-4.9-version "4.9.318")
+(define-public linux-libre-4.9-version "4.9.319")
 (define-public linux-libre-4.9-gnu-revision "gnu1")
 (define deblob-scripts-4.9
   (linux-libre-deblob-scripts
    linux-libre-4.9-version
    linux-libre-4.9-gnu-revision
    (base32 "0nai5m4rbh37qaj1xf2qj7656l2gacfh0847q5d07y22b048fq5n")
-   (base32 "14jyn2yrbm6ayp0bszs4f9jy3p1qkrj5p5gf5c42spr67aa2lv2v")))
+   (base32 "0bib3641dbcqdkx3anna3caxnsg3nw9cnmhcklq0s93g3m57041h")))
 (define-public linux-libre-4.9-pristine-source
   (let ((version linux-libre-4.9-version)
-        (hash (base32 "09czsc0ynyw068yczs9qx4cliqmrh5hvz93c77lhh014wn02pba4")))
+        (hash (base32 "11242bn95k51knm9da7xk7r10vk7iji06wix1cq4g5nzldrfp9sp")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.9)))
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index a88f19e28e..78eca82db6 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -21467,3 +21467,78 @@ in a native template application).")
 
 (define-public ecl-clog
   (sbcl-package->ecl-package sbcl-clog))
+
+(define-public sbcl-nkeymaps
+  (package
+    (name "sbcl-nkeymaps")
+    (version "0.1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/atlas-engineer/nkeymaps")
+             (commit version)))
+       (file-name (git-file-name "cl-nkeymaps" version))
+       (sha256
+        (base32 "0shkklc3aiq44hyv1q6fahw4vjcr0iw4zsmxbhmxqh04r7185ddf"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs
+     (list sbcl-alexandria
+           sbcl-cl-str
+           sbcl-fset
+           sbcl-trivial-package-local-nicknames))
+    (native-inputs
+     (list sbcl-prove))
+    (home-page "https://github.com/atlas-engineer/nkeymaps")
+    (synopsis "Keymap facility for Common Lisp")
+    (description
+     "This is a keymap facility for Common Lisp inspired by Emacsy
+(keymap.scm) which is inspired by Emacs.
+@itemize
+
+@item Support prefix keys to other keymaps.  For instance, if you prefix
+my-mode-map with C-c, then all bindings for my-mode will be accessible after
+pressing C-c.
+
+@item List all bindings matching a given prefix.  (Also known as which-key in
+Emacs.)
+
+@item List the bindings associated to a command.
+
+@item Support multiple inheritance.
+
+@item Support keycode.
+
+@item Validate keyspec at compile time.
+
+@item define-key can set multiple bindings in a single call.
+
+@item Support multiple scheme to make it easy to switch between, say,
+Emacs-style and VI-style bindings.  This orthogonality to keymaps composes
+better than having multiple keymaps: changing scheme applies to the entire
+program, which is easier than looping through all keymaps to change them.
+
+@item Translate keyspecs as a fallback.  For instance if shift-a is not bound,
+check A.
+
+@item Behaviour can be customized with global parameters such as
+*print-shortcut*.
+
+@item The compose function can merge multiple keymaps together.
+
+@item Support multiple arguments when that makes sense (e.g. multiple keymaps
+for lookup-key).
+
+@item Key remapping à-la Emacs.
+
+@item Typed keymaps, i.e. keymaps where bound values can only be of a given
+type.  This is convenient to catch typos, for instance when binding 'FOO
+instead of #'FOO.
+@end itemize")
+    (license license:bsd-3)))
+
+(define-public cl-nkeymaps
+  (sbcl-package->cl-source-package sbcl-nkeymaps))
+
+(define-public ecl-nkeymaps
+  (sbcl-package->ecl-package sbcl-nkeymaps))
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index c26da670ac..3c43f8fa4c 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -1165,7 +1165,7 @@ including a built-in database engine and a GUI system.")
 (define-public janet
   (package
     (name "janet")
-    (version "1.21.1")
+    (version "1.23.0")
     (source
      (origin
        (method git-fetch)
@@ -1174,7 +1174,7 @@ including a built-in database engine and a GUI system.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1c8lrwg518182rnz47mahv5r9jd3haj6ysigk0bkv8lpb0d2b760"))))
+        (base32 "1qfahq1203kv5jxd0im7nxm3yy1p9k1wc0pk34b5h2sfships1hm"))))
     (build-system gnu-build-system)
     (arguments
      (list #:make-flags
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 32625385ff..6e12c3ebde 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -878,7 +878,22 @@ of programming tools as well as libraries with equivalent functionality.")
        (patches (search-patches
                  "llvm-9-fix-bitcast-miscompilation.patch"
                  "llvm-9-fix-scev-miscompilation.patch"
-                 "llvm-9-fix-lpad-miscompilation.patch"))))))
+                 "llvm-9-fix-lpad-miscompilation.patch"))))
+    (arguments
+     (if (target-riscv64?)
+       (substitute-keyword-arguments (package-arguments llvm-10)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'patch-dsymutil-link
+               (lambda _
+                 (substitute* "tools/dsymutil/CMakeLists.txt"
+                   (("endif\\(APPLE\\)")
+                    (string-append
+                      "endif(APPLE)\n\n"
+                      "if (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES \"riscv64\")\n"
+                      "  target_link_libraries(dsymutil PRIVATE atomic)\n"
+                      "endif()"))))))))
+       (package-arguments llvm-10)))))
 
 (define-public clang-runtime-9
   (clang-runtime-from-llvm
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 15a53a337d..a03bf2fa05 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -138,6 +138,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
@@ -1782,7 +1783,7 @@ delivery.")
 (define-public exim
   (package
     (name "exim")
-    (version "4.95")
+    (version "4.96")
     (source
      (origin
        (method url-fetch)
@@ -1796,86 +1797,84 @@ delivery.")
                     (string-append "https://ftp.exim.org/pub/exim/exim4/old/"
                                    file-name))))
        (sha256
-        (base32 "0rzi0kc3qiiaw8vnv5qrpwdvvh4sr5chns026xy99spjzx9vd76c"))))
+        (base32 "18ziihkpa23lybm7m2l9wp2farxw0bd5ng7xm9ylgcrfgf95d6i9"))))
     (build-system gnu-build-system)
-    (inputs
-     `(("bdb" ,bdb-5.3) ; ‘#error Version 6 and later BDB API is not supported’
-       ("gnutls" ,gnutls/dane)
-       ("gzip" ,gzip)
-       ("bzip2" ,bzip2)
-       ("xz" ,xz)
-       ("perl" ,perl)
-       ("libnsl" ,libnsl)
-       ("libxt" ,libxt)
-       ("libxaw" ,libxaw)))
-    (native-inputs
-     (list `(,pcre "bin") perl pkg-config))
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           ;; We'd use #:make-flags but the top-level Makefile calls others
-           ;; recursively, so just set all variables this way.
-           (lambda* (#:key outputs inputs #:allow-other-keys)
-             (substitute* '("Makefile" "OS/Makefile-Default")
-               (("(RM_COMMAND=).*" all var)
-                (string-append var "rm\n")))
-             (copy-file "src/EDITME" "Local/Makefile")
-             (copy-file "exim_monitor/EDITME" "Local/eximon.conf")
-             (let ((out (assoc-ref outputs "out"))
-                   (gzip (assoc-ref inputs "gzip"))
-                   (bzip2 (assoc-ref inputs "bzip2"))
-                   (xz (assoc-ref inputs "xz")))
-               (substitute* '("Local/Makefile")
-                 (("(BIN_DIRECTORY=).*" all var)
-                  (string-append var out "/bin\n"))
-                 (("(CONFIGURE_FILE=).*" all var)
-                  (string-append var out "/etc/exim.conf\n"))
-                 (("(EXIM_USER=).*" all var)
-                  (string-append var "nobody\n"))
-                 (("(FIXED_NEVER_USERS=).*" all var)
-                  (string-append var "\n")) ; XXX no root in build environment
-                 (("(COMPRESS_COMMAND=).*" all var)
-                  (string-append var gzip "/bin/gzip\n"))
-                 (("(ZCAT_COMMAND=).*" all var)
-                  (string-append var gzip "/bin/zcat\n"))
-                 (("# (USE_GNUTLS(|_PC)=.*)" all line)
-                  (string-append line "\n"))
-                 (("# (AUTH_CRAM_MD5=yes)" all line) line)
-                 (("# (AUTH_DOVECOT=yes)" all line) line)
-                 (("# (AUTH_EXTERNAL=yes)" all line) line)
-                 (("# (AUTH_PLAINTEXT=yes)" all line) line)
-                 (("# (AUTH_SPA=yes)" all line) line)
-                 (("# (AUTH_TLS=yes)" all line) line))
-               ;; This file has hard-coded relative file names for tools despite
-               ;; the zcat configuration above.
-               (substitute* '("src/exigrep.src")
-                 (("'zcat'") (string-append "'" gzip "/bin/zcat'"))
-                 (("'bzcat'") (string-append "'" bzip2 "/bin/bzcat'"))
-                 (("'xzcat'") (string-append "'" xz "/bin/xzcat'"))
-                 (("'lzma'") (string-append "'" xz "/bin/lzma'"))))))
-         (add-before 'build 'fix-sh-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* '("scripts/lookups-Makefile" "scripts/reversion")
-               (("SHELL=/bin/sh") "SHELL=sh"))
-             (substitute* '("scripts/Configure-config.h")
-               (("\\| /bin/sh") "| sh"))
-             (let ((bash (assoc-ref inputs "bash")))
-               (substitute* '("scripts/Configure-eximon")
-                 (("#!/bin/sh") (string-append "#!" bash "/bin/sh"))))))
-         (add-before 'build 'build-reproducibly
-           (lambda _
-             ;; The ‘compilation number’ is incremented for every build from the
-             ;; same source tree.  It appears to vary over different (parallel?)
-             ;; builds.  Make it a ‘constant number’ instead.
-             (substitute* "src/version.c"
-               (("#include \"cnumber.h\"") "1")))))
-       #:make-flags
-       (list (string-append "CC=" ,(cc-for-target))
-             "INSTALL_ARG=-no_chown")
-       ;; No 'check' target.  There is a test suite in test/, which assumes that
-       ;; certain build options were (not) used and that it can freely ‘sudo’.
-       #:tests? #f))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'configure
+                 ;; We'd use #:make-flags but the top-level Makefile calls
+                 ;; others recursively, so just set all variables this way.
+                 (lambda* (#:key outputs inputs #:allow-other-keys)
+                   (substitute* (list "Makefile" "OS/Makefile-Default")
+                     (("(RM_COMMAND=).*" all var)
+                      (string-append var "rm\n")))
+                   (copy-file "src/EDITME" "Local/Makefile")
+                   (copy-file "exim_monitor/EDITME" "Local/eximon.conf")
+                   (let ((out (assoc-ref outputs "out")))
+                     (substitute* "Local/Makefile"
+                       (("(BIN_DIRECTORY=).*" all var)
+                        (string-append var out "/bin\n"))
+                       (("(CONFIGURE_FILE=).*" all var)
+                        (string-append var out "/etc/exim.conf\n"))
+                       (("(EXIM_USER=).*" all var)
+                        (string-append var "nobody\n"))
+                       (("(FIXED_NEVER_USERS=).*" all var)
+                        (string-append var "\n")) ; no root in build environment
+                       (("(COMPRESS_COMMAND=).*" all var)
+                        (string-append var (search-input-file inputs "bin/gzip")
+                                       "\n"))
+                       (("(ZCAT_COMMAND=).*" all var)
+                        (string-append var (search-input-file inputs "bin/zcat")
+                                       "\n"))
+                       (("# (USE_GNUTLS(|_PC)=.*)" all line)
+                        (string-append line "\n"))
+                       (("# (AUTH_CRAM_MD5=yes)" all line) line)
+                       (("# (AUTH_DOVECOT=yes)" all line) line)
+                       (("# (AUTH_EXTERNAL=yes)" all line) line)
+                       (("# (AUTH_PLAINTEXT=yes)" all line) line)
+                       (("# (AUTH_SPA=yes)" all line) line)
+                       (("# (AUTH_TLS=yes)" all line) line))
+                     ;; This file has hard-coded relative file names for tools
+                     ;; despite the zcat configuration above.
+                     (substitute* "src/exigrep.src"
+                       (("'(bzcat|xzcat|zcat|lzma)'" _ command)
+                        (format #f "'~a'"
+                                (search-input-file
+                                 inputs (string-append "bin/" command))))))))
+               (add-before 'build 'fix-sh-file-names
+                 (lambda _
+                   (substitute* (list "scripts/lookups-Makefile"
+                                      "scripts/reversion")
+                     (("SHELL=/bin/sh") "SHELL=sh"))
+                   (substitute* "scripts/Configure-config.h"
+                     (("\\| /bin/sh") "| sh"))
+                   (patch-shebang "scripts/Configure-eximon")))
+               (add-before 'build 'build-reproducibly
+                 (lambda _
+                   ;; The ‘compilation number’ increments on every build in the
+                   ;; same source tree and varies across different (parallel?)
+                   ;; builds.  Make it a ‘constant number’ instead.
+                   (substitute* "src/version.c"
+                     (("#include \"cnumber.h\"") "1")))))
+           #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   "INSTALL_ARG=-no_chown")
+           ;; No ‘check’ target.  The ‘test/’ suite assumes that particular
+           ;; build options were (not) used and that it can freely ‘sudo’.
+           #:tests? #f))
+    (native-inputs
+     (list pcre2 perl pkg-config))
+    (inputs
+     (list bdb-5.3     ; ‘#error Version 6 and later BDB API is not supported’
+           bzip2
+           gnutls/dane
+           gzip
+           libnsl
+           libxaw
+           libxt
+           perl
+           xz))
     (home-page "https://www.exim.org/")
     (synopsis
      "Message Transfer Agent (MTA) developed at the University of Cambridge")
@@ -1885,6 +1884,7 @@ Cambridge for use on Unix systems connected to the Internet.  In style it is
 similar to Smail 3, but its facilities are more general.  There is a great
 deal of flexibility in the way mail can be routed, and there are extensive
 facilities for checking incoming mail.")
+    (properties '((lint-hidden-cve . ("CVE-2020-28017"))))
     (license license:gpl2+)))
 
 (define-public dovecot
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 7259c046ef..1289a3cbbf 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -5524,9 +5524,11 @@ set.")
                                      texlive-capt-of
                                      texlive-caption
                                      texlive-cm
+                                     texlive-courier
                                      texlive-etoolbox
                                      texlive-fancyhdr
                                      texlive-fancyvrb
+                                     texlive-helvetic
                                      texlive-jknappen
                                      texlive-sectsty
                                      texlive-tex-gyre
diff --git a/gnu/packages/maven-parent-pom.scm b/gnu/packages/maven-parent-pom.scm
index cf48be86a2..660790b019 100644
--- a/gnu/packages/maven-parent-pom.scm
+++ b/gnu/packages/maven-parent-pom.scm
@@ -143,6 +143,11 @@
     "50" "0ki8px35dan51ashblpw6rdl27c2fq62slazhslhq3lr4fwlpvxs"
     apache-parent-pom-21))
 
+(define-public apache-commons-parent-pom-51
+  (make-apache-commons-parent-pom
+   "51" "05najrpys26jymla2p5jdz4mf4fjp525h6mnr0jfx55lp03xi939"
+   apache-parent-pom-23))
+
 (define-public apache-commons-parent-pom-52
   (make-apache-commons-parent-pom
     "52" "0fb6id9cs9944fjlirjc07bf234bwi96i642px09m9nrfj338n5d"
diff --git a/gnu/packages/maven.scm b/gnu/packages/maven.scm
index e5831ee614..f84f1ae177 100644
--- a/gnu/packages/maven.scm
+++ b/gnu/packages/maven.scm
@@ -3938,3 +3938,30 @@ method and a end of tag by @code{xxxx_()} method.")
     (description "@samp{Doxia} is a content generation framework that provides
 powerful techniques for generating static and dynamic content, supporting a
 variety of markup languages.")))
+
+(define-public maven-doxia-core
+  (package
+    (inherit maven-doxia-sink-api)
+    (name "maven-doxia-core")
+    (arguments
+     `(#:jar-name "doxia-core.jar"
+       #:source-dir "doxia-core/src/main/java"
+       #:test-dir "doxia-core/src/test/java"
+       #:tests? #f ; tests require JUnit5
+       #:phases (modify-phases %standard-phases
+                  (replace 'install
+                    (install-from-pom "doxia-core/pom.xml")))))
+    (propagated-inputs (list maven-doxia-parent-pom
+                             maven-doxia-sink-api
+                             java-slf4j-api
+                             java-javax-inject
+                             java-plexus-utils
+                             java-eclipse-sisu-plexus
+                             java-commons-text))
+    (synopsis "Doxia core classes and interfaces")
+    (description
+     "Doxia is a content generation framework that provides powerful
+techniques for generating static and dynamic content, supporting a variety of
+markup languages.
+
+This package contains Doxia core classes and interfaces.")))
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 4038ef0e49..f1c5e0796c 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -1146,14 +1146,14 @@ simultaneously and therefore appear under the same nickname on IRC.")
 (define-public python-nbxmpp
   (package
     (name "python-nbxmpp")
-    (version "2.0.4")
+    (version "3.1.0")
     (source
      (origin
        (method url-fetch)
        (uri
         (pypi-uri "nbxmpp" version))
        (sha256
-        (base32 "1s2phiipq7ks8vrd93p96dzd5wgmgg8q9h2rxsnh2gg7iy06gj9c"))))
+        (base32 "0c32090gr1fiy7hkn73dcj4ad9gfdpks8hivl1dl8bql01jsfdnj"))))
     (build-system python-build-system)
     (native-inputs
      (list `(,glib "bin")))
@@ -1175,7 +1175,7 @@ of xmpppy.")
 (define-public gajim
   (package
     (name "gajim")
-    (version "1.3.3")
+    (version "1.4.5")
     (source
      (origin
        (method url-fetch)
@@ -1184,7 +1184,7 @@ of xmpppy.")
                        (version-major+minor version)
                        "/gajim-" version ".tar.gz"))
        (sha256
-        (base32 "1337qkpcv7j0fgws9scnk82mn2l7s17060vmrbh3ihinmxmbxg6x"))
+        (base32 "08a7kkc8vzjr5jxjkb96vs1bqnrgmmmcc5spy308z0zfxbpamsin"))
        (patches (search-patches "gajim-honour-GAJIM_PLUGIN_PATH.patch"))))
     (build-system python-build-system)
     (arguments
@@ -1198,13 +1198,6 @@ of xmpppy.")
         (guix build utils))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'disable-failing-tests
-           (lambda _
-             ;; XXX Gajim builds fine on some (my) machines but fails elsewhere:
-             ;; ModuleNotFoundError: No module named 'gajim.gui.emoji_data'
-             ;; https://dev.gajim.org/gajim/gajim/-/issues/10478
-             (delete-file "test/lib/gajim_mocks.py")
-             (delete-file "test/unit/test_gui_interface.py")))
          (replace 'check
            (lambda _
              ;; Tests require a running X server.
@@ -1232,7 +1225,7 @@ of xmpppy.")
                     (wrap-program file
                       `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
                       `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))
-                '("gajim" "gajim-remote" "gajim-history-manager"))))))))
+                '("gajim" "gajim-remote"))))))))
     (native-search-paths
      (list
       (search-path-specification
@@ -1274,6 +1267,7 @@ of xmpppy.")
        ("gstreamer" ,gstreamer)
        ("gst-plugins-base" ,gst-plugins-base)
        ("gtk+" ,gtk+)
+       ("gtksourceview" ,gtksourceview)
        ("gupnp-igd" ,gupnp-igd)
        ("libnice" ,libnice)
        ("libsecret" ,libsecret)
@@ -1282,6 +1276,7 @@ of xmpppy.")
        ("network-manager" ,network-manager)
        ("python-css-parser" ,python-css-parser)
        ("python-dbus" ,python-dbus)
+       ("python-gssapi" ,python-gssapi)
        ("python-keyring" ,python-keyring)
        ("python-nbxmpp" ,python-nbxmpp)
        ("python-packaging" ,python-packaging)
@@ -1302,7 +1297,7 @@ and OpenPGP) and available in 29 languages.")
 (define-public gajim-omemo
   (package
     (name "gajim-omemo")
-    (version "2.7.14")
+    (version "2.8.13")
     (source
      (origin
        (method url-fetch/zipbomb)
@@ -1311,7 +1306,7 @@ and OpenPGP) and available in 29 languages.")
          "https://ftp.gajim.org/plugins_releases/omemo_"
          version ".zip"))
        (sha256
-        (base32 "0jmyjqfc4vimvq5vdqsvz25dsij6bh92alml8qnn59p5farnf86v"))))
+        (base32 "10ym9abvlfpi6llpsqc0691xdnqp9hrwnl361fnwb1nx2zw6bjbd"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -1338,7 +1333,7 @@ multi-client end-to-end encryption.")
 (define-public gajim-openpgp
   (package
     (name "gajim-openpgp")
-    (version "1.3.9")
+    (version "1.4.8")
     (source
      (origin
        (method url-fetch/zipbomb)
@@ -1347,7 +1342,7 @@ multi-client end-to-end encryption.")
          "https://ftp.gajim.org/plugins_releases/openpgp_"
          version ".zip"))
        (sha256
-        (base32 "0fzvvrap1hmj4rbrcjs6cs5c9l9c0795bgw9vxxxk915n6j91m23"))))
+        (base32 "05kgcrxalxsc034kq1i6nriqjb6sdlgf3yb2mani8vk9p00v3j90"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
diff --git a/gnu/packages/monitoring.scm b/gnu/packages/monitoring.scm
index 2e04c32f0a..1544efb614 100644
--- a/gnu/packages/monitoring.scm
+++ b/gnu/packages/monitoring.scm
@@ -61,6 +61,7 @@
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages rrdtool)
+  #:use-module (gnu packages sphinx)
   #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages web))
@@ -164,7 +165,7 @@ etc. via a Web interface.  Features include:
 (define-public zabbix-agentd
   (package
     (name "zabbix-agentd")
-    (version "6.0.3")
+    (version "6.0.5")
     (source
      (origin
        (method url-fetch)
@@ -172,7 +173,7 @@ etc. via a Web interface.  Features include:
              "https://cdn.zabbix.com/zabbix/sources/stable/"
              (version-major+minor version) "/zabbix-" version ".tar.gz"))
        (sha256
-        (base32 "0hihi94dk235cn4rwhrzm496dlihk0pv8785y2jyqi17jhl566g6"))
+        (base32 "1hmx6dgsag84dpv867p12bkln141nypgkp6zhipxbnn5xxip1sry"))
        (modules '((guix build utils)))
        (snippet
         '(substitute* '("src/zabbix_proxy/proxy.c"
@@ -252,7 +253,7 @@ solution (server-side)")))
 (define-public zabbix-cli
   (package
     (name "zabbix-cli")
-    (version "2.2.1")
+    (version "2.3.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -261,23 +262,40 @@ solution (server-side)")))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0wzmrn8p09ksqhhgawr179c4az7p2liqr0l4q2dra62bxliawyqz"))))
+                "1p8xkq3mxg476srwrgqax76vjzji0rjx32njmgnpa409vaqrbj5p"))))
     (build-system python-build-system)
     (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'use-absolute-ncurses
-                    (lambda _
-                      (substitute* "bin/zabbix-cli"
-                        (("'clear'")
-                         (string-append "'" (which "clear") "'")))))
-                  (add-after 'unpack 'patch-setup.py
-                    (lambda _
-                      ;; Install data_files to $out/share instead of /usr/share.
-                      (substitute* "setup.py"
-                        (("/usr/") "")))))))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'use-absolute-ncurses
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (let ((clear (search-input-file inputs "bin/clear")))
+                     (substitute* "bin/zabbix-cli"
+                       (("'clear'")
+                        (string-append "'" clear "'"))))))
+               (add-after 'unpack 'patch-setup.py
+                 (lambda _
+                   ;; Install data_files to $out/share instead of /usr/share.
+                   (substitute* "setup.py"
+                     (("/usr/") ""))))
+               (add-after 'build 'build-docs
+                 (lambda _
+                   (invoke "make" "-C" "docs" "manual")
+                   (invoke "make" "-C" "docs" "singlehtml")))
+               (add-after 'install 'install-docs
+                 (lambda _
+                   (install-file "docs/_build/man/zabbix-cli.1"
+                                 (string-append #$output "/share/man/man1"))
+                   (copy-recursively "docs/_build/singlehtml"
+                                     (string-append #$output "/share/doc/"
+                                                    #$name "/html"))))
+               (replace 'check
+                 (lambda _
+                   (invoke "pytest" "-vv"))))))
+    (native-inputs
+     (list python-pytest python-sphinx))
     (inputs
-     `(("clear" ,ncurses)
-       ("python-requests" ,python-requests)))
+     (list ncurses python-requests))
     (home-page "https://github.com/unioslo/zabbix-cli")
     (synopsis "Command-line interface to Zabbix")
     (description
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 60cb176320..ce0fb2d500 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -6769,3 +6769,61 @@ local music library, along with flexible search capabilities.  It includes
 a tag editor, which can also be invoked as a standalone program, and further
 supports streaming audio and feeds (such as podcasts).")
     (license license:gpl2+)))
+
+(define-public orca-music
+  (let ((commit "e55b8fdc3606341345938d5b24b2d9d9326afdb5") (revision "1"))
+    (package
+      (name "orca-music")
+      ;; No upstream version numbers; Using commit instead.
+      (version (git-version "0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://git.sr.ht/~rabbits/orca")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0xf5i9vd2wyrhvfp68j5gvd40iqm9rf6g1p74jan7d875g6kpppq"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:tests? #f
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure) ;No autoconf
+           (replace 'build
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (setenv "CC"
+                       ,(cc-for-target))
+               (invoke "make" "release")))
+           (add-after 'build 'rename-orca
+             (lambda* _
+               (invoke "mv" "-v" "./build/orca" "./build/orca-music")))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out")) (dest-bin (string-append
+                                                                 out "/bin"))
+                      (share (string-append out "/share"))
+                      (dest-examples (string-append share "/examples"))
+                      (dest-doc (string-append share "/doc")))
+                 (install-file "./build/orca-music" dest-bin)
+                 (copy-recursively "./examples" dest-examples)
+                 (install-file "./README.md" dest-doc)))))))
+      (inputs (list ncurses portmidi alsa-plugins
+                    `(,alsa-plugins "pulseaudio")))
+      (native-inputs (list pkg-config))
+      (native-search-paths
+       (list (search-path-specification
+              (variable "TERMINFO_DIRS")
+              (files '("share/terminfo")))))
+      (synopsis "Musical live-coding environment")
+      (description
+       "This is the C implementation of the ORCΛ language and terminal
+livecoding environment.  It's designed to be power efficient.  It can handle
+large files, even if your terminal is small.
+
+Orca is not a synthesizer, but a flexible livecoding environment capable of
+sending MIDI, OSC, and UDP to your audio/visual interfaces like Ableton,
+Renoise, VCV Rack, or SuperCollider.")
+      (home-page "https://100r.co/site/orca.html")
+      (license license:expat))))
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 8476da0df9..7bfdb1fc34 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -50,6 +50,7 @@
 ;;; Copyright © 2022 Simon South <simon@simonsouth.net>
 ;;; Copyright © 2022 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2022 Petr Hodina <phodina@protonmail.com>
+;;; Copyright © 2022 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -184,6 +185,33 @@ oriented, reliable transport protocol with direct support for multihoming that
 runs on top of IP or UDP, and supports both v4 and v6 versions.")
     (license license:bsd-3)))
 
+(define-public arp-scan
+  (package
+    (name "arp-scan")
+    (version "1.9.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/royhills/arp-scan/")
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1mf7a4f9vzvnkiavc87aqyciswggsb4fpy7j05jxnvjyyxv3l7gp"))))
+    (build-system gnu-build-system)
+    (inputs
+     (list libpcap))
+    (native-inputs
+     (list autoconf automake libtool pkg-config))
+    (propagated-inputs
+     (list perl-libwww))
+    (home-page "https://github.com/royhills/arp-scan")
+    (synopsis "Discover and fingerprint IP hosts on the local network using ARP")
+    (description "Arp-scan is a tool that uses ARP to discover and fingerprint
+IP hosts on the local network.")
+    (license license:gpl3+)))
+
 (define-public axel
   (package
     (name "axel")
@@ -216,33 +244,37 @@ protocols.")
 (define-public libcamera
   (package
     (name "libcamera")
-    (version "0.0.0")
+    (version "0.0.0-1")
     (source
      (origin
        (method git-fetch)
        (uri
         (git-reference
          (url "git://linuxtv.org/libcamera.git")
-         (commit "74c8b508338ccdd0780aa1e067a1e8fcb9ee326b")))
+         (commit "10be87fa7c3bfb097b21ca3d469c67e40c333f7e")))
        (file-name
         (git-file-name name version))
        (sha256
-        (base32 "0d9lp8b9gyxh4jwfh55kp8zl1xyyg32z684v3y29378zpksncss1"))))
+        (base32 "0qgirhlalmk9f9v6piwz50dr2asb64rvbb9zb1vix7y9zh7m11by"))))
     (build-system meson-build-system)
     (outputs '("out" "doc"))
     (arguments
      `(#:glib-or-gtk? #t     ; To wrap binaries and/or compile schemas
        #:configure-flags
        (list
-        "-Dv4l2=true")
+        "-Dv4l2=true"
+        ;; XXX: Requires bundled pybind11.
+        "-Dpycamera=disabled")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'disable-failing-tests
            (lambda _
              (substitute* "test/meson.build"
                (("\\['list-cameras',                    'list-cameras.cpp'\\],")
-                ""))
-             #t))
+                "")
+               ;; TODO: Why do the gstreamer tests fail.
+               (("^subdir\\('gstreamer'\\)")
+                ""))))
          (add-after 'install 'move-doc
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -250,24 +282,26 @@ protocols.")
                (mkdir-p (string-append doc "/share"))
                (rename-file
                 (string-append out "/share/doc")
-                (string-append doc "/share/doc"))
-               #t))))))
+                (string-append doc "/share/doc"))))))))
     (native-inputs
-     `(("dot" ,graphviz)
-       ("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("sphinx" ,python-sphinx)
-       ("yaml" ,python-pyyaml)))
+     (list graphviz                     ;for 'dot'
+           doxygen
+           pkg-config
+           python-wrapper
+           python-sphinx
+           python-pyyaml))
     (inputs
-     `(("boost" ,boost)
-       ("glib" ,glib)
-       ("gstreamer" ,gst-plugins-base)
-       ("gnutls" ,gnutls)
-       ("libtiff" ,libtiff)
-       ("openssl" ,openssl)
-       ("qt5" ,qtbase-5)
-       ("udev" ,eudev)))
+     (list boost
+           eudev
+           glib
+           gst-plugins-base
+           gnutls
+           libtiff
+           libyaml
+           openssl
+           python-jinja2
+           python-ply
+           qtbase-5))
     (synopsis "Camera stack and framework")
     (description "LibCamera is a complex camera support library for GNU+Linux,
 Android, and ChromeOS.")
@@ -1744,8 +1778,8 @@ handling network namespaces in Go.")
 (define-public go-sctp
   ;; docker-libnetwork-cmd-proxy requires this exact commit.
   ;; This commit is mentioned in docker-libnetwork-cmd-proxy's vendor.conf.
-  (let ((commit "6e2cb1366111dcf547c13531e3a263a067715847")
-        (revision "2"))
+  (let ((commit "f2269e66cdee387bd321445d5d300893449805be")
+        (revision "3"))
     (package
       (name "go-sctp")
       (version (git-version "0.0.0" revision commit))
@@ -1757,7 +1791,7 @@ handling network namespaces in Go.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1ba90fmpdwxa1ba4hrsjhi3gfy3pwmz7x8amw1p5dc9p5a7nnqrb"))))
+                  "04463rnn9y9psp11ac5di6wrwxlhymw5h9hfhhhnxqwla90ikp0g"))))
       (build-system go-build-system)
       (arguments
        `(#:tests? #f    ; Test suite is flakey.
diff --git a/gnu/packages/openstack.scm b/gnu/packages/openstack.scm
index 4c28bb9283..0721d27dbf 100644
--- a/gnu/packages/openstack.scm
+++ b/gnu/packages/openstack.scm
@@ -49,14 +49,14 @@
 (define-public python-bandit
   (package
     (name "python-bandit")
-    (version "1.6.2")
+    (version "1.7.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "bandit" version))
        (sha256
         (base32
-         "0rb034c99pyhb4a60z7f2kz40cjydhm8m9v2blaal1rmhlam7rs1"))))
+         "1lkvf5ffdqa9504mm5fd9vvq0q5wdyqbkm32i4rswys1fg2shqrd"))))
     (build-system python-build-system)
     (arguments
      ;; The tests are disabled to avoid a circular dependency with
@@ -77,25 +77,25 @@ scanning all the files it generates a report.")
 (define-public python-cliff
   (package
     (name "python-cliff")
-    (version "3.5.0")
+    (version "3.10.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cliff" version))
        (sha256
         (base32
-         "0n8pzr0mnn9lq2mykds69ij2xrn0fsirh4ndmkx0mzydbx5niysv"))))
+         "180059m5ky3hlw2m9fszh4h2ykja8zl7ql5dsxjijiv47hzywnh4"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f))
     (native-inputs
      (list python-pbr))
     (propagated-inputs
-     (list python-cmd2
+     (list python-autopage
+           python-cmd2
            python-prettytable
            python-pyparsing
            python-pyyaml
-           python-bandit
            python-stevedore))
     (home-page "https://opendev.org/openstack/cliff")
     (synopsis "Framework for building command line programs")
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 43ca40599f..2f7bd1f188 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -1342,8 +1342,8 @@ environments.")
     (license (list license:gpl3+ license:agpl3+ license:silofl1.1))))
 
 (define-public guix-build-coordinator
-  (let ((commit "3de63f1f66d5f0eb157ee60bc864404f386ee2b0")
-        (revision "53"))
+  (let ((commit "07b0b61d21a5ad2637271869414fa47eea34a8d9")
+        (revision "54"))
     (package
       (name "guix-build-coordinator")
       (version (git-version "0" revision commit))
@@ -1354,7 +1354,7 @@ environments.")
                       (commit commit)))
                 (sha256
                  (base32
-                  "1ld761c48ad925p3kisnjvad50p6hyk77z0yjcr29681n73xzzz4"))
+                  "09zxwlkxngs6hx3hfd1gzrf99c07jdr0lslcms2nn8x77bdfp9i0"))
                 (file-name (string-append name "-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
@@ -1650,8 +1650,8 @@ in an isolated environment, in separate namespaces.")
     (license license:gpl3+)))
 
 (define-public nar-herder
-  (let ((commit "042f49e5fb52ea844ed5d29c17b26fbc8ad49f0e")
-        (revision "8"))
+  (let ((commit "5acfcc0a9d99d78a167c365534aa5bf592f5625e")
+        (revision "9"))
     (package
       (name "nar-herder")
       (version (git-version "0" revision commit))
@@ -1662,7 +1662,7 @@ in an isolated environment, in separate namespaces.")
                       (commit commit)))
                 (sha256
                  (base32
-                  "1i9vwjdvkchwndjikqq3j73x0mvp3ny63s62ixql70yhpdgz5l69"))
+                  "1mxdkay3l1la7b6m0455s8cansd6qcdhv0k231aik0ayhbck8kby"))
                 (file-name (string-append name "-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
@@ -1693,6 +1693,7 @@ in an isolated environment, in separate namespaces.")
                                          "guile-gcrypt"
                                          "guix"
                                          "guile-lib"
+                                         "guile-lzlib"
                                          "guile-prometheus"
                                          "guile-sqlite3"
                                          "gnutls"
@@ -1732,6 +1733,7 @@ in an isolated environment, in separate namespaces.")
              guile-fibers-1.1
              guile-prometheus
              guile-lib
+             guile-lzlib
              guile-sqlite3))
       (inputs
        (list bash-minimal
@@ -1743,6 +1745,7 @@ in an isolated environment, in separate namespaces.")
              guile-fibers-1.1
              guile-prometheus
              guile-lib
+             guile-lzlib
              guile-sqlite3
              gnutls))
       (home-page "https://git.cbaines.net/guix/nar-herder")
diff --git a/gnu/packages/patches/cmh-support-fplll.patch b/gnu/packages/patches/cmh-support-fplll.patch
new file mode 100644
index 0000000000..fae04f456b
--- /dev/null
+++ b/gnu/packages/patches/cmh-support-fplll.patch
@@ -0,0 +1,27 @@
+Patch from the CMH git, after the 1.1.0 release.
+
+From 2328c819317dda2171217002268f57c74cedc476 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Emmanuel=20Thom=C3=A9?= <Emmanuel.Thome@inria.fr>
+Date: Tue, 7 Jun 2022 12:17:05 -0700
+Subject: [PATCH] patch suggested by @x-YVicto
+
+---
+ src/lll.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/lll.cpp b/src/lll.cpp
+index 83dab07..f005931 100644
+--- a/src/lll.cpp
++++ b/src/lll.cpp
+@@ -37,7 +37,7 @@
+ #ifdef HAVE_FPLLL
+ static void lll_fplll (mpz_t *v, mpz_t **M, const int m, const int n)
+ {
+-   ZZ_mat <mpz_t> Mp (m, n);
++   fplll::ZZ_mat <mpz_t> Mp (m, n);
+    int i, j;
+ 
+    for (i = 0; i < m; i++)
+-- 
+2.36.1
+
diff --git a/gnu/packages/patches/docker-fix-tests.patch b/gnu/packages/patches/docker-fix-tests.patch
deleted file mode 100644
index 3e3e318e25..0000000000
--- a/gnu/packages/patches/docker-fix-tests.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-Author: Danny Milosavljevic <dannym@scratchpost.org>
-The socket name ended up too long inside the container.
-Use a shorter one.
---- a/pkg/authorization/authz_unix_test.go	2019-01-10 01:55:02.997985947 +0100
-+++ b/pkg/authorization/authz_unix_test.go	2019-01-10 02:03:21.177439757 +0100
-@@ -24,7 +24,7 @@
- )
- 
- const (
--	pluginAddress = "authz-test-plugin.sock"
-+	pluginAddress = "/tmp/authz-test-plugin.sock"
- )
- 
- func TestAuthZRequestPluginError(t *testing.T) {
-@@ -263,12 +263,7 @@
- 
- // createTestPlugin creates a new sample authorization plugin
- func createTestPlugin(t *testing.T) *authorizationPlugin {
--	pwd, err := os.Getwd()
--	if err != nil {
--		t.Fatal(err)
--	}
--
--	client, err := plugins.NewClient("unix:///"+path.Join(pwd, pluginAddress), &tlsconfig.Options{InsecureSkipVerify: true})
-+	client, err := plugins.NewClient("unix:///"+path.Join("/", pluginAddress), &tlsconfig.Options{InsecureSkipVerify: true})
- 	if err != nil {
- 		t.Fatalf("Failed to create client %v", err)
- 	}
diff --git a/gnu/packages/patches/phoronix-test-suite-fsdg.patch b/gnu/packages/patches/phoronix-test-suite-fsdg.patch
new file mode 100644
index 0000000000..48d411e11d
--- /dev/null
+++ b/gnu/packages/patches/phoronix-test-suite-fsdg.patch
@@ -0,0 +1,308 @@
+Submitted upstream at https://github.com/phoronix-test-suite/phoronix-test-suite/pull/642.
+
+diff --git a/delete-nonfree-metadata b/delete-nonfree-metadata
+new file mode 100755
+index 000000000..e25e3b48c
+--- /dev/null
++++ b/delete-nonfree-metadata
+@@ -0,0 +1,195 @@
++#!/usr/bin/env python3
++
++# Copyright (C) 2022, Maxim Cournoyer
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <http://www.gnu.org/licenses/>.
++
++# Commentary:
++#
++# This script prunes the 'ob-cache' test metadata cache from any
++# nonfree test.  This is useful for users who concerned with running
++# only free software or distributions complying with the Free Software
++# Distribution Guidelines (GNU FSDG,
++# https://www.gnu.org/distros/free-system-distribution-guidelines.html).
++import argparse
++import json
++import logging
++import pathlib
++import pprint
++import re
++import shutil
++import xml.etree.ElementTree as ET
++
++
++logger = logging.getLogger(__name__)
++logging.basicConfig(level='INFO', format='%(levelname)s: %(message)s')
++
++
++DEFAULT_ROOT_DIR = pathlib.Path(__file__).parent.resolve()
++# Global cache used to keep the test/suite definition licenses, keyed
++# by their test name key (e.g., 'caffe').
++TEST_DEFINITION_LICENSES = {}
++
++
++def get_test_definitions(root_dir=DEFAULT_ROOT_DIR):
++    """Return the list of all test definition XML files."""
++    return sorted(pathlib.Path(root_dir).glob('**/test-definition.xml'))
++
++
++def get_suite_definitions(root_dir=DEFAULT_ROOT_DIR):
++    return sorted(pathlib.Path(root_dir).glob('**/suite-definition.xml'))
++
++
++def get_index_files(root_dir=DEFAULT_ROOT_DIR):
++    return sorted(pathlib.Path(root_dir).glob('**/*.index'))
++
++
++def sanitize_index_files(index_files, nonfree_test_names):
++    """Remove non free test entries from `index_files`."""
++    for index_file in index_files:
++        with index_file.open() as f:
++            index = json.load(f)
++        filtered_tests = {k: v for k, v in index['tests'].items()
++                          if k not in nonfree_test_names}
++        index['tests'] = filtered_tests
++        if index['suites']:
++            filtered_suites = {k: v for k, v in index['suites'].items()
++                               if k not in nonfree_test_names}
++            index['suites'] = filtered_suites
++
++        with index_file.open('w') as f:
++            json.dump(index, f)
++
++
++def get_test_definition_license(test_definition_file,
++                                root_dir=DEFAULT_ROOT_DIR):
++    """Return the licenses from `test_definition_file`, or None."""
++    name = get_name_from_definition_file(test_definition_file)
++    if name in TEST_DEFINITION_LICENSES:
++        return TEST_DEFINITION_LICENSES[name]
++
++    root = ET.parse(test_definition_file)
++    try:
++        license = next(root.iter('License')).text
++    except StopIteration:
++        # No license field; check if it extends another test.
++        try:
++            extended_test = next(root.iter('Extends')).text  # e.g. 'pts/caffe'
++            extended_name = extended_test.split('/')[-1]
++            if extended_name in TEST_DEFINITION_LICENSES:
++                license = TEST_DEFINITION_LICENSES[extended_name]
++            else:
++                extended_definition_file = sorted(
++                    pathlib.Path(root_dir).glob(
++                        '**/test-profiles/' + extended_test
++                        + '-*/test-definition.xml'))[-1]
++                license = get_test_definition_license(extended_definition_file,
++                                                      root_dir)
++        except StopIteration:
++            logger.warning('could not find license for %s',
++                           test_definition_file)
++            return None
++
++    TEST_DEFINITION_LICENSES[name] = license
++    return license
++
++
++def is_test_definition_free(test_definition_file):
++    """True if `test_definition_file` has its license tag set to 'Free'."""
++    license = get_test_definition_license(test_definition_file)
++    return license == 'Free'
++
++
++def is_suite_definition_free(suite_definition_file, nonfree_test_names):
++    """True if `suite_definition_file` is free.
++
++    The suite definition is considered free when it doesn't reference
++    any test part of `nonfree_test_names`.
++    """
++    root = ET.parse(suite_definition_file)
++    for test in root.iter('Test'):
++        test_name = test.text
++        name = test_name.split('/')[-1]  # strip any prefix
++        if name in nonfree_test_names:
++            return False
++
++    return True
++
++
++def get_name_from_definition_file(definition_file):
++    """Return the parent directory name of a definition file.
++
++    The version information in stripped from the name."""
++    parent_dir_name = pathlib.Path(definition_file).parent.name
++    # Strip the version from the name.
++    return re.search(r'^(.*)-', parent_dir_name).group(1)
++
++
++def get_default_user_config_file(root_dir):
++    return next(pathlib.Path(root_dir).glob('**/user-config-defaults.xml'))
++
++
++def disallow_refreshing_repositories(user_config_file):
++    """Set the 'AllowRefreshingRepositoryLists' option to FALSE."""
++    config = ET.parse(user_config_file)
++    for option in config.iter('AllowRefreshingRepositoryLists'):
++        option.text = 'FALSE'
++    config.write(user_config_file)
++
++
++def main(root_dir):
++    # Gather data.
++    test_definitions = get_test_definitions(root_dir)
++    suite_definitions = get_suite_definitions(root_dir)
++    nonfree_test_definitions = [d for d in test_definitions
++                                if not is_test_definition_free(d)]
++    nonfree_test_names = [get_name_from_definition_file(t)
++                          for t in nonfree_test_definitions]
++    nonfree_suite_definitions = [
++        s for s in suite_definitions
++        if not is_suite_definition_free(s, nonfree_test_names)]
++    nonfree_suite_names = [get_name_from_definition_file(s)
++                           for s in nonfree_suite_definitions]
++    nonfree_definitions = nonfree_test_definitions + nonfree_suite_definitions
++    nonfree_definition_names = sorted(set(nonfree_test_names
++                                          + nonfree_suite_names))
++
++    # Delete nonfree definitions.
++    for nonfree_definition in nonfree_definitions:
++        shutil.rmtree(nonfree_definition.parent)
++
++    # Delete nonfree entries in index files.
++    indexes = get_index_files(root_dir)
++    sanitize_index_files(indexes, nonfree_definition_names)
++
++    logger.info('The following nonfree test suites were deleted:\n%s',
++                pprint.pformat([str(d) for d in nonfree_definitions]))
++
++    # This is necessary to avoid downloading the
++    # OpenBenchmarking-provided tests metadata which includes all the
++    # tests, including teh proprietary ones.
++    user_config_file = get_default_user_config_file(root_dir)
++    disallow_refreshing_repositories(user_config_file)
++    logger.info('Disabled test metadata updates in default user config')
++
++
++if __name__ == '__main__':
++    parser = argparse.ArgumentParser(
++        description='Remove nonfree cached metadata')
++    parser.add_argument('--root-dir', type=str,
++                        help='the Phoronix Test Suite root directory',
++                        default=DEFAULT_ROOT_DIR)
++    args = parser.parse_args()
++
++    main(args.root_dir)
+diff --git a/documentation/phoronix-test-suite.md b/documentation/phoronix-test-suite.md
+index c2e04ae4e..0c71ecf37 100644
+--- a/documentation/phoronix-test-suite.md
++++ b/documentation/phoronix-test-suite.md
+@@ -817,7 +817,18 @@ The Phoronix Test Suite can be simply extracted from the downloaded *.tar.gz* or
+ 
+ 
+ ### Generic Installation
+-Running *install-sh* from the root directory of the Phoronix Test Suite will install the software for system-wide access. By default the *phoronix-test-suite* executable is in */usr/bin/* , the Phoronix Test Suite files in */usr/share/phoronix-test-suite/* , and the documentation in / *usr/share/doc/phoronix-test-suite/* . Root access is required. The default installation prefix is /usr/ but can be adjusted as the first argument (example: *install-sh /home/user/* to install the Phoronix Test Suite in your home directory).
++Running *install-sh* from the root directory of the Phoronix Test
++Suite will install the software for system-wide access. By default the
++*phoronix-test-suite* executable is in */usr/bin/* , the Phoronix Test
++Suite files in */usr/share/phoronix-test-suite/* , and the
++documentation in / *usr/share/doc/phoronix-test-suite/* . Root access
++is required. The default installation prefix is /usr/ but can be
++adjusted as the first argument (example: *install-sh /home/user/* to
++install the Phoronix Test Suite in your home directory).  Use the
++`--free-software-only` option of the `install-sh` script if you'd like
++to be offered only test profiles and suites relying on free software
++only.  Note that this option disables the automatic fetching of new
++tests definitions from OpenBenchmarking.org.
+ 
+ 
+ ### Debian/Ubuntu Installation
+@@ -937,6 +948,11 @@ If this option is set to *TRUE* , the system logs (i.e. dmesg, lspci, lsusb, Xor
+ #### AllowResultUploadsToOpenBenchmarking
+ This option defines whether to allow/support result uploads to OpenBenchmarking.org. If set to *FALSE* , the user will not be prompted to allow uploading of test results to the public site.
+ 
++#### AllowRefreshingRepositoryLists
++This option defines whether to allow refreshing the test profiles
++(metadata) content from OpenBenchmarking.org.  If set to *FALSE* ,
++only the locally available test profiles will be used, and no updates
++will made to it.
+ 
+ ## General Options
+ #### DefaultBrowser
+diff --git a/install-sh b/install-sh
+index f6228cde9..ff9bf9bd7 100755
+--- a/install-sh
++++ b/install-sh
+@@ -1,4 +1,5 @@
+ #!/bin/sh
++set -e
+ 
+ # Phoronix Test Suite
+ # URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
+@@ -28,6 +29,13 @@ else
+ 	INSTALL_PREFIX="$1"
+ fi
+ 
++# XXX: Perhaps this should be the default?
++for arg in "$@"; do
++    if [ "$arg" = "--free-software-only" ]; then
++        FREE_SOFTWARE_ONLY=yes
++    fi
++done
++
+ # Ensure the user is in the correct directory
+ if [ ! -f pts-core/phoronix-test-suite.php ]
+ then
+@@ -114,6 +122,11 @@ else
+ 
+ fi
+ 
++# Post-installation process.
++if [ -n FREE_SOFTWARE_ONLY ]; then
++    ./delete-nonfree-metadata --root-dir="$DESTDIR$INSTALL_PREFIX/share/phoronix-test-suite/"
++fi
++
+ echo -e "\nPhoronix Test Suite Installation Completed\n
+ Executable File: $INSTALL_PREFIX/bin/phoronix-test-suite
+ Documentation: $INSTALL_PREFIX/share/doc/phoronix-test-suite/
+@@ -124,4 +137,3 @@ then
+ 	echo "Installed to chroot: $DESTDIR"
+ 	echo "Please update your desktop and mime-database manually"
+ fi
+-
+diff --git a/pts-core/objects/pts_openbenchmarking.php b/pts-core/objects/pts_openbenchmarking.php
+index 081f55c31..e9396ea36 100644
+--- a/pts-core/objects/pts_openbenchmarking.php
++++ b/pts-core/objects/pts_openbenchmarking.php
+@@ -330,6 +330,11 @@ class pts_openbenchmarking
+ 	}
+ 	public static function refresh_repository_lists($repos = null, $force_refresh = false)
+ 	{
++        if(!pts_config::read_bool_config('PhoronixTestSuite/Options/OpenBenchmarking/AllowRefreshingRepositoryLists', true))
++        {
++            return true;
++        }
++
+ 		if($repos == null)
+ 		{
+ 			if($force_refresh == false)
+diff --git a/pts-core/static/user-config-defaults.xml b/pts-core/static/user-config-defaults.xml
+index 878c5137f..c9a67df5f 100644
+--- a/pts-core/static/user-config-defaults.xml
++++ b/pts-core/static/user-config-defaults.xml
+@@ -6,6 +6,7 @@
+ 			<IndexCacheTTL>3</IndexCacheTTL>
+ 			<AlwaysUploadSystemLogs>FALSE</AlwaysUploadSystemLogs>
+ 			<AllowResultUploadsToOpenBenchmarking>TRUE</AllowResultUploadsToOpenBenchmarking>
++                        <AllowRefreshingRepositoryLists>TRUE</AllowRefreshingRepositoryLists>
+ 		</OpenBenchmarking>
+ 		<General>
+ 			<DefaultBrowser></DefaultBrowser>
diff --git a/gnu/packages/pep.scm b/gnu/packages/pep.scm
index d245ac74a3..f443170aa5 100644
--- a/gnu/packages/pep.scm
+++ b/gnu/packages/pep.scm
@@ -33,6 +33,7 @@
   #:use-module (gnu packages mail) ; for libetpan
   #:use-module (gnu packages nettle)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages sequoia)
   #:use-module (gnu packages sqlite)
diff --git a/gnu/packages/presentation.scm b/gnu/packages/presentation.scm
index 1601ba7f2a..1472a2fcc1 100644
--- a/gnu/packages/presentation.scm
+++ b/gnu/packages/presentation.scm
@@ -51,6 +51,11 @@
      `(#:tests? #f ; Test suite hasn't withstood the test of time.
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'loosen-requirements
+           (lambda _
+             ;; Remove version pinning.
+             (substitute* "requirements.txt"
+               (("pbr>=.*") "pbr"))))
          (replace 'wrap
            (lambda* (#:key python inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -68,8 +73,9 @@
                                              "/site-packages")
                               (search-path-as-string->list
                                 (or (getenv "GUIX_PYTHONPATH") ""))))))
-                 '("presentty" "presentty-console")))
-             #t)))))
+                 '("presentty" "presentty-console")))))
+         ;; XXX: console import test fails to find palette.py from the lib?
+         (delete 'sanity-check))))
     (inputs
      (list cowsay
            figlet
diff --git a/gnu/packages/python-build.scm b/gnu/packages/python-build.scm
index d85463ebab..e7023aca0c 100644
--- a/gnu/packages/python-build.scm
+++ b/gnu/packages/python-build.scm
@@ -1,4 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
@@ -403,3 +404,73 @@ specified by PEP 517, @code{flit_core.buildapi}.")
     (propagated-inputs
      (modify-inputs (package-propagated-inputs python-flit-core-bootstrap)
        (replace "python-toml" python-tomli)))))
+
+(define-public python-flit-scm
+  (package
+    (name "python-flit-scm")
+    (version "1.6.2")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "flit_scm" version))
+              (sha256
+               (base32
+                "0p3lj2g1643m2dm14kihvfb6gn6jviglhm3dzdpn2c8zpqs17svg"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:tests? #f                       ;no test suite
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'relax-setuptools-scm-version
+            (lambda _
+              (substitute* "pyproject.toml"
+                (("setuptools_scm~=6.4")
+                 "setuptools_scm>=6.3"))))
+          ;; XXX: PEP 517 manual build/install procedures copied from
+          ;; python-isort.
+          (replace 'build
+            (lambda _
+              ;; ZIP does not support timestamps before 1980.
+              (setenv "SOURCE_DATE_EPOCH" "315532800")
+              (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+          (replace 'install
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((whl (car (find-files "dist" "\\.whl$"))))
+                (invoke "pip" "--no-cache-dir" "--no-input"
+                        "install" "--no-deps" "--prefix" #$output whl)))))))
+    (native-inputs
+     (list python-pypa-build
+           python-flit-core
+           python-setuptools-scm
+           python-tomli))
+    (propagated-inputs
+     (list python-flit-core
+           python-setuptools-scm
+           python-tomli))
+    (home-page "https://gitlab.com/WillDaSilva/flit_scm")
+    (synopsis "PEP 518 build backend combining flit_core and setuptools_scm")
+    (description "This package provides a PEP 518 build backend that uses
+@code{setuptools_scm} to generate a version file from your version control
+system, then @code{flit_core} to build the package.")
+    (license license:expat)))
+
+(define-public python-setuptools-scm
+  (package
+    (name "python-setuptools-scm")
+    (version "6.3.2")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "setuptools_scm" version))
+              (sha256
+               (base32 "1wm0i27siyy1yqr9rv7lqvb65agay9051yi8jzmi8dgb3q4ai6m4"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-packaging",python-packaging-bootstrap)
+       ("python-tomli" ,python-tomli)))
+    (home-page "https://github.com/pypa/setuptools_scm/")
+    (synopsis "Manage Python package versions in SCM metadata")
+    (description
+     "Setuptools_scm handles managing your Python package versions in
+@dfn{software configuration management} (SCM) metadata instead of declaring
+them as the version argument or in a SCM managed file.")
+    (license license:expat)))
diff --git a/gnu/packages/python-check.scm b/gnu/packages/python-check.scm
index c39b4e2ed1..1e59911299 100644
--- a/gnu/packages/python-check.scm
+++ b/gnu/packages/python-check.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019, 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019, 2021 Hartmut Goebel <h.goebel@crazy-compilers.com>
-;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2020, 2022 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
@@ -2324,3 +2324,32 @@ provided for the main Python test runners.")
     (description "This package provides a pytest fixture to mock httpx
 requests to be replied to with user provided responses.")
     (license license:expat)))
+
+(define-public python-pycotap
+  (package
+    (name "python-pycotap")
+    (version "1.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pycotap" version))
+       (sha256
+        (base32 "1v69fxial9i5wlap6wc4igq3hydvxbak7dlgb7cikk8wjgafqf7r"))))
+    (build-system python-build-system)
+    (home-page "https://el-tramo.be/pycotap")
+    (synopsis "Tiny Python TAP test runner")
+    (description "This package provides a simple Python test runner for
+unittest that outputs Test Anything Protocol (TAP) results to standard
+output.  Contrary to other TAP runners for Python, pycotap...
+@itemize
+@item
+prints TAP (and only TAP) to standard output instead of to a separate file,
+allowing you to pipe it directly to TAP pretty printers and processors;
+@item only contains a TAP reporter, so no parsers, no frameworks, no
+dependencies, etc;
+@item
+is configurable: you can choose how you want the test output and test result
+diagnostics to end up in your TAP output (as TAP diagnostics, YAML blocks, or
+attachments).
+@end itemize")
+    (license license:expat)))
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index f2059dbbf5..f4e01198f5 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -26,6 +26,7 @@
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1651,3 +1652,29 @@ It does not provide such an implementation itself -- this is just the
 scaffolding for the command line, which should make it relatively easy to
 supply a handful of python functions as methods to a class.")
     (license license:expat))) ; MIT license
+
+(define-public python-starkbank-ecdsa
+  (package
+    (name "python-starkbank-ecdsa")
+    (version "2.0.3")
+    (home-page "https://github.com/starkbank/ecdsa-python")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1k9h4p0frkgj76vrqfjim4mik98g09mivdxxcmxr6raa5jwr83sh"))))
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'remove-broken-test
+                          (lambda _
+                            (delete-file "tests/testOpenSSL.py"))))))
+    (build-system python-build-system)
+    (native-inputs (list python-pytest))
+    (synopsis "Python ECDSA library")
+    (description "This package provides a Python ECDSA library, optimized for
+speed but without C extensions.")
+    (license license:expat)))
diff --git a/gnu/packages/python-science.scm b/gnu/packages/python-science.scm
index 56f109e3d5..35daef2815 100644
--- a/gnu/packages/python-science.scm
+++ b/gnu/packages/python-science.scm
@@ -1088,7 +1088,7 @@ computing in Python.  It extends both the @code{concurrent.futures} and
 (define-public python-modin
   (package
     (name "python-modin")
-    (version "0.10.1")
+    (version "0.15.1")
     (source
      (origin
        ;; The archive on pypi does not include all required files.
@@ -1099,7 +1099,7 @@ computing in Python.  It extends both the @code{concurrent.futures} and
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "128ghfb9ncmnn8km409xjcdppvn9nr9jqw8rkvsfavh7wnwlk509"))))
+         "0nf2pdqna2vn7vq7q7b51f3cfbrxfn77pyif3clibjsxzvfm9k03"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index b4500c6d2f..e48e4773df 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -51,6 +51,7 @@
 ;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
 ;;; Copyright © 2022 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2022 Peter Polidoro <peter@polidoro.io>
+;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1423,26 +1424,24 @@ C, yielding parse times that can be a thirtieth of the html5lib parse times.")
 (define-public python-minio
   (package
     (name "python-minio")
-    (version "6.0.0")
+    (version "7.1.9")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "minio" version))
               (sha256
                (base32
-                "1cxpa0m7mdvpdbc1g6wlihq6ja4g4paxkl6f3q84bbnx07zpbllp"))))
+                "02nh865xbf2glxvcy70ir6gkcwqxl119zryfc70q7w0yjvkg64d7"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (add-before 'check 'disable-failing-tests
                     (lambda _
                       ;; This test requires network access.
-                      (delete-file "tests/unit/credentials_test.py")
-                      #t)))))
+                      (delete-file "tests/unit/credentials_test.py"))))))
     (native-inputs
      (list python-faker python-mock python-nose))
     (propagated-inputs
-     (list python-certifi python-configparser python-dateutil python-pytz
-           python-urllib3))
+     (list python-certifi python-dateutil python-pytz python-urllib3))
     (home-page "https://github.com/minio/minio-py")
     (synopsis "Programmatically access Amazon S3 from Python")
     (description
@@ -1808,7 +1807,7 @@ another XPath engine to find the matching elements in an XML or HTML document.")
 (define-public python-databricks-cli
   (package
     (name "python-databricks-cli")
-    (version "0.14.1")
+    (version "0.17.0")
     (home-page "https://github.com/databricks/databricks-cli")
     (source (origin
               (method git-fetch)
@@ -1816,21 +1815,25 @@ another XPath engine to find the matching elements in an XML or HTML document.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "03w19rzh72jll9phai23wp0c2mlv39qsrv50mhckziy39z60yxh8"))))
+                "1qwbxnx64kw7lrzlyx3hfbnjxpc19cqvvj0gcrkqpyjsgd08vja0"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases (modify-phases %standard-phases
+     '(#:phases (modify-phases %standard-phases
                   (replace 'check
                     (lambda _
-                      (invoke "pytest" "tests" "-vv"
-                              ;; XXX: This fails with newer Pytest
-                              ;; (upstream uses Pytest 3..).
-                              "-k" "not test_get_request_with_list"))))))
+                      (invoke "pytest" "tests" "-vv"))))))
     (native-inputs
-     (list ;; For tests.
-           python-decorator python-mock python-pytest python-requests-mock))
+     ;; For tests.
+     (list python-decorator
+           python-mock
+           python-pytest
+           python-requests-mock))
     (propagated-inputs
-     (list python-click python-configparser python-requests python-six
+     (list python-click
+           python-oauthlib
+           python-pyjwt
+           python-requests
+           python-six
            python-tabulate))
     (synopsis "Command line interface for Databricks")
     (description
@@ -4196,13 +4199,13 @@ addon modules.")
 (define-public python-bottle
   (package
     (name "python-bottle")
-    (version "0.12.19")
+    (version "0.12.21")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "bottle" version))
       (sha256
-        (base32 "0b6s50vc4iad97b6bb3xnyrgajb3nj6n6jbr5p54a4vapky3zmx9"))))
+        (base32 "0zl8sy4dhafyxqpavy7pjz0qzpakmhgh2qr6pwlw5f82rjv62z3q"))))
     (build-system python-build-system)
     (home-page "https://bottlepy.org/")
     (synopsis "WSGI framework for small web-applications")
@@ -6328,7 +6331,16 @@ the @code{BasicRouter}.")
     (arguments
      ;; PyPi sources does not contain tests, recursive dependency on
      ;; python-sanic.
-     (list #:tests? #f))
+     (list #:tests? #f
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'loosen-requirements
+                 (lambda _
+                   ;; Don't place an upper boundary on httpx version.
+                   ;; https://github.com/sanic-org/sanic-testing/pull/39
+                   (substitute* "setup.py"
+                     (("httpx>=0\\.18,<0\\.23")
+                      "httpx>=0.18")))))))
     (propagated-inputs (list python-httpx python-sanic-bootstrap
                              python-websockets))
     (home-page "https://github.com/sanic-org/sanic-testing/")
@@ -7535,3 +7547,50 @@ resources using Web Application Description Language (WADL) files as guides.")
 @end itemize")
     (license license:expat)))
 
+(define-public python-http-client
+  (package
+    (name "python-http-client")
+    (version "3.3.7")
+    (home-page "https://github.com/sendgrid/python-http-client")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0z0ziw3f4zw5fj4spiwhhs2x8qs3i5999ry2p6a5sc8b1lkkj2zi"))
+              (snippet #~(begin
+                           (use-modules (guix build utils))
+                           (delete-file "tests/profile.py")))))
+    (build-system python-build-system)
+    (synopsis "HTTP REST client for Python")
+    (description
+     "This package provides access to any RESTful or RESTful-like API.")
+    (license license:expat)))
+
+(define-public python-sendgrid
+  (package
+    (name "python-sendgrid")
+    (version "6.9.7")
+    (home-page "https://github.com/sendgrid/sendgrid-python/")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0kvp4gm3bpcsj2mkv05pgvlcv1jlsfhcljcv61wz5kq9d273h7rg"))))
+    (build-system python-build-system)
+    (arguments
+     (list #:tests? #f))       ;241/340 tests fail due to attempted web access
+    (propagated-inputs (list python-http-client python-starkbank-ecdsa))
+    (synopsis "SendGrid API library for Python")
+    (description
+     "The @code{sendgrid} Python library allows access to the
+SendGrid Web API v3.  Version 3+ of the library provides full support for all
+SendGrid Web API v3 endpoints, including the new v3 /mail/send.")
+    (license license:expat)))
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 75682be6ab..08986569b3 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -2949,6 +2949,48 @@ software.")
     (inherit (package-with-python2 scons))
     (name "scons-python2")))
 
+(define-public python-exceptiongroup
+  (package
+    (name "python-exceptiongroup")
+    (version "1.0.0rc8")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/agronholm/exceptiongroup")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0xsbpv22n51p6yvyvz231mf8zhbi1i88b4zmacaxxx31zrq5ifv4"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; XXX: PEP 517 manual build/install procedures copied from
+          ;; python-isort.
+          (replace 'build
+            (lambda _
+              (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)
+              ;; ZIP does not support timestamps before 1980.
+              (setenv "SOURCE_DATE_EPOCH" "315532800")
+              (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+          (replace 'install
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((whl (car (find-files "dist" "\\.whl$"))))
+                (invoke "pip" "--no-cache-dir" "--no-input"
+                        "install" "--no-deps" "--prefix" #$output whl))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "pytest" "-vv" "tests")))))))
+    (native-inputs (list python-flit-scm python-pypa-build python-pytest))
+    (home-page "https://github.com/agronholm/exceptiongroup")
+    (synopsis "PEP 654 backport from Python 3.11")
+    (description "This is a backport of the @code{BaseExceptionGroup} and
+@code{ExceptionGroup} classes from Python 3.11.")
+    (license license:expat)))
+
 (define-public python-extension-helpers
 (package
   (name "python-extension-helpers")
@@ -5038,7 +5080,7 @@ which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
 (define-public python-pydantic
   (package
     (name "python-pydantic")
-    (version "1.9.0")
+    (version "1.9.1")
     (source
      (origin
        (method git-fetch)
@@ -5047,32 +5089,11 @@ which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "14wj3k9007fpbxk7593w6gdqrr68yzrsw4a41sj5ji4cv3r8z18b"))))
+        (base32 "1406kgppqa7524mxllsipj7gb8fn7pwf51l11lqik59xjhsfv94f"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'disable-test
-           (lambda _
-             ;; Reported upstream:
-             ;; <https://github.com/samuelcolvin/pydantic/issues/1580>.
-             ;; Disable the faulty test as the fix is unclear.
-             (substitute* "tests/test_validators.py"
-               (("test_assert_raises_validation_error")
-                "_test_assert_raises_validation_error"))
-
-             ;; These fail because of <https://bugs.python.org/issue40398>.
-             ;; Remove after Python has been upgraded to >= 3.9.
-             (substitute* "tests/test_generics.py"
-               (("assert replace_types\\(Callable, \\{T: int\\}\\) == Callable")
-                ""))
-             (substitute* "tests/test_schema.py"
-               (("test_unenforced_constraints_schema")
-               "_test_unenforced_constraints_schema"))
-
-             ;; Disable tests for the Hypothesis plugin because it is tricky
-             ;; to configure in the build container.
-             (delete-file "tests/test_hypothesis_plugin.py")))
          (replace 'check
            (lambda _ (invoke "pytest" "-vv"))))))
     (native-inputs
@@ -5132,7 +5153,6 @@ Server (PLS).")
                      "not test_pyqt_completion"))))))
     (propagated-inputs
      (list python-autopep8
-           python-configparser
            python-pydocstyle
            python-flake8
            python-future
@@ -6668,6 +6688,58 @@ multivalue dictionary that retains the order of insertions and deletions.")
 run simple @code{argparse} parsers from function signatures.")
     (license license:lgpl3+)))
 
+(define-public python-autopage
+  (package
+    (name "python-autopage")
+    (version "0.5.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "autopage" version))
+              (sha256
+               (base32
+                "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; Do a manual PEP 517 style build/install procedure until the
+          ;; python-build-system overhaul is merged.
+          (replace 'build
+            (lambda _
+              ;; ZIP does not support timestamps before 1980.
+              (let ((circa-1980 (* 10 366 24 60 60)))
+                (setenv "SOURCE_DATE_EPOCH" (number->string circa-1980))
+                (invoke "python" "-m" "build" "--wheel" "--no-isolation" "."))))
+          (add-before 'check 'disable-e2e-tests
+            (lambda _
+              ;; These tests rely on KeyboardInterrupts which do not
+              ;; work in the build container.
+              (delete-file "autopage/tests/test_end_to_end.py")))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "pytest" "-vv"))))
+          (replace 'install
+            (lambda _
+              (let ((whl (car (find-files "dist" "\\.whl$"))))
+                (invoke "pip" "--no-cache-dir" "--no-input"
+                        "install" "--no-deps" "--prefix" #$output whl)))))))
+    (native-inputs
+     (list python-pypa-build
+           python-setuptools
+           python-wheel
+           ;; For tests.
+           python-fixtures
+           python-pytest
+           python-testtools))
+    (home-page "https://github.com/zaneb/autopage")
+    (synopsis "Automatic paging for console output")
+    (description
+     "Autopage is a Python library to automatically display terminal output
+from a program in a @dfn{pager} such as @command{less}.")
+    (license license:asl2.0)))
+
 (define-public python-autopep8
   (package
     (name "python-autopep8")
@@ -7783,27 +7855,6 @@ Pexpect works like Don Libes’ Expect.  Pexpect allows your script to spawn a
 child application and control it as if a human were typing commands.")
     (license license:isc)))
 
-(define-public python-setuptools-scm
-  (package
-    (name "python-setuptools-scm")
-    (version "6.3.2")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "setuptools_scm" version))
-              (sha256
-               (base32 "1wm0i27siyy1yqr9rv7lqvb65agay9051yi8jzmi8dgb3q4ai6m4"))))
-    (build-system python-build-system)
-    (propagated-inputs
-     `(("python-packaging",python-packaging-bootstrap)
-       ("python-tomli" ,python-tomli)))
-    (home-page "https://github.com/pypa/setuptools_scm/")
-    (synopsis "Manage Python package versions in SCM metadata")
-    (description
-     "Setuptools_scm handles managing your Python package versions in
-@dfn{software configuration management} (SCM) metadata instead of declaring
-them as the version argument or in a SCM managed file.")
-    (license license:expat)))
-
 (define-public python-sexpdata
   (package
     (name "python-sexpdata")
@@ -8298,25 +8349,24 @@ cluster down and deletes the throwaway profile.")
 (define-public python-ipython-sql
   (package
     (name "python-ipython-sql")
-    (version "0.4.0")
+    (version "0.4.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ipython-sql" version))
        (sha256
-        (base32 "0v74ayc6vw98f4jljmwy45qpqbcbhlrb4g1qdyypq9sppxcqx21y"))))
+        (base32 "1r6rz8jgrqzhkf2flwjw75d96g8l7kykmx5wli3q1988w96391ip"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-build
-           (lambda _
-             ;; The "NEWS.rst" file is missing from the PyPI distribution.
-             ;; (see: https://github.com/catherinedevlin/ipython-sql/issues/164)
-             (substitute* "setup.py"
-               (("NEWS = [^\n]*") "")
-               (("long_description=README \\+ '\\\\n\\\\n' \\+ NEWS,")
-                "long_description=README,")))))))
+     (list #:tests? #f                  ;must run under IPython
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'permit-newer-prettytable
+                 ;; See https://github.com/catherinedevlin/ipython-sql/issues/202
+                 (lambda _
+                   (substitute* "setup.py"
+                     (("prettytable<1")
+                      "prettytable")))))))
     (propagated-inputs
      (list python-ipython
            python-ipython-genutils
@@ -9956,7 +10006,25 @@ applications.")
        (method url-fetch)
        (uri (pypi-uri "pyzmq" version))
        (sha256
-        (base32 "0737kizh53n4rjq1xbm6nhr0bq65xflg04i1d8fcky0nwwrw1pcf"))))
+        (base32 "0737kizh53n4rjq1xbm6nhr0bq65xflg04i1d8fcky0nwwrw1pcf"))
+       (snippet
+        #~(begin
+            (use-modules (guix build utils))
+            ;; The bundled zeromq source code.
+            (delete-file-recursively "bundled")
+            ;; Delete cythonized files.
+            (for-each delete-file
+                      (list "zmq/backend/cython/constants.c"
+                            "zmq/backend/cython/context.c"
+                            "zmq/backend/cython/_device.c"
+                            "zmq/backend/cython/error.c"
+                            "zmq/backend/cython/message.c"
+                            "zmq/backend/cython/_poll.c"
+                            "zmq/backend/cython/_proxy_steerable.c"
+                            "zmq/backend/cython/socket.c"
+                            "zmq/backend/cython/utils.c"
+                            "zmq/backend/cython/_version.c"
+                            "zmq/devices/monitoredqueue.c"))))))
     (build-system python-build-system)
     (arguments
      `(#:configure-flags
@@ -11454,14 +11522,15 @@ distribution.  It is not intended as an end-user tool.")
 (define-public python-immutables
   (package
     (name "python-immutables")
-    (version "0.14")
+    (version "0.18")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "immutables" version))
        (sha256
-        (base32 "0y0aqw29g525frdnmv9paljzacpp4s21sadfbca5b137iciwr8d0"))))
+        (base32 "1x4cinh0xbl6p6p2yfm2s07mxxy3lf0zzai9gqpydk4482bwfdjk"))))
     (build-system python-build-system)
+    (native-inputs (list python-mypy python-pytest))
     (home-page "https://github.com/MagicStack/immutables")
     (synopsis "High-performance immutable mapping type for Python")
     (description
@@ -11473,16 +11542,28 @@ functional languages.")
 (define-public python-prettytable
   (package
     (name "python-prettytable")
-    (version "0.7.2")
+    (version "3.3.0")
     (source
      (origin
        (method url-fetch)
-       (uri (pypi-uri "prettytable" version ".tar.bz2"))
+       (uri (pypi-uri "prettytable" version))
        (sha256
         (base32
-         "0diwsicwmiq2cpzpxri7cyl5fmsvicafw6nfqf6p6p322dji2g45"))))
+         "1c599w31i2ndzbkn85xwsgv9sd2j16r56dl922w4jh3rs97vb3hi"))))
     (build-system python-build-system)
-    (home-page "https://code.google.com/archive/p/prettytable/")
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "pytest" "-vv")))))))
+    (native-inputs
+     (list python-pytest
+           python-pytest-lazy-fixture
+           python-setuptools-scm))
+    (propagated-inputs (list python-wcwidth))
+    (home-page "https://github.com/jazzband/prettytable")
     (synopsis "Display tabular data in an ASCII table format")
     (description
       "A library designed to represent tabular data in visually appealing ASCII
@@ -13063,7 +13144,7 @@ time.")
                                      texlive-zapfding))))
     (home-page "https://jupyter.org")
     (synopsis "Converting Jupyter Notebooks")
-    (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
+    (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
 notebooks to various other formats via Jinja templates.  It allows you to
 convert an @code{.ipynb} notebook file into various static formats including:
 
@@ -16133,7 +16214,7 @@ focus on event-based network programming and multiprotocol integration.")
 (define-public python-pika
   (package
     (name "python-pika")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
       (origin
         (method git-fetch)
@@ -16143,27 +16224,29 @@ focus on event-based network programming and multiprotocol integration.")
         (file-name (git-file-name name version))
         (sha256
          (base32
-          "0cm45xydk2jigydwszwik89qlbk6l3l18sxhzppzqmxw2rdkm22s"))))
+          "0sqj3bg6jwign8vwvn337fbwy69sm684ns1vh5kbfnskq4him9i2"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
-                  (add-before 'check 'disable-live-tests
+                  (add-after 'unpack 'disable-live-tests
                     (lambda _
                       ;; Disable tests that require RabbitMQ, which is not
                       ;; yet available in Guix.
-                      (substitute* "setup.cfg"
-                        (("tests/unit,tests/acceptance")
-                         "tests/unit"))
+                      (substitute* "nose2.cfg"
+                        (("tests=tests/unit,tests/acceptance")
+                         "start-dir=tests/unit"))
                       (with-directory-excursion "tests"
                         (for-each delete-file
                                 '("unit/base_connection_tests.py"
                                   "unit/threaded_test_wrapper_test.py")))))
                   (replace 'check
-                    (lambda _
-                      (invoke "nosetests"))))))
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (setenv "PYTHONPATH" (getcwd))
+                        (invoke "nose2" "-v")))))))
     (native-inputs
      (list python-mock
-           python-nose
+           python-nose2
            ;; These are optional at runtime, and provided here for tests.
            python-gevent
            python-tornado
@@ -16493,6 +16576,73 @@ smaller.  Small integers are encoded into a single byte, and typical short
 strings require only one extra byte in addition to the strings themselves.")
     (license license:asl2.0)))
 
+(define-public python-cattrs
+  (package
+    (name "python-cattrs")
+    (version "22.1.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/python-attrs/cattrs")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1n0h25gj6zd02kqyl040xpdvg4hpy1j92716sz0rg019xjqqijqb"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; XXX: PEP 517 manual build copied from python-isort.
+          (add-after 'unpack 'adjust-for-older-attrs
+            ;; Our older attrs package is using the 'attr' rather than 'attrs'
+            ;; namespace.
+            ;; TODO: Remove after python-attrs is updated to >= 21.4.0.
+            (lambda _
+              (substitute* (find-files "." "\\.py$")
+                (("from attrs\\b")
+                 "from attr"))))
+          (replace 'build
+            (lambda _
+              (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
+          (replace 'install
+            (lambda _
+              (let ((whl (car (find-files "dist" "\\.whl$"))))
+                (invoke "pip" "--no-cache-dir" "--no-input"
+                        "install" "--no-deps" "--prefix" #$output whl))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                ;; Do not use the 'pytest' binary as it hard-codes an older
+                ;; python-hypothesis version near the beginning of its
+                ;; GUIX_PYTHONPATH.
+                (invoke "python" "-m" "pytest" "-vv" "-c" "/dev/null" "tests"
+                        "-n" (number->string (parallel-job-count))
+                        ;; This test requires orjson, which needs the maturin
+                        ;; build system and new Rust dependencies.
+                        "--ignore" "tests/test_preconf.py")))))))
+    (native-inputs
+     (list python-hypothesis-next
+           python-immutables
+           python-msgpack
+           python-poetry-core
+           python-pymongo               ;for the bson module
+           python-pypa-build
+           python-pytest
+           python-pytest-xdist))
+    (propagated-inputs
+     (list python-attrs
+           python-exceptiongroup
+           python-typing-extensions))
+    (home-page "https://github.com/python-attrs/cattrs")
+    (synopsis "Python library for structuring and unstructuring data")
+    (description "@code{cattrs} is an Python library for structuring and
+unstructuring data.  @code{cattrs} works best with @code{attrs} classes,
+@code{dataclasses} and the usual Python collections, but other kinds of
+classes can also be supported by manually registering converters.")
+    (license license:expat)))
+
 (define-public python-cachy
   (package
     (name "python-cachy")
@@ -17003,17 +17153,31 @@ scans through a file and detects issues.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "07drmi3ai49jw5n23ibkambcgijqcw073ihypjgxfnks5lv4yqy1"))))
+         "07drmi3ai49jw5n23ibkambcgijqcw073ihypjgxfnks5lv4yqy1"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Adjust comprehension syntax for Python > 3.8.
+        ;; From <https://github.com/davidhalter/jedi/issues/1824>.
+        '(substitute* "test/completion/lambdas.py"
+           (("if lambda: 3")
+            "if (lambda: 3)")))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'fix-completion-test
+           (lambda _
+             ;; This resolves a failure in the 'test_completion' test (see:
+             ;; https://github.com/davidhalter/jedi/issues/1824).
+             ;; TODO: Remove after a new release is made (currently: 0.18.1).
+             (substitute* "test/completion/lambdas.py"
+               (("\\[a for a in \\[1,2\\] if lambda: 3\\]\\[0\\]")
+                "[a for a in [1,2] if (lambda: 3)][0]"))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
                (setenv "HOME" "/tmp")
-               (invoke "python" "-m" "pytest" "-vv"))
-             #t)))))
+               (invoke "python" "-m" "pytest" "-vv")))))))
     (native-inputs
      (list python-colorama python-docopt python-pytest))
     (propagated-inputs
@@ -17458,6 +17622,50 @@ multitouch applications.")
 Design spec without sacrificing ease of use or application performance.")
     (license license:expat)))
 
+(define-public python-asynckivy
+  (package
+    (name "python-asynckivy")
+    (version "0.5.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (pypi-uri "asynckivy" version))
+       (sha256
+        (base32 "0ivjvch8yn3k1ybfp7c1nm8mhc0ymg7d04mq54lly7yjvg0jvcni"))))
+    (build-system python-build-system)
+    (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-before 'check 'set-home
+             (lambda _
+               ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
+               (setenv "HOME" (getcwd)))))))
+    (propagated-inputs (list python-kivy python-asyncgui))
+    (home-page "https://github.com/gottadiveintopython/asynckivy")
+    (synopsis "Async library for Kivy")
+    (description
+     "This package provides async versions of Kivy functions to avoid the
+callback-heavy mode of interaction typical in some Kivy applications.")
+    (license license:expat)))
+
+(define-public python-asyncgui
+  (package
+    (name "python-asyncgui")
+    (version "0.5.3")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "asyncgui" version))
+              (sha256
+               (base32
+                "0614130afg2qc1qq4p82piskvvx6lpjl4nlsakbjzdyd78xywnb7"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/gottadiveintopython/asyncgui")
+    (synopsis "Enables async/await without an event loop")
+    (description "This package provides support for async/await applications
+without requiring an event loop, useful for creative responsive GUIs.")
+    (license license:expat)))
+
 (define-public python-binaryornot
   (package
     (name "python-binaryornot")
@@ -17591,13 +17799,13 @@ JSON) codec.")
 (define-public python-pymongo
   (package
     (name "python-pymongo")
-    (version "3.7.2")
+    (version "4.1.1")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "pymongo" version))
               (sha256
                (base32
-                "0zis4707r9hdg5qgkhp3wss9camr9h56ixyfc8n9dxwlnnly4x4c"))))
+                "1m9hc2a4kgg10xy3g5x00z4a7rrk9s0rbf5qfypwnhq0kdfg5f6p"))))
     (build-system python-build-system)
     (propagated-inputs
      (list python-certifi))
@@ -21383,20 +21591,23 @@ time-based (TOTP) passwords.")
 (define-public python-parso
   (package
     (name "python-parso")
-    (version "0.8.2")
+    (version "0.8.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "parso" version))
        (sha256
-        (base32 "161k8771m7w60qakyvrwf9q62lvakmix7mpfylpy7713qs939f0j"))))
+        (base32 "185gkxq92kqiw2h5zp1cmyn04055x0lix4hmi5c077xm1clvw1wc"))))
     (native-inputs
      (list python-pytest))
     (build-system python-build-system)
     (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (replace 'check
-                    (lambda _ (invoke "pytest" "-vv"))))))
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "-vv")))))))
     (home-page "https://github.com/davidhalter/parso")
     (synopsis "Python Parser")
     (description "Parso is a Python parser that supports error recovery and
@@ -25151,23 +25362,30 @@ choose to use Base64 without the “=” padding.")
     (license license:asl2.0)))
 
 (define-public python-py-cpuinfo
-  (package
-    (name "python-py-cpuinfo")
-    (version "5.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "py-cpuinfo" version))
-       (sha256
-        (base32
-         "0045y6832gqjg63jmw0qj2jwyypgjwr7sfdq3lfv49b6fxpl5xic"))))
-    (build-system python-build-system)
-    (home-page "https://github.com/workhorsy/py-cpuinfo")
-    (synopsis "Get CPU info with Python")
-    (description
-     "This Python module returns the CPU info by using the best sources of
+  ;; This is the first commit where riscv64-linux support is available.
+  ;; We can move back to pypi releases with the next release.
+  (let ((commit "4d6987e5c30f2ebacb20781892c01329042cce60")
+        (revision "1"))
+    (package
+      (name "python-py-cpuinfo")
+      (version (git-version "8.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+                (url "https://github.com/workhorsy/py-cpuinfo")
+                (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0h5wi1bfcqqr1x3j1pa7dmkx7siprsyksbsy80fl2sdrrgpji0b0"))))
+      (build-system python-build-system)
+      (home-page "https://github.com/workhorsy/py-cpuinfo")
+      (synopsis "Get CPU info with Python")
+      (description
+       "This Python module returns the CPU info by using the best sources of
 information for your operating system.")
-    (license license:expat)))
+      (license license:expat))))
 
 (define-public python-canonicaljson
   (package
diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm
index 5df217cc2e..1eeabbb809 100644
--- a/gnu/packages/radio.scm
+++ b/gnu/packages/radio.scm
@@ -132,6 +132,42 @@
 useful in modems implemented with @dfn{digital signal processing} (DSP).")
       (license license:lgpl2.1))))
 
+(define-public libcorrect
+  (let ((commit "f5a28c74fba7a99736fe49d3a5243eca29517ae9")
+        (revision "1"))
+    (package
+      (name "libcorrect")
+      (version (git-version "0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/quiet/libcorrect")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0qc9k8x51k2xfvp6cx8vdiyb3g6fl1y657z4m201aw2m06hs1hzg"))))
+      (build-system cmake-build-system)
+      (arguments
+       (list
+        #:test-target "check"
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'build 'build-libfec-compatibility-layer
+              (lambda _
+                (invoke "make" "shim")))
+            (add-after 'install 'delete-static-libraries
+              (lambda _
+                (delete-file (string-append #$output "/lib/libcorrect.a"))
+                (delete-file (string-append #$output "/lib/libfec.a")))))))
+      (home-page "https://github.com/quiet/libcorrect")
+      (synopsis "Forward error correction library")
+      (description
+       "This library provides convolutional and Reed-Solomon codes for forward
+error correction.  It also includes a compatibility layer so that it can be
+used as a drop-in substitute for @code{libfec}.")
+      (license license:bsd-3))))
+
 (define-public liquid-dsp
   (package
     (name "liquid-dsp")
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index d03540213e..d6fe2f9fc0 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -12666,3 +12666,100 @@ into Money objects.")
     (description "This package provides a gem that calculates the exchange rate
 using published rates from open-exchange-rates.  Compatible with the money gem.")
     (license license:expat)))
+
+(define-public ruby-roda
+  (package
+    (name "ruby-roda")
+    (version "3.57.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "roda" version))
+        (sha256
+          (base32 "0nkfxnbcfnriywvx9kpamp850cwjmqv8ssajc95d0aiyjr4kdrfy"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No rakefile
+     `(#:tests? #f))
+    (propagated-inputs (list ruby-rack))
+    (home-page "http://roda.jeremyevans.net")
+    (synopsis "Routing Tree Web Toolkit")
+    (description "Roda is a routing tree web toolkit, designed for building fast
+and maintainable web applications in ruby.")
+    (license license:expat)))
+
+(define-public ruby-nori
+  (package
+    (name "ruby-nori")
+    (version "2.6.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "nori" version))
+        (sha256
+          (base32 "066wc774a2zp4vrq3k7k8p0fhv30ymqmxma1jj7yg5735zls8agn"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; Tests require too old version of rspec
+     `(#:tests? #f))
+    (native-inputs
+     (list ruby-nokogiri
+            ruby-rake
+            ruby-rspec))
+    (home-page "https://github.com/savonrb/nori")
+    (synopsis "XML to Hash translator")
+    (description "Nori is a simple XML parsing ripped from Crack which in-turn
+ripped from Merb.  It supports pluggable parsers and ships with both REXML and
+Nokogiri implementations.")
+    (license license:expat)))
+
+(define-public ruby-faraday-middleware
+  (package
+    (name "ruby-faraday-middleware")
+    (version "1.2.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "faraday_middleware" version))
+        (sha256
+          (base32 "1bw8mfh4yin2xk7138rg3fhb2p5g2dlmdma88k82psah9mbmvlfy"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No rakefile
+     `(#:tests? #f))
+    (propagated-inputs
+     (list ruby-faraday))
+    (home-page "https://github.com/lostisland/faraday_middleware")
+    (synopsis "Various middleware for Faraday")
+    (description "Faraday_Middleware is a collection of middleware for the
+Faraday-based API wrappers.")
+    (license license:expat)))
+
+(define-public ruby-bandwidth-iris
+  (package
+    (name "ruby-bandwidth-iris")
+    (version "5.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (rubygems-uri "ruby-bandwidth-iris" version))
+        (sha256
+          (base32 "1hmrxs0dif6fw5npyzcshk4nq9qr2kbmnx7mdjr5v1nhzlfr0678"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; XXX: Tests don't require helper for some reason, so all fail.
+     `(#:tests? #f))
+    (native-inputs
+     (list ruby-rspec
+            ruby-yard))
+    (propagated-inputs
+     (list ruby-activesupport
+            ruby-builder
+            ruby-faraday
+            ruby-faraday-middleware
+            ruby-nori))
+    (home-page "https://github.com/Bandwidth/ruby-bandwidth-iris")
+    (synopsis "Gem for integrating to Bandwidth's Iris API")
+    (description "Bandwidth IRIS is a Ruby SDK for Bandwidth Phone Number
+Dashboard.  It is a Ruby Client library for IRIS / BBS API.")
+    (license license:expat)))
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index b775ad905c..41bb8f12fa 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -10,6 +10,8 @@
 ;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2020 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022 Jean-Pierre De Jesus DIAZ <me@jeandudey.tech>
+;;; Copyright © 2022 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,7 +34,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
-  #:use-module (guix licenses)
+  #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages acl)
@@ -116,7 +118,7 @@ mounting and managing @acronym{CIFS, Common Internet File System} shares using
 the Linux kernel CIFS client.")
     (home-page "https://wiki.samba.org/index.php/LinuxCIFS_utils")
     ;; cifs-utils is licensed as GPL3 or later, but 3 files contain LGPL code.
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public iniparser
   (package
@@ -178,7 +180,7 @@ are easy to read, write, and modify.
 
 The library is small, thread safe, and written in portable ANSI C with no
 external dependencies.")
-    (license x11)))
+    (license license:x11)))
 
 (define-public samba
   (package
@@ -282,7 +284,7 @@ DOS and Windows, OS/2, GNU/Linux and many others.
 
 Samba is an important component to seamlessly integrate Linux/Unix Servers and
 Desktops into Active Directory environments using the winbind daemon.")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public samba/fixed
   ;; Version that rarely changes, depended on by libsoup.
@@ -329,7 +331,7 @@ Desktops into Active Directory environments using the winbind daemon.")
     (description
      "Talloc is a hierarchical, reference counted memory pool system with
 destructors.  It is the core memory allocator used in Samba.")
-    (license gpl3+))) ;; The bundled "replace" library uses LGPL3.
+    (license license:gpl3+))) ;; The bundled "replace" library uses LGPL3.
 
 (define-public talloc/static
   (package
@@ -396,7 +398,7 @@ destructors.  It is the core memory allocator used in Samba.")
      "Tevent is an event system based on the talloc memory management library.
 It is the core event system used in Samba.  The low level tevent has support for
 many event types, including timers, signals, and the classic file descriptor events.")
-    (license lgpl3+)))
+    (license license:lgpl3+)))
 
 (define-public ldb
   (package
@@ -452,7 +454,7 @@ many event types, including timers, signals, and the classic file descriptor eve
 is provide a fast database with an LDAP-like API designed to be used within an
 application.  In some ways it can be seen as a intermediate solution between
 key-value pair databases and a real LDAP database.")
-    (license lgpl3+)))
+    (license license:lgpl3+)))
 
 (define-public ppp
   (package
@@ -461,7 +463,7 @@ key-value pair databases and a real LDAP database.")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/paulusmack/ppp")
+                    (url "https://github.com/ppp-project/ppp")
                     (commit version)))
               (file-name (git-file-name name version))
               (sha256
@@ -469,26 +471,24 @@ key-value pair databases and a real LDAP database.")
                 "1bhhksdclsnkw54a517ndrw55q5zljjbh9pcqz1z4a2z2flxpsgk"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f                    ; no check target
-       #:make-flags '("CC=gcc")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'patch-Makefile
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((libc    (assoc-ref inputs "libc"))
-                   (openssl (assoc-ref inputs "openssl"))
-                   (libpcap (assoc-ref inputs "libpcap")))
-               (substitute* "pppd/Makefile.linux"
-                 (("/usr/include/crypt\\.h")
-                  (string-append libc "/include/crypt.h"))
-                 (("/usr/include/openssl")
-                  (string-append openssl "/include/openssl"))
-                 (("/usr/include/pcap-bpf.h")
-                  (string-append libpcap "/include/pcap-bpf.h")))
-               #t))))))
+      (list #:tests? #f                    ;; No "check" target
+            #:make-flags #~(list (string-append "CC=" #$(cc-for-target)))
+            #:phases
+            #~(modify-phases %standard-phases
+                (add-before 'configure 'patch-Makefile
+                  (lambda* (#:key inputs #:allow-other-keys)
+                    (let ((openssl (assoc-ref inputs "openssl"))
+                          (libpcap (assoc-ref inputs "libpcap")))
+                      (substitute* "pppd/Makefile.linux"
+                        (("/usr/include/openssl")
+                         (string-append openssl "/include"))
+                        (("-DPPP_FILTER")
+                         (string-append "-DPPP_FILTER -I" libpcap "/include")))
+                      (substitute* "pppd/pppcrypt.h"
+                        (("des\\.h") "openssl/des.h")))
+                    #t)))))
     (inputs
-     (list libpcap
-           (@ (gnu packages tls) openssl)))
+     (list libpcap openssl))
     (synopsis "Implementation of the Point-to-Point Protocol")
     (home-page "https://ppp.samba.org/")
     (description
@@ -498,5 +498,7 @@ and IPV6 and the protocols layered above them, such as TCP and UDP.")
     ;; pppd, pppstats and pppdump are under BSD-style notices.
     ;; some of the pppd plugins are GPL'd.
     ;; chat is public domain.
-    (license (list bsd-3 bsd-4 gpl2+ public-domain))))
-
+    (license (list license:bsd-3
+                   license:bsd-4
+                   license:gpl2+
+                   license:public-domain))))
diff --git a/gnu/packages/search.scm b/gnu/packages/search.scm
index 346313c7ed..27c1aa3318 100644
--- a/gnu/packages/search.scm
+++ b/gnu/packages/search.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2021 Alexandr Vityazev <avityazev@posteo.org>
 ;;; Copyright © 2021, 2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2022 Jai Vetrivelan <jaivetrivelan@gmail.com>
+;;; Copyright © 2022 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,8 +28,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages search)
-  #:use-module ((guix licenses)
-                #:select (gpl2 gpl2+ gpl3+ agpl3+ lgpl2.1+ bsd-3 x11 perl-license))
+  #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -73,14 +73,14 @@
 (define-public xapian
   (package
     (name "xapian")
-    (version "1.4.18")
+    (version "1.4.19")
     ;; Note: When updating Xapian, remember to update xapian-bindings below.
     (source (origin
               (method url-fetch)
               (uri (string-append "https://oligarchy.co.uk/xapian/" version
                                   "/xapian-core-" version ".tar.xz"))
               (sha256
-               (base32 "0xsb4ihf3p767f0zx9p4janwni6r9sg5j6lry0002i8hmnsdnv8r"))))
+               (base32 "1hx92kbqdl38gsrwzvbqgf2jc4wwzsad2gd99g62cdfclvy4ijhz"))))
     (build-system gnu-build-system)
     (inputs (list zlib
                   `(,util-linux "lib")))
@@ -106,7 +106,7 @@ add advanced indexing and search facilities to their own applications.  It
 supports the Probabilistic Information Retrieval model and also supports a
 rich set of boolean query operators.")
     (home-page "https://xapian.org/")
-    (license (list gpl2+ bsd-3 x11))))
+    (license (list license:gpl2+ license:bsd-3 license:x11))))
 
 (define-public python-xapian-bindings
   (package (inherit xapian)
@@ -118,7 +118,7 @@ rich set of boolean query operators.")
                                   "/xapian-bindings-" version ".tar.xz"))
               (sha256
                (base32
-                "13ziql8027glgihgvnbsa75vkcn82g83mbihj60zf0njj170clpy"))))
+                "0gc8l9cn8jdma0p73jl14z17yizp6dax5zsycvgprajii6j8bhwi"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--with-python3")
@@ -133,7 +133,7 @@ rich set of boolean query operators.")
     (inputs
      (list python xapian zlib))
     (synopsis "Python bindings for the Xapian search engine library")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public perl-search-xapian
   (package
@@ -157,7 +157,7 @@ rich set of boolean query operators.")
      "Search::Xapian wraps most methods of most Xapian classes.  The missing
 classes and methods should be added in the future.  It also provides a
 simplified, more 'perlish' interface to some common operations.")
-    (license perl-license)))
+    (license license:perl-license)))
 
 (define-public libtocc
   (package
@@ -201,7 +201,7 @@ simplified, more 'perlish' interface to some common operations.")
 system.  The goal of Tocc is to provide a better system for classifying files
 that is more flexible than classic file systems that are based on a tree of
 files and directories.")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public tocc
   (package
@@ -222,7 +222,7 @@ files and directories.")
     (description
      "Tocc is a tag-based file management system.  This package contains the
 command line tool for interacting with libtocc.")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public searx
   (package
@@ -269,7 +269,7 @@ command line tool for interacting with libtocc.")
     (home-page "https://searx.github.io/searx/")
     (synopsis "Privacy-respecting metasearch engine")
     (description "Searx is a privacy-respecting, hackable metasearch engine.")
-    (license agpl3+)))
+    (license license:agpl3+)))
 
 (define-public bool
   (package
@@ -294,7 +294,7 @@ statements, as well as the NEAR statement to search for the occurrence of
 words in close proximity to each other.  It handles context gracefully,
 accounting for new lines and paragraph changes.  It also has robust support
 for parsing HTML files.")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public fsearch
   (package
@@ -325,7 +325,7 @@ for parsing HTML files.")
     (description
      "FSearch is a fast file search utility, inspired by Everything
 Search Engine.  It is written in C and based on GTK3.")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public recoll
   (package
@@ -421,7 +421,7 @@ their file names.  It can search most document formats, but you may need
 external applications for text extraction.  It can reach any storage place:
 files, archive members, email attachments, transparently handling
 decompression.")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public hyperestraier
   (package
@@ -447,7 +447,7 @@ decompression.")
     (description "Hyper Estraier can be used to integrate full-text
 search into applications, using either the provided command line and CGI
 interfaces, or a C API.")
-    (license lgpl2.1+)))
+    (license license:lgpl2.1+)))
 
 (define-public mlocate
   (package
@@ -470,7 +470,7 @@ most of the file system, which makes it faster and does not trash the system
 caches as much.  The locate(1) utility is intended to be completely compatible
 with slocate, and attempts to be compatible to GNU locate when it does not
 conflict with slocate compatibility.")
-    (license gpl2)))
+    (license license:gpl2)))
 
 (define-public plocate
   (package
@@ -508,7 +508,7 @@ conflict with slocate compatibility.")
     (description "Plocate is a @code{locate} based on posting lists,
 completely replacing @command{mlocate} with a faster and smaller index.  It is
 suitable as a default locate on your system.")
-    (license gpl2)))
+    (license license:gpl2)))
 
 (define-public swish-e
   (package
@@ -569,7 +569,7 @@ suitable as a default locate on your system.")
      "Swish-e is Simple Web Indexing System for Humans - Enhanced.  Swish-e
 can quickly and easily index directories of files or remote web sites and
 search the generated indexes.")
-    (license gpl2+)))                   ;with exception
+    (license license:gpl2+)))           ; with exception
 
 (define-public xapers
   (package
@@ -637,7 +637,7 @@ geared towards academic journal articles build on the Xapian search engine.
 Think of it as your own personal document search engine, or a local cache of
 online libraries.  It provides fast search of document text and
 bibliographic data and simple document and bibtex retrieval.")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public ugrep
   (package
@@ -692,6 +692,6 @@ multi-threaded and other techniques to speed up search, pattern-matching and
 decompression.  Many pre-defined regexps ease searching e.g. C typdefs or XML
 attributes.  Results can be output in several structured or self-defined
 formats.")
-    (license bsd-3)))
+    (license license:bsd-3)))
 
 ;;; search.scm ends here
diff --git a/gnu/packages/shellutils.scm b/gnu/packages/shellutils.scm
index ad674a3989..110cbe9fda 100644
--- a/gnu/packages/shellutils.scm
+++ b/gnu/packages/shellutils.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
 ;;; Copyright © 2021 Wiktor Żelazny <wzelazny@vurv.cz>
+;;; Copyright © 2022 Jose G Perez Taveras <josegpt27@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -368,7 +369,7 @@ are already there.")
 (define-public direnv
   (package
     (name "direnv")
-    (version "2.31.0")
+    (version "2.32.1")
     (source
      (origin (method git-fetch)
              (uri (git-reference
@@ -377,7 +378,7 @@ are already there.")
              (file-name (git-file-name name version))
              (sha256
               (base32
-               "1c52izjzkdhmyrfx1gmbp34n0qpxyxw0s94f0vy3ldlg8xr36wmk"))))
+               "1i473j7j4sx8p83zqlnakskqk0jyd3byajp7jmv2gym9s4k841y7"))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "github.com/direnv/direnv"
diff --git a/gnu/packages/sphinx.scm b/gnu/packages/sphinx.scm
index 1ae6be40ca..bbb070ddf6 100644
--- a/gnu/packages/sphinx.scm
+++ b/gnu/packages/sphinx.scm
@@ -468,6 +468,8 @@ builder does not support SVG images natively (e.g. LaTeX).")
     (arguments
      ;; FIXME: Tests depend on Sphinx, which depends on this.
      `(#:tests? #f))
+    (propagated-inputs
+     (list python-sphinxcontrib-serializinghtml))
     (home-page "https://sphinx-doc.org/")
     (synopsis "Sphinx API for web applications")
     (description
@@ -717,14 +719,14 @@ and several other projects.")
 (define-public python-breathe
   (package
     (name "python-breathe")
-    (version "4.30.0")
+    (version "4.34.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "breathe" version))
        (sha256
         (base32
-         "055h95fkdld7s49878fqjx1nri1drj1czc184vrb7i60mf2yqg9n"))))
+         "18fvphs1cb2cns9q82195fx7lmlwfikzwa10cczavpaax2jnh1xc"))))
     (build-system python-build-system)
     (propagated-inputs
      (list python-docutils python-sphinx))
@@ -817,7 +819,7 @@ enabled web server.")
 (define-public python-sphinx-autodoc-typehints
   (package
     (name "python-sphinx-autodoc-typehints")
-    (version "1.18.1")
+    (version "1.18.3")
     (source
      (origin
        (method git-fetch)               ;no tests in pypi archive
@@ -827,7 +829,7 @@ enabled web server.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "16yhpwfdmybir80a6892cnr98m58p19rklmjdlzhk3njx7di8jzp"))))
+         "049dlay21f4bccig31fkbzq2m8v0h6g63p1cn3dxay9q3h0mzgs0"))))
     (build-system python-build-system)
     (arguments
      (list
diff --git a/gnu/packages/suckless.scm b/gnu/packages/suckless.scm
index 5aa37657b9..a560f8bc62 100644
--- a/gnu/packages/suckless.scm
+++ b/gnu/packages/suckless.scm
@@ -39,6 +39,7 @@
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages libbsd)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages mpd)
@@ -519,31 +520,33 @@ point surf to another URI by setting its XProperties.")
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
-                  (delete 'configure))  ; no configuration
-       #:tests? #f                      ; no test suite
+                  (delete 'configure) ;no configuration
+                  (add-before 'build 'patch-farbfeld
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (substitute* "config.def.h"
+                        (("2ff") (search-input-file inputs "/bin/2ff"))))))
+       #:tests? #f                                ;no test suite
        #:make-flags
        (let ((pkg-config (lambda (flag)
-                           (string-append
-                            "$(shell pkg-config " flag " "
-                            "xft fontconfig x11 libpng)"))))
-         (list (string-append "CC=" ,(cc-for-target))
+                           (string-append "$(shell pkg-config " flag " "
+                                          "xft fontconfig x11 libpng)"))))
+         (list (string-append "CC="
+                              ,(cc-for-target))
                (string-append "PREFIX=" %output)
-               (string-append "INCS=-I. " (pkg-config "--cflags"))
-               (string-append "LIBS=" (pkg-config "--libs") " -lm")))))
-    (native-inputs
-     (list pkg-config))
-    (inputs
-     `(("libpng" ,libpng)
-       ("libx11" ,libx11)
-       ("libxft" ,libxft)
-       ("fontconfig" ,fontconfig)))
+               (string-append "INCS=-I. "
+                              (pkg-config "--cflags"))
+               (string-append "LIBS="
+                              (pkg-config "--libs") " -lm")))))
+    (native-inputs (list pkg-config))
+    (inputs (list farbfeld libpng libx11 libxft fontconfig))
     (synopsis "Plain-text presentation tool")
-    (description "Sent uses plain-text files and PNG images to create slideshow
+    (description
+     "Sent uses plain-text files and PNG images to create slideshow
 presentations.  Each paragraph represents a slide in the presentation.
 Especially for presentations using the Takahashi method this is very nice and
 allows you to write down the presentation for a quick lightning talk within a
 few minutes.")
-    (home-page "https://tools.suckless.org/sent")
+    (home-page "https://tools.suckless.org/sent/")
     (license license:x11)))
 
 (define-public wmname
@@ -1049,7 +1052,7 @@ support.")
 (define-public sfeed
   (package
     (name "sfeed")
-    (version "1.1")
+    (version "1.5")
     (source
      (origin
        (method git-fetch)
@@ -1059,7 +1062,7 @@ support.")
          (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1b0l6f9aymk54ncc2kxavhg4flcqv7d4mpkpw8ljx7mzg0g4ygyk"))))
+        (base32 "1w3xk00nv502q2nr23y1sig7bkqa7f431f4fcaybfcfk7dbv2piq"))))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -1084,3 +1087,43 @@ There are formatting programs included to convert this TAB-separated format to
 various other formats.  There are also some programs and scripts included to
 import and export OPML and to fetch, filter, merge and order feed items.")
     (license license:isc)))
+
+(define-public farbfeld
+  (let ((commit "ab5e3dfc9cdb476218538c6687df9f44826d8f11") (revision "0"))
+    (package
+      (name "farbfeld")
+      (version (git-version "4" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "git://git.suckless.org/farbfeld")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0pkmkvv5ggpzqwqdchd19442x8gh152xy5z1z13ipfznhspsf870"))))
+      (build-system gnu-build-system)
+      (inputs (list libpng libjpeg-turbo imagemagick))
+      (arguments
+       (list #:tests?
+             #f ;no check target
+             #:make-flags
+             #~(list (string-append "PREFIX="
+                                    #$output)
+                     (string-append "CC="
+                                    #$(cc-for-target)))
+             #:phases
+             #~(modify-phases %standard-phases
+                 (add-before 'configure 'patch-2ff
+                   (lambda* (#:key inputs outputs #:allow-other-keys)
+                     (substitute* "2ff"
+                       (("png2ff") (string-append #$output "/bin/png2ff"))
+                       (("jpg2ff") (string-append #$output "/bin/jpg2ff"))
+                       (("convert") (search-input-file inputs "/bin/convert")))))
+                 (delete 'configure))))
+      (synopsis "Image format and conversion tools")
+      (description
+       "farbfeld is a lossless image format which is easy to parse,
+pipe and compress.")
+      (home-page "https://git.suckless.org/farbfeld/")
+      (license license:isc))))
diff --git a/gnu/packages/task-management.scm b/gnu/packages/task-management.scm
index aeedbfbe6a..f8f52a8ccd 100644
--- a/gnu/packages/task-management.scm
+++ b/gnu/packages/task-management.scm
@@ -37,6 +37,7 @@
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index 1c936be6a8..02ce008491 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -56,6 +56,7 @@
   #:use-module (gnu packages code)
   #:use-module (gnu packages cpp)
   #:use-module (gnu packages crates-io)
+  #:use-module (gnu packages datastructures)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
@@ -1215,3 +1216,53 @@ can be embedded in any application
 This package includes the @code{libtree-sitter} runtime library.
 ")
     (license license:expat)))
+
+(define-public mle
+  (package
+    (name "mle")
+    (version "1.5.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/adsr/mle")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1nhd00lsx9v12zdmps92magz76c2d8zzln3lxvzl4ng73gbvq3n0"))))
+    (build-system gnu-build-system)
+    (inputs (list lua pcre uthash))
+    (arguments
+     `(#:test-target "test"
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'fix-lua
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (substitute* "mle.h"
+                        (("<lua5.4/") "<"))
+                      (substitute* "Makefile"
+                        (("-llua5.4") "-llua")
+                        (("/bin/sh") (which "sh")))))
+                  (add-after 'unpack 'patch-test-shebangs
+                    (lambda _
+                      (substitute* (find-files "tests/func" "\\.sh$")
+                        (("/usr/bin/env bash") (which "bash")))))
+                  (delete 'configure) ;no configure script
+                  (add-after 'install 'install-man-pages
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let* ((out (assoc-ref outputs "out"))
+                             (man (string-append out
+                                                 "/share/man/man1")))
+                        (install-file "mle.1"
+                                      (string-append man))))))
+       #:make-flags (list (string-append "CC="
+                                         ,(cc-for-target))
+                          (string-append "prefix=" %output))))
+    (home-page "https://github.com/adsr/mle")
+    (synopsis "Small, flexible, terminal-based text editor")
+    (description
+     "mle is a small, flexible, terminal-based text editor written in C.
+Notable features include: full Unicode support, syntax highlighting,
+scriptable rc file, macros, search and replace (PCRE), window
+splitting, multiple cursors, and integration with various shell
+commands.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/time.scm b/gnu/packages/time.scm
index eede7b9bd7..fea9ff25f7 100644
--- a/gnu/packages/time.scm
+++ b/gnu/packages/time.scm
@@ -43,6 +43,7 @@
   #:use-module (gnu packages golang)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages terminals)
   #:use-module (gnu packages textutils)
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index bb05adb8b7..7b2f43d993 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -351,6 +351,7 @@ OpenSSL for TARGET."
   (package
     (name "openssl")
     (version "1.1.1n")
+    (replacement openssl/fixed)
     (source (origin
               (method url-fetch)
               (uri (list (string-append "https://www.openssl.org/source/openssl-"
@@ -473,10 +474,29 @@ OpenSSL for TARGET."
     (license license:openssl)
     (home-page "https://www.openssl.org/")))
 
+(define openssl/fixed
+  (package
+    (inherit openssl)
+    (name "openssl")
+    (version "1.1.1p")
+    (source (origin
+              (method url-fetch)
+              (uri (list (string-append "https://www.openssl.org/source/openssl-"
+                                        version ".tar.gz")
+                         (string-append "ftp://ftp.openssl.org/source/"
+                                        "openssl-" version ".tar.gz")
+                         (string-append "ftp://ftp.openssl.org/source/old/"
+                                        (string-trim-right version char-set:letter)
+                                        "/openssl-" version ".tar.gz")))
+              (patches (search-patches "openssl-1.1-c-rehash-in.patch"))
+              (sha256
+               (base32
+                "0vyfibydji26wk1fmm0piz0810mfr7j4vaa2k5iwgiv6m8mbcqdz"))))))
+
 (define-public openssl-3.0
   (package
     (inherit openssl)
-    (version "3.0.3")
+    (version "3.0.4")
     (source (origin
               (method url-fetch)
               (uri (list (string-append "https://www.openssl.org/source/openssl-"
@@ -489,7 +509,7 @@ OpenSSL for TARGET."
               (patches (search-patches "openssl-3.0-c-rehash-in.patch"))
               (sha256
                (base32
-                "02wcan5izwsxg6vl5fzkqq4icwi7cp4hrj327h05zppirsnph07f"))))
+                "03y0q2pzpkpgfgf74x4pf8gyar9d7pb0l0p7g2s0m2k6k8z88c98"))))
     (arguments
      (substitute-keyword-arguments (package-arguments openssl)
        ((#:phases phases '%standard-phases)
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 3f565867aa..e88c3071a3 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -2467,7 +2467,7 @@ YouTube.com and many more sites.")
 (define-public yt-dlp
   (package/inherit youtube-dl
     (name "yt-dlp")
-    (version "2022.05.18")
+    (version "2022.06.22.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/yt-dlp/yt-dlp/"
@@ -2475,7 +2475,7 @@ YouTube.com and many more sites.")
                                   version "/yt-dlp.tar.gz"))
               (sha256
                (base32
-                "0wiiwqj8m4z6lladmrsp9354ddwlhn2gf0b39j271001g6fyi82r"))
+                "1nr6g3dhvjc10jzhyvgjrrxqhsgi3hiw8bswp8bi6bscimd9vhps"))
               (snippet
                '(begin
                   ;; Delete the pre-generated files, except for the man page
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 4cb83b4d85..e184f54e81 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -18,7 +18,7 @@
 ;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2021, 2022 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2021 Dion Mendel <guix@dm9.info>
 ;;; Copyright © 2021 Andrew Whatson <whatson@gmail.com>
 ;;; Copyright © 2021 Vincent Legoll <vincent.legoll@gmail.com>
@@ -1166,7 +1166,7 @@ It started as a side project of LXC but can be used by any run-time.")
 (define-public lxd
   (package
     (name "lxd")
-    (version "4.22")
+    (version "4.24")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1174,7 +1174,7 @@ It started as a side project of LXC but can be used by any run-time.")
                     "lxd-" version "/lxd-" version ".tar.gz"))
               (sha256
                (base32
-                "119345936fcm1vv06k82k9hvj5yjf9jdrwqm9ccphhl5mswf8xq9"))))
+                "0lmjmvm98m6yjxcqlfw690i71nazfzgrm3mzbjj77g1631df3ylp"))))
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/lxc/lxd"
@@ -1817,7 +1817,7 @@ main monitor/GPU.")
 (define-public runc
   (package
     (name "runc")
-    (version "1.0.0-rc93")
+    (version "1.1.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1826,7 +1826,7 @@ main monitor/GPU.")
               (file-name (string-append name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0b90r1bkvlqli53ca1yc1l488dba0isd3i6l7nlhszxi8p7hzvkh"))))
+                "0jx56x49dgkygdbrfb3pmxycy1n37arj97jra8n422dj36xz1hbm"))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "github.com/opencontainers/runc"
@@ -1851,8 +1851,7 @@ main monitor/GPU.")
                  (invoke "make" "install" "install-bash" "install-man"
                          (string-append "PREFIX=" out)))))))))
     (native-inputs
-     `(("go-md2man" ,go-github-com-go-md2man)
-       ("pkg-config" ,pkg-config)))
+     (list go-github-com-go-md2man pkg-config))
     (inputs
      (list libseccomp))
     (synopsis "Open container initiative runtime")
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index d946fa4d2f..9703f76031 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -37,7 +37,7 @@
 ;;; Copyright © 2020 Marcin Karpezo <sirmacik@wioo.waw.pl>
 ;;; Copyright © 2020 EuAndreh <eu@euandre.org>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2020, 2022 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2020 Niklas Eklund <niklas.eklund@posteo.net>
 ;;; Copyright © 2020 Robert Smith <robertsmith@posteo.net>
@@ -55,6 +55,7 @@
 ;;; Copyright © 2022 Pier-Hugues Pellerin <ph@heykimo.com>
 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2022 muradm <mail@muradm.net>
+;;; Copyright © 2022 Elais Player <elais@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -130,6 +131,7 @@
   #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
@@ -1469,19 +1471,29 @@ its size
 (define-public polybar
   (package
     (name "polybar")
-    (version "3.5.7")
+    (version "3.6.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/polybar/polybar/releases/"
                            "download/" version "/polybar-" version ".tar.gz"))
        (sha256
-        (base32 "1nr386jdlm8qkbdf23w7lyvbfhr362s90f957fawnyi1finhw8bk"))))
+        (base32 "19azx5dpfyfh0pv4q2fcrf4p7a0pc5d13m7lnv3qy8376mbmhmzj"))))
     (build-system cmake-build-system)
     (arguments
      ;; Test is disabled because it requires downloading googletest from the
      ;; Internet.
-     '(#:tests? #f))
+     (list #:tests? #f
+           #:phases
+           #~(modify-phases %standard-phases
+               ;; Make polybar find its default configuration file in the
+               ;; store.
+               (add-after 'unpack 'patch-config-path
+                 (lambda _
+                   (substitute* "CMakeLists.txt"
+                     (("/etc") (string-append #$output "/etc")))
+                   (substitute* "src/utils/file.cpp"
+                     (("\"/etc\"") (string-append "\"" #$output "/etc\""))))))))
     (inputs
      (list alsa-lib
            cairo
@@ -1489,6 +1501,7 @@ its size
            jsoncpp
            libmpdclient
            libnl
+           libuv
            libxcb
            pulseaudio
            xcb-proto
@@ -1498,12 +1511,9 @@ its size
            xcb-util-wm
            xcb-util-xrm))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-sphinx" ,python-sphinx) ; for the manual
-       ;; XXX: "python" input must be located after "python-2", or the package
-       ;; fails to build with "missing required python module: xcbgen".
-       ("python-2" ,python-2)           ; lib/xpp depends on python 2
-       ("python" ,python)))             ; xcb-proto depends on python 3
+     (list pkg-config
+           python-sphinx ; for the manual
+           python))      ; xcb-proto depends on python 3
     (home-page "https://polybar.github.io/")
     (synopsis "Fast and easy-to-use status bar")
     (description "Polybar aims to help users build beautiful and highly
@@ -1538,7 +1548,7 @@ functionality to display information about the most commonly used services.")
     (propagated-inputs
      (list ;; As required by wlroots.pc.
            eudev
-           libinput
+           libinput-minimal
            libxkbcommon
            mesa
            pixman
@@ -1572,7 +1582,10 @@ modules for building a Wayland compositor.")
         (base32 "0ss3l258blyf2d0lwd7pi7ga1fxfj8pxhag058k7cmjhs3y30y5l"))))
     (build-system meson-build-system)
     (arguments
-     `(#:phases
+     `(;; elogind is propagated by wlroots -> libseat
+       ;; and would otherwise shadow basu.
+       #:configure-flags '("-Dsd-bus-provider=basu")
+       #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'hardcode-paths
            (lambda* (#:key inputs #:allow-other-keys)
@@ -1587,12 +1600,12 @@ modules for building a Wayland compositor.")
                 (string-append "'" (assoc-ref inputs "scdoc")
                                "/bin/scdoc'")))
              #t)))))
-    (inputs (list cairo
-                  elogind
+    (inputs (list basu
+                  cairo
                   gdk-pixbuf
                   json-c
                   libevdev
-                  libinput
+                  libinput-minimal
                   libxkbcommon
                   pango
                   swaybg
@@ -1724,7 +1737,7 @@ display a clock or apply image manipulation techniques to the background image."
                   gtkmm-3
                   jsoncpp
                   libdbusmenu
-                  libinput
+                  libinput-minimal
                   libmpdclient
                   libnl
                   libxml2
@@ -1785,16 +1798,16 @@ compositors that support the layer-shell protocol.")
 (define-public kanshi
   (package
     (name "kanshi")
-    (version "1.1.0")
+    (version "1.2.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/emersion/kanshi")
+             (url "https://git.sr.ht/~emersion/kanshi")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0nbpgm8qnn7ljsg9vgs35kl8l4rrk542vdcbx8wrn9r909ld3x92"))))
+        (base32 "10lxagwc2pkq86g2sxkwljjd39sahp3w1j5yx853d3c4d95iwls5"))))
     (build-system meson-build-system)
     (inputs (list wayland))
     (native-inputs (list pkg-config scdoc))
@@ -1808,7 +1821,7 @@ Wayland compositors supporting the wlr-output-management protocol.")
 (define-public stumpwm
   (package
     (name "stumpwm")
-    (version "20.11")
+    (version "22.05")
     (source
      (origin
        (method git-fetch)
@@ -1817,55 +1830,60 @@ Wayland compositors supporting the wlr-output-management protocol.")
              (commit version)))
        (file-name (git-file-name "stumpwm" version))
        (sha256
-        (base32 "1ghs6ihvmb3bz4q4ys1d3h6rdi96xyiw7l2ip7jh54c25049aymf"))))
+        (base32 "12hf70mpwy0ixiyvv8sf8pkwrzz8nb12a8ybvsdpibsxfjxgxnan"))))
     (build-system asdf-build-system/sbcl)
-    (native-inputs `(("fiasco" ,sbcl-fiasco)
-                     ("texinfo" ,texinfo)
-
-                     ;; To build the manual.
-                     ("autoconf" ,autoconf)
-                     ("automake" ,automake)))
-    (inputs `(("cl-ppcre" ,sbcl-cl-ppcre)
-              ("clx" ,sbcl-clx)
-              ("alexandria" ,sbcl-alexandria)))
+    (native-inputs
+     (list sbcl-fiasco
+           texinfo
+
+           ;; To build the manual.
+           autoconf
+           automake))
+    (inputs
+     (list sbcl-alexandria
+           sbcl-cl-ppcre
+           sbcl-clx))
     (outputs '("out" "lib"))
     (arguments
-     '(#:asd-systems '("stumpwm")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'create-asdf-configuration 'build-program
-           (lambda* (#:key outputs #:allow-other-keys)
-             (build-program
-              (string-append (assoc-ref outputs "out") "/bin/stumpwm")
-              outputs
-              #:entry-program '((stumpwm:stumpwm) 0))))
-         (add-after 'build-program 'create-desktop-file
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (xsessions (string-append out "/share/xsessions")))
-               (mkdir-p xsessions)
-               (call-with-output-file
-                   (string-append xsessions "/stumpwm.desktop")
-                 (lambda (file)
-                   (format file
-                    "[Desktop Entry]~@
-                     Name=stumpwm~@
-                     Comment=The Stump Window Manager~@
-                     Exec=~a/bin/stumpwm~@
-                     TryExec=~@*~a/bin/stumpwm~@
-                     Icon=~@
-                     Type=Application~%"
-                    out)))
-               #t)))
-         (add-after 'install 'install-manual
-           (lambda* (#:key (make-flags '()) outputs #:allow-other-keys)
-             (let* ((out  (assoc-ref outputs "out"))
-                    (info (string-append out "/share/info")))
-               (invoke "./autogen.sh")
-               (invoke "sh" "./configure" "SHELL=sh")
-               (apply invoke "make" "stumpwm.info" make-flags)
-               (install-file "stumpwm.info" info)
-               #t))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-tests
+            (lambda _
+              (substitute* "stumpwm-tests.asd"
+                (("\"ALL-TESTS\"")
+                 "\"RUN-PACKAGE-TESTS\" :package"))))
+          (add-after 'create-asdf-configuration 'build-program
+            (lambda* (#:key outputs #:allow-other-keys)
+              (build-program
+               (string-append (assoc-ref outputs "out") "/bin/stumpwm")
+               outputs
+               #:entry-program '((stumpwm:stumpwm) 0))))
+          (add-after 'build-program 'create-desktop-file
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (xsessions (string-append out "/share/xsessions")))
+                (mkdir-p xsessions)
+                (call-with-output-file
+                    (string-append xsessions "/stumpwm.desktop")
+                  (lambda (file)
+                    (format file
+                     "[Desktop Entry]~@
+                      Name=stumpwm~@
+                      Comment=The Stump Window Manager~@
+                      Exec=~a/bin/stumpwm~@
+                      TryExec=~@*~a/bin/stumpwm~@
+                      Icon=~@
+                      Type=Application~%"
+                     out))))))
+          (add-after 'install 'install-manual
+            (lambda* (#:key (make-flags '()) outputs #:allow-other-keys)
+              (let* ((out  (assoc-ref outputs "out"))
+                     (info (string-append out "/share/info")))
+                (invoke "./autogen.sh")
+                (invoke "sh" "./configure" "SHELL=sh")
+                (apply invoke "make" "stumpwm.info" make-flags)
+                (install-file "stumpwm.info" info)))))))
     (synopsis "Window manager written in Common Lisp")
     (description "Stumpwm is a window manager written entirely in Common Lisp.
 It attempts to be highly customizable while relying entirely on the keyboard
@@ -2566,7 +2584,7 @@ read and write, and compatible with JSON.")
      (list bmake pkg-config wayland-protocols))
     (inputs
      (list cairo
-           libinput
+           libinput-minimal
            libucl
            libxkbcommon
            linux-pam
diff --git a/gnu/services/configuration.scm b/gnu/services/configuration.scm
index f6b20fb82b..e3c101d042 100644
--- a/gnu/services/configuration.scm
+++ b/gnu/services/configuration.scm
@@ -27,7 +27,8 @@
   #:use-module (guix records)
   #:use-module (guix gexp)
   #:use-module ((guix utils) #:select (source-properties->location))
-  #:use-module ((guix diagnostics) #:select (formatted-message location-file))
+  #:use-module ((guix diagnostics)
+                #:select (formatted-message location-file &error-location))
   #:use-module ((guix modules) #:select (file-name->module-name))
   #:use-module (guix i18n)
   #:autoload   (texinfo) (texi-fragment->stexi)
@@ -56,7 +57,6 @@
             serialize-configuration
             define-maybe
             define-maybe/no-serialization
-            validate-configuration
             generate-documentation
             configuration->documentation
             empty-serializer
@@ -87,9 +87,17 @@
 (define (configuration-error message)
   (raise (condition (&message (message message))
                     (&configuration-error))))
-(define (configuration-field-error field val)
-  (configuration-error
-   (format #f "Invalid value for field ~a: ~s" field val)))
+(define (configuration-field-error loc field value)
+  (raise (apply
+          make-compound-condition
+          (formatted-message (G_ "invalid value ~s for field '~a'")
+                             value field)
+          (condition (&configuration-error))
+          (if loc
+              (list (condition
+                     (&error-location (location loc))))
+              '()))))
+
 (define (configuration-missing-field kind field)
   (configuration-error
    (format #f "~a configuration missing required field ~a" kind field)))
@@ -116,14 +124,6 @@ does not have a default value" field kind)))
                 ((configuration-field-getter field) config)))
              fields)))
 
-(define (validate-configuration config fields)
-  (for-each (lambda (field)
-              (let ((val ((configuration-field-getter field) config)))
-                (unless ((configuration-field-predicate field) val)
-                  (configuration-field-error
-                   (configuration-field-name field) val))))
-            fields))
-
 (define-syntax-rule (id ctx parts ...)
   "Assemble PARTS into a raw (unhygienic) identifier."
   (datum->syntax ctx (symbol-append (syntax->datum parts) ...)))
@@ -210,9 +210,33 @@ does not have a default value" field kind)))
                                 (id #'stem #'serialize- type))))))
                   #'(field-type ...)
                   #'((custom-serializer ...) ...))))
+         (define (field-sanitizer name pred)
+           ;; Define a macro for use as a record field sanitizer, where NAME
+           ;; is the name of the field and PRED is the predicate that tells
+           ;; whether a value is valid for this field.
+           #`(define-syntax #,(id #'stem #'validate- #'stem #'- name)
+               (lambda (s)
+                 ;; Make sure the given VALUE, for field NAME, passes PRED.
+                 (syntax-case s ()
+                   ((_ value)
+                    (with-syntax ((name #'#,name)
+                                  (pred #'#,pred)
+                                  (loc (datum->syntax #'value
+                                                      (syntax-source #'value))))
+                      #'(if (pred value)
+                            value
+                            (configuration-field-error
+                             (and=> 'loc source-properties->location)
+                             'name value))))))))
+
          #`(begin
+             ;; Define field validation macros.
+             #,@(map field-sanitizer
+                     #'(field ...)
+                     #'(field-predicate ...))
+
              (define-record-type* #,(id #'stem #'< #'stem #'>)
-               #,(id #'stem #'% #'stem)
+               stem
                #,(id #'stem #'make- #'stem)
                #,(id #'stem #'stem #'?)
                (%location #,(id #'stem #'stem #'-location)
@@ -220,10 +244,13 @@ does not have a default value" field kind)))
                                           source-properties->location))
                           (innate))
                #,@(map (lambda (name getter def)
-                         #`(#,name #,getter (default #,def)))
+                         #`(#,name #,getter (default #,def)
+                                   (sanitize
+                                    #,(id #'stem #'validate- #'stem #'- name))))
                        #'(field ...)
                        #'(field-getter ...)
                        #'(field-default ...)))
+
              (define #,(id #'stem #'stem #'-fields)
                (list (configuration-field
                       (name 'field)
@@ -240,12 +267,7 @@ does not have a default value" field kind)))
                                '#,(id #'stem #'% #'stem) 'field)
                               field-default)))
                       (documentation doc))
-                     ...))
-             (define-syntax-rule (stem arg (... ...))
-               (let ((conf (#,(id #'stem #'% #'stem) arg (... ...))))
-                 (validate-configuration conf
-                                         #,(id #'stem #'stem #'-fields))
-                 conf))))))))
+                     ...))))))))
 
 (define no-serialization         ;syntactic keyword for 'define-configuration'
   '(no serialization))
diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm
index d99743ac31..10e6523861 100644
--- a/gnu/services/mail.scm
+++ b/gnu/services/mail.scm
@@ -285,7 +285,7 @@ the section name.")
     (serialize-fifo-listener-configuration field-name val))
    ((inet-listener-configuration? val)
     (serialize-inet-listener-configuration field-name val))
-   (else (configuration-field-error field-name val))))
+   (else (configuration-field-error #f field-name val))))
 (define (listener-configuration-list? val)
   (and (list? val) (and-map listener-configuration? val)))
 (define (serialize-listener-configuration-list field-name val)
@@ -1610,10 +1610,6 @@ POP3, IMAP, and LMTP.  @var{config} should be a configuration object created
 by @code{dovecot-configuration}.  @var{config} may also be created by
 @code{opaque-dovecot-configuration}, which allows specification of the
 @code{dovecot.conf} as a string."
-  (validate-configuration config
-                          (if (opaque-dovecot-configuration? config)
-                              opaque-dovecot-configuration-fields
-                              dovecot-configuration-fields))
   (service dovecot-service-type config))
 
 ;; A little helper to make it easier to document all those fields.
diff --git a/gnu/services/vpn.scm b/gnu/services/vpn.scm
index 8be632d55f..82ff05b351 100644
--- a/gnu/services/vpn.scm
+++ b/gnu/services/vpn.scm
@@ -540,11 +540,9 @@ is truncated and rewritten every minute.")
 to an existing @acronym{VPN, virtual private network}.")))
 
 (define* (openvpn-client-service #:key (config (openvpn-client-configuration)))
-  (validate-configuration config openvpn-client-configuration-fields)
   (service openvpn-client-service-type config))
 
 (define* (openvpn-server-service #:key (config (openvpn-server-configuration)))
-  (validate-configuration config openvpn-server-configuration-fields)
   (service openvpn-server-service-type config))
 
 (define (generate-openvpn-server-documentation)
@@ -814,7 +812,8 @@ PostUp = ~a set %i private-key ~a
              (start #~(lambda _
                        (invoke #$wg-quick "up" #$config)))
              (stop #~(lambda _
-                       (invoke #$wg-quick "down" #$config)))
+                       (invoke #$wg-quick "down" #$config)
+                       #f))                       ;stopped!
              (documentation "Run the Wireguard VPN tunnel"))))))
 
 (define wireguard-service-type
diff --git a/gnu/system/image.scm b/gnu/system/image.scm
index f02f6e0b8c..5972a944d7 100644
--- a/gnu/system/image.scm
+++ b/gnu/system/image.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2020, 2021 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2022 Pavel Shlyak <p.shlyak@pantherx.org>
+;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -66,6 +67,7 @@
             root-label
 
             esp-partition
+            esp32-partition
             root-partition
 
             efi-disk-image
@@ -75,6 +77,7 @@
 
             image-with-os
             efi-raw-image-type
+            efi32-raw-image-type
             qcow2-image-type
             iso-image-type
             uncompressed-iso-image-type
@@ -110,6 +113,11 @@
    (flags '(esp))
    (initializer (gexp initialize-efi-partition))))
 
+(define esp32-partition
+  (partition
+   (inherit esp-partition)
+   (initializer (gexp initialize-efi32-partition))))
+
 (define root-partition
   (partition
    (size 'guess)
@@ -123,6 +131,11 @@
    (format 'disk-image)
    (partitions (list esp-partition root-partition))))
 
+(define efi32-disk-image
+  (image
+   (format 'disk-image)
+   (partitions (list esp32-partition root-partition))))
+
 (define iso9660-image
   (image
    (format 'iso9660)
@@ -164,6 +177,11 @@ set to the given OS."
    (name 'efi-raw)
    (constructor (cut image-with-os efi-disk-image <>))))
 
+(define efi32-raw-image-type
+  (image-type
+   (name 'efi32-raw)
+   (constructor (cut image-with-os efi32-disk-image <>))))
+
 (define qcow2-image-type
   (image-type
    (name 'qcow2)
@@ -376,6 +394,7 @@ used in the image."
                                                 #$(image-shared-store? image))
                               #:system-directory #$os
                               #:grub-efi #+grub-efi
+                              #:grub-efi32 #+grub-efi32
                               #:bootloader-package
                               #+(bootloader-package bootloader)
                               #:bootloader-installer
diff --git a/gnu/tests/docker.scm b/gnu/tests/docker.scm
index 6302bd0727..3e780d8a60 100644
--- a/gnu/tests/docker.scm
+++ b/gnu/tests/docker.scm
@@ -79,7 +79,8 @@ inside %DOCKER-OS."
                        (gnu build marionette))
 
           (define marionette
-            (make-marionette (list #$vm)))
+            ;; Relax timeout to accommodate older systems.
+            (make-marionette (list #$vm) #:timeout 60))
 
           (test-runner-current (system-test-runner #$output))
           (test-begin "docker")
@@ -221,7 +222,8 @@ inside %DOCKER-OS."
                        (guix build utils))
 
           (define marionette
-            (make-marionette (list #$vm)))
+            ;; Relax timeout to accommodate older systems.
+            (make-marionette (list #$vm) #:timeout 60))
 
           (test-runner-current (system-test-runner #$output))
           (test-begin "docker")
diff --git a/gnu/tests/ldap.scm b/gnu/tests/ldap.scm
index d5403b3539..47e77c0c53 100644
--- a/gnu/tests/ldap.scm
+++ b/gnu/tests/ldap.scm
@@ -58,7 +58,9 @@
                           (guix combinators))))
 
   (define vm
-    (virtual-machine os))
+    (virtual-machine
+     (operating-system os)
+     (memory-size 1024)))
 
   (define test
     (with-imported-modules '((gnu build marionette))
diff --git a/guix/build-system/dub.scm b/guix/build-system/dub.scm
index 55ad7decb8..8aa93d5b0f 100644
--- a/guix/build-system/dub.scm
+++ b/guix/build-system/dub.scm
@@ -51,6 +51,13 @@
   (let ((pkg-config (resolve-interface '(gnu packages pkg-config))))
     (module-ref pkg-config 'pkg-config)))
 
+(define (default-ld-gold-wrapper)
+  "Return the default ld-gold-wrapper package."
+  ;; LDC doesn't work with Guix's default (BFD) linker.
+  ;; Lazily resolve the binding to avoid a circular dependency.
+  (let ((commencement (resolve-interface '(gnu packages commencement))))
+    (module-ref commencement 'ld-gold-wrapper)))
+
 (define %dub-build-system-modules
   ;; Build-side modules imported by default.
   `((guix build dub-build-system)
@@ -100,6 +107,7 @@
                 (ldc (default-ldc))
                 (dub (default-dub))
                 (pkg-config (default-pkg-config))
+                (ld-gold-wrapper (default-ld-gold-wrapper))
                 #:allow-other-keys
                 #:rest arguments)
   "Return a bag for NAME."
@@ -121,6 +129,7 @@
                         ,@(standard-packages)))
          (build-inputs `(("ldc" ,ldc)
                          ("dub" ,dub)
+                         ("ld-gold-wrapper" ,ld-gold-wrapper)
                          ,@native-inputs))
          (outputs outputs)
          (build dub-build)
diff --git a/guix/build/chicken-build-system.scm b/guix/build/chicken-build-system.scm
index 5db9906acf..a669822dad 100644
--- a/guix/build/chicken-build-system.scm
+++ b/guix/build/chicken-build-system.scm
@@ -112,6 +112,17 @@ unpacking."
   (when tests?
     (invoke "chicken-install" "-cached" "-test" "-no-install" egg-name)))
 
+(define* (stamp-egg-version #:key egg-name name #:allow-other-keys)
+  "Check if EGG-NAME.egg contains version information and add some if not."
+  (let* ((filename (string-append egg-name "/" egg-name ".egg"))
+         (egg-info (call-with-input-file filename read))
+         (ver? (find (lambda (i) (eqv? (car i) 'version)) egg-info))
+         (ver (substring name (1+ (string-rindex name #\-)))))
+    (when (not ver?)
+      (make-file-writable filename)
+      (call-with-output-file filename
+        (lambda (f) (write (cons `(version ,ver) egg-info) f))))))
+
 ;; It doesn't look like Chicken generates any unnecessary references.
 ;; So we don't have to remove them either. Nice.
 
@@ -122,6 +133,7 @@ unpacking."
     (delete 'configure)
     (delete 'patch-generated-file-shebangs)
     (add-before 'unpack 'setup-chicken-environment setup-chicken-environment)
+    (add-before 'build 'stamp-egg-version stamp-egg-version)
     (replace 'build build)
     (delete 'check)
     (replace 'install install)
diff --git a/guix/build/dub-build-system.scm b/guix/build/dub-build-system.scm
index 3ab50733de..9ee0433ffd 100644
--- a/guix/build/dub-build-system.scm
+++ b/guix/build/dub-build-system.scm
@@ -48,10 +48,10 @@
     (_ #f)))
 
 (define* (configure #:key inputs #:allow-other-keys)
-  "Prepare one new directory with all the required dependencies.
-   It's necessary to do this (instead of just using /gnu/store as the
-   directory) because we want to hide the libraries in subdirectories
-   lib/dub/... instead of polluting the user's profile root."
+  "Prepare one new directory with all the required dependencies. It's necessary
+to do this (instead of just using /gnu/store as the directory) because we want
+to hide the libraries in subdirectories lib/dub/... instead of polluting the
+user's profile root."
   (let* ((dir (mkdtemp! "/tmp/dub.XXXXXX"))
          (vendor-dir (string-append dir "/vendor")))
     (setenv "HOME" dir)
@@ -67,8 +67,7 @@
                 (symlink (string-append path "/lib/dub/" d-basename)
                          (string-append vendor-dir "/" d-basename))))))))
       inputs)
-    (invoke "dub" "add-path" vendor-dir)
-    #t))
+    (invoke "dub" "add-path" vendor-dir)))
 
 (define (grep string file-name)
   "Find the first occurrence of STRING in the file named FILE-NAME.
@@ -92,19 +91,11 @@
   (unless (or (grep* "sourceLibrary" "package.json")
               (grep* "sourceLibrary" "dub.sdl") ; note: format is different!
               (grep* "sourceLibrary" "dub.json"))
-    (apply invoke `("dub" "build" ,@dub-build-flags))
-    (substitute* ".dub/dub.json"
-      (("\"lastUpgrade\": \"[^\"]*\"")
-       "\"lastUpgrade\": \"1970-01-01T00:00:00.0000000\"")))
-  #t)
+    (apply invoke `("dub" "build" ,@dub-build-flags))))
 
 (define* (check #:key tests? #:allow-other-keys)
   (when tests?
-    (invoke "dub" "test")
-    (substitute* ".dub/dub.json"
-      (("\"lastUpgrade\": \"[^\"]*\"")
-       "\"lastUpgrade\": \"1970-01-01T00:00:00.0000000\"")))
-  #t)
+    (invoke "dub" "test")))
 
 (define* (install #:key inputs outputs #:allow-other-keys)
   "Install a given DUB package."
@@ -115,8 +106,7 @@
     ;; TODO remove "-test-application"
     (copy-recursively "bin" outbin)
     (mkdir-p outlib)
-    (copy-recursively "." (string-append outlib))
-    #t))
+    (copy-recursively "." (string-append outlib))))
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm
index 4d52200b84..14329751f8 100644
--- a/guix/scripts/refresh.scm
+++ b/guix/scripts/refresh.scm
@@ -81,7 +81,10 @@
                          (names (map string->symbol
                                      (string-tokenize arg not-comma))))
                     (alist-cons 'updaters names result))))
-        (option '(#\L "list-updaters") #f #f
+        (find (lambda (option)
+                (member "load-path" (option-names option)))
+              %standard-build-options)
+        (option '("list-updaters") #f #f
                 (lambda args
                   (list-updaters-and-exit)))
         (option '(#\m "manifest") #t #f
@@ -119,19 +122,6 @@
                      (leave (G_ "unsupported policy: ~a~%")
                             arg)))))
 
-        ;; The short option -L is already used by --list-updaters, therefore
-        ;; it needs to be removed from %standard-build-options.
-        (let ((load-path-option (find (lambda (option)
-                                         (member "load-path"
-                                                 (option-names option)))
-                                       %standard-build-options)))
-          (option
-           (filter (lambda (name) (not (equal? #\L name)))
-                   (option-names load-path-option))
-           (option-required-arg? load-path-option)
-           (option-optional-arg? load-path-option)
-           (option-processor     load-path-option)))
-
         (option '(#\h "help") #f #f
                 (lambda args
                   (show-help)
@@ -160,7 +150,7 @@ specified with `--select'.\n"))
   -t, --type=UPDATER,... restrict to updates from the specified updaters
                          (e.g., 'gnu')"))
   (display (G_ "
-  -L, --list-updaters    list available updaters and exit"))
+      --list-updaters    list available updaters and exit"))
   (display (G_ "
   -l, --list-dependent   list top-level dependent packages that would need to
                          be rebuilt as a result of upgrading PACKAGE..."))
@@ -182,7 +172,7 @@ specified with `--select'.\n"))
                          used when 'key-download' is not specified"))
   (newline)
   (display (G_ "
-      --load-path=DIR    prepend DIR to the package module search path"))
+  -L, --load-path=DIR    prepend DIR to the package module search path"))
   (newline)
   (display (G_ "
   -h, --help             display this help and exit"))
diff --git a/guix/scripts/style.scm b/guix/scripts/style.scm
index 8123570c38..ca3853af5e 100644
--- a/guix/scripts/style.scm
+++ b/guix/scripts/style.scm
@@ -303,7 +303,8 @@ FORMAT-COMMENT is 'canonicalize-comment'."
              (newline port)
              (display (make-string indent #\space) port))
            (let ((column (if newline? indent column)))
-             (print tail #f
+             (print tail
+                    (keyword? item)      ;keep #:key value next to one another
                     (comment? item)
                     (loop indent column
                           (or newline? delimited?)
diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm
index c5f5d23b47..cdf591ac4d 100755
--- a/guix/scripts/substitute.scm
+++ b/guix/scripts/substitute.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013-2022 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2018 Kyle Meyer <kyle@kyleam.com>
 ;;; Copyright © 2020 Christopher Baines <mail@cbaines.net>
@@ -55,11 +55,11 @@
   #:use-module (ice-9 ftw)
   #:use-module (rnrs bytevectors)
   #:use-module (srfi srfi-1)
-  #:use-module (srfi srfi-11)
   #:use-module (srfi srfi-19)
   #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-35)
+  #:use-module (srfi srfi-71)
   #:use-module (web uri)
   #:use-module (guix http-client)
   #:export (%allow-unauthenticated-substitutes?
@@ -293,10 +293,10 @@ daemon."
   (for-each (cute format port "~a/~a~%" (%store-prefix) <>)
             (narinfo-references narinfo))
 
-  (let-values (((uri compression file-size)
-                (narinfo-best-uri narinfo
-                                  #:fast-decompression?
-                                  %prefer-fast-decompression?)))
+  (let ((uri compression file-size
+             (narinfo-best-uri narinfo
+                               #:fast-decompression?
+                               %prefer-fast-decompression?)))
     (format port "~a\n~a\n"
             (or file-size 0)
             (or (narinfo-size narinfo) 0))))
@@ -378,13 +378,13 @@ server certificates."
              (#f
               ;; Open a new connection to URI and evict old entries from
               ;; CACHE, if any.
-              (let-values (((socket)
-                            (guix:open-connection-for-uri
-                             uri
-                             #:verify-certificate? verify-certificate?
-                             #:timeout timeout))
-                           ((new-cache evicted)
-                            (at-most (- %max-cached-connections 1) cache)))
+              (let ((socket
+                     (guix:open-connection-for-uri
+                      uri
+                      #:verify-certificate? verify-certificate?
+                      #:timeout timeout))
+                    (new-cache evicted
+                               (at-most (- %max-cached-connections 1) cache)))
                 (for-each (match-lambda
                             ((_ . port)
                              (false-if-exception (close-port port))))
@@ -494,49 +494,47 @@ PORT."
     (leave (G_ "no valid substitute for '~a'~%")
            store-item))
 
-  (let-values (((uri compression file-size)
-                (narinfo-best-uri narinfo
-                                  #:fast-decompression?
-                                  %prefer-fast-decompression?)))
+  (let ((uri compression file-size
+             (narinfo-best-uri narinfo
+                               #:fast-decompression?
+                               %prefer-fast-decompression?)))
     (unless print-build-trace?
       (format (current-error-port)
               (G_ "Downloading ~a...~%") (uri->string uri)))
 
-    (let*-values (((raw download-size)
-                   ;; 'guix publish' without '--cache' doesn't specify a
-                   ;; Content-Length, so DOWNLOAD-SIZE is #f in this case.
-                   (fetch uri))
-                  ((progress)
-                   (let* ((dl-size  (or download-size
-                                        (and (equal? compression "none")
-                                             (narinfo-size narinfo))))
-                          (reporter (if print-build-trace?
-                                        (progress-reporter/trace
-                                         destination
-                                         (uri->string uri) dl-size
-                                         (current-error-port))
-                                        (progress-reporter/file
-                                         (uri->string uri) dl-size
-                                         (current-error-port)
-                                         #:abbreviation nar-uri-abbreviation))))
-                     ;; Keep RAW open upon completion so we can later reuse
-                     ;; the underlying connection.  Pass the download size so
-                     ;; that this procedure won't block reading from RAW.
-                     (progress-report-port reporter raw
-                                           #:close? #f
-                                           #:download-size dl-size)))
-                  ((input pids)
-                   ;; NOTE: This 'progress' port of current process will be
-                   ;; closed here, while the child process doing the
-                   ;; reporting will close it upon exit.
-                   (decompressed-port (string->symbol compression)
-                                      progress))
-
-                  ;; Compute the actual nar hash as we read it.
-                  ((algorithm expected)
-                   (narinfo-hash-algorithm+value narinfo))
-                  ((hashed get-hash)
-                   (open-hash-input-port algorithm input)))
+    (let* ((raw download-size
+                ;; 'guix publish' without '--cache' doesn't specify a
+                ;; Content-Length, so DOWNLOAD-SIZE is #f in this case.
+                (fetch uri))
+           (progress
+            (let* ((dl-size  (or download-size
+                                 (and (equal? compression "none")
+                                      (narinfo-size narinfo))))
+                   (reporter (if print-build-trace?
+                                 (progress-reporter/trace
+                                  destination
+                                  (uri->string uri) dl-size
+                                  (current-error-port))
+                                 (progress-reporter/file
+                                  (uri->string uri) dl-size
+                                  (current-error-port)
+                                  #:abbreviation nar-uri-abbreviation))))
+              ;; Keep RAW open upon completion so we can later reuse
+              ;; the underlying connection.  Pass the download size so
+              ;; that this procedure won't block reading from RAW.
+              (progress-report-port reporter raw
+                                    #:close? #f
+                                    #:download-size dl-size)))
+           (input pids
+                  ;; NOTE: This 'progress' port of current process will be
+                  ;; closed here, while the child process doing the
+                  ;; reporting will close it upon exit.
+                  (decompressed-port (string->symbol compression)
+                                     progress))
+
+           ;; Compute the actual nar hash as we read it.
+           (algorithm expected (narinfo-hash-algorithm+value narinfo))
+           (hashed get-hash (open-hash-input-port algorithm input)))
       ;; Unpack the Nar at INPUT into DESTINATION.
       (define cpu-usage
         (with-cpu-usage-monitoring
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index 63e3b9b934..b9084a401c 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -800,11 +800,6 @@ static checks."
   (define println
     (cut format #t "~a~%" <>))
 
-  (define menu-entries
-    (if (eq? 'init action)
-        '()
-        (map boot-parameters->menu-entry (profile-boot-parameters))))
-
   (define os
     (image-operating-system image))
 
@@ -813,7 +808,11 @@ static checks."
 
   (define bootcfg
     (and (memq action '(init reconfigure))
-         (operating-system-bootcfg os menu-entries)))
+         (operating-system-bootcfg
+          os
+          (if (eq? action 'init)
+              '()
+              (map boot-parameters->menu-entry (profile-boot-parameters))))))
 
   (when (eq? action 'reconfigure)
     (maybe-suggest-running-guix-pull)
diff --git a/guix/self.scm b/guix/self.scm
index 36ada4d171..d1ccec8a49 100644
--- a/guix/self.scm
+++ b/guix/self.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017-2022 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Martin Becze <mjbecze@riseup.net>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -699,7 +699,8 @@ Info manual."
                         (setenv "NIX_STORE_DIR" #$%storedir))
 
                       (apply execl #$(file-append daemon "/bin/guix-daemon")
-                             "guix-daemon" (cdr (command-line))))))
+                             "guix-daemon" (cdr (command-line))))
+                  #:guile guile))
 
   (computed-file name
                  (with-imported-modules '((guix build utils))
diff --git a/guix/status.scm b/guix/status.scm
index b8905c9542..2c69f49fb5 100644
--- a/guix/status.scm
+++ b/guix/status.scm
@@ -667,13 +667,14 @@ case where BV does not contain only valid UTF-8."
           (close-port port)
           str)))))
 
-(define (bytevector-index bv number offset count)
-  "Search for NUMBER in BV starting from OFFSET and reading up to COUNT bytes;
-return the offset where NUMBER first occurs or #f if it could not be found."
+(define (bytevector-index bv numbers offset count)
+  "Search for NUMBERS in BV starting from OFFSET and reading up to COUNT bytes;
+return the offset where one of NUMBERS first occurs or #f if they could not be
+found."
   (let loop ((offset offset)
              (count count))
     (cond ((zero? count) #f)
-          ((= (bytevector-u8-ref bv offset) number) offset)
+          ((memv (bytevector-u8-ref bv offset) numbers) offset)
           (else (loop (+ 1 offset) (- count 1))))))
 
 (define (split-lines str)
@@ -774,7 +775,12 @@ The second return value is a thunk to retrieve the current state."
             (set! %build-output '())
             (set! %build-output-pid #f))
           keep)
-        (match (bytevector-index bv (char->integer #\newline)
+
+        ;; Search for both '\n' and '\r'; the latter is appears in progress
+        ;; messages sent by 'guix substitute' through the daemon.
+        (match (bytevector-index bv
+                                 (list (char->integer #\newline)
+                                       (char->integer #\return))
                                  offset count)
           ((? integer? cr)
            (let* ((tail (maybe-utf8->string
diff --git a/guix/utils.scm b/guix/utils.scm
index e7a576091e..ca4fecebc8 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2018 Steve Sprang <scs@stevesprang.com>
 ;;; Copyright © 2022 Taiju HIGASHI <higashi@taiju.info>
+;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -92,6 +93,7 @@
             target-mingw?
             target-x86-32?
             target-x86-64?
+            target-x86?
             target-arm32?
             target-aarch64?
             target-arm?
@@ -696,6 +698,10 @@ a character other than '@'."
 architecture (x86_64)?"
   (string-prefix? "x86_64-" target))
 
+(define* (target-x86? #:optional (target (or (%current-target-system)
+                                             (%current-system))))
+  (or (target-x86-32? target) (target-x86-64? target)))
+
 (define* (target-arm32? #:optional (target (or (%current-target-system)
                                                (%current-system))))
   (string-prefix? "arm" target))
diff --git a/po/guix/POTFILES.in b/po/guix/POTFILES.in
index 201e5dcc87..f50dd00422 100644
--- a/po/guix/POTFILES.in
+++ b/po/guix/POTFILES.in
@@ -4,6 +4,7 @@ gnu.scm
 gnu/packages.scm
 gnu/services.scm
 gnu/system.scm
+gnu/services/configuration.scm
 gnu/services/shepherd.scm
 gnu/home/services.scm
 gnu/home/services/ssh.scm
diff --git a/tests/services/configuration.scm b/tests/services/configuration.scm
index 334a1e409b..6268525317 100644
--- a/tests/services/configuration.scm
+++ b/tests/services/configuration.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,6 +20,7 @@
 
 (define-module (tests services configuration)
   #:use-module (gnu services configuration)
+  #:use-module (guix diagnostics)
   #:use-module (guix gexp)
   #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-64))
@@ -43,6 +45,17 @@
   80
   (port-configuration-port (port-configuration)))
 
+(test-equal "wrong type for a field"
+  '("configuration.scm" 57 11)                    ;error location
+  (guard (c ((configuration-error? c)
+             (let ((loc (error-location c)))
+               (list (basename (location-file loc))
+                     (location-line loc)
+                     (location-column loc)))))
+    (port-configuration
+     ;; This is line 56; the test relies on line/column numbers!
+     (port "This is not a number!"))))
+
 (define-configuration port-configuration-cs
   (port (number 80) "The port number." empty-serializer))
 
diff --git a/tests/status.scm b/tests/status.scm
index 01a61f7345..b0af619872 100644
--- a/tests/status.scm
+++ b/tests/status.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018, 2019, 2022 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,8 +19,8 @@
 (define-module (test-status)
   #:use-module (guix status)
   #:use-module (srfi srfi-1)
-  #:use-module (srfi srfi-11)
   #:use-module (srfi srfi-64)
+  #:use-module (srfi srfi-71)
   #:use-module (rnrs bytevectors)
   #:use-module (rnrs io ports)
   #:use-module (ice-9 match))
@@ -29,8 +29,7 @@
 
 (test-equal "compute-status, no-op"
   (build-status)
-  (let-values (((port get-status)
-                (build-event-output-port compute-status)))
+  (let ((port get-status (build-event-output-port compute-status)))
     (display "foo\nbar\n\baz\n" port)
     (get-status)))
 
@@ -53,11 +52,11 @@
                                               #:transferred 500
                                               #:start 'now
                                               #:end 'now)))))
-  (let-values (((port get-status)
-                (build-event-output-port (lambda (event status)
-                                           (compute-status event status
-                                                           #:current-time
-                                                           (const 'now))))))
+  (let ((port get-status
+              (build-event-output-port (lambda (event status)
+                                         (compute-status event status
+                                                         #:current-time
+                                                         (const 'now))))))
     (display "@ build-started foo.drv - x86_64-linux \n" port)
     (display "@ substituter-started bar\n" port)
     (display "@ download-started bar http://example.org/bar 500\n" port)
@@ -100,11 +99,11 @@
                                               #:start 'now
                                               #:end 'now)))))
   ;; Below we omit 'substituter-started' events and the like.
-  (let-values (((port get-status)
-                (build-event-output-port (lambda (event status)
-                                           (compute-status event status
-                                                           #:current-time
-                                                           (const 'now))))))
+  (let ((port get-status
+              (build-event-output-port (lambda (event status)
+                                         (compute-status event status
+                                                         #:current-time
+                                                         (const 'now))))))
     (display "@ build-started foo.drv - x86_64-linux foo.log\n" port)
     (display "@ download-started bar http://example.org/bar 999\n" port)
     (display "various\nthings\nget\nwritten\n" port)
@@ -119,17 +118,31 @@
 
 (test-equal "build-output-port, UTF-8"
   '((build-log #f "lambda is λ!\n"))
-  (let-values (((port get-status) (build-event-output-port cons '()))
-               ((bv)              (string->utf8 "lambda is λ!\n")))
+  (let ((port get-status (build-event-output-port cons '()))
+        (bv              (string->utf8 "lambda is λ!\n")))
     (put-bytevector port bv)
     (force-output port)
     (get-status)))
 
+(test-equal "build-output-port, daemon messages with LF"
+  '((build-log #f "updating substitutes... 0%\r")
+    (build-log #f "updating substitutes... 50%\r")
+    (build-log #f "updating substitutes... 100%\r"))
+  (let ((port get-status (build-event-output-port cons '())))
+    (for-each (lambda (suffix)
+                (let ((bv (string->utf8
+                           (string-append "updating substitutes... "
+                                          suffix "\r"))))
+                  (put-bytevector port bv)
+                  (force-output port)))
+              '("0%" "50%" "100%"))
+    (reverse (get-status))))
+
 (test-equal "current-build-output-port, UTF-8 + garbage"
   ;; What about a mixture of UTF-8 + garbage?
   (let ((replacement "�"))
     `((build-log #f ,(string-append "garbage: " replacement "lambda: λ\n"))))
-  (let-values (((port get-status) (build-event-output-port cons '())))
+  (let ((port get-status (build-event-output-port cons '())))
     (display "garbage: " port)
     (put-bytevector port #vu8(128))
     (put-bytevector port (string->utf8 "lambda: λ\n"))
@@ -156,14 +169,14 @@
                                               #:transferred 999
                                               #:start 'now
                                               #:end 'now)))))
-  (let-values (((port get-status)
-                (build-event-output-port (lambda (event status)
-                                           (compute-status event status
-                                                           #:current-time
-                                                           (const 'now)
-                                                           #:derivation-path->output-path
-                                                           (match-lambda
-                                                             ("bar.drv" "bar")))))))
+  (let ((port get-status
+              (build-event-output-port (lambda (event status)
+                                         (compute-status event status
+                                                         #:current-time
+                                                         (const 'now)
+                                                         #:derivation-path->output-path
+                                                         (match-lambda
+                                                           ("bar.drv" "bar")))))))
     (display "@ build-started foo.drv - x86_64-linux  121\n" port)
     (display "@ build-started bar.drv - armhf-linux bar.log 144\n" port)
     (display "@ build-log 121 6\nHello!" port)
@@ -192,11 +205,11 @@
         (build-status
          (builds-completed (list (build "foo.drv" "x86_64-linux" #:id 121
                                         #:completion 100.)))))
-  (let-values (((port get-status)
-                (build-event-output-port (lambda (event status)
-                                           (compute-status event status
-                                                           #:current-time
-                                                           (const 'now))))))
+  (let ((port get-status
+              (build-event-output-port (lambda (event status)
+                                         (compute-status event status
+                                                         #:current-time
+                                                         (const 'now))))))
     (display "@ build-started foo.drv - x86_64-linux  121\n" port)
     (display "@ build-log 121 6\nHello!" port)
     (let ((first (get-status)))
@@ -225,11 +238,11 @@
         (build-status
          (builds-completed (list (build "foo.drv" "x86_64-linux" #:id 121
                                         #:phase 'install)))))
-  (let-values (((port get-status)
-                (build-event-output-port (lambda (event status)
-                                           (compute-status event status
-                                                           #:current-time
-                                                           (const 'now))))))
+  (let ((port get-status
+              (build-event-output-port (lambda (event status)
+                                         (compute-status event status
+                                                         #:current-time
+                                                         (const 'now))))))
     (display "@ build-started foo.drv - x86_64-linux  121\n" port)
     (display "@ build-log 121 27\nstarting phase `configure'\n" port)
     (display "@ build-log 121 6\nabcde!" port)
diff --git a/tests/style.scm b/tests/style.scm
index 41f7e31cce..48d975df94 100644
--- a/tests/style.scm
+++ b/tests/style.scm
@@ -492,6 +492,18 @@ mnopqrstuvwxyz.\")"
    '(#:phases %standard-phases
      #:tests? #f)))")
 
+;; '#:key value' is kept on the same line.
+(test-pretty-print "\
+(package
+  (name \"keyword-value-same-line\")
+  (arguments
+   (list #:phases #~(modify-phases %standard-phases
+                      (add-before 'x 'y
+                        (lambda* (#:key inputs #:allow-other-keys)
+                          (foo bar baz))))
+         #:make-flags #~'(\"ANSWER=42\")
+         #:tests? #f)))")
+
 (test-equal "pretty-print-with-comments, canonicalize-comment"
   "\
 (list abc