summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2023-04-14 16:57:37 -0400
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2023-04-14 17:15:08 -0400
commit3bacd3c76a58ebe70f98be654f09cbd4166093ab (patch)
tree89f687565205971a9925d33400235968a569a069 /gnu
parentdf3391c0309443ac37f9a9a6b1038a85454b8ee6 (diff)
parent97ed675718b948319e6f6e51f2d577971bea1176 (diff)
downloadguix-3bacd3c76a58ebe70f98be654f09cbd4166093ab.tar.gz
Merge branch 'master' into core-updates.
Conflicts:
	gnu/local.mk
	gnu/packages/build-tools.scm
	gnu/packages/certs.scm
	gnu/packages/check.scm
	gnu/packages/compression.scm
	gnu/packages/cups.scm
	gnu/packages/fontutils.scm
	gnu/packages/gnuzilla.scm
	gnu/packages/guile.scm
	gnu/packages/ibus.scm
	gnu/packages/image-processing.scm
	gnu/packages/linux.scm
	gnu/packages/music.scm
	gnu/packages/nss.scm
	gnu/packages/pdf.scm
	gnu/packages/python-xyz.scm
	gnu/packages/qt.scm
	gnu/packages/ruby.scm
	gnu/packages/shells.scm
	gnu/packages/tex.scm
	gnu/packages/video.scm
	gnu/packages/vulkan.scm
	gnu/packages/web.scm
	gnu/packages/webkit.scm
	gnu/packages/wm.scm
Diffstat (limited to 'gnu')
-rw-r--r--gnu/home/services/desktop.scm6
-rw-r--r--gnu/home/services/gnupg.scm150
-rw-r--r--gnu/home/services/shells.scm12
-rw-r--r--gnu/home/services/xdg.scm22
-rw-r--r--gnu/local.mk22
-rw-r--r--gnu/packages/admin.scm58
-rw-r--r--gnu/packages/algebra.scm90
-rw-r--r--gnu/packages/android.scm17
-rw-r--r--gnu/packages/astronomy.scm99
-rw-r--r--gnu/packages/audio.scm154
-rw-r--r--gnu/packages/backup.scm15
-rw-r--r--gnu/packages/benchmark.scm43
-rw-r--r--gnu/packages/bioconductor.scm547
-rw-r--r--gnu/packages/bioinformatics.scm135
-rw-r--r--gnu/packages/build-tools.scm45
-rw-r--r--gnu/packages/c.scm79
-rw-r--r--gnu/packages/calendar.scm4
-rw-r--r--gnu/packages/cdrom.scm1
-rw-r--r--gnu/packages/check.scm35
-rw-r--r--gnu/packages/chez.scm10
-rw-r--r--gnu/packages/compression.scm14
-rw-r--r--gnu/packages/cran.scm834
-rw-r--r--gnu/packages/crates-graphics.scm7
-rw-r--r--gnu/packages/crates-io.scm2489
-rw-r--r--gnu/packages/crypto.scm2
-rw-r--r--gnu/packages/cups.scm15
-rw-r--r--gnu/packages/curl.scm3
-rw-r--r--gnu/packages/databases.scm329
-rw-r--r--gnu/packages/datastructures.scm40
-rw-r--r--gnu/packages/debug.scm4
-rw-r--r--gnu/packages/diffoscope.scm6
-rw-r--r--gnu/packages/dlang.scm4
-rw-r--r--gnu/packages/education.scm4
-rw-r--r--gnu/packages/efi.scm4
-rw-r--r--gnu/packages/electronics.scm22
-rw-r--r--gnu/packages/emacs-xyz.scm1035
-rw-r--r--gnu/packages/emulators.scm49
-rw-r--r--gnu/packages/engineering.scm195
-rw-r--r--gnu/packages/erlang.scm6
-rw-r--r--gnu/packages/fcitx.scm8
-rw-r--r--gnu/packages/fcitx5.scm36
-rw-r--r--gnu/packages/file-systems.scm113
-rw-r--r--gnu/packages/finance.scm28
-rw-r--r--gnu/packages/fonts.scm97
-rw-r--r--gnu/packages/fontutils.scm79
-rw-r--r--gnu/packages/freedesktop.scm342
-rw-r--r--gnu/packages/games.scm49
-rw-r--r--gnu/packages/geo.scm173
-rw-r--r--gnu/packages/ghostscript.scm19
-rw-r--r--gnu/packages/gl.scm23
-rw-r--r--gnu/packages/gnome-xyz.scm50
-rw-r--r--gnu/packages/gnome.scm40
-rw-r--r--gnu/packages/gnunet.scm151
-rw-r--r--gnu/packages/gnuzilla.scm216
-rw-r--r--gnu/packages/golang.scm407
-rw-r--r--gnu/packages/graphics.scm163
-rw-r--r--gnu/packages/gstreamer.scm90
-rw-r--r--gnu/packages/gtk.scm35
-rw-r--r--gnu/packages/guile-xyz.scm37
-rw-r--r--gnu/packages/guile.scm8
-rw-r--r--gnu/packages/hardware.scm21
-rw-r--r--gnu/packages/haskell-apps.scm4
-rw-r--r--gnu/packages/haskell-xyz.scm3
-rw-r--r--gnu/packages/high-availability.scm53
-rw-r--r--gnu/packages/ibus.scm38
-rw-r--r--gnu/packages/image-processing.scm166
-rw-r--r--gnu/packages/image-viewers.scm62
-rw-r--r--gnu/packages/image.scm15
-rw-r--r--gnu/packages/jami.scm70
-rw-r--r--gnu/packages/kde.scm9
-rw-r--r--gnu/packages/kerberos.scm26
-rw-r--r--gnu/packages/language.scm105
-rw-r--r--gnu/packages/less.scm5
-rw-r--r--gnu/packages/libcanberra.scm6
-rw-r--r--gnu/packages/license.scm12
-rw-r--r--gnu/packages/linphone.scm3
-rw-r--r--gnu/packages/linux.scm184
-rw-r--r--gnu/packages/lisp-check.scm36
-rw-r--r--gnu/packages/lisp-xyz.scm1662
-rw-r--r--gnu/packages/lisp.scm126
-rw-r--r--gnu/packages/llvm.scm2
-rw-r--r--gnu/packages/lua.scm9
-rw-r--r--gnu/packages/machine-learning.scm169
-rw-r--r--gnu/packages/mail.scm68
-rw-r--r--gnu/packages/man.scm4
-rw-r--r--gnu/packages/mastodon.scm4
-rw-r--r--gnu/packages/maths.scm692
-rw-r--r--gnu/packages/medical.scm55
-rw-r--r--gnu/packages/messaging.scm17
-rw-r--r--gnu/packages/minetest.scm9
-rw-r--r--gnu/packages/monitoring.scm5
-rw-r--r--gnu/packages/mpd.scm4
-rw-r--r--gnu/packages/mpi.scm17
-rw-r--r--gnu/packages/music.scm377
-rw-r--r--gnu/packages/networking.scm235
-rw-r--r--gnu/packages/node.scm1
-rw-r--r--gnu/packages/nss.scm8
-rw-r--r--gnu/packages/ocaml.scm4
-rw-r--r--gnu/packages/ocr.scm15
-rw-r--r--gnu/packages/opencl.scm73
-rw-r--r--gnu/packages/package-management.scm346
-rw-r--r--gnu/packages/parallel.scm4
-rw-r--r--gnu/packages/password-utils.scm52
-rw-r--r--gnu/packages/patches/a2ps-CVE-2001-1593.patch69
-rw-r--r--gnu/packages/patches/a2ps-CVE-2014-0466.patch30
-rw-r--r--gnu/packages/patches/a2ps-CVE-2015-8107.patch80
-rw-r--r--gnu/packages/patches/dbacl-icheck-multiple-definitions.patch33
-rw-r--r--gnu/packages/patches/fpm-newer-clamp-fix.patch33
-rw-r--r--gnu/packages/patches/geeqie-clutter.patch35
-rw-r--r--gnu/packages/patches/glslang-install-static-libs.patch61
-rw-r--r--gnu/packages/patches/guile-fix-invalid-unicode-handling.patch83
-rw-r--r--gnu/packages/patches/heimdal-CVE-2022-45142.patch49
-rw-r--r--gnu/packages/patches/jami-libjami-headers-search.patch45
-rw-r--r--gnu/packages/patches/libcdio-glibc-compat.patch43
-rw-r--r--gnu/packages/patches/mariadb-link-libatomic.patch83
-rw-r--r--gnu/packages/patches/mecab-variable-param.patch30
-rw-r--r--gnu/packages/patches/openboardview-use-system-mpc.patch42
-rw-r--r--gnu/packages/patches/openboardview-use-system-utf8.patch48
-rw-r--r--gnu/packages/patches/orangeduck-mpc-fix-pkg-config.patch25
-rw-r--r--gnu/packages/patches/python-afdko-suppress-copyright-test.patch20
-rw-r--r--gnu/packages/patches/python2-pyopenssl-openssl-compat.patch51
-rw-r--r--gnu/packages/patches/ruby-hiredis-use-system-hiredis.patch52
-rw-r--r--gnu/packages/patches/rust-openssl-sys-no-vendor.patch30
-rw-r--r--gnu/packages/patches/webkitgtk-libelogind.patch38
-rw-r--r--gnu/packages/patchutils.scm4
-rw-r--r--gnu/packages/pdf.scm2
-rw-r--r--gnu/packages/perl-check.scm4
-rw-r--r--gnu/packages/perl.scm85
-rw-r--r--gnu/packages/photo.scm166
-rw-r--r--gnu/packages/plotutils.scm55
-rw-r--r--gnu/packages/potassco.scm376
-rw-r--r--gnu/packages/pretty-print.scm94
-rw-r--r--gnu/packages/protobuf.scm55
-rw-r--r--gnu/packages/python-check.scm9
-rw-r--r--gnu/packages/python-compression.scm16
-rw-r--r--gnu/packages/python-crypto.scm295
-rw-r--r--gnu/packages/python-science.scm165
-rw-r--r--gnu/packages/python-web.scm100
-rw-r--r--gnu/packages/python-xyz.scm535
-rw-r--r--gnu/packages/qt.scm1092
-rw-r--r--gnu/packages/radio.scm89
-rw-r--r--gnu/packages/rails.scm1444
-rw-r--r--gnu/packages/ruby.scm4892
-rw-r--r--gnu/packages/rust-apps.scm59
-rw-r--r--gnu/packages/scheme.scm177
-rw-r--r--gnu/packages/sdl.scm82
-rw-r--r--gnu/packages/search.scm4
-rw-r--r--gnu/packages/security-token.scm58
-rw-r--r--gnu/packages/shells.scm10
-rw-r--r--gnu/packages/shellutils.scm59
-rw-r--r--gnu/packages/skarnet.scm36
-rw-r--r--gnu/packages/sphinx.scm31
-rw-r--r--gnu/packages/ssh.scm4
-rw-r--r--gnu/packages/statistics.scm137
-rw-r--r--gnu/packages/sync.scm2
-rw-r--r--gnu/packages/syncthing.scm4
-rw-r--r--gnu/packages/syndication.scm6
-rw-r--r--gnu/packages/telephony.scm11
-rw-r--r--gnu/packages/tex.scm362
-rw-r--r--gnu/packages/texinfo.scm4
-rw-r--r--gnu/packages/text-editors.scm18
-rw-r--r--gnu/packages/textutils.scm19
-rw-r--r--gnu/packages/time.scm4
-rw-r--r--gnu/packages/toolkits.scm58
-rw-r--r--gnu/packages/tree-sitter.scm7
-rw-r--r--gnu/packages/tryton.scm3
-rw-r--r--gnu/packages/unicode.scm18
-rw-r--r--gnu/packages/version-control.scm134
-rw-r--r--gnu/packages/video.scm115
-rw-r--r--gnu/packages/vulkan.scm254
-rw-r--r--gnu/packages/w3m.scm23
-rw-r--r--gnu/packages/web-browsers.scm12
-rw-r--r--gnu/packages/web.scm44
-rw-r--r--gnu/packages/webkit.scm62
-rw-r--r--gnu/packages/wm.scm42
-rw-r--r--gnu/packages/xdisorg.scm166
-rw-r--r--gnu/packages/xfce.scm61
-rw-r--r--gnu/packages/xiph.scm8
-rw-r--r--gnu/packages/xorg.scm216
-rw-r--r--gnu/services/audio.scm249
-rw-r--r--gnu/services/base.scm129
-rw-r--r--gnu/services/configuration.scm96
-rw-r--r--gnu/services/desktop.scm76
-rw-r--r--gnu/services/herd.scm24
-rw-r--r--gnu/services/linux.scm101
-rw-r--r--gnu/services/mcron.scm103
-rw-r--r--gnu/services/networking.scm67
-rw-r--r--gnu/services/sddm.scm6
-rw-r--r--gnu/services/security.scm6
-rw-r--r--gnu/services/vnc.scm5
-rw-r--r--gnu/services/web.scm25
-rw-r--r--gnu/services/xorg.scm23
-rw-r--r--gnu/system.scm10
-rw-r--r--gnu/system/linux-container.scm10
-rw-r--r--gnu/tests/databases.scm6
-rw-r--r--gnu/tests/gdm.scm40
-rw-r--r--gnu/tests/lightdm.scm2
-rw-r--r--gnu/tests/pam.scm97
198 files changed, 19688 insertions, 7701 deletions
diff --git a/gnu/home/services/desktop.scm b/gnu/home/services/desktop.scm
index fb1cd44060..661fe7d283 100644
--- a/gnu/home/services/desktop.scm
+++ b/gnu/home/services/desktop.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2022 ( <paren@disroot.org>
 ;;; Copyright © 2023 conses <contact@conses.eu>
+;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,7 +38,10 @@
             home-dbus-service-type
 
             home-unclutter-configuration
-            home-unclutter-service-type))
+            home-unclutter-service-type
+
+            home-xmodmap-configuration
+            home-xmodmap-service-type))
 
 
 ;;;
diff --git a/gnu/home/services/gnupg.scm b/gnu/home/services/gnupg.scm
new file mode 100644
index 0000000000..7e9e02a3cc
--- /dev/null
+++ b/gnu/home/services/gnupg.scm
@@ -0,0 +1,150 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu home services gnupg)
+  #:use-module (guix gexp)
+  #:use-module ((guix records) #:select (match-record))
+  #:use-module (gnu services)
+  #:use-module (gnu services configuration)
+  #:use-module (gnu home services)
+  #:use-module (gnu home services shepherd)
+  #:autoload   (gnu packages gnupg) (gnupg pinentry)
+  #:export (home-gpg-agent-configuration
+            home-gpg-agent-configuration?
+            home-gpg-agent-configuration-gnupg
+            home-gpg-agent-configuration-pinentry-program
+            home-gpg-agent-configuration-ssh-support?
+            home-gpg-agent-configuration-default-cache-ttl
+            home-gpg-agent-configuration-max-cache-ttl
+            home-gpg-agent-configuration-max-cache-ttl-ssh
+            home-gpg-agent-configuration-extra-content
+
+            home-gpg-agent-service-type))
+
+(define raw-configuration-string? string?)
+
+;; Configuration of 'gpg-agent'.
+(define-configuration/no-serialization home-gpg-agent-configuration
+  (gnupg
+   (file-like gnupg)
+   "The GnuPG package to use.")
+  (pinentry-program
+   (file-like (file-append pinentry "/bin/pinentry-curses"))
+   "Pinentry program to use.  Pinentry is a small user interface that
+@command{gpg-agent} delegates to anytime it needs user input for a passphrase
+or @acronym{PIN, personal identification number} (@pxref{Top,,, pinentry,
+Using the PIN-Entry}).")
+  (ssh-support?
+   (boolean #f)
+   "Whether to enable @acronym{SSH, secure shell} support.  When true,
+@command{gpg-agent} acts as a drop-in replacement for OpenSSH's
+@command{ssh-agent} program, taking care of OpenSSH secret keys and directing
+passphrase requests to the chosen Pinentry program.")
+  (default-cache-ttl
+    (integer 600)
+    "Time a cache entry is valid, in seconds.")
+  (max-cache-ttl
+   (integer 7200)
+   "Maximum time a cache entry is valid, in seconds.  After this time a cache
+entry will be expired even if it has been accessed recently.")
+  (default-cache-ttl-ssh
+    (integer 1800)
+    "Time a cache entry for SSH keys is valid, in seconds.")
+  (max-cache-ttl-ssh
+   (integer 7200)
+   "Maximum time a cache entry for SSH keys is valid, in seconds.")
+  (extra-content
+   (raw-configuration-string "")
+   "Raw content to add to the end of @file{~/.gnupg/gpg-agent.conf}."))
+
+(define (home-gpg-agent-configuration-file config)
+  "Return the @file{gpg-agent.conf} file for @var{config}."
+  (match-record config <home-gpg-agent-configuration>
+    (pinentry-program default-cache-ttl max-cache-ttl
+                      default-cache-ttl-ssh max-cache-ttl-ssh
+                      extra-content)
+    (mixed-text-file "gpg-agent.conf"
+                     "pinentry-program " pinentry-program "\n"
+                     "default-cache-ttl "
+                     (number->string default-cache-ttl) "\n"
+                     "max-cache-ttl "
+                     (number->string max-cache-ttl) "\n"
+                     "default-cache-ttl-ssh "
+                     (number->string default-cache-ttl-ssh) "\n"
+                     "max-cache-ttl-ssh "
+                     (number->string max-cache-ttl-ssh) "\n"
+                     extra-content)))
+
+(define (home-gpg-agent-shepherd-services config)
+  "Return the possibly-empty list of Shepherd services for @var{config}."
+  (match-record config <home-gpg-agent-configuration>
+    (gnupg ssh-support?)
+    ;; 'gpg-agent' is started on demand by GnuPG's programs, but it has to be
+    ;; started explicitly when OpenSSH support is enabled (info "(gnupg) Agent
+    ;; Options").
+    (if ssh-support?
+        (let ((endpoint (lambda (name socket)
+                          #~(endpoint
+                             (make-socket-address
+                              AF_UNIX
+                              (string-append %user-runtime-dir
+                                             "/gnupg/" #$socket))
+                             #:name #$name
+                             #:socket-directory-permissions #o700))))
+          (list (shepherd-service
+                 (provision '(gpg-agent ssh-agent))
+                 (modules '((shepherd support)))  ;for '%user-runtime-dir'
+                 (start #~(make-systemd-constructor
+                           (list #$(file-append gnupg "/bin/gpg-agent")
+                                 "--supervised" "--enable-ssh-support")
+                           (list #$(endpoint "ssh" "S.gpg-agent.ssh")
+                                 #$(endpoint "browser" "S.gpg-agent.browser")
+                                 #$(endpoint "extra" "S.gpg-agent.extra")
+                                 ;; #$(endpoint "scdaemon" "S.scdaemon")
+                                 #$(endpoint "std" "S.gpg-agent"))))
+                 (stop #~(make-systemd-destructor))
+                 (documentation "Start 'gpg-agent', the GnuPG passphrase
+agent, with support for handling OpenSSH material."))))
+        '())))
+
+(define (home-gpg-agent-files config)
+  `((".gnupg/gpg-agent.conf" ,(home-gpg-agent-configuration-file config))))
+
+(define (home-gpg-agent-environment-variables config)
+  "Return GnuPG environment variables needed for @var{config}."
+  (if (home-gpg-agent-configuration-ssh-support? config)
+      `(("SSH_AUTH_SOCK"
+         . "$XDG_RUNTIME_DIR/gnupg/S.gpg-agent.ssh"))
+      '()))
+
+(define home-gpg-agent-service-type
+  (service-type
+   (name 'home-gpg-agent)
+   (extensions
+    (list (service-extension home-files-service-type
+                             home-gpg-agent-files)
+          (service-extension home-shepherd-service-type
+                             home-gpg-agent-shepherd-services)
+          (service-extension home-environment-variables-service-type
+                             home-gpg-agent-environment-variables)))
+   (default-value (home-gpg-agent-configuration))
+   (description
+    "Configure GnuPG's agent, @command{gpg-agent}, which is responsible for
+managing OpenPGP and optionally SSH private keys.  When SSH support is
+enabled, @command{gpg-agent} acts as a drop-in replacement for OpenSSH's
+@command{ssh-agent}.")))
diff --git a/gnu/home/services/shells.scm b/gnu/home/services/shells.scm
index 3326eb37f4..f05f2221d6 100644
--- a/gnu/home/services/shells.scm
+++ b/gnu/home/services/shells.scm
@@ -133,7 +133,7 @@ Shell startup process will continue with
   (environment-variables
    (alist '())
    "Association list of environment variables to set for the Zsh session."
-   serialize-posix-env-vars)
+   (serializer serialize-posix-env-vars))
   (zshenv
    (text-config '())
    "List of file-like objects, which will be added to @file{.zshenv}.
@@ -334,7 +334,7 @@ source ~/.profile
 rules for the @code{home-environment-variables-service-type} apply
 here (@pxref{Essential Home Services}).  The contents of this field will be
 added after the contents of the @code{bash-profile} field."
-   serialize-posix-env-vars)
+   (serializer serialize-posix-env-vars))
   (aliases
    (alist '())
    "Association list of aliases to set for the Bash session.  The aliases will be
@@ -351,7 +351,7 @@ turns into
 @example
 alias ls=\"ls -alF\"
 @end example"
-   bash-serialize-aliases)
+   (serializer bash-serialize-aliases))
   (bash-profile
    (text-config '())
    "List of file-like objects, which will be added to @file{.bash_profile}.
@@ -536,19 +536,19 @@ with text blocks from other extensions and the base service."))
   (environment-variables
    (alist '())
    "Association list of environment variables to set in Fish."
-   serialize-fish-env-vars)
+   (serializer serialize-fish-env-vars))
   (aliases
    (alist '())
    "Association list of aliases for Fish, both the key and the value
 should be a string.  An alias is just a simple function that wraps a
 command, If you want something more akin to @dfn{aliases} in POSIX
 shells, see the @code{abbreviations} field."
-   serialize-fish-aliases)
+   (serializer serialize-fish-aliases))
   (abbreviations
    (alist '())
    "Association list of abbreviations for Fish.  These are words that,
 when typed in the shell, will automatically expand to the full text."
-   serialize-fish-abbreviations))
+   (serializer serialize-fish-abbreviations)))
 
 (define (fish-files-service config)
   `(("fish/config.fish"
diff --git a/gnu/home/services/xdg.scm b/gnu/home/services/xdg.scm
index 3007493f85..ac557b4c3d 100644
--- a/gnu/home/services/xdg.scm
+++ b/gnu/home/services/xdg.scm
@@ -104,11 +104,11 @@ like sockets.")
 Specification, but helps to make implementation of home services more
 consistent.")
   (state-home
-   (path "$HOME/.local/var/lib")
-   "Base directory for programs to store state files, like databases,
-analogus to @file{/var/lib}, but for user.  It is not a part of XDG
-Base Directory Specification, but helps to make implementation of home
-services more consistent."))
+   (path "$HOME/.local/state")
+   "Base directory for programs to store state data that should persist
+between (application) restarts, such as logs, but are not important or
+portable enough to the user to warrant storing them in
+@env{XDG_DATA_HOME}."))
 
 (define (home-xdg-base-directories-environment-variables-service config)
   (map
@@ -158,12 +158,12 @@ are no extensions use configuration instead."
                 (compose identity)
                 (extend last-extension-or-cfg)
                 (description "Configure XDG base directories.  This
-service introduces two additional variables @env{XDG_STATE_HOME},
-@env{XDG_LOG_HOME}.  They are not a part of XDG specification, at
-least yet, but are convenient to have, it improves the consistency
-between different home services.  The services of this service-type is
-instantiated by default, to provide non-default value, extend the
-service-type (using @code{simple-service} for example).")))
+service introduces an additional @env{XDG_LOG_HOME} variable.  It's not
+a part of XDG specification, at least yet, but are convenient to have,
+it improves the consistency between different home services.  The
+services of this service-type is instantiated by default, to provide
+non-default value, extend the service-type (using @code{simple-service}
+for example).")))
 
 (define (generate-home-xdg-base-directories-documentation)
   (generate-documentation
diff --git a/gnu/local.mk b/gnu/local.mk
index 4151c91984..f473082203 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -91,6 +91,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/home/services/desktop.scm			\
   %D%/home/services/symlink-manager.scm		\
   %D%/home/services/fontutils.scm		\
+  %D%/home/services/gnupg.scm			\
   %D%/home/services/guix.scm			\
   %D%/home/services/media.scm			\
   %D%/home/services/messaging.scm		\
@@ -501,6 +502,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/poedit.scm				\
   %D%/packages/polkit.scm			\
   %D%/packages/popt.scm				\
+  %D%/packages/potassco.scm				\
   %D%/packages/printers.scm			\
   %D%/packages/profiling.scm			\
   %D%/packages/prolog.scm			\
@@ -781,6 +783,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/tests/messaging.scm			\
   %D%/tests/networking.scm			\
   %D%/tests/package-management.scm		\
+  %D%/tests/pam.scm				\
   %D%/tests/reconfigure.scm			\
   %D%/tests/rsync.scm				\
   %D%/tests/samba.scm				\
@@ -862,9 +865,6 @@ MODULES_NOT_COMPILED +=				\
 
 patchdir = $(guilemoduledir)/%D%/packages/patches
 dist_patch_DATA =						\
-  %D%/packages/patches/a2ps-CVE-2001-1593.patch	\
-  %D%/packages/patches/a2ps-CVE-2014-0466.patch	\
-  %D%/packages/patches/a2ps-CVE-2015-8107.patch	\
   %D%/packages/patches/abcl-fix-build-xml.patch	\
   %D%/packages/patches/ableton-link-system-libraries-debian.patch	\
   %D%/packages/patches/abiword-explictly-cast-bools.patch	\
@@ -1027,6 +1027,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/date-output-pkg-config-files.patch	\
   %D%/packages/patches/datefudge-gettimeofday.patch		\
   %D%/packages/patches/dbacl-include-locale.h.patch		\
+  %D%/packages/patches/dbacl-icheck-multiple-definitions.patch		\
   %D%/packages/patches/dbus-helper-search-path.patch		\
   %D%/packages/patches/dbus-c++-gcc-compat.patch		\
   %D%/packages/patches/dbus-c++-threading-mutex.patch		\
@@ -1127,6 +1128,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/fp16-implicit-double.patch		\
   %D%/packages/patches/fp16-system-libraries.patch		\
   %D%/packages/patches/fpc-reproducibility.patch		\
+  %D%/packages/patches/fpm-newer-clamp-fix.patch		\
   %D%/packages/patches/freedink-engine-fix-sdl-hints.patch	\
   %D%/packages/patches/freeimage-libtiff-compat.patch		\
   %D%/packages/patches/freeimage-unbundle.patch		\
@@ -1195,7 +1197,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/gdm-remove-hardcoded-xwayland-path.patch	\
   %D%/packages/patches/gdm-wayland-session-wrapper-from-env.patch	\
   %D%/packages/patches/gdm-pass-gdk-pixbuf-loader-env.patch	\
-  %D%/packages/patches/geeqie-clutter.patch			\
   %D%/packages/patches/gemmi-fix-pegtl-usage.patch		\
   %D%/packages/patches/gemmi-fix-sajson-types.patch		\
   %D%/packages/patches/genimage-mke2fs-test.patch		\
@@ -1244,6 +1245,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/glibc-2.29-git-updates.patch     	\
   %D%/packages/patches/glibc-2.29-supported-locales.patch     	\
   %D%/packages/patches/glibc-supported-locales.patch     	\
+  %D%/packages/patches/glslang-install-static-libs.patch     	\
   %D%/packages/patches/gmp-arm-asm-nothumb.patch		\
   %D%/packages/patches/gmp-faulty-test.patch			\
   %D%/packages/patches/gnash-fix-giflib-version.patch	        \
@@ -1292,6 +1294,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/guile-fibers-epoll-instance-is-dead.patch \
   %D%/packages/patches/guile-fibers-fd-finalizer-leak.patch	\
   %D%/packages/patches/guile-fibers-wait-for-io-readiness.patch \
+  %D%/packages/patches/guile-fix-invalid-unicode-handling.patch \
   %D%/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch	\
   %D%/packages/patches/guile-git-adjust-for-libgit2-1.2.0.patch \
   %D%/packages/patches/guile-hurd-posix-spawn.patch		\
@@ -1322,6 +1325,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/hdf-eos5-remove-gctp.patch		\
   %D%/packages/patches/hdf-eos5-fix-szip.patch			\
   %D%/packages/patches/hdf-eos5-fortrantests.patch		\
+  %D%/packages/patches/heimdal-CVE-2022-45142.patch		\
   %D%/packages/patches/helm-fix-gcc-9-build.patch		\
   %D%/packages/patches/http-parser-CVE-2020-8287.patch		\
   %D%/packages/patches/htslib-for-stringtie.patch		\
@@ -1485,6 +1489,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/lierolibre-newer-libconfig.patch		\
   %D%/packages/patches/lierolibre-remove-arch-warning.patch	\
   %D%/packages/patches/lierolibre-try-building-other-arch.patch	\
+  %D%/packages/patches/libcdio-glibc-compat.patch		\
   %D%/packages/patches/linbox-fix-pkgconfig.patch		\
   %D%/packages/patches/linphone-desktop-without-sdk.patch	\
   %D%/packages/patches/linux-libre-infodocs-target.patch	\
@@ -1519,7 +1524,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/lvm2-static-link.patch			\
   %D%/packages/patches/mailutils-variable-lookup.patch		\
   %D%/packages/patches/make-impure-dirs.patch			\
-  %D%/packages/patches/mariadb-link-libatomic.patch		\
   %D%/packages/patches/mars-install.patch			\
   %D%/packages/patches/mars-sfml-2.3.patch			\
   %D%/packages/patches/mathjax-disable-webpack.patch			\
@@ -1536,6 +1540,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/libmemcached-build-with-gcc7.patch	\
   %D%/packages/patches/libmhash-hmac-fix-uaf.patch		\
   %D%/packages/patches/libsigrokdecode-python3.9-fix.patch	\
+  %D%/packages/patches/mecab-variable-param.patch		\
   %D%/packages/patches/memtest86+-build-reproducibly.patch	\
   %D%/packages/patches/mercurial-hg-extension-path.patch	\
   %D%/packages/patches/mercurial-openssl-compat.patch		\
@@ -1614,7 +1619,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/onnx-skip-model-downloads.patch		\
   %D%/packages/patches/openbios-aarch64-riscv64-support.patch	\
   %D%/packages/patches/openboardview-use-system-imgui.patch	\
-  %D%/packages/patches/openboardview-use-system-utf8.patch	\
+  %D%/packages/patches/openboardview-use-system-mpc.patch	\
   %D%/packages/patches/openbox-python3.patch			\
   %D%/packages/patches/openfoam-4.1-cleanup.patch			\
   %D%/packages/patches/openjdk-9-pointer-comparison.patch       \
@@ -1633,6 +1638,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/openssl-3.0-c-rehash-in.patch		\
   %D%/packages/patches/opentaxsolver-file-browser-fix.patch     \
   %D%/packages/patches/open-zwave-hidapi.patch			\
+  %D%/packages/patches/orangeduck-mpc-fix-pkg-config.patch	\
   %D%/packages/patches/orpheus-cast-errors-and-includes.patch	\
   %D%/packages/patches/osip-CVE-2017-7853.patch			\
   %D%/packages/patches/ots-no-include-missing-file.patch	\
@@ -1737,7 +1743,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-3-search-paths.patch		\
   %D%/packages/patches/python-3-fix-tests.patch			\
   %D%/packages/patches/python-3-hurd-configure.patch		\
-  %D%/packages/patches/python-afdko-suppress-copyright-test.patch	\
   %D%/packages/patches/python-aionotify-0.2.0-py3.8.patch	\
   %D%/packages/patches/python-argcomplete-1.11.1-fish31.patch	\
   %D%/packages/patches/python-cross-compile.patch		\
@@ -1759,7 +1764,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-pillow-CVE-2022-45199.patch	\
   %D%/packages/patches/python-pyfakefs-remove-bad-test.patch	\
   %D%/packages/patches/python-pyflakes-test-location.patch	\
-  %D%/packages/patches/python2-pyopenssl-openssl-compat.patch	\
   %D%/packages/patches/python-flint-includes.patch		\
   %D%/packages/patches/python-libxml2-utf8.patch		\
   %D%/packages/patches/python-magic-python-bytecode.patch	\
@@ -1829,6 +1833,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/rocm-opencl-runtime-4.3-noclinfo.patch 	\
   %D%/packages/patches/rocm-opencl-runtime-4.3-noopencl.patch 	\
   %D%/packages/patches/rottlog-direntry.patch 			\
+  %D%/packages/patches/ruby-hiredis-use-system-hiredis.patch	\
   %D%/packages/patches/ruby-hydra-minimal-no-byebug.patch	\
   %D%/packages/patches/ruby-anystyle-data-immutable-install.patch	\
   %D%/packages/patches/ruby-anystyle-fix-dictionary-populate.patch	\
@@ -2012,6 +2017,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/warsow-qfusion-fix-bool-return-type.patch	\
   %D%/packages/patches/wdl-link-libs-and-fix-jnetlib.patch	\
   %D%/packages/patches/webkitgtk-adjust-bubblewrap-paths.patch	\
+  %D%/packages/patches/webkitgtk-libelogind.patch			\
   %D%/packages/patches/webrtc-audio-processing-big-endian.patch	\
   %D%/packages/patches/webrtc-for-telegram-desktop-fix-gcc12-cstdint.patch   \
   %D%/packages/patches/websocketpp-fix-for-cmake-3.15.patch	\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index dc980f5dfe..5185ffd198 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -3438,6 +3438,52 @@ throughput (in the same interval).")
     (home-page "http://dag.wiee.rs/home-made/dstat/")
     (license license:gpl2+)))
 
+(define-public dool
+  (package
+    (name "dool")
+    (version "1.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/scottchiefbaker/dool")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "dool" version))
+       (sha256
+        (base32 "13qq52lq7z3pl2mgrhwqh8c69p9x5rkyjqjswszd6vdbzm7zk7yq"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'remove-symlinks-and-snap-packaging
+            ;; Remove symlinks that make 'ensure-no-mtimes-pre-1980 fail.
+            (lambda _
+              (delete-file "examples/dstat.py")
+              (delete-file-recursively "packaging/snap")))
+          (delete 'build)
+          (replace 'install
+            (lambda _
+              (substitute* "install.py"
+                (("(bin_dir *= ?).*" _ prefix)
+                 (string-append prefix  "\"" #$output "/bin/\"\n"))
+                (("(plugin_dir *= ?).*" _ prefix)
+                 (string-append prefix "\"" #$output "/share/dool/\"\n"))
+                (("(manpage_dir *= ?).*" _ prefix)
+                 (string-append prefix "\"" #$output "/share/man/man1/\"\n")))
+              (invoke "python" "install.py" "--root")))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "./dool" "--version")
+                (invoke "./dool" "-taf" "1" "5")))))))
+    (synopsis "Command line system resource monitoring tool")
+    (description "Dool is a command line tool to monitor many aspects of your
+system: CPU, Memory, Network, Load Average, etc.  It also includes a robust
+plug-in architecture to allow monitoring other system metrics.")
+    (home-page "https://github.com/scottchiefbaker/dool")
+    (license license:gpl2+)))
+
 (define-public thefuck
   (package
     (name "thefuck")
@@ -3512,7 +3558,7 @@ produce uniform output across heterogeneous networks.")
 (define-public cbatticon
   (package
     (name "cbatticon")
-    (version "1.6.10")
+    (version "1.6.13")
     (source
      (origin
        (method git-fetch)
@@ -3520,7 +3566,7 @@ produce uniform output across heterogeneous networks.")
              (url "https://github.com/valr/cbatticon")
              (commit version)))
        (sha256
-        (base32 "0ivm2dzhsa9ir25ry418r2qg2llby9j7a6m3arbvq5c3kaj8m9jr"))
+        (base32 "1xs37xrycvk0021r5l3xs4ijgf3lm25d2zhm8dppb5kx66xcj22m"))
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
@@ -3935,7 +3981,7 @@ you are running, what theme or icon set you are using, etc.")
 (define-public uwufetch
   (package
     (name "uwufetch")
-    (version "2.0")
+    (version "2.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3944,7 +3990,7 @@ you are running, what theme or icon set you are using, etc.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0s4pzaqmlq6rn54kgmlpcrc0sy3q5zn6lxh4448k9iimshljsjfs"))))
+                "182jwkm4vacz2bhyn7v4jl9bxs7md51az958r0qfp9ky71m2q3vh"))))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -4152,7 +4198,7 @@ hard-coded.")
 (define-public thermald
   (package
     (name "thermald")
-    (version "2.5.1")
+    (version "2.5.2")
     (source
      (origin
       (method git-fetch)
@@ -4161,7 +4207,7 @@ hard-coded.")
              (commit (string-append "v" version))))
       (file-name (git-file-name name version))
       (sha256
-       (base32 "06p1154w3n4lm0nq8fdsr6ksxl8shrc9z8yz0sbviss9afpawxcg"))))
+       (base32 "08w0lanhk2rncvshrvxrpm84y9f9x7aa63vxi7fg6329c94cf78k"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index a4bf08d514..7e125f3f99 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -12,7 +12,7 @@
 ;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
-;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021, 2023 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Lars-Dominik Braun <ldb@leibniz-psychology.org>
 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
@@ -34,6 +34,7 @@
 (define-module (gnu packages algebra)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
@@ -58,6 +59,7 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
+  #:use-module (gnu packages ruby)
   #:use-module (gnu packages shells)
   #:use-module (gnu packages tex)
   #:use-module (gnu packages texinfo)
@@ -224,7 +226,7 @@ the real span of the lattice.")
 (define-public pari-gp
   (package
     (name "pari-gp")
-    (version "2.15.2")
+    (version "2.15.3")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -232,7 +234,7 @@ the real span of the lattice.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "1pg0przhb3cgyn0rwkx2mx7a7fpy6bxxl72bk98pca723q8jhimh"))))
+                "0s4jasvb3ghvxp9s2ifmr0lk7ckj9529zg28icmdgbyd723abxdd"))))
     (build-system gnu-build-system)
     (native-inputs (list (texlive-updmap.cfg
                           (list texlive-amsfonts))))
@@ -935,7 +937,7 @@ algorithms from the FORTRAN library MINPACK.")
 (define-public symengine
   (package
     (name "symengine")
-    (version "0.9.0")
+    (version "0.10.1")
     (source
      (origin
        (method git-fetch)
@@ -944,7 +946,7 @@ algorithms from the FORTRAN library MINPACK.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "17b6byrhk0bgvarqmg92nrrqhzll9as6x1smghmyq2h9xc373ap4"))))
+        (base32 "0qy5w5msq0zy7drbhdy0vx451zglha8jm5s4zzmvmsja5yyv8fx9"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags
@@ -1821,3 +1823,81 @@ mathematical floating-point libraries (libm).  Amongst other features,
 it offers a certified infinity norm, an automatic polynomial
 implementer, and a fast Remez algorithm.")
    (license license:cecill-c)))
+
+(define-public form
+  ;; using this commit as it removes some invalid/ambiguous license info
+  (let ((commit "e7c52d3b07abe21f21718f5e70ee138e856f15ac")
+        (revision "0"))
+    (package
+      (name "form")
+      (version (git-version "4.3.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/vermaseren/form")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "15pjpn5s8d3sva18syhyymh5v1dijchk0xkf6d0m7cl2sj3qxxxq"))))
+      (build-system gnu-build-system)
+      (arguments
+       (list #:configure-flags #~'("--enable-native=no")
+             #:phases #~(modify-phases %standard-phases
+                          (add-after 'unpack 'patch-src
+                            (lambda _
+                              (substitute* "check/examples.frm"
+                                ;; skip test that causes memory leak and fails
+                                (("#pend_if valgrind\\?")
+                                 "#pend_if 0"))
+                              (substitute* "sources/extcmd.c"
+                                (("/bin/sh")
+                                 (string-append
+                                  #$(this-package-input "bash-minimal")
+                                  "/bin/sh")))))
+                          (add-after 'build 'build-doxygen
+                            (lambda _
+                              (with-directory-excursion "doc/doxygen"
+                                (invoke "make" "html"))))
+                          (add-after 'install 'install-docs
+                            (lambda _
+                              (let ((doc (string-append
+                                          #$output "/share/doc/" #$name "-"
+                                          #$version "/html")))
+                                (mkdir-p doc)
+                                (copy-recursively "doc/doxygen/html" doc)))))))
+      (native-inputs (list autoconf automake doxygen ruby))
+      (inputs (list bash-minimal))
+      (home-page "https://www.nikhef.nl/~form/")
+      (synopsis "Symbolic manipulation system for very big expressions")
+      (description
+       "FORM is a symbolic manipulation system.  It reads symbolic expressions
+from files and executes symbolic/algebraic transformations upon them.  The
+answers are returned in a textual mathematical representation.  The size of
+the considered expressions in FORM is only limited by the available disk space
+and not by the available RAM.")
+      ;; XXX: Ignore this CVE to work around a name clash with the unrelated
+      ;; "neos/forms" package.
+      (properties '((lint-hidden-cve . ("CVE-2021-32697"))))
+      ;; x86_64 only due to test failures on other platforms.
+      ;; Developers say other platforms are not "tier 1" supported:
+      ;; https://github.com/vermaseren/form/issues/426
+      (supported-systems '("x86_64-linux"))
+      (license license:gpl3+))))
+
+(define-public parform
+  (package
+    (inherit form)
+    (name "parform")
+    (arguments
+     (substitute-keyword-arguments (package-arguments form)
+       ((#:configure-flags flags)
+        #~(cons* "--enable-parform=yes" #$flags))
+       ((#:phases phases)
+        #~(modify-phases #$phases
+            (add-before 'check 'mpi-setup
+              #$%openmpi-setup)))))
+    (inputs (list bash-minimal openmpi))
+    (description (string-append (package-description form)
+                                "  This package also includes
+@code{parform}, a version of FORM parallelized using OpenMPI."))))
diff --git a/gnu/packages/android.scm b/gnu/packages/android.scm
index 962afc6759..f35c2398bd 100644
--- a/gnu/packages/android.scm
+++ b/gnu/packages/android.scm
@@ -1169,25 +1169,22 @@ main repository.")
 (define-public fdroidcl
   (package
     (name "fdroidcl")
-    (version "0.5.0")
+    (version "0.7.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                     (url "https://github.com/mvdan/fdroidcl")
-                     (commit (string-append "v" version))))
+                    (url "https://github.com/mvdan/fdroidcl")
+                    (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
-               (base32 "1rxcdyy2j34z0ql9d62w7ivsch9xihjnpb1z9kgy9q46vl8zhhy0"))))
+               (base32
+                "1s3fszlyyab9gbdrg52zcbafsb1mgb770skg7b3gj7f3pzfnra5n"))))
     (build-system go-build-system)
     (arguments
      `(#:import-path "mvdan.cc/fdroidcl"
-       #:tests? #f  ; TODO: Inputs missing.
+       #:tests? #f                      ;requires internet access
        #:install-source? #f))
-    (inputs
-     (list go-github-com-kr-pretty))
-    ;(native-inputs
-    ; `(("go-github-com-rogpeppe-go-internal-testscript"
-    ;    ,go-github-com-rogpeppe-go-internal-testscript)))
+    (inputs (list go-github-com-kr-pretty go-github-com-schollz-progressbar-v3))
     (synopsis "F-Droid desktop client")
     (description
      "While the Android client integrates with the system with regular update
diff --git a/gnu/packages/astronomy.scm b/gnu/packages/astronomy.scm
index 46839c802f..db290f5987 100644
--- a/gnu/packages/astronomy.scm
+++ b/gnu/packages/astronomy.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2019 by Amar Singh <nly@disroot.org>
 ;;; Copyright © 2020 R Veera Kumar <vkor@vkten.in>
 ;;; Copyright © 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
-;;; Copyright © 2021, 2022 Sharlatan Hellseher <sharlatanus@gmail.com>
+;;; Copyright © 2021, 2022, 2023 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2021, 2022 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
@@ -496,7 +496,7 @@ in FITS files.")
                  (("self.use_system_fitsio") "True")
                  (("self.system_fitsio_includedir") includedir)
                  (("self.system_fitsio_libdir") libdir))))))))
-    (inputs (list curl-minimal))
+    (inputs (list curl))
     (propagated-inputs
      (list python-numpy cfitsio))
     (home-page "https://github.com/esheldon/fitsio")
@@ -663,7 +663,7 @@ astronomical image-processing packages like Drizzle, Swarp or SExtractor.")
      '(#:configure-flags '("--disable-static")))
     (inputs
      (list cfitsio
-           curl-minimal
+           curl
            gsl
            libgit2
            libjpeg-turbo
@@ -678,6 +678,70 @@ astronomical image-processing packages like Drizzle, Swarp or SExtractor.")
 programs for the manipulation and analysis of astronomical data.")
     (license license:gpl3+)))
 
+(define-public phd2
+  (package
+    (name "phd2")
+    (version "2.6.11")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/OpenPHDGuiding/phd2")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0n87xsv9gzrwk1ygws4vw397ffq40xybp5b3c3bd5kcmff0avaw9"))
+       (modules '((guix build utils)
+                  (ice-9 ftw)
+                  (srfi srfi-26)))
+       (snippet
+        #~(begin
+            ;; XXX: 'delete-all-but' is copied from the turbovnc package.
+            (define (delete-all-but directory . preserve)
+              (define (directory? x)
+                (and=> (stat x #f)
+                       (compose (cut eq? 'directory <>) stat:type)))
+              (with-directory-excursion directory
+                (let* ((pred
+                        (negate (cut member <> (append '("." "..") preserve))))
+                       (items (scandir "." pred)))
+                  (for-each (lambda (item)
+                              (if (directory? item)
+                                  (delete-file-recursively item)
+                                  (delete-file item)))
+                            items))))
+            (delete-all-but "thirdparty" "thirdparty.cmake")))))
+    (build-system cmake-build-system)
+    (arguments
+     (list #:configure-flags #~(list "-DOPENSOURCE_ONLY=yes"
+                                     "-DUSE_SYSTEM_CFITSIO=yes"
+                                     "-DUSE_SYSTEM_EIGEN3=yes"
+                                     "-DUSE_SYSTEM_GTEST=yes"
+                                     "-DUSE_SYSTEM_LIBINDI=yes"
+                                     "-DUSE_SYSTEM_LIBUSB=yes")))
+    (native-inputs
+     (list gettext-minimal
+           googletest
+           perl
+           pkg-config
+           python))
+    (inputs
+     (list cfitsio
+           curl
+           eigen
+           gtk+
+           indi
+           libnova
+           libusb
+           wxwidgets
+           zlib))
+    (home-page "https://openphdguiding.org")
+    (synopsis "Teleskope guiding software")
+    (description
+     "PHD2 is the enhanced, second generation version of the PHD guiding software
+from Stark Labs.")
+    (license license:bsd-3)))
+
 (define-public sextractor
   (package
     (name "sextractor")
@@ -2057,6 +2121,35 @@ standard astronomy libraries:
 @end itemize\n")
       (license license:gpl2+))))
 
+(define-public libxisf
+  (package
+    (name "libxisf")
+    ;; TODO: v0.2.2 (current latest) failed to build on configure phase, issue
+    ;; was open directly with author as he hosts source on seflhosted gitea.
+    (version "0.2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitea.nouspiro.space/nou/libXISF")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0fz9mmj1nz5v7hlr53q8na7khadfn1hm0d1gfpzzw3167bqpy2xv"))))
+    (build-system cmake-build-system)
+    (arguments
+     (list #:configure-flags #~(list "-DUSE_BUNDLED_LIBS=OFF")))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+     (list lz4 pugixml zlib))
+    (home-page "https://nouspiro.space/?page_id=306")
+    (synopsis "Astronomical library to load and write XISF file format")
+    (description
+     "LibXISF is C++ library that can read and write XISF files produced by
+PixInsight.  It implements XISF 1.0 specification.")
+    (license license:gpl3+)))
+
 (define-public missfits
   (package
     (name "missfits")
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 6f3fa2a580..220e0b8e86 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -11,7 +11,7 @@
 ;;; Copyright © 2016–2023 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2020 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018 okapi <okapi@firemail.cc>
-;;; Copyright © 2018, 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2018, 2020, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2018, 2019, 2022 Marius Bakke <marius@gnu.org>
@@ -37,11 +37,12 @@
 ;;; Copyright © 2021 jgart <jgart@dismail.de>
 ;;; Copyright © 2021 Aleksandr Vityazev <avityazev@posteo.org>
 ;;; Copyright © 2022 Arjan Adriaanse <arjan@adriaan.se>
-;;; Copyright © 2022 Juliana Sims <jtsims@protonmail.com>
+;;; Copyright © 2022, 2023 Juliana Sims <jtsims@protonmail.com>
 ;;; Copyright © 2022 Simon Streit <simon@netpanic.org>
 ;;; Copyright © 2022 Andy Tai <atai@atai.org>
 ;;; Copyright © 2023 Sergiu Ivanov <sivanov@colimite.fr>
 ;;; Copyright © 2023 David Thompson <dthompson2@worcester.edu>
+;;; Copyright © 2023 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -66,8 +67,8 @@
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
-  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
@@ -86,6 +87,7 @@
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnunet) ; libmicrohttpd
   #:use-module (gnu packages gperf)
+  #:use-module (gnu packages graphviz)
   #:use-module (gnu packages groff)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
@@ -95,6 +97,7 @@
   #:use-module (gnu packages libbsd)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages libusb)
+  #:use-module (gnu packages linphone)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages machine-learning)
@@ -120,8 +123,6 @@
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages telephony)
-  #:use-module (gnu packages linphone)
-  #:use-module (gnu packages linux)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages valgrind)
   #:use-module (gnu packages video)
@@ -734,7 +735,7 @@ purposes developed at Queen Mary, University of London.")
 (define-public ardour
   (package
     (name "ardour")
-    (version "7.2")
+    (version "7.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -751,7 +752,7 @@ purposes developed at Queen Mary, University of London.")
 namespace ARDOUR { const char* revision = \"" version "\" ; const char* date = \"\"; }")))))
               (sha256
                (base32
-                "1gv0wkzyx59lbnaf5iz9yva4akrd2zkhsmdk8wda3wz06zmk4w1r"))
+                "0bkhrgswhc9y1ly8nfg8hpwad77cgbr663dgj86h3aisljc4cdkw"))
               (file-name (string-append name "-" version))))
     (build-system waf-build-system)
     (arguments
@@ -2061,7 +2062,7 @@ follower.")
 (define-public fluidsynth
   (package
     (name "fluidsynth")
-    (version "2.2.4")
+    (version "2.3.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2070,7 +2071,7 @@ follower.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1061rdj69503spkd8vmfl3fqvyg4l41k5xcc4gw7niy31hnpnjmn"))))
+                "05lr9f0q4x1kvgfa3xrfmagpwvijv9m1s316aa9figqlkcc5vv4k"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f                      ; no check target
@@ -2091,7 +2092,6 @@ follower.")
      (list alsa-lib
            glib
            jack-1
-           lash
            libsndfile
            readline))
     (home-page "https://www.fluidsynth.org/")
@@ -2746,60 +2746,6 @@ plugin function as a JACK application.")
 to be plugged into a wide range of audio synthesis and recording packages.")
     (license license:lgpl2.1+)))
 
-(define-public lash
-  (package
-    (name "lash")
-    (version "0.6.0-rc2")
-    (source (origin
-              (method url-fetch)
-              ;; The tilde is not permitted in the builder name, but is used
-              ;; in the tarball.
-              (uri (string-append
-                    "mirror://savannah/lash/lash-"
-                    (string-join (string-split version #\-) "~")
-                    ".tar.bz2"))
-              (file-name (string-append name "-" version ".tar.bz2"))
-              (sha256
-               (base32
-                "12z1vx3krrzsfccpah9xjs68900xvr7bw92wx8np5871i2yv47iw"))))
-    (build-system gnu-build-system)
-    (arguments
-     '(;; Glibc no longer includes Sun RPC support, so tell the build system
-       ;; to use libtirpc instead.
-       #:make-flags (list (string-append "CFLAGS=-I"
-                                         (assoc-ref %build-inputs "libtirpc")
-                                         "/include/tirpc -ltirpc"))
-       #:phases
-       (modify-phases %standard-phases
-         ;; lashd embeds an ancient version of sigsegv so we just skip it
-         (add-after 'unpack 'skip-lashd
-           (lambda _
-             (substitute* '("Makefile.am" "Makefile.in")
-               (("lashd ") ""))
-             #t)))
-       #:configure-flags '("--disable-static")))
-    (inputs
-     `(("bdb" ,bdb)
-       ("gtk" ,gtk+-2)
-       ("jack" ,jack-1)
-       ("libtirpc" ,libtirpc)
-       ("readline" ,readline)
-       ("python" ,python-2)))
-    ;; According to pkg-config, packages depending on lash also need to have
-    ;; at least the following packages declared as inputs.
-    (propagated-inputs
-     (list alsa-lib dbus libxml2))
-    (native-inputs
-     (list pkg-config))
-    (home-page "https://www.nongnu.org/lash/")
-    (synopsis "Audio application session manager")
-    (description
-     "LASH is a session management system for audio applications.  It allows
-you to save and restore audio sessions consisting of multiple interconneced
-applications, restoring program state (i.e. loaded patches) and the
-connections between them.")
-    (license license:gpl2+)))
-
 (define-public libbs2b
   (package
     (name "libbs2b")
@@ -3312,7 +3258,7 @@ lv2-c++-tools.")
 (define-public openal
   (package
     (name "openal")
-    (version "1.20.1")
+    (version "1.22.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -3320,7 +3266,7 @@ lv2-c++-tools.")
                     version ".tar.bz2"))
               (sha256
                (base32
-                "0vax0b1lgd4212bpxa1rciz52d4mv3dkfvcbbhzw4cjp698v1kmn"))))
+                "081xgkma2a19dscwx21xdpklh8gq399w4f1fx737qsx7rnawr55f"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f  ; no check target
@@ -4019,6 +3965,55 @@ compression modes.  This package contains command-line programs and library to
 encode and decode wavpack files.")
     (license license:bsd-3)))
 
+(define-public libmixed
+  ;; Release is much outdated.
+  (let ((commit "91e6b9f2438bca41205fade02c9d8f4f938838b6")
+        (revision "0"))
+    (package
+      (name "libmixed")
+      (version (git-version "2.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shirakumo/libmixed")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "01vwgv8ivpg7a4y95krkgh656mmklsn1k3fmhwp474aj82grd3m4"))))
+      (build-system cmake-build-system)
+      (arguments
+       (list
+        ;; FIXME: (Sharlatan-20230326T121542+0100): Tests failed 1/34, 1 failed,
+        ;; 33 passed. There is not simple way to disable just one test.
+        ;; https://github.com/Shirakumo/libmixed/issues/13
+        #:tests? #f
+        #:configure-flags
+        #~(list "-DBUILD_STATIC=OFF"
+                "-DCMAKE_CXX_FLAGS=-O3 -fPIC"
+                "-DCMAKE_C_FLAGS=-O3 -fPIC")
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'fix-paths
+              (lambda _
+                (substitute* "CMakeLists.txt"
+                  (("/usr/local") #$output))))
+            (replace 'check
+              (lambda* (#:key tests? #:allow-other-keys)
+                (when tests?
+                  (invoke "./tester")))))))
+      (native-inputs (list doxygen graphviz))
+      (inputs (list mpg123 ncurses))
+      (home-page "https://github.com/Shirakumo/libmixed")
+      (synopsis "Low-level audio mixer pipeline library")
+      (description
+       "Libmixed is a library for real-time audio processing pipelines for use
+in audio/video/games.  It can serve as a base architecture for complex DSP
+systems.")
+      (license (list license:bsd-2 ; libsamplerate
+                     license:gpl2 ; spiralfft
+                     license:zlib)))))
+
 (define-public libmodplug
   (package
     (name "libmodplug")
@@ -5512,6 +5507,25 @@ and VST3 plugin formats, plus SF2 and SFZ file support.  It uses JACK as the
 default and preferred audio driver but also supports native drivers like ALSA.")
     (license license:gpl2+)))
 
+;;; This package variant tracks the latest in-development 2.6 release.
+(define-public carla-2.6
+  (let ((commit "aa400535b31c67f4b6c1b28e6e20e4d4f82111a3")
+        (revision "0"))
+    (package
+      (inherit carla)
+      (name "carla")
+      (version (git-version "2.6.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/falkTX/Carla")
+           (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0cnj2sgr60f5h6wdfmihc214wf3n74686sipl3iyzmylqrcyhbjn")))))))
+
 (define-public ecasound
   (package
     (name "ecasound")
@@ -5558,7 +5572,7 @@ in the package.")
 (define-public libaudec
   (package
     (name "libaudec")
-    (version "0.2.4")
+    (version "0.3.4")
     (source
       (origin
         (method git-fetch)
@@ -5568,7 +5582,7 @@ in the package.")
         (file-name (git-file-name name version))
         (sha256
           (base32
-            "1570m2dfia17dbkhd2qhx8jjihrpm7g8nnyg6n4wif4vv229s7dz"))))
+            "02hhhpcfkycicygh6g9hzps255zkbbi33vks6yv6zk5wp9p2nspj"))))
    (build-system meson-build-system)
    (arguments
     `(#:configure-flags
@@ -6228,7 +6242,7 @@ and DSD streams.")
 (define-public qpwgraph
   (package
     (name "qpwgraph")
-    (version "0.3.9")
+    (version "0.4.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -6237,7 +6251,7 @@ and DSD streams.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1zdqgn2a139bazazbccpb65zn7qdynndwm9mafq54nkpa7n7lri8"))))
+                "0h5y8n9xm9ay1w53hb5mw6k5i1sm8spz1izmw6yya49gv2pwyhrj"))))
     (build-system cmake-build-system)
     (arguments (list #:tests? #f)) ;; no tests
     (inputs (list alsa-lib
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index bb192c7d7d..a218e9caaf 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -1245,13 +1245,13 @@ compression parameters used by Gzip.")
 (define-public borgmatic
   (package
     (name "borgmatic")
-    (version "1.5.22")
+    (version "1.7.9")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "borgmatic" version))
        (sha256
-        (base32 "0pvqlj17vp81i7saxqh5hsaxqz29ldrjd7bcssh4g1h0ikmnaf2r"))))
+        (base32 "1scfh90qgv8xhafnnpl3pa9d8m4rg9xgvf21yybvmsnm5v1k2x5z"))))
     (build-system python-build-system)
     (arguments
      (list #:phases
@@ -1260,10 +1260,15 @@ compression parameters used by Gzip.")
                  (lambda* (#:key inputs #:allow-other-keys)
                    ;; Set absolute store path to borg.
                    (substitute* "borgmatic/commands/borgmatic.py"
-                     (("location\\.get\\('local_path', 'borg'\\)")
-                      (string-append "location.get('local_path', '"
+                     (("\\.get\\('local_path', 'borg'\\)")
+                      (string-append ".get('local_path', '"
                                      (search-input-file inputs "bin/borg")
-                                     "')")))))
+                                     "')")))
+                   (substitute* "tests/unit/commands/test_borgmatic.py"
+                     (("(module.get_local_path.+ == )'borg'" all start)
+                      (string-append start "'"
+                                     (search-input-file inputs "bin/borg")
+                                     "'")))))
                (replace 'check
                  (lambda* (#:key tests? #:allow-other-keys)
                    (when tests?
diff --git a/gnu/packages/benchmark.scm b/gnu/packages/benchmark.scm
index 33e2466da9..0cc8def918 100644
--- a/gnu/packages/benchmark.scm
+++ b/gnu/packages/benchmark.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 malte Frank Gerdes <malte.f.gerdes@gmail.com>
-;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Greg Hogan <code@greghogan.com>
 ;;; Copyright © 2021 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2022 Tomasz Jeneralczyk <tj@schwi.pl>
@@ -382,39 +382,55 @@ setup against another one.")
 (define-public python-locust
   (package
     (name "python-locust")
-    (version "2.8.6")
+    (version "2.15.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "locust" version))
        (sha256
         (base32
-         "1gn13j758j36knlcdyyyggn60rpw98iqdkvl3kjsz34brysic6q1"))))
+         "05cznfqda0yq2j351jjdssayvj5qc11xkbkwdvv81hcmz4xpyc56"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'relax-requirements
+         (add-before 'check 'increase-resource-limits
            (lambda _
-             (substitute* "setup.py"
-               (("setuptools_scm<=6.0.1")
-                "setuptools_scm")
-               (("Jinja2<3.1.0")
-                "Jinja2"))))
+             ;; XXX: Copied from ungoogled-chromium.
+             ;; Try increasing the soft resource limit of max open files to 2048,
+             ;; or equal to the hard limit, whichever is lower.
+             (call-with-values (lambda () (getrlimit 'nofile))
+               (lambda (soft hard)
+                 (when (and soft (< soft 2048))
+                   (if hard
+                       (setrlimit 'nofile (min hard 2048) hard)
+                       (setrlimit 'nofile 2048 #f))
+                   (format #t
+                           "increased maximum number of open files from ~d to ~d~%"
+                           soft (if hard (min hard 2048) 2048)))))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
                (invoke "python" "-m" "pytest" "locust"
                        "-k" (string-join
-                             '(;; These tests return "non-zero exit status 1".
+                             '( ;; These tests return "non-zero exit status 1".
                                "not test_default_headless_spawn_options"
                                "not test_default_headless_spawn_options_with_shape"
                                "not test_headless_spawn_options_wo_run_time"
+                               ;; These tests fail with a HTTP return code of
+                               ;; 500 instead of 200, for unknown reasons.
+                               "not test_autostart_mutliple_locustfiles_with_shape"
+                               "not test_autostart_w_load_shape"
+                               "not test_autostart_wo_run_time"
+                               "not test_percentile_parameter"
                                ;; These tests depend on networking.
                                "not test_html_report_option"
+                               "not test_json_schema"
                                "not test_web_options"
-                               ;; This test fails because of the warning "System open
-                               ;; file limit '1024' is below minimum setting '10000'".
+                               ;; These tests fail because of the warning
+                               ;; "System open file limit '1024' is below
+                               ;; minimum setting '10000'".
+                               "not test_autostart_w_run_time"
                                "not test_skip_logging"
                                ;; On some (slow?) machines, the following tests
                                ;; fail, with the processes returning exit code
@@ -433,7 +449,6 @@ setup against another one.")
            python-flask-cors
            python-gevent
            python-geventhttpclient
-           python-jinja2
            python-msgpack
            python-psutil
            python-pyzmq
@@ -458,7 +473,7 @@ test any system or protocol.
 
 Note: Locust will complain if the available open file descriptors limit for
 the user is too low.  To raise such limit on a Guix System, refer to
-@samp{info guix --index-search=pam-limits-service}.")
+@samp{info guix --index-search=pam-limits-service-type}.")
     (license license:expat)))
 
 (define-public interbench
diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm
index d532360f7e..35a4db026f 100644
--- a/gnu/packages/bioconductor.scm
+++ b/gnu/packages/bioconductor.scm
@@ -640,6 +640,50 @@ from several related annotation packages.")
 data.")
     (license license:artistic2.0)))
 
+(define-public r-illuminahumanmethylation450kmanifest
+  (package
+    (name "r-illuminahumanmethylation450kmanifest")
+    (version "0.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri
+                    "IlluminaHumanMethylation450kmanifest"
+                    version 'annotation))
+              (sha256
+               (base32
+                "0qx75xwifrbkqmbkd8dhf44c34ibmbivqh7y8rvgrsizmi5ybcj1"))))
+    (properties `((upstream-name . "IlluminaHumanMethylation450kmanifest")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-minfi))
+    (home-page
+     "https://bioconductor.org/packages/IlluminaHumanMethylation450kmanifest")
+    (synopsis "Annotation for Illumina's 450k methylation arrays")
+    (description "This package provides a manifest for Illumina's 450k array
+data.")
+    (license license:artistic2.0)))
+
+(define-public r-illuminahumanmethylationepicanno-ilm10b4-hg19
+  (package
+    (name "r-illuminahumanmethylationepicanno-ilm10b4-hg19")
+    (version "0.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri
+                    "IlluminaHumanMethylationEPICanno.ilm10b4.hg19"
+                    version 'annotation))
+              (sha256
+               (base32
+                "0687b4k8hwfc18qgdd9ypv1skp37jd204fszba0gmrv3dc92i09c"))))
+    (properties `((upstream-name . "IlluminaHumanMethylationEPICanno.ilm10b4.hg19")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-minfi))
+    (home-page
+     "https://doi.org/doi:10.18129/B9.bioc.IlluminaHumanMethylationEPICanno.ilm10b4.hg19")
+    (synopsis "Annotation for Illumina's EPIC methylation arrays")
+    (description
+     "This is an annotation package for Illumina's EPIC methylation arrays.")
+    (license license:artistic2.0)))
+
 (define-public r-org-ce-eg-db
   (package
     (name "r-org-ce-eg-db")
@@ -1392,6 +1436,26 @@ curated cell type labels, for use in procedures like automated annotation of
 single-cell data or deconvolution of bulk RNA-seq.")
     (license license:gpl3)))
 
+(define-public r-champdata
+  (package
+    (name "r-champdata")
+    (version "2.30.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "ChAMPdata" version 'experiment))
+              (sha256
+               (base32
+                "0rz762szfl02h4d3dj7ckd41ji9mdsja8nxqw6fl086z337041zw"))))
+    (properties `((upstream-name . "ChAMPdata")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-biocgenerics r-genomicranges))
+    (home-page "https://bioconductor.org/packages/ChAMPdata")
+    (synopsis "Data packages for ChAMP package")
+    (description
+     "This package provides datasets needed for ChAMP including a test dataset
+and blood controls for CNA analysis.")
+    (license license:gpl3)))
+
 (define-public r-chromstardata
   (package
     (name "r-chromstardata")
@@ -1434,6 +1498,63 @@ display copy number variation.  Files are stored as GRanges objects from the
 GenomicRanges Bioconductor package.")
     (license license:gpl2)))
 
+(define-public r-flowsorted-blood-450k
+  (package
+    (name "r-flowsorted-blood-450k")
+    (version "1.36.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "FlowSorted.Blood.450k"
+                                     version 'experiment))
+              (sha256
+               (base32
+                "1ha9qsp5g3g2yhnk574x6xhg95bb29ywvmg3ns1c50z69v6wbraq"))))
+    (properties `((upstream-name . "FlowSorted.Blood.450k")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-minfi))
+    (home-page "https://bioconductor.org/packages/FlowSorted.Blood.450k")
+    (synopsis
+     "Illumina HumanMethylation data on sorted blood cell populations")
+    (description
+     "This package provides raw data objects for the Illumina 450k DNA
+methylation microarrays, and an object depicting which CpGs on the array are
+associated with cell type.")
+    (license license:artistic2.0)))
+
+(define-public r-flowsorted-blood-epic
+  (package
+    (name "r-flowsorted-blood-epic")
+    (version "2.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "FlowSorted.Blood.EPIC" version
+                                     'experiment))
+              (sha256
+               (base32
+                "1vybj69jxnirqg6ik03q3pb1vv23z8mir7wpi2ys7iljf5ixzgl1"))))
+    (properties `((upstream-name . "FlowSorted.Blood.EPIC")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-annotationhub
+           r-experimenthub
+           r-genefilter
+           r-minfi
+           r-nlme
+           r-quadprog
+           r-s4vectors
+           r-summarizedexperiment))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/immunomethylomics/FlowSorted.Blood.EPIC")
+    (synopsis
+     "Illumina EPIC data on immunomagnetic sorted peripheral adult blood cells")
+    (description
+     "This package provides raw data objects to be used for blood cell
+proportion estimation in minfi and similar packages.  The
+@code{FlowSorted.Blood.EPIC} object is based in samples assayed by Brock
+Christensen and colleagues; for details see Salas et al. 2018.
+https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE110554.")
+    (license license:gpl3)))
+
 (define-public r-genelendatabase
   (package
     (name "r-genelendatabase")
@@ -1523,6 +1644,28 @@ cluster labels and labels identifying spiked in cells.  Column metadata
 includes channel names, protein marker names, and protein marker classes.")
     (license license:expat)))
 
+(define-public r-illumina450probevariants-db
+  (package
+    (name "r-illumina450probevariants-db")
+    (version "1.34.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "Illumina450ProbeVariants.db"
+                                     version 'experiment))
+              (sha256
+               (base32
+                "1c1iqxi17s1a1sa1vab2ma7pjq1dxal7ibsiahj66ys0pa4sm42p"))))
+    (properties `((upstream-name . "Illumina450ProbeVariants.db")))
+    (build-system r-build-system)
+    (home-page "https://bioconductor.org/packages/Illumina450ProbeVariants.db")
+    (synopsis
+     "Variant data from 1000 Genomes Project for Illumina HumanMethylation450 Bead Chip probes")
+    (description
+     "This package includes details on variants for each probe on the 450k
+bead chip for each of the four populations (Asian, American, African and
+European).")
+    (license license:gpl3)))
+
 (define-public r-italicsdata
   (package
     (name "r-italicsdata")
@@ -1565,6 +1708,79 @@ gene expression indicate a role for enhancer priming in immune response\", publi
 in Nature Genetics, January 2018.")
     (license license:gpl2+)))
 
+(define-public r-minfidata
+  (package
+    (name "r-minfidata")
+    (version "0.44.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "minfiData" version 'experiment))
+              (sha256
+               (base32
+                "15s3kc629m2c78vkidmp6kcc28sn1wzjzrxazmd8z7x8cdad3q4g"))))
+    (properties `((upstream-name . "minfiData")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-illuminahumanmethylation450kanno-ilmn12-hg19
+           r-illuminahumanmethylation450kmanifest
+           r-minfi))
+    (home-page "https://bioconductor.org/packages/minfiData")
+    (synopsis "Example data for the Illumina Methylation 450k array")
+    (description
+     "This package provides data from 6 samples across 2 groups from 450k
+methylation arrays.")
+    (license license:artistic2.0)))
+
+(define-public r-missmethyl
+  (package
+    (name "r-missmethyl")
+    (version "1.32.1")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "missMethyl" version))
+              (sha256
+               (base32
+                "1rrm8m68kgjkrw1wdli5lrwqlavhbm490zgnj5vafzpvx7xajfma"))))
+    (properties `((upstream-name . "missMethyl")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-annotationdbi
+           r-biasedurn
+           r-biobase
+           r-biocgenerics
+           r-genomicranges
+           r-go-db
+           r-illuminahumanmethylation450kanno-ilmn12-hg19
+           r-illuminahumanmethylation450kmanifest
+           r-illuminahumanmethylationepicanno-ilm10b4-hg19
+           r-illuminahumanmethylationepicmanifest
+           r-iranges
+           r-limma
+           r-methylumi
+           r-minfi
+           r-org-hs-eg-db
+           r-ruv
+           r-s4vectors
+           r-statmod
+           r-stringr
+           r-summarizedexperiment))
+    (native-inputs (list r-knitr))
+    (home-page "https://bioconductor.org/packages/missMethyl")
+    (synopsis "Analyzing Illumina HumanMethylation BeadChip data")
+    (description
+     "This is a package for normalization, testing for differential
+variability and differential methylation and gene set testing for data from
+Illumina's Infinium HumanMethylation arrays.  The normalization procedure is
+subset-quantile within-array normalization (SWAN), which allows Infinium I and
+II type probes on a single array to be normalized together.  The test for
+differential variability is based on an empirical Bayes version of Levene's
+test.  Differential methylation testing is performed using RUV, which can
+adjust for systematic errors of unknown origin in high-dimensional data by
+using negative control probes.  Gene ontology analysis is performed by taking
+into account the number of probes per gene on the array, as well as taking
+into account multi-gene associated probes.")
+    (license license:gpl2)))
+
 (define-public r-msdata
   (package
     (name "r-msdata")
@@ -2516,13 +2732,13 @@ problems.")
 (define-public r-amaretto
   (package
     (name "r-amaretto")
-    (version "1.13.0")
+    (version "1.14.0")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "AMARETTO" version))
               (sha256
                (base32
-                "18w65sf3h4yzw9v5xgkalxnkmgzgsx100v7qc7z4ifx10lgpji5n"))))
+                "06j75c4j71fkkw5s52nbzb3k084y2f4v4h3js9dgsxxrd6jkzfz9"))))
     (properties `((upstream-name . "AMARETTO")))
     (build-system r-build-system)
     (propagated-inputs
@@ -2761,13 +2977,13 @@ for use in Bioconductor’s AnnotationHub.")
 (define-public r-anvil
   (package
     (name "r-anvil")
-    (version "1.10.1")
+    (version "1.10.2")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "AnVIL" version))
               (sha256
                (base32
-                "0iqsffkrxv28g9cddx2w05f2dbscwxhh6bpizwa8xaxhvn5bcpsv"))))
+                "1j7n8c47j3njd5rnlrj8bkn4q5z7jpm0c9rdq1mlwd2i1yy9fz9b"))))
     (properties `((upstream-name . "AnVIL")))
     (build-system r-build-system)
     (propagated-inputs
@@ -4533,6 +4749,46 @@ spent loading the full derfinder package when running the F-statistics
 calculation in parallel.")
     (license license:artistic2.0)))
 
+(define-public r-dmrcate
+  (package
+    (name "r-dmrcate")
+    (version "2.12.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "DMRcate" version))
+              (sha256
+               (base32
+                "0iphlsbam5fcxbj5j0cmqk3wz5ykwz0mvk3qbrhzxbpf2h4w2qib"))))
+    (properties `((upstream-name . "DMRcate")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-bsseq
+           r-dss
+           r-edger
+           r-experimenthub
+           r-genomeinfodb
+           r-genomicranges
+           r-gviz
+           r-iranges
+           r-limma
+           r-minfi
+           r-missmethyl
+           r-plyr
+           r-s4vectors
+           r-summarizedexperiment))
+    (native-inputs (list r-knitr))
+    (home-page "https://bioconductor.org/packages/DMRcate")
+    (synopsis "Methylation array and sequencing spatial analysis methods")
+    (description
+     "This is a package for de novo identification and extraction of
+@dfn{differentially methylated regions} (DMRs) from the human genome using
+@dfn{Whole Genome Bisulfite Sequencing} (WGBS) and Illumina Infinium
+Array (450K and EPIC) data.  It provides functionality for filtering probes
+possibly confounded by SNPs and cross-hybridisation.  It includes
+@code{GRanges} generation and plotting functions.")
+    ;; GPLv3 with additional liability disclaimer.
+    (license license:gpl3)))
+
 (define-public r-drimseq
   (package
     (name "r-drimseq")
@@ -4568,6 +4824,32 @@ makes available functions for visualization and exploration of the data and
 results.")
     (license license:gpl3+)))
 
+(define-public r-dss
+  (package
+    (name "r-dss")
+    (version "2.46.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "DSS" version))
+              (sha256
+               (base32
+                "1qm0pq6495fn2zrbddaadb1w01ry76rg8mmbmxf3zws9pww48jgf"))))
+    (properties `((upstream-name . "DSS")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-biobase r-biocparallel r-bsseq))
+    (native-inputs (list r-knitr))
+    (home-page "https://bioconductor.org/packages/DSS")
+    (synopsis "Dispersion shrinkage for sequencing data")
+    (description
+     "DSS is an R library performing differential analysis for count-based
+sequencing data.  It detects @dfn{differentially expressed genes} (DEGs) from
+RNA-seq, and differentially methylated loci or regions (DML/DMRs) from
+@dfn{bisulfite sequencing} (BS-seq).  The core of DSS is a dispersion
+shrinkage method for estimating the dispersion parameter from Gamma-Poisson or
+Beta-Binomial distributions.")
+    ;; Any version of the GPL
+    (license (list license:gpl2+ license:gpl3+))))
+
 (define-public r-bluster
   (package
    (name "r-bluster")
@@ -4763,6 +5045,28 @@ domains etc.) from quantification of all types of RNASeq by tools such as
 Kallisto, Salmon, StringTie, Cufflinks/Cuffdiff etc.")
     (license license:gpl2+)))
 
+;; This is a CRAN package, but it depends on qvalue from Bioconductor.
+(define-public r-isva
+  (package
+    (name "r-isva")
+    (version "1.9")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "isva" version))
+              (sha256
+               (base32
+                "05qx9q0kg4ma23v4abhihw0vz017nq6hv2jzsiqx4d20ngh1dl4z"))))
+    (properties `((upstream-name . "isva")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-fastica r-jade r-qvalue))
+    (home-page "https://cran.r-project.org/package=isva")
+    (synopsis "Independent surrogate variable analysis")
+    (description
+     "Independent Surrogate Variable Analysis is an algorithm for feature
+selection in the presence of potential confounding factors (see Teschendorff
+AE et al 2011, <doi: 10.1093/bioinformatics/btr171>).")
+    (license license:gpl2)))
+
 (define-public r-italics
   (package
     (name "r-italics")
@@ -4902,14 +5206,14 @@ mapping.")
 (define-public r-nmf
   (package
     (name "r-nmf")
-    (version "0.25")
+    (version "0.26")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "NMF" version))
        (sha256
         (base32
-         "0kdl7yz4v7pms6y2lff4x5w7pwkx54488qx0v539qmvcbxv1if98"))))
+         "1h1fpjnj6vjvi9ygxpfxs8k5bhly0aflr54zj88khgzkylp5ci4d"))))
     (properties `((upstream-name . "NMF")))
     (build-system r-build-system)
     (propagated-inputs
@@ -5239,14 +5543,14 @@ used by @code{ensembldb}, @code{Organism.dplyr}, and other packages.")
 (define-public r-annotationforge
   (package
     (name "r-annotationforge")
-    (version "1.40.1")
+    (version "1.40.2")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "AnnotationForge" version))
        (sha256
         (base32
-         "16wdcl56d5i8wrmin610kzs9ldy7h9w5fbnysjb1crkcgbikq1yy"))))
+         "1ab7nl9zrlhlkwjrjr69zqq5hy9a8rp457hcr075n8qm5r5lf6wd"))))
     (properties
      `((upstream-name . "AnnotationForge")))
     (build-system r-build-system)
@@ -5388,13 +5692,13 @@ on Bioconductor or which replace R functions.")
 (define-public r-biomart
   (package
     (name "r-biomart")
-    (version "2.54.0")
+    (version "2.54.1")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "biomaRt" version))
               (sha256
                (base32
-                "0c6agi652kbffqwd1r3c22ncisqaiy3gqbc9fz13767rr71im6lq"))))
+                "13nhp97cklaimc3cd931hz584nc58szk2gyxrkfhp7knfli6jbpi"))))
     (properties
      `((upstream-name . "biomaRt")))
     (build-system r-build-system)
@@ -5473,13 +5777,13 @@ only one command.")
 (define-public r-biocparallel
   (package
     (name "r-biocparallel")
-    (version "1.32.5")
+    (version "1.32.6")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "BiocParallel" version))
               (sha256
                (base32
-                "1yd6ln9cl3dcvfziar52fkvqi2lzm31l7j21r1rwl1mpkz0xapir"))))
+                "1aq3b5fjs8j0d6nf3992a6gnzvmmaxbbkrj1im0k6ppsqac6dlj0"))))
     (properties
      `((upstream-name . "BiocParallel")))
     (build-system r-build-system)
@@ -5653,6 +5957,68 @@ genome data packages and support for efficient SNP representation.")
 analysis.")
     (license license:artistic2.0)))
 
+(define-public r-champ
+  (package
+    (name "r-champ")
+    (version "2.28.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "ChAMP" version))
+              (sha256
+               (base32
+                "10ss0a3miqrx92vy1r1h5rv3mnjn4iyl32q86s0x59d3fvqp2cx1"))))
+    (properties `((upstream-name . "ChAMP")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-bumphunter
+           r-champdata
+           r-combinat
+           r-dendextend
+           r-dmrcate
+           r-dnacopy
+           r-doparallel
+           r-dt
+           r-genomicranges
+           r-ggplot2
+           r-globaltest
+           r-goseq
+           r-hmisc
+           r-illumina450probevariants-db
+           r-illuminahumanmethylation450kmanifest
+           r-illuminahumanmethylationepicanno-ilm10b4-hg19
+           r-illuminahumanmethylationepicmanifest
+           r-illuminaio
+           r-impute
+           r-isva
+           r-kpmt
+           r-limma
+           r-marray
+           r-matrixstats
+           r-minfi
+           r-missmethyl
+           r-plotly
+           r-plyr
+           r-preprocesscore
+           r-prettydoc
+           r-quadprog
+           r-qvalue
+           r-rcolorbrewer
+           r-rmarkdown
+           r-rpmm
+           r-shiny
+           r-shinythemes
+           r-sva
+           r-watermelon))
+    (native-inputs (list r-knitr))
+    (home-page "https://bioconductor.org/packages/ChAMP")
+    (synopsis
+     "Chip analysis methylation pipeline for Illumina HumanMethylation450 and EPIC")
+    (description
+     "The package includes quality control metrics, a selection of
+normalization methods and novel methods to identify differentially methylated
+regions and to highlight copy number alterations.")
+    (license license:gpl3)))
+
 (define-public r-chipseeker
   (package
     (name "r-chipseeker")
@@ -6145,6 +6511,48 @@ other types of genomic data that produce counts, including ChIP-seq, SAGE and
 CAGE.")
     (license license:gpl2+)))
 
+(define-public r-enmix
+  (package
+    (name "r-enmix")
+    (version "1.34.02")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "ENmix" version))
+              (sha256
+               (base32
+                "0rn541xfsxfdyzy3dn727bwrfpkgp12282lax7xg1j8584mk4pcf"))))
+    (properties `((upstream-name . "ENmix")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-annotationhub
+           r-biobase
+           r-doparallel
+           r-dynamictreecut
+           r-experimenthub
+           r-foreach
+           r-genefilter
+           r-geneplotter
+           r-gplots
+           r-gtools
+           r-illuminaio
+           r-impute
+           r-iranges
+           r-matrixstats
+           r-minfi
+           r-preprocesscore
+           r-quadprog
+           r-rpmm
+           r-s4vectors
+           r-summarizedexperiment))
+    (native-inputs (list r-knitr))
+    (home-page "https://bioconductor.org/packages/release/bioc/html/ENmix.html")
+    (synopsis
+     "Quality control and analysis tools for Illumina DNA methylation BeadChip")
+    (description
+     "This package provides tools for quality control, analysis and
+visualization of Illumina DNA methylation array data.")
+    (license license:artistic2.0)))
+
 (define-public r-ensembldb
   (package
     (name "r-ensembldb")
@@ -6524,6 +6932,30 @@ profiles and assignment of a status (gain, normal or loss) to each chromosomal
 regions identified.")
     (license license:gpl2)))
 
+(define-public r-globaltest
+  (package
+    (name "r-globaltest")
+    (version "5.52.1")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "globaltest" version))
+              (sha256
+               (base32
+                "1g5dv3bw0fj8sq0hsr8c7nh6n1rzvx1bisqlyqjqq3f8lsyb51kb"))))
+    (properties `((upstream-name . "globaltest")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-annotate r-annotationdbi r-biobase r-survival))
+    (home-page "https://bioconductor.org/packages/globaltest")
+    (synopsis
+     "Test groups of covariates for association with a response variable")
+    (description
+     "The global test tests groups of covariates (or features) for association
+with a response variable.  This package implements the test with diagnostic
+plots and multiple testing utilities, along with several functions to
+facilitate the use of this test for gene set testing of GO and KEGG terms.")
+    (license license:gpl2+)))
+
 (define-public r-gostats
   (package
     (name "r-gostats")
@@ -7475,13 +7907,13 @@ previously been used in XCMS.")
 (define-public r-numbat
   (package
     (name "r-numbat")
-    (version "1.2.2")
+    (version "1.3.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "numbat" version))
               (sha256
                (base32
-                "06qq7i8k1mi7yg1irfbk3d2fmk7awvzj7h7r54hnr6pzywk7nmhc"))))
+                "0499i20kkpr58b59xmw7d4q4dgp6ryfb9jj55idvhaa2k1kv28n6"))))
     (properties `((upstream-name . "numbat")))
     (build-system r-build-system)
     (propagated-inputs (list r-ape
@@ -7962,14 +8394,14 @@ the available RAM.")
 (define-public r-rhdf5filters
   (package
     (name "r-rhdf5filters")
-    (version "1.10.0")
+    (version "1.10.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "rhdf5filters" version))
        (sha256
         (base32
-         "17x2a3122mm3z9qnalw25am2x08cfpm17nwhigabid3ha3d2mgz1"))))
+         "14rkr0fisy7qrvjikpnwxwag79205hdxy6nkpwz501li4fr1rbnp"))))
     (properties `((upstream-name . "rhdf5filters")))
     (build-system r-build-system)
     (propagated-inputs
@@ -8368,6 +8800,33 @@ sequence motif occurrences across a large set of sequences centred at a common
 reference point and sorted by a user defined feature.")
     (license license:gpl3+)))
 
+(define-public r-shinymethyl
+  (package
+    (name "r-shinymethyl")
+    (version "1.34.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "shinyMethyl" version))
+              (sha256
+               (base32
+                "1xbadc4xszcqh211r8z0wp417f17aczz834icli17mcsl996ln3a"))))
+    (properties `((upstream-name . "shinyMethyl")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-biocgenerics
+           r-illuminahumanmethylation450kmanifest
+           r-matrixstats
+           r-minfi
+           r-rcolorbrewer
+           r-shiny))
+    (native-inputs (list r-knitr))
+    (home-page "https://bioconductor.org/packages/shinyMethyl")
+    (synopsis "Interactive visualization for Illumina methylation arrays")
+    (description
+     "This package provides an interactive tool for visualizing Illumina
+methylation array data.  Both the 450k and EPIC array are supported.")
+    (license license:artistic2.0)))
+
 (define-public r-shortread
   (package
     (name "r-shortread")
@@ -14341,6 +14800,46 @@ gene fusion discovery.  It can be applied to all major sequencing techologies
 and to both short and long sequence reads.")
     (license license:gpl3)))
 
+(define-public r-flowai
+  (package
+    (name "r-flowai")
+    (version "1.28.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "flowAI" version))
+              (sha256
+               (base32
+                "18zrlnjw89iglxhw65ys8x4r44pdzp5chrgwx7w44sh7yd8576g9"))))
+    (properties `((upstream-name . "flowAI")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-changepoint
+           r-flowcore
+           r-ggplot2
+           r-knitr
+           r-plyr
+           r-rcolorbrewer
+           r-reshape2
+           r-rmarkdown
+           r-scales))
+    (native-inputs (list r-knitr))
+    (home-page "https://bioconductor.org/packages/flowAI")
+    (synopsis
+     "Automatic and interactive quality control for flow cytometry data")
+    (description
+     "This package is able to perform an automatic or interactive quality
+control on FCS data acquired using flow cytometry instruments.  By evaluating
+three different properties:
+
+@enumerate
+@item flow rate
+@item signal acquisition, and
+@item dynamic range,
+@end enumerate
+
+the quality control enables the detection and removal of anomalies.")
+    (license license:gpl2+)))
+
 (define-public r-flowutils
   (package
     (name "r-flowutils")
@@ -14616,14 +15115,14 @@ statistics to the plot.")
 (define-public r-flowclust
   (package
     (name "r-flowclust")
-    (version "3.36.0")
+    (version "3.36.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "flowClust" version))
        (sha256
         (base32
-         "1l1lfgm6x06gyzda36m6gvqmb91zbrz8m83b1fnfzpxkhqha20yq"))))
+         "1r27nm5dxlhl5rk96dkjfx8326bvdgx55xg4w2zji3m49x9db2gs"))))
     (properties `((upstream-name . "flowClust")))
     (build-system r-build-system)
     (arguments
@@ -15730,14 +16229,14 @@ arrays based on fast wavelet-based functional models.")
 (define-public r-variancepartition
   (package
     (name "r-variancepartition")
-    (version "1.28.7")
+    (version "1.28.9")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "variancePartition" version))
        (sha256
         (base32
-         "0iv5c5p0g4axhanc62mmk0c43qcwdsxzslxh5qdck0v1kb7bd1d9"))))
+         "1al7wkbv26gldba61gq80c3mznsxwr7z5njv2s0lb7hnll9bscar"))))
     (properties
      `((upstream-name . "variancePartition")))
     (build-system r-build-system)
@@ -17930,14 +18429,14 @@ sequence (@code{DNAse-seq}) experiments.")
 (define-public r-singlecellexperiment
   (package
     (name "r-singlecellexperiment")
-    (version "1.20.0")
+    (version "1.20.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "SingleCellExperiment" version))
        (sha256
         (base32
-         "1y9c9wf3009w4qh03zpsmc0ff0nkzal673a4nql5c11cn55sza2g"))))
+         "1xwa6ncmqp21a4zx1dbs9p9b9rqbxhdgq2279mj4yl0gnpyqr9d7"))))
     (properties
      `((upstream-name . "SingleCellExperiment")))
     (build-system r-build-system)
@@ -19518,14 +20017,14 @@ using aCGH or sequencing.")
 (define-public r-bionero
   (package
     (name "r-bionero")
-    (version "1.6.0")
+    (version "1.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "BioNERO" version))
        (sha256
         (base32
-         "10nwgp8a9chn33p5k7cdp920rraiw187xfrylyd9bq010c7vp7xh"))))
+         "0ijdnl43cgzywgsz80jd6q0irixh6367qm1ll5ww1rcr4xas2nsl"))))
     (properties `((upstream-name . "BioNERO")))
     (build-system r-build-system)
     (propagated-inputs
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index f157523a76..cb12eba7c5 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -3521,8 +3521,6 @@ annotations of the genome.")
     ;; remainder of the code is licensed under the MIT license.
     (license (list license:bsd-3 license:expat))))
 
-(define-deprecated deeptools python-deeptools)
-
 (define-public cutadapt
   (package
     (name "cutadapt")
@@ -13991,6 +13989,85 @@ cells with similar identification cards in the different cytometric profiles
 is then merged.")
       (license license:gpl2))))
 
+(define-public r-cytoexplorer
+  (let ((commit "0efb1cc19fc701ae03905cf1b8484c1dfeb387df")
+        (revision "1"))
+    (package
+      (name "r-cytoexplorer")
+      (version (git-version "1.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/DillonHammill/CytoExploreR")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1y7dadsy15i47rjmdq6ns80jzm6p0zmixll37q68ba2c7xn5pq3v"))
+         (snippet
+          '(delete-file
+            "docs/articles/CytoExploreR_files/vis-4.20.1/vis.min.js"))))
+      (properties `((upstream-name . "CytoExploreR")))
+      (build-system r-build-system)
+      (arguments
+       (list
+        #:phases
+        '(modify-phases %standard-phases
+           (add-after 'unpack 'process-javascript
+             (lambda* (#:key inputs #:allow-other-keys)
+               (with-directory-excursion "docs/articles/CytoExploreR_files/"
+                 (let ((source (search-input-file inputs "/dist/vis.js"))
+                       (target "vis-4.20.1/vis.min.js"))
+                   (invoke "esbuild" source "--minify"
+                           (string-append "--outfile=" target)))))))))
+      (propagated-inputs
+       (list r-biocgenerics
+             r-bslib
+             r-data-table
+             r-dplyr
+             r-embedsom
+             r-flowai
+             r-flowcore
+             r-flowworkspace
+             r-gtools
+             r-magrittr
+             r-mass
+             r-opencyto
+             r-purrr
+             r-rhandsontable
+             r-robustbase
+             r-rsvd
+             r-rtsne
+             r-shiny
+             r-superheat
+             r-tibble
+             r-tidyr
+             r-umap
+             r-visnetwork))
+      (native-inputs
+       `(("esbuild" ,esbuild)
+         ("r-knitr" ,r-knitr)
+         ("js-vis"
+          ,(let ((version "4.20.1"))
+             (origin
+               (method git-fetch)
+               (uri (git-reference
+                     (url "https://github.com/almende/vis")
+                     (commit (string-append "v" version))))
+               (file-name (git-file-name "js-vis" version))
+               (sha256
+                (base32
+                 "09ldcqzzki5c0jlwas5992qjffqxnx6j5sl703qccfw7rg1hn469")))))))
+      (home-page "https://github.com/DillonHammill/CytoExploreR")
+      (synopsis "Interactive analysis of cytometry data")
+      (description
+       "This package has been developed under ROpenSci gudelines to integrate
+conventional and cutting edge cytometry analysis tools under a unified
+framework.  It aims to represent an intuitive and interactive approach to
+analysing cytometry data in R.")
+      (license license:gpl2))))
+
 (define-public r-giotto
   (let ((commit "3c8067cedbf6e3112edcac2ae796de05fd9d6fe4")
         (revision "1"))
@@ -14049,6 +14126,60 @@ is then merged.")
 spatial single-cell expression data.")
       (license license:expat))))
 
+(define-public r-illuminahumanmethylationepicanno-ilm10b5-hg38
+  (let ((commit "3db06910e27f626e0cc8b335ff45cf9a4050a36a")
+        (revision "1"))
+    (package
+      (name "r-illuminahumanmethylationepicanno-ilm10b5-hg38")
+      (version (git-version "0.0.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url
+                       "https://github.com/achilleasNP/IlluminaHumanMethylationEPICanno.ilm10b5.hg38")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0y8fhiwmkldi57f8nq64njfgljw68cm6pb1vh44hjwcc12k48sqr"))))
+      (properties `((upstream-name . "IlluminaHumanMethylationEPICanno.ilm10b5.hg38")))
+      (build-system r-build-system)
+      (propagated-inputs (list r-minfi))
+      (home-page
+       "https://github.com/achilleasNP/IlluminaHumanMethylationEPICanno.ilm10b5.hg38")
+      (synopsis "Illumina Human Methylation EPIC Annotation version 1.0B5")
+      (description
+       "This package provides a companion annotation file to the
+@code{IlluminaHumanMethylationEPICmanifest} package based on the same
+annotation 1.0B5.")
+      (license license:artistic2.0))))
+
+(define-public r-maxprobes
+  (let ((commit "c2120dba972e12115280ef274ff80550cee5b264")
+        (revision "1"))
+    (package
+      (name "r-maxprobes")
+      (version (git-version "0.0.2" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/markgene/maxprobes")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1kij9bds2l9mwm519bzyd2608563qjlmbrayhva1s0vgml5iq9wh"))))
+      (properties `((upstream-name . "maxprobes")))
+      (build-system r-build-system)
+      (propagated-inputs (list r-minfi r-minfidata))
+      (native-inputs (list r-knitr))
+      (home-page "https://github.com/markgene/maxprobes")
+      (synopsis "Methylation array cross-reactive probes")
+      (description
+       "The Maxprobes package collects cross-reactive probes of Illumina
+methylation array 450K and EPIC/850K.")
+      (license license:gpl2+))))
+
 (define-public gffread
   ;; We cannot use the tagged release because it is not in sync with gclib.
   ;; See https://github.com/gpertea/gffread/issues/26
diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm
index 2b55725100..e1c9b14bb2 100644
--- a/gnu/packages/build-tools.scm
+++ b/gnu/packages/build-tools.scm
@@ -14,7 +14,7 @@
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
 ;;; Copyright © 2021, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
-;;; Copyright © 2022 Juliana Sims <jtsims@protonmail.com>
+;;; Copyright © 2022, 2023 Juliana Sims <jtsims@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -712,11 +712,11 @@ Build has features such as:
     (license license:gpl2+)))
 
 (define-public genie
-  (let ((commit "b139103697bbb62db895e4cc7bfe202bcff4ff25")
+  (let ((commit "22cc907a4351db46c55f73e6aa901f1b2f0c52ad")
         (revision "0"))
     (package
       (name "genie")
-      (version (git-version "1167" revision commit))
+      (version (git-version "1170" revision commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -725,7 +725,7 @@ Build has features such as:
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "16plshzkyjjzpfcxnwjskrs7i4gg0qn92h2k0rbfl4a79fgmwvwv"))))
+                  "1wxhbdnr52qa2xr1i83577mwr25fxr5vby4r7m5brp9z5a08fwry"))))
       (build-system gnu-build-system)
       (arguments
        (list #:phases #~(modify-phases %standard-phases
@@ -922,7 +922,7 @@ Makefiles, JSON Compilation Database, and experimentally Ninja.")
      (list
       bash-minimal python perl clisp
       ;; Unicode data:
-      ucd-next
+      ucd
       ;; Programs for the tests:
       cppi indent git-minimal/pinned autoconf))
     (home-page "https://www.gnu.org/software/gnulib/")
@@ -948,3 +948,38 @@ maintenance-related files, for convenience.")
    #:version "2022-12-31"
    #:commit "875461ffdf58ac04677957b4ae4160465b83b940"
    #:hash (base32 "0bf7a6wdns9c5wwv60qfcn9llg0j6jz5ryd2qgsqqx2i6xkmp77c")))
+
+(define-public pdpmake
+  (package
+    (name "pdpmake")
+    (version "1.4.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rmyorston/pdpmake")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0fjx5imd7s0h0yy8h2qc4vkdq7kxqcljnrw6h8n88720xha5z3cb"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:test-target "test"
+      #:parallel-tests? #f
+      #:make-flags
+      #~(list "DESTDIR=\"\""
+              (string-append "CC=" #$(cc-for-target))
+              (string-append "PREFIX=" #$output))
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure))))
+    (home-page "https://frippery.org/make/")
+    (synopsis "POSIX make")
+    (description
+     "This package contains an implementation of POSIX make.  The default
+configuration enables extensions.  Generally these extensions are compatible
+with GNU make.")
+    ;; pdpmake is distributed under the public domain, but the sources include
+    ;; tests under the GPL license version 2.
+    (license (list license:gpl2 license:public-domain))))
diff --git a/gnu/packages/c.scm b/gnu/packages/c.scm
index b2f16613dd..b12aaf184a 100644
--- a/gnu/packages/c.scm
+++ b/gnu/packages/c.scm
@@ -9,7 +9,7 @@
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Katherine Cox-Buday <cox.katherine.e@gmail.com>
-;;; Copyright © 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020, 2021 Greg Hogan <code@greghogan.com>
 ;;; Copyright © 2021 David Dashyan <mail@davie.li>
 ;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
@@ -1145,6 +1145,54 @@ Telemetry Transport (MQTT) publish-subscribe messaging protocol.")
     (home-page "https://microsoft.github.io/mimalloc/")
     (license license:expat)))
 
+;;; The package is named orangeduck-mpc to differentiate it from GNU mpc.
+(define-public orangeduck-mpc
+  ;; The last release lacks an 'install' target.
+  (let ((commit "7c910e9303833c349f7432188ff77f2745254df2")
+        (revision "0"))
+    (package
+      (name "orangeduck-mpc")
+      (version (git-version "0.9.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/orangeduck/mpc")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "01a4vcxdnz0fbn90c9zc3jzklyqqvp9sfjpjwpq0f5r0l2pp37ad"))
+                (patches
+                 (search-patches "orangeduck-mpc-fix-pkg-config.patch"))))
+      (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 'patch-Makefile
+                            (lambda _
+                              (substitute* "Makefile"
+                                ;; Do not attempt to alter the permissions,
+                                ;; otherwise 'install' would error with
+                                ;; "cannot stat [...] Permission denied"
+                                ;; errors.
+                                (("\\s\\-m[0-9]{3}\\s")
+                                 " "))))
+                          (delete 'configure))))
+      (home-page "https://github.com/orangeduck/mpc")
+      (synopsis "Parser Combinator library for C ")
+      (description "@code{mpc} is a lightweight Parser Combinator library for C.
+@code{mpc} can help with tasks such as:
+@itemize
+@item Building a new programming language
+@item Building a new data format
+@item Parsing an existing programming language
+@item Parsing an existing data format
+@item Embedding a Domain Specific Language
+@item Implementing Greenspun's Tenth Rule.
+@end itemize")
+      (license license:bsd-2))))
+
 ;;; Factored out of the ck package so that it can be adjusted and called on
 ;;; the host side easily, without impacting the package definition.
 (define (gnu-triplet->ck-machine target)
@@ -1317,20 +1365,21 @@ will take care of dispatching tasks to available cores.")
                   "0x9f7ivww8c7cigf4ck0hfx2bm79qgx6q4ccwzqbzkrmcrl9shfb"))))
       (build-system cmake-build-system)
       (arguments
-       `(#:phases
-         (modify-phases %standard-phases
-           (delete 'build)
-           (delete 'configure)
-           (replace 'check
-             (lambda* (#:key tests? #:allow-other-keys)
-               (when tests?
-                 (with-directory-excursion "test"
-                   (invoke "cmake" ".")
-                   (invoke "make")))))
-           (replace 'install
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
-                 (install-file "utf8.h" (string-append out "/include"))))))))
+       (list
+        #:phases
+        #~(modify-phases %standard-phases
+            (delete 'build)
+            (delete 'configure)
+            (replace 'check
+              (lambda* (#:key tests? #:allow-other-keys)
+                (when tests?
+                  (with-directory-excursion "test"
+                    (invoke "cmake" ".")
+                    (invoke "make")))))
+            (replace 'install
+              (lambda* (#:key outputs #:allow-other-keys)
+                (install-file "utf8.h"
+                              (string-append #$output "/include/utf8")))))))
       (home-page "https://github.com/sheredom/utf8.h")
       (synopsis "Single header UTF-8 string functions for C and C++")
       (description "A simple one header solution to supporting UTF-8 strings in
diff --git a/gnu/packages/calendar.scm b/gnu/packages/calendar.scm
index c65db2b69e..2a5f79074d 100644
--- a/gnu/packages/calendar.scm
+++ b/gnu/packages/calendar.scm
@@ -123,7 +123,7 @@ the <tz.h> library for handling time zones and leap seconds.")
 (define-public libical
   (package
     (name "libical")
-    (version "3.0.14")
+    (version "3.0.16")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -131,7 +131,7 @@ the <tz.h> library for handling time zones and leap seconds.")
                     version "/libical-" version ".tar.gz"))
               (sha256
                (base32
-                "13ycghsi4iv8mnm0xv97bs0x6qvfhdxkw20n3yhcc7bg6n0bg122"))))
+                "0cqc1wpalxmxjx8dmcaga9w8kd5l7944hqmidz43hifaf7fhaixl"))))
     (build-system cmake-build-system)
     (arguments
      (list
diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm
index 13f01870d2..16f3efec25 100644
--- a/gnu/packages/cdrom.scm
+++ b/gnu/packages/cdrom.scm
@@ -113,6 +113,7 @@ caching facility provided by the library.")
              (method url-fetch)
              (uri (string-append "mirror://gnu/libcdio/libcdio-"
                                  version ".tar.bz2"))
+             (patches (search-patches "libcdio-glibc-compat.patch"))
              (sha256
               (base32
                "0avi6apv5ydjy6b9c3z9a46rvp5i57qyr09vr7x4nndxkmcfjl45"))))
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 0ffd25e898..1d9a4413f1 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -1321,11 +1321,15 @@ and many external plugins.")
          "0f8c31v5r2kgjixvy267n0nhc4xsy65g3n9lz1i1377z5pn5ydjg"))))
     (arguments
      (substitute-keyword-arguments (package-arguments python-pytest)
-      ((#:phases phases #~%standard-phases)
+       ((#:phases phases #~%standard-phases)
         #~(modify-phases #$phases
             (add-before 'build 'pretend-version
               (lambda _
-                (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))))))))
+                (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))))))
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs python-pytest)
+       (replace "python-pluggy" python-pluggy-next)
+       (replace "python-toml" python-tomli)))))
 
 (define-public python-pytest-bootstrap
   (package
@@ -1592,13 +1596,13 @@ Python's @code{random.seed}.")
 (define-public python-pytest-mock
   (package
     (name "python-pytest-mock")
-    (version "3.8.2")
+    (version "3.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-mock" version))
        (sha256
-        (base32 "18pwr0qhr2z5rpfz7930986s55hh1gnmmq4m09q5h99rai2kzw3p"))
+        (base32 "0kzdwwdjw001qzf1n4qzh7c364rvmb0cmkfqdwr2l9bwxy2v1ggv"))
        (modules '((guix build utils)))
        (snippet
         ;; Some tests do a string match on Pytest output, and fails when
@@ -1702,7 +1706,7 @@ timeout has been exceeded.")
 (define-public python-pytest-forked
   (package
     (name "python-pytest-forked")
-    (version "1.4.0")
+    (version "1.6.0")
     (source
      (origin
        (method git-fetch)               ;for tests
@@ -1712,18 +1716,17 @@ timeout has been exceeded.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0j9bbjny7h3b4fig6l26f26c697r67mm62fzdd9m9rqyy2bmnqjs"))))
-    (build-system python-build-system)
+         "1y93q914gwf0nshql1qix6sj826q163b04vw17zmwhsnbv00c2d3"))))
+    (build-system pyproject-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'pretend-version
-           (lambda _
-             (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" ,version)))
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "pytest" "-vv")))))))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'build 'pretend-version
+                 ;; The version string is usually derived via setuptools-scm,
+                 ;; but without the git metadata available, the version string
+                 ;; is set to '0.0.0'.
+                 (lambda _
+                   (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
     (native-inputs
      ;; XXX: The bootstrap variant of Pytest is used to ensure the
      ;; 'hypothesis' plugin is not in the environment (due to
diff --git a/gnu/packages/chez.scm b/gnu/packages/chez.scm
index c6420a980e..ab6eaba6bd 100644
--- a/gnu/packages/chez.scm
+++ b/gnu/packages/chez.scm
@@ -692,10 +692,12 @@ source.")))
                          (search-input-file (or native-inputs inputs)
                                             "/opt/racket-vm/bin/racket")
                          "../rktboot/main.rkt"
-                         #$@(if (racket-cs-native-supported-system?)
-                                #~()
-                                (let ((m (nix-system->pbarch-machine-type)))
-                                  #~("--machine" #$m)))))))))))))
+                         ;; Temporary handling of builds on non-x86 architectures,
+                         ;; see https://github.com/racket/racket/issues/3948
+                         ;; Autodetect in rktboot only addresses x86 archs, so far.
+                         #$@(let ((m (or (racket-cs-native-supported-system?)
+                                         (nix-system->pbarch-machine-type))))
+                              #~("--machine" #$m))))))))))))
     (supported-systems
      (package-supported-systems chez-scheme-for-racket))
     (home-page "https://github.com/racket/ChezScheme")
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 0365b37fa4..7283a05050 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -1683,6 +1683,20 @@ speed.")
                    license:public-domain ; zlibWrapper/examples/fitblk*
                    license:zlib))))      ; zlibWrapper/{gz*.c,gzguts.h}
 
+(define-public zstd-1.5.5
+  (package
+    (inherit zstd)
+    ;; Don't hide this package from the UI.
+    (properties '())
+    (version "1.5.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/facebook/zstd/releases/download/"
+                           "v" version "/zstd-" version ".tar.gz"))
+       (sha256
+        (base32 "1r1ydmj7ib3g5372yj3k40vl3b9ax0154qg2lqcy7ylwhb69chww"))))))
+
 (define-public pzstd
   (package/inherit zstd
     (name "pzstd")
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index 33761933a3..1be553149c 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -428,14 +428,14 @@ etc.")
 (define-public r-datawizard
   (package
     (name "r-datawizard")
-    (version "0.6.5")
+    (version "0.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "datawizard" version))
        (sha256
         (base32
-         "0il98vmy8l4wrisqz9xli7iki2ajdlsxyhh4k4grrd28gzkj8lgb"))))
+         "1jn22qv0s6nbfih3n249v9ynl7s4m102wyw1rnkmxjwryz8vr73p"))))
     (properties `((upstream-name . "datawizard")))
     (build-system r-build-system)
     (propagated-inputs
@@ -592,6 +592,35 @@ edition of the book \"Data Mining with R, learning with case studies\"
 by Luis Torgo, published by CRC Press.")
     (license license:gpl2+)))
 
+(define-public r-embedsom
+  (package
+    (name "r-embedsom")
+    (version "2.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "EmbedSOM" version))
+              (sha256
+               (base32
+                "0k4hja5y7qd0n3gfaxzxrz4wpxc1w9d4d4xbb63rq2nfk3lj7a42"))))
+    (properties `((upstream-name . "EmbedSOM")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-fnn
+           r-ggplot2
+           r-igraph
+           r-matrix
+           r-rtsne
+           r-umap
+           r-uwot))
+    (native-inputs (list r-knitr))
+    (home-page "https://github.com/exaexa/EmbedSOM")
+    (synopsis "Fast embedding guided by self-organizing map")
+    (description
+     "This package provides a smooth mapping of multidimensional points into
+low-dimensional space defined by a self-organizing map.  It is designed to
+work with FlowSOM and flow-cytometry use-cases.")
+    (license license:gpl3+)))
+
 (define-public r-emdist
   (package
     (name "r-emdist")
@@ -708,14 +737,14 @@ such as counts or binary matrices.")
 (define-public r-googledrive
   (package
     (name "r-googledrive")
-    (version "2.0.0")
+    (version "2.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "googledrive" version))
        (sha256
         (base32
-         "09jsiknzyfgxd0nzdr3wrrjw24allch2x74h96qg8vh8dad4cp30"))))
+         "0x2biilbphh77p7cxp2cvinjx45hnb5xksw775nwksqvpwxkaw0d"))))
     (properties `((upstream-name . "googledrive")))
     (build-system r-build-system)
     (propagated-inputs
@@ -943,14 +972,14 @@ pronounceable identifiers.")
 (define-public r-googlesheets4
   (package
     (name "r-googlesheets4")
-    (version "1.0.1")
+    (version "1.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "googlesheets4" version))
        (sha256
         (base32
-         "14b5lzn6vjn72mw7vf3lzm2ppbjf0wr0n6sw0v5r6h4lk37cnki8"))))
+         "1jcfih6f62phj7fdvknkkj46s9cvsnhshvkglg6xif7mpr1mbqah"))))
     (properties `((upstream-name . "googlesheets4")))
     (build-system r-build-system)
     (propagated-inputs
@@ -962,12 +991,14 @@ pronounceable identifiers.")
            r-googledrive
            r-httr
            r-ids
+           r-lifecycle
            r-magrittr
            r-purrr
            r-rematch2
            r-rlang
            r-tibble
-           r-vctrs))
+           r-vctrs
+           r-withr))
     (home-page "https://github.com/tidyverse/googlesheets4")
     (synopsis "Access Google Sheets using the Sheets API V4")
     (description
@@ -996,6 +1027,71 @@ matrix decomposition, sparse principal components analysis, and sparse
 canonical correlation analysis.")
     (license license:gpl2+)))
 
+(define-public r-prettydoc
+  (package
+    (name "r-prettydoc")
+    (version "0.4.1")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "prettydoc" version))
+              (sha256
+               (base32
+                "0aa89jnqhz0l69inrgm1f1riq5bm3ksb8wjl8d4x2f320adsd50h"))
+              (snippet
+               '(for-each delete-file
+                          '("inst/resources/js/auto-render.min.js"
+                            "inst/resources/js/katex.min.js")))))
+    (properties `((upstream-name . "prettydoc")))
+    (build-system r-build-system)
+    (arguments
+     `(#:modules ((guix build utils)
+                  (guix build r-build-system)
+                  (srfi srfi-1))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'process-javascript
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "inst/resources/js/"
+               (call-with-values
+                   (lambda ()
+                     (unzip2
+                      `((,(search-input-file inputs "dist/katex.js")
+                         "katex.min.js")
+                        (,(search-input-file inputs "dist/contrib/auto-render.js")
+                         "auto-render.min.js"))))
+                 (lambda (sources targets)
+                   (for-each (lambda (source target)
+                               (format #true "Processing ~a --> ~a~%"
+                                       source target)
+                               (invoke "esbuild" source "--minify"
+                                       (string-append "--outfile=" target)))
+                             sources targets)))))))))
+    (inputs (list pandoc))
+    (propagated-inputs (list r-rmarkdown))
+    (native-inputs
+     (list esbuild
+           r-knitr
+           r-rmarkdown
+           (let ((version "0.12.0"))
+             (origin
+               (method git-fetch)
+               (uri (git-reference
+                     (url "https://github.com/KaTeX/KaTeX")
+                     (commit (string-append "v" version))))
+               (file-name (git-file-name "js-katex" version))
+               (sha256
+                (base32
+                 "0pdfw28affnfpqpnf244acf5rkxdy2gk63669myy7ysg4z0i1n8j"))))))
+    (home-page "https://github.com/yixuan/prettydoc")
+    (synopsis "Create pretty documents from R markdown")
+    (description
+     "This is a package for creating tiny yet beautiful documents and
+vignettes from R Markdown.  The package provides the @code{html_pretty} output
+format as an alternative to the @code{html_document} and @code{html_vignette}
+engines that convert R Markdown into HTML pages.  Various themes and syntax
+highlight styles are supported.")
+    (license license:asl2.0)))
+
 (define-public r-proj4
   (package
     (name "r-proj4")
@@ -1046,6 +1142,33 @@ Functions include searching for people, searching by DOI, or searching by
 Orcid ID.")
     (license license:expat)))
 
+(define-public r-ruv
+  (package
+    (name "r-ruv")
+    (version "0.9.7.1")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "ruv" version))
+              (sha256
+               (base32
+                "1n4q9mrp9f644spbns6bbnzmlabrg90hwkdfg3hnm3rxp9b4xid0"))))
+    (properties `((upstream-name . "ruv")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-ggplot2 r-gridextra r-scales))
+    (home-page "https://cran.r-project.org/web/packages/ruv/index.html")
+    (synopsis "Detect and remove unwanted variation using negative controls")
+    (description
+     "This package implements the RUV (Remove Unwanted Variation) algorithms.
+These algorithms attempt to adjust for systematic errors of unknown origin in
+high-dimensional data.  The algorithms were originally developed for use with
+genomic data, especially microarray data, but may be useful with other types
+of high-dimensional data as well.  The algorithms require the user to specify
+a set of negative control variables, as described in the references.  The
+algorithms included in this package are RUV-2, RUV-4, RUV-inv, RUV-rinv,
+RUV-I, and RUV-III, along with various supporting algorithms.")
+    ;; Any version of the GPL.
+    (license (list license:gpl2+ license:gpl3+))))
+
 (define-public r-waldo
   (package
     (name "r-waldo")
@@ -1710,14 +1833,14 @@ variables.")
 (define-public r-ggpp
   (package
     (name "r-ggpp")
-    (version "0.5.1")
+    (version "0.5.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggpp" version))
        (sha256
         (base32
-         "0cbv09gvwrxj5k8ffh4v537cf4hx3z2zgs8yy0ssglslibfgd3ka"))))
+         "0w93427hyiihddsdr6q962gfl01b06yxchi3x3dinfb8mf1m5qmk"))))
     (properties `((upstream-name . "ggpp")))
     (build-system r-build-system)
     (propagated-inputs
@@ -1812,13 +1935,13 @@ scale-sensitive information.")
 (define-public r-ggvenn
   (package
     (name "r-ggvenn")
-    (version "0.1.9")
+    (version "0.1.10")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "ggvenn" version))
               (sha256
                (base32
-                "0bm52j3idchignp6nrw7c76jlbfkjf5zng258957vq019vx9qxrq"))))
+                "0gl7z8hrn2wmmb59fvfv2hsw40p629aj086dv0kwlv162zqidqfd"))))
     (properties `((upstream-name . "ggvenn")))
     (build-system r-build-system)
     (propagated-inputs (list r-dplyr r-ggplot2))
@@ -2439,16 +2562,17 @@ conventions.")
 (define-public r-ecp
   (package
     (name "r-ecp")
-    (version "3.1.3")
+    (version "3.1.4")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "ecp" version))
               (sha256
                (base32
-                "0n602jssl6rf596nwm6hbl7s9vdlqi20w8mrhxicj373mw5v22m8"))))
+                "0kf0kkawds86kqx3p2ahyzw9xvaz5bz51ffik3f1g5b5lwjvz60v"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-rcpp))
+    (native-inputs (list r-r-rsp))
     (home-page "https://cran.r-project.org/web/packages/ecp/")
     (synopsis "Multiple change-point analysis of multivariate data")
     (description
@@ -3075,14 +3199,14 @@ model fitting and error handling.")
 (define-public r-modelr
   (package
     (name "r-modelr")
-    (version "0.1.10")
+    (version "0.1.11")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "modelr" version))
        (sha256
         (base32
-         "0qqgdb7gpb1h9lf5zijg51gd0qmbzj8f37aykhv1w633cglacick"))))
+         "1lvv6gac3g4x1d58chbvlxlkd77qz21a3rlb64jvzwycx43dbswl"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-broom
@@ -3246,6 +3370,51 @@ re-imagining of @code{httr} that uses a pipe-based interface and solves more
 of the problems that API wrapping packages face.")
     (license license:expat)))
 
+(define-public r-jade
+  (package
+    (name "r-jade")
+    (version "2.0-3")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "JADE" version))
+              (sha256
+               (base32
+                "1fj2wawx5ac1fvlp28naqha0i17f1sb47j2qqzgccvx17ycqmmjn"))))
+    (properties `((upstream-name . "JADE")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-clue))
+    (home-page "https://cran.r-project.org/package=JADE")
+    (synopsis "Blind source separation methods")
+    (description
+     "In this package Cardoso's JADE algorithm as well as his functions for
+joint diagonalization are ported to R.  Also several other @dfn{blind source
+separation} (BSS) methods, like AMUSE and SOBI, and some criteria for
+performance evaluation of BSS algorithms, are given.  The package is described
+in Miettinen, Nordhausen and Taskinen (2017) <doi:10.18637/jss.v076.i02>.")
+    (license license:gpl2+)))
+
+(define-public r-jsonify
+  (package
+    (name "r-jsonify")
+    (version "1.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "jsonify" version))
+              (sha256
+               (base32
+                "0bxgyj5b1hnijq5315g050giixy4k5mjz2zdx8yil0igb5ifji9p"))))
+    (properties `((upstream-name . "jsonify")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-rapidjsonr r-rcpp))
+    (native-inputs (list r-knitr))
+    (home-page "https://cran.r-project.org/package=jsonify")
+    (synopsis
+     "Convert between R objects and JavaScript Object Notation (JSON)")
+    (description
+     "This package enables conversions between R objects and JavaScript Object
+Notation (JSON) using the rapidjsonr library.")
+    (license license:expat)))
+
 (define-public r-jsonlite
   (package
     (name "r-jsonlite")
@@ -3319,13 +3488,13 @@ a list of p-values.")
 (define-public r-htmltools
   (package
     (name "r-htmltools")
-    (version "0.5.4")
+    (version "0.5.5")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "htmltools" version))
               (sha256
                (base32
-                "0zij9zrgsi82q5c65sf4pbidnzrkfr763g0n4ypdhf8dd6l2i0h0"))))
+                "0nb6y99ffgj482clgnqbkhraxigr1ynpqv3d1znwd2ashnmkzcn8"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-base64enc r-digest r-ellipsis r-fastmap r-rlang))
@@ -4456,14 +4625,14 @@ contained in the navigation bar.")
 (define-public r-spelling
   (package
     (name "r-spelling")
-    (version "2.2")
+    (version "2.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spelling" version))
        (sha256
         (base32
-         "179nj9w1v27qq9q5240ddvggp0795998sxyqjvbqjvq9dmach3bl"))))
+         "0vr5mgw9grnsnzsc29al72p05z786hnd6b9c6wq0c0dabk5szm2g"))))
     (properties `((upstream-name . "spelling")))
     (build-system r-build-system)
     (propagated-inputs
@@ -5017,13 +5186,13 @@ initiative to bring PASSTEC 2000 functionalities to R.")
 (define-public r-partykit
   (package
    (name "r-partykit")
-   (version "1.2-18")
+   (version "1.2-19")
    (source (origin
              (method url-fetch)
              (uri (cran-uri "partykit" version))
              (sha256
               (base32
-               "1yv42kabbi0fdbc2m3hvx0ljw5ssykb58s80bmb6i0m3xah8ngrc"))))
+               "0ma3haanf5pkj8r8q3bd0ig3zq9ppfjhhfkh6v50m82z6fprm3p4"))))
    (build-system r-build-system)
    (propagated-inputs
     (list r-formula
@@ -5097,13 +5266,13 @@ print, summary, plot, update, etc.
 (define-public r-ps
   (package
     (name "r-ps")
-    (version "1.7.2")
+    (version "1.7.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ps" version))
        (sha256
-        (base32 "06mjwsn074195vd4yv7zzkmcf3sc124cw0cbnddj86swvggfn9cj"))))
+        (base32 "1lfpdlwj6g8mgl233r6ks0rcqq4zaj31br7hrx8mb7w0iyi6w0rf"))))
     (build-system r-build-system)
     (home-page "https://ps.r-lib.org")
     (synopsis "List, query, and manipulate system processes")
@@ -5498,6 +5667,82 @@ freedom to design figures for better understanding complex patterns behind
 multi-dimensional data.")
     (license license:gpl2+)))
 
+(define-public r-ctrdata
+  (package
+    (name "r-ctrdata")
+    (version "1.12.1")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "ctrdata" version))
+              (sha256
+               (base32
+                "1m12vjwvzrwwb4d513vk171r25ww92qqv7rd2c3srmwzfi9ngy74"))))
+    (properties `((upstream-name . "ctrdata")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-clipr
+           r-curl
+           r-dplyr
+           r-httr
+           r-jqr
+           r-jsonlite
+           r-lubridate
+           r-nodbi
+           r-rvest
+           r-stringi
+           r-xml2))
+    (native-inputs (list r-r-rsp))
+    (home-page "https://cran.r-project.org/package=ctrdata")
+    (synopsis "Retrieve and analyze clinical trials in public registers")
+    (description
+     "This package provides a system for querying, retrieving and analyzing
+protocol- and results-related information on clinical trials from three public
+registers, the European Union Clinical Trials Register (EUCTR),
+ClinicalTrials.gov (CTGOV) and the ISRCTN.  Trial information is downloaded,
+converted and stored in a database.  Functions are included to identify
+deduplicated records, to easily find and extract variables (fields) of
+interest even from complex nesting as used by the registers, and to update
+previous queries.  The package can be used for meta-analysis and
+trend-analysis of the design and conduct as well as for results of clinical
+trials.")
+    (license license:expat)))
+
+(define-public r-ctrialsgov
+  (package
+    (name "r-ctrialsgov")
+    (version "0.2.5")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "ctrialsgov" version))
+              (sha256
+               (base32
+                "0hdh1fdfaja8amf7fkvk1c6yif703132bvacq0j9pk5jr97czgpw"))))
+    (properties `((upstream-name . "ctrialsgov")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-dbi
+           r-dplyr
+           r-ggplot2
+           r-htmlwidgets
+           r-lubridate
+           r-matrix
+           r-plotly
+           r-purrr
+           r-rlang
+           r-stringi
+           r-tibble))
+    (native-inputs (list r-knitr))
+    (home-page "https://cran.r-project.org/package=ctrialsgov")
+    (synopsis
+     "Query data from U.S. National Library of Medicine's Clinical Trials Database")
+    (description
+     "This package provides tools to query the U.S. National Library of
+Medicine's Clinical Trials database.  Functions are provided for a variety of
+techniques for searching the data using range queries, categorical filtering,
+and by searching for full-text keywords.  Minimal graphical tools are also
+provided for interactively exploring the constructed data.")
+    (license license:expat)))
+
 (define-public r-powerlaw
   (package
     (name "r-powerlaw")
@@ -5575,14 +5820,14 @@ rows, dropping names) to see if the modified versions are identical.")
 (define-public r-dendextend
   (package
     (name "r-dendextend")
-    (version "1.16.0")
+    (version "1.17.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "dendextend" version))
        (sha256
         (base32
-         "0rl4f0b73s1gdjfxgpnz87lhv131qazxb6vsv2935ad266fd0bzc"))))
+         "08g5z5qyrn2nkw1jw5520sval4jf9l6invqwvzsv8dkjkq8nxsc7"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-ggplot2 r-magrittr r-viridis))
@@ -6534,6 +6779,26 @@ hypergeometric distributions.  In addition two random number generators of
 George Marsaglia are included.")
     (license license:gpl2+)))
 
+(define-public r-kpmt
+  (package
+    (name "r-kpmt")
+    (version "0.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "kpmt" version))
+              (sha256
+               (base32
+                "15d26khc0v3kc1c7l1avqp48pfqmc6xj32029mv7myivr41ashk3"))))
+    (properties `((upstream-name . "kpmt")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-matrixstats))
+    (home-page "https://cran.r-project.org/package=kpmt")
+    (synopsis "Known population median test")
+    (description
+     "This package provides functions that implement the known population
+median test.")
+    (license license:expat)))
+
 (define-public r-ksamples
   (package
     (name "r-ksamples")
@@ -6749,17 +7014,17 @@ regression using Kernel Ridge Regression.")
 (define-public r-prodlim
   (package
     (name "r-prodlim")
-    (version "2019.11.13")
+    (version "2023.03.31")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "prodlim" version))
        (sha256
         (base32
-         "03wvh3kirp1prac5nky6a5whs97rvaf4hc27x0fnh51sa17r42b8"))))
+         "003qg4apcayj5kr3730qcs8npibmv1vznzgjcrk9bjhihm7la42m"))))
     (build-system r-build-system)
     (propagated-inputs
-     (list r-kernsmooth r-lava r-rcpp r-survival))
+     (list r-data-table r-diagram r-kernsmooth r-lava r-rcpp r-survival))
     (home-page "https://cran.r-project.org/web/packages/prodlim")
     (synopsis "Product-limit estimation for censored event history analysis")
     (description
@@ -6888,6 +7153,28 @@ is being phased out.  A modern MySQL client based on Rcpp is available from
 the RMariaDB package.")
     (license license:gpl2)))
 
+(define-public r-rpmm
+  (package
+    (name "r-rpmm")
+    (version "1.25")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "RPMM" version))
+              (sha256
+               (base32
+                "1j48dh434wfhfzka0l21w6f73qlwfm70r9gdddhn504i2d5m4jph"))))
+    (properties `((upstream-name . "RPMM")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-cluster))
+    (home-page "https://cran.r-project.org/package=RPMM")
+    (synopsis "Recursively partitioned mixture model")
+    (description
+     "This package provides a recursively partitioned mixture model for Beta
+and Gaussian mixtures.  This is a model-based clustering algorithm that
+returns a hierarchy of classes, similar to hierarchical clustering, but also
+similar to finite mixture models.")
+    (license license:gpl2+)))
+
 (define-public r-rpostgresql
   (package
     (name "r-rpostgresql")
@@ -7514,14 +7801,14 @@ Laplace approximation and adaptive Gauss-Hermite quadrature.")
 (define-public r-jomo
   (package
     (name "r-jomo")
-    (version "2.7-4")
+    (version "2.7-5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "jomo" version))
        (sha256
         (base32
-         "1zck7p872k080hyfs0hibq7v13zmsry1jdlnq7k33ff1iljbq99d"))))
+         "05xfkj65nqd987pp5bhl4jy46qxwjll5mxnjii6qrmfmjld177q5"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-lme4 r-mass r-ordinal r-survival r-tibble))
@@ -7622,14 +7909,14 @@ imputations.")
 (define-public r-truncnorm
   (package
     (name "r-truncnorm")
-    (version "1.0-8")
+    (version "1.0-9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "truncnorm" version))
        (sha256
         (base32
-         "0zn88wdd58223kibk085rhsikl4yhlrwiyq109hzjg06hy6lwmj9"))))
+         "0267gvcg6mmf28x26z6njw373prwpaq8aqkd6aavyhrjsv2aqmji"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/truncnorm/")
     (synopsis "Truncated normal distribution")
@@ -7717,13 +8004,13 @@ and density estimation")
 (define-public r-smurf
   (package
     (name "r-smurf")
-    (version "1.1.4")
+    (version "1.1.5")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "smurf" version))
               (sha256
                (base32
-                "09a56ayqnnal1h5xxnh4pcn0zyi1kg2fj40y872n4jcnbl8xcvbi"))))
+                "1gpzzj67x0i70vw1x4rv56mhk2b74ynvdsy93rzmdk6b2h3dvv46"))))
     (properties `((upstream-name . "smurf")))
     (build-system r-build-system)
     (propagated-inputs
@@ -7734,8 +8021,7 @@ and density estimation")
            r-mgcv
            r-rcolorbrewer
            r-rcpp
-           r-rcpparmadillo
-           r-speedglm))
+           r-rcpparmadillo))
     (native-inputs (list r-knitr))
     (home-page "https://gitlab.com/TReynkens/smurf")
     (synopsis "Sparse multi-type regularized feature modeling")
@@ -8133,14 +8419,14 @@ multivariate function estimation using smoothing splines.")
 (define-public r-cli
   (package
     (name "r-cli")
-    (version "3.6.0")
+    (version "3.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "cli" version))
        (sha256
         (base32
-         "15mqi8cacj7x588f1a7x805lwqbga2ha62k79qyxahrhh0qq21xn"))))
+         "0djyl08k7nhlbzgnfx7gq8w00s7c9f66bd11bvi9lzz6qz70cc5y"))))
     (build-system r-build-system)
     (home-page "https://github.com/r-lib/cli#readme")
     (synopsis "Helpers for developing command line interfaces")
@@ -8289,14 +8575,14 @@ operations and statistical functions are provided.")
 (define-public r-tsp
   (package
     (name "r-tsp")
-    (version "1.2-3")
+    (version "1.2-4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "TSP" version))
        (sha256
         (base32
-         "1ck6rzlvlc7w9alyqqvy1kwzawn8w3jnc7ml3pmhg75ppkf3ryvx"))))
+         "1263ay3dar2mzm89nf31gl7n8d983qjiy4qwz7sgv8vwkbz0pg9h"))))
     (properties `((upstream-name . "TSP")))
     (build-system r-build-system)
     (propagated-inputs (list r-foreach))
@@ -8407,13 +8693,13 @@ iVAT).")
 (define-public r-xfun
   (package
     (name "r-xfun")
-    (version "0.37")
+    (version "0.38")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "xfun" version))
        (sha256
-        (base32 "1yg1b21nwpnggb498z0j3lp11w6fwni7q7rd88fnm8xfnbq9yq9v"))))
+        (base32 "12n60c18rgg65qxnlp4sv6q9zryiz146844ayd28kipnjpwc4457"))))
     (build-system r-build-system)
     ;; knitr itself depends on xfun
     #;
@@ -8494,14 +8780,14 @@ estimated from a given sample.")
 (define-public r-vctrs
   (package
     (name "r-vctrs")
-    (version "0.6.0")
+    (version "0.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "vctrs" version))
        (sha256
         (base32
-         "0mwp56s87bdrg5xr4mnjr0qrdsq18dmfs3d640qkbbka9qn722xy"))))
+         "10qjirgdq0bn2s84vqx5c78i85mdp5mxwdfn30kayh3wpmij8mbp"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-cli r-glue r-lifecycle r-rlang))
@@ -8533,14 +8819,14 @@ estimated from a given sample.")
 (define-public r-pillar
   (package
     (name "r-pillar")
-    (version "1.8.1")
+    (version "1.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pillar" version))
        (sha256
         (base32
-         "1v47dm2v4nlswd1gmgcx5c7yrgn1ksdfr9lqkc63jf2nkv6af1ig"))))
+         "1k3sp37dpn46d2xbq621alpvzgnm06x5qb87nk169y47q23b8gpj"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-cli
@@ -9213,14 +9499,14 @@ Fisher's method), and Sidak correction.")
 (define-public r-quantmod
   (package
     (name "r-quantmod")
-    (version "0.4.20")
+    (version "0.4.21")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "quantmod" version))
        (sha256
         (base32
-         "154fqhw46kc7r08zsj5fsg97hg93phsli3z14xwmz22xb50xymzp"))))
+         "1qmpdk91smiqg63h4jsrw4izl4pnbgwlzi16zjvin0fs29kx01jf"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-curl r-ttr r-xts r-zoo))
@@ -9452,14 +9738,14 @@ interface.")
 (define-public r-trend
   (package
     (name "r-trend")
-    (version "1.1.4")
+    (version "1.1.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "trend" version))
        (sha256
         (base32
-         "1mr5g5gaxiqj6x83ngcbwwh57vhrhcz0x9dh0rmvs9y2ivk29ccs"))))
+         "12xswr925jjbkdccjiigkr6a44jmgvzwvnizciv6rr3mnklv6n66"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-extradistr))
@@ -10073,13 +10359,13 @@ It also includes interpolation functions.")
 (define-public r-simplermarkdown
   (package
     (name "r-simplermarkdown")
-    (version "0.0.4")
+    (version "0.0.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "simplermarkdown" version))
        (sha256
-        (base32 "069pgx5m22rdqa21lyn5zqm9ym3g7w6z1d2wjwms8b1f2cp6266g"))))
+        (base32 "0lffwsrhsdqcqhklh24v0y0x6w4vq9jch93m330kfdv2amab1l06"))))
     (properties `((upstream-name . "simplermarkdown")))
     (build-system r-build-system)
     (propagated-inputs
@@ -10275,14 +10561,14 @@ multivariate plot methods.")
 (define-public r-fnn
   (package
     (name "r-fnn")
-    (version "1.1.3.1")
+    (version "1.1.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "FNN" version))
        (sha256
         (base32
-         "0nmynpiy3d2dnd5ngjf4m79jy02byhk43gj0xny9a6j8243f5c2j"))))
+         "11qfzqfnf38yrqxr5wyi69cfmnplzj1wrx3il03vp7lphwsa20fp"))))
     (properties `((upstream-name . "FNN")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/FNN")
@@ -10455,14 +10741,14 @@ used.")
 (define-public r-arules
   (package
     (name "r-arules")
-    (version "1.7-5")
+    (version "1.7-6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "arules" version))
        (sha256
         (base32
-         "0d04w28hl9gcrvkj0v0q77x4a89jhvzf1imw58xfgncap8mc6555"))))
+         "0syrbh85vzhp9plm95dhq6pfanzbxqm4wcahw3y2d26gvi2nmzwm"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-generics r-matrix))
@@ -10931,19 +11217,18 @@ finance, conversion from and to JSON, and many other applications.")
 (define-public r-dtplyr
   (package
     (name "r-dtplyr")
-    (version "1.3.0")
+    (version "1.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "dtplyr" version))
        (sha256
         (base32
-         "1y40yrfdw1wbx7jqmql69yi3q52lzjpqgr4jwnhjr33hw6kxvg0v"))))
+         "1rfnr1f3dzzivzmw9jjaclckkany6c625bqr8lkx32qbcjd6iad5"))))
     (properties `((upstream-name . "dtplyr")))
     (build-system r-build-system)
     (propagated-inputs
      (list r-cli
-           r-crayon
            r-data-table
            r-dplyr
            r-glue
@@ -11509,14 +11794,14 @@ publication-ready plots.")
 (define-public r-ellipse
   (package
     (name "r-ellipse")
-    (version "0.4.3")
+    (version "0.4.5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ellipse" version))
        (sha256
         (base32
-         "0im9d36dixpksms52v6nsb3l0z2c7wc25r9j0f08naj6qc8jpvq2"))))
+         "0dl9pamalm0ad001qy848vr51qifz8r8yks6c69yppl02f2pbi1r"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/ellipse/")
     (synopsis "Functions for drawing ellipses and ellipse-like confidence regions")
@@ -11553,14 +11838,14 @@ clustering.")
 (define-public r-factominer
   (package
     (name "r-factominer")
-    (version "2.7")
+    (version "2.8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "FactoMineR" version))
        (sha256
         (base32
-         "03952kcnwrm61kn5im55ky1j91nm5x4i4f5gs115li6gck63xf17"))))
+         "0lgqbw7534wadkdv7zh1y5nanl72jys070qydznmaj2cmvvqd460"))))
     (properties `((upstream-name . "FactoMineR")))
     (build-system r-build-system)
     (propagated-inputs
@@ -11898,14 +12183,14 @@ references and Rd files.")
 (define-public r-officer
   (package
     (name "r-officer")
-    (version "0.6.1")
+    (version "0.6.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "officer" version))
        (sha256
         (base32
-         "19sn36aaxr2bmxm8lrs1vqmc4fc1gfwarp418pn09jk105ckykh8"))))
+         "0dfk1didy5lfh07chqfwlrdlrib7a5na65rb71ipnxlhbiwbaj09"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-openssl r-r6 r-ragg r-uuid r-xml2 r-zip))
@@ -12217,6 +12502,34 @@ functions also support labelled data, and all integrate seamlessly into a
 tidyverse workflow.")
     (license license:gpl3)))
 
+(define-public r-nodbi
+  (package
+    (name "r-nodbi")
+    (version "0.9.2")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "nodbi" version))
+              (sha256
+               (base32
+                "167zhlyl0crn24zyw9rz9spa5xh8nxpzl94vqsk02r849n4qvzx9"))))
+    (properties `((upstream-name . "nodbi")))
+    (build-system r-build-system)
+    (propagated-inputs
+     (list r-dbi
+           r-jqr
+           r-jsonify
+           r-jsonlite
+           r-stringi
+           r-uuid))
+    (home-page "https://docs.ropensci.org/nodbi/")
+    (synopsis "NoSQL database connector")
+    (description
+     "This is a package for simplified document database access and
+manipulation, providing a common API across supported NoSQL databases
+Elasticsearch, CouchDB, MongoDB as well as SQLite/JSON1, PostgreSQL, and
+DuckDB.")
+    (license license:expat)))
+
 (define-public r-nortest
   (package
     (name "r-nortest")
@@ -12270,14 +12583,14 @@ functions.")
 (define-public r-flextable
   (package
     (name "r-flextable")
-    (version "0.9.0")
+    (version "0.9.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "flextable" version))
        (sha256
         (base32
-         "0p5zrw73aj6ycl2p7x95sjkdnbqjfjn6lmnscqhhg16pz5l5q11f"))))
+         "0ic3mny2kgfyckjc77sycq5czhx68i9dgqp7g3lc06h303kcjqm4"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-data-table
@@ -12965,13 +13278,13 @@ supported classes are those defined in packages @code{network} and
 (define-public r-interp
   (package
     (name "r-interp")
-    (version "1.1-3")
+    (version "1.1-4")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "interp" version))
               (sha256
                (base32
-                "0gzsnlg8f7knb100n6vv6307c3v2jd8f9qzrq62jkc6g71mn0kmp"))))
+                "01jdwcv25khnma7i0zcynkr5sw0dzb2agqimhrpdg91jh4w5sysg"))))
     (properties `((upstream-name . "interp")))
     (build-system r-build-system)
     (propagated-inputs (list r-deldir r-rcpp r-rcppeigen))
@@ -13064,13 +13377,13 @@ ABC algorithms.")
 (define-public r-abctools
   (package
     (name "r-abctools")
-    (version "1.1.4")
+    (version "1.1.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "abctools" version))
        (sha256
-        (base32 "02c473fqj7yd27flma2x7flqzqbrnba2xfcjy466nww0sm1vvhjg"))))
+        (base32 "0yxmj28ym8919l27m04yjyc7mya1iy5ap4p980grsh7m4cgpx3bh"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-abc r-abind r-hmisc r-plyr))
@@ -13158,14 +13471,14 @@ repeated measures data, respectively.")
 (define-public r-gam
   (package
     (name "r-gam")
-    (version "1.22-1")
+    (version "1.22-2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gam" version))
        (sha256
         (base32
-         "1h84klxs7wbksn9hsqdspmska9q5pmy6q71fmwm4bcmdrqixr8gv"))))
+         "1yh2rahcbi2fbsi1yps1l51xxljc7lcs7h729y5vjj4l492pywzy"))))
     (properties `((upstream-name . "gam")))
     (build-system r-build-system)
     (propagated-inputs
@@ -13233,14 +13546,14 @@ both to consistency and asymptotic normality.")
 (define-public r-dofuture
   (package
     (name "r-dofuture")
-    (version "0.12.2")
+    (version "1.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "doFuture" version))
        (sha256
         (base32
-         "0w07pmzpsfq4kvfc745s1i9b6dfn1df1wrfi4s9ys4ir3g2s8nk1"))))
+         "1pxwpfmxswbsd1f2ifj9kdq9hi9q0x2wwv2kv0xq178ymmywi2sz"))))
     (properties `((upstream-name . "doFuture")))
     (build-system r-build-system)
     (arguments
@@ -13249,7 +13562,7 @@ both to consistency and asymptotic normality.")
          (add-after 'unpack 'set-HOME
            (lambda _ (setenv "HOME" "/tmp"))))))
     (propagated-inputs
-     (list r-foreach r-future r-globals r-iterators))
+     (list r-foreach r-future r-future-apply r-globals r-iterators))
     (native-inputs
      (list r-r-rsp)) ; vignette builder
     (home-page "https://github.com/HenrikBengtsson/doFuture")
@@ -14144,6 +14457,85 @@ equations, and Cox proportional hazards models.  Functions are available to
 handle data from simple random samples as well as complex surveys.")
     (license license:gpl3+)))
 
+(define-public r-tarchetypes
+  (package
+    (name "r-tarchetypes")
+    (version "0.7.5")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "tarchetypes" version))
+              (sha256
+               (base32
+                "05yhq8xnrpk37x7fq0yjw4m527ji28s16dskfmljrbrzb064nw2g"))))
+    (properties `((upstream-name . "tarchetypes")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-digest
+                             r-dplyr
+                             r-fs
+                             r-furrr
+                             r-future
+                             r-future-callr
+                             r-rlang
+                             r-targets
+                             r-tibble
+                             r-tidyselect
+                             r-vctrs
+                             r-withr))
+    (home-page "https://docs.ropensci.org/tarchetypes/")
+    (synopsis "Archetypes for Targets")
+    (description
+     "Function-oriented Make-like declarative pipelines for statistics and
+data science are supported in the targets R package.  As an extension to
+targets, the tarchetypes package provides convenient user-side functions to
+make targets easier to use.  By establishing reusable archetypes for common
+kinds of targets and pipelines, these functions help express complicated
+reproducible pipelines concisely and compactly.  The methods in this package
+were influenced by the drake R package by Will Landau (2018)
+<doi:10.21105/joss.00550>.")
+    (license license:expat)))
+
+(define-public r-targets
+  (package
+    (name "r-targets")
+    (version "0.14.3")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "targets" version))
+              (sha256
+               (base32
+                "0mhwvlbxnb4w054pjiw2smss28i90sg52w8v040y7sqy6gq2c8n6"))))
+    (properties `((upstream-name . "targets")))
+    (build-system r-build-system)
+    (propagated-inputs (list r-base64url
+                             r-callr
+                             r-cli
+                             r-codetools
+                             r-data-table
+                             r-digest
+                             r-igraph
+                             r-knitr
+                             r-r6
+                             r-rlang
+                             r-tibble
+                             r-tidyselect
+                             r-vctrs
+                             r-withr
+                             r-yaml))
+    (native-inputs (list r-knitr))
+    (home-page "https://docs.ropensci.org/targets/")
+    (synopsis "Dynamic function-oriented Make-like declarative pipelines")
+    (description
+     "This package provides a pipeline toolkit for statistics and data science
+in R; the @code{targets} package brings function-oriented programming to
+Make-like declarative pipelines.  It orchestrates a pipeline as a graph of
+dependencies, skips steps that are already up to date, runs the necessary
+computation with optional parallel workers, abstracts files as R objects, and
+provides tangible evidence that the results are reproducible given the
+underlying code and data.  The methodology in this package borrows from GNU
+Make (2015, ISBN:978-9881443519) and drake (2018,
+<doi:10.21105/joss.00550>).")
+    (license license:expat)))
+
 (define-public r-dvmisc
   (package
     (name "r-dvmisc")
@@ -14629,14 +15021,14 @@ Bayesian modeling.")
 (define-public r-tmb
   (package
     (name "r-tmb")
-    (version "1.9.2")
+    (version "1.9.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "TMB" version))
        (sha256
         (base32
-         "0kz5a3y6xcqz2ycxq6ff3jasc2hkvq2rxnpr618nng7k9gljc504"))))
+         "10cl88v3jdjv0sacfvk1g9y7sl918rxlyk9ddy2d1y7055j8y0qg"))))
     (properties `((upstream-name . "TMB")))
     (build-system r-build-system)
     (propagated-inputs
@@ -14700,14 +15092,14 @@ models.")
 (define-public r-glmmtmb
   (package
     (name "r-glmmtmb")
-    (version "1.1.5")
+    (version "1.1.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "glmmTMB" version))
        (sha256
         (base32
-         "1yh8q0l3l8hm408k8khjj1hff3nkqx0wq6a41fddwfmrq1alfjrk"))))
+         "1wf1fn2gf500y2r4d84p5gj3b1fj2cmyw2lp366r4nm6p3iyd2x3"))))
     (properties `((upstream-name . "glmmTMB")))
     (build-system r-build-system)
     (propagated-inputs
@@ -14786,14 +15178,14 @@ effects models and Bayesian models.")
 (define-public r-ggeffects
   (package
     (name "r-ggeffects")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggeffects" version))
        (sha256
         (base32
-         "067r9qp3r4iwkhfiwbjil59af93c55rxg6z4l4hiwqypalkmgxwg"))))
+         "0pzg1mddy1s5z5cmvmdkk6hqhipdr866z1y5qh4c6n93svwlyvnj"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-insight))
@@ -14861,20 +15253,19 @@ efficient computation even with very large data sets.")
 (define-public r-sjplot
   (package
     (name "r-sjplot")
-    (version "2.8.13")
+    (version "2.8.14")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sjPlot" version))
        (sha256
-        (base32 "1pbfskhq6mbycih0ck9vhmf6plgp03w5ipk6w9z28aw3kn7mcv1z"))))
+        (base32 "06m6najky8ydnn6y6f3fh1y7laxnqpzcbyy1cyqcgvfcyfia9qjf"))))
     (properties `((upstream-name . "sjPlot")))
     (build-system r-build-system)
     (propagated-inputs
      (list r-bayestestr
            r-datawizard
            r-dplyr
-           r-effectsize
            r-ggeffects
            r-ggplot2
            r-insight
@@ -15884,22 +16275,39 @@ netCDF files.")
 Bioconductor packages.")
     (license license:artistic2.0)))
 
+;; TODO: one more minified JavaScript files is included that should be built
+;; from the included .src.js files, but it is not entirely clear how.  The
+;; file is inst/htmlwidgets/lib/rglClass/rglClass.min.js.
 (define-public r-rgl
   (package
     (name "r-rgl")
-    (version "1.0.1")
+    (version "1.1.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rgl" version))
        (sha256
         (base32
-         "1j1g1b1j6azhg944ddzzrxgynb2bfl14l5qz58n4mhvxrbx018w9"))))
+         "1blasg60x38z57ds6x7yb4rvjx21yf4s99q93sl1w9h6mg14d8jg"))
+       (snippet
+        '(delete-file "inst/htmlwidgets/lib/CanvasMatrix/CanvasMatrix.min.js"))))
     (build-system r-build-system)
+    (arguments
+     (list
+      #:phases
+      '(modify-phases %standard-phases
+         (add-after 'unpack 'process-javascript
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "inst/htmlwidgets/lib/"
+               (let ((source "CanvasMatrix/CanvasMatrix.src.js")
+                     (target "CanvasMatrix/CanvasMatrix.min.js"))
+                 (invoke "esbuild" source "--minify"
+                         (string-append "--outfile=" target)))))))))
     (native-inputs
-     (list pkg-config
+     (list esbuild
+           pkg-config
            r-knitr
-           r-rmarkdown)) ;for vignettes
+           r-rmarkdown))                ;for vignettes
     (inputs
      (list freetype
            libpng
@@ -15952,13 +16360,13 @@ to colexicographical order.")
 (define-public r-multidplyr
   (package
     (name "r-multidplyr")
-    (version "0.1.2")
+    (version "0.1.3")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "multidplyr" version))
               (sha256
                (base32
-                "081x9n46dl6vpp5q6pilw3w5wpdi3r9kwi9n6h4k2p2iqg1s96lb"))))
+                "18yl24s1g8wf3xi6f0k7jhs99ka4dslxf5p9ax9m5l1rbva5xdwj"))))
     (properties `((upstream-name . "multidplyr")))
     (build-system r-build-system)
     (propagated-inputs
@@ -18847,14 +19255,14 @@ them in distributed compute environments.")
 (define-public r-parallelly
   (package
     (name "r-parallelly")
-    (version "1.34.0")
+    (version "1.35.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "parallelly" version))
        (sha256
         (base32
-         "1x5gk008813i9c2i7qdhpmlbq2xdgv5q47xcmc6lb8p475q9sqqi"))))
+         "1kaxmmkwjxnympxsyphwfdba6nmp4jszhrsy5h2snshr0xjrnpiz"))))
     (properties `((upstream-name . "parallelly")))
     (build-system r-build-system)
     (home-page "https://github.com/HenrikBengtsson/parallelly")
@@ -18939,6 +19347,38 @@ can be resolved using any future-supported backend, e.g. parallel on the local
 machine or distributed on a compute cluster.")
     (license license:gpl2+)))
 
+(define-public r-future-callr
+  (package
+    (name "r-future-callr")
+    (version "0.8.1")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "future.callr" version))
+              (sha256
+               (base32
+                "1w7wq2nrvj65a25nsb5h99258p9565qwnlvcc07nyc21gm5zrg9k"))))
+    (properties `((upstream-name . "future.callr")))
+    (build-system r-build-system)
+    ;; This is needed for the vignette builder R.rsp.
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'set-HOME
+            (lambda _ (setenv "HOME" "/tmp"))))))
+    (propagated-inputs (list r-callr r-future))
+    (native-inputs (list r-markdown r-r-rsp))
+    (home-page "https://future.callr.futureverse.org")
+    (synopsis "Future API for Parallel Processing using 'callr'")
+    (description
+     "This is an implementation of the Future API on top of the callr package.
+This allows you to process futures, as defined by the future package, in
+parallel out of the box, on your local machine.  Contrary to backends relying
+on the parallel package (e.g. @code{future::multisession}) and socket
+connections, the callr backend provided here can run more than 125 parallel R
+processes.")
+    (license license:lgpl2.1+)))
+
 (define-public r-rsvd
   (package
     (name "r-rsvd")
@@ -20315,14 +20755,14 @@ barplots or heatmaps.")
 (define-public r-seqinr
   (package
     (name "r-seqinr")
-    (version "4.2-23")
+    (version "4.2-30")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "seqinr" version))
        (sha256
         (base32
-         "14zv47cdrx9rpyxzccyikp0zxvcqrviw7bid0qhiixvji4bp88dg"))))
+         "0jzfbzai2r5bprynq337s1a4k66m34p5k9nzzmbyzvk7719zxy7s"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-ade4 r-segmented))
@@ -20553,14 +20993,14 @@ information about geometries.")
 (define-public r-sf
   (package
     (name "r-sf")
-    (version "1.0-11")
+    (version "1.0-12")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sf" version))
        (sha256
         (base32
-         "05r1isg9qjyvnbkmg1xv2bz2x7fb21yc1fp5ssci29cfddq4hy1f"))))
+         "11qjv70wm5wmycmsnmacl3nqapadf5iq7jlpcbx1sjw2ipsyny1p"))))
     (build-system r-build-system)
     (inputs
      (list gdal geos proj sqlite))
@@ -23536,14 +23976,14 @@ versions.  A Shiny application implementing the functions is also included.")
 (define-public r-ggfortify
   (package
     (name "r-ggfortify")
-    (version "0.4.15")
+    (version "0.4.16")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggfortify" version))
        (sha256
         (base32
-         "1cfwv8jjy1yk0l5wnp48ql1javvrzq1wnh1lv49xp6rynz00lxm8"))))
+         "05h3a4ycain0y621anjpjphsjlhpayb2nnd6n70rlymrbilfw6xv"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-dplyr
@@ -23634,14 +24074,14 @@ the current document.")
 (define-public r-xgboost
   (package
     (name "r-xgboost")
-    (version "1.7.3.1")
+    (version "1.7.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "xgboost" version))
        (sha256
         (base32
-         "199qlj74i7rsrwg7al55d2yr7py67k6yaa5wjfg6ma7s1sijrv9w"))))
+         "1g35r6qh4ivgbbvsdysiyy4c9gh396k3wdwz7scfb13g40zq7h2f"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-data-table r-jsonlite r-matrix))
@@ -24217,15 +24657,48 @@ function and interfaces to external frameworks.")
 (define-public r-covr
   (package
     (name "r-covr")
-    (version "3.6.1")
+    (version "3.6.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "covr" version))
        (sha256
-        (base32 "0mqiqmbwq5f083lda208nqd4ya0f912bkkya2i62fkqsii1ibgpz"))))
+        (base32 "0ns8xbq1l21mg8p2aiqv5h306a3vpn64j6jrgzbv8iv1a7kqrrmc"))
+       (modules '((guix build utils)))
+       (snippet
+        '(with-directory-excursion "inst/www/shared"
+           (for-each delete-file
+                     '("bootstrap/js/bootstrap.min.js"
+                       "bootstrap/shim/html5shiv.min.js"
+                       "bootstrap/shim/respond.min.js"))))))
     (properties `((upstream-name . "covr")))
     (build-system r-build-system)
+    (arguments
+     (list
+      #:modules '((guix build utils)
+                  (guix build r-build-system)
+                  (srfi srfi-1))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'process-javascript
+            (lambda* (#:key inputs #:allow-other-keys)
+              (with-directory-excursion "inst/www/shared"
+                (call-with-values
+                    (lambda ()
+                      (unzip2
+                       `((,(search-input-file inputs "/dist/js/bootstrap.js")
+                          "bootstrap/js/bootstrap.min.js")
+                         (,(search-input-file inputs "/dist/html5shiv.js")
+                          "bootstrap/shim/html5shiv.min.js")
+                         (,(search-input-file inputs "/dest/respond.src.js")
+                          "bootstrap/shim/respond.min.js"))))
+                  (lambda (sources targets)
+                    (for-each (lambda (source target)
+                                (format #true "Processing ~a --> ~a~%"
+                                        source target)
+                                (invoke "esbuild" source "--minify"
+                                        (string-append "--outfile=" target)))
+                              sources targets)))))))))
     (propagated-inputs
      (list r-crayon
            r-digest
@@ -24235,7 +24708,38 @@ function and interfaces to external frameworks.")
            r-withr
            r-yaml))
     (native-inputs
-     (list r-knitr)) ; for vignettes
+     (list esbuild
+           r-knitr  ;for vignettes
+           (let ((version "3.3.5"))
+             (origin
+               (method git-fetch)
+               (uri (git-reference
+                     (url "https://github.com/twbs/bootstrap")
+                     (commit (string-append "v" version))))
+               (file-name (git-file-name "js-bootstrap" version))
+               (sha256
+                (base32
+                 "1zxrjhnnd594rflnwzqhbx3rx0gjlh6hgx9v2nppgkmrkqb7y1a4"))))
+           (let ((version "3.7.2"))
+             (origin
+               (method git-fetch)
+               (uri (git-reference
+                     (url "https://github.com/aFarkas/html5shiv")
+                     (commit version)))
+               (file-name (git-file-name "js-html5shiv" version))
+               (sha256
+                (base32
+                 "0mw4bbl9a9d1ibywscjgmbky0jkj4081l1yd4x3ss0flwaa3fwsk"))))
+           (let ((version "1.4.2"))
+             (origin
+               (method git-fetch)
+               (uri (git-reference
+                     (url "https://github.com/scottjehl/Respond")
+                     (commit version)))
+               (file-name (git-file-name "js-respond" version))
+               (sha256
+                (base32
+                 "00xid731rirc7sdy1gc8qal3v9g0agr2qx15hm4x97l1lcbylyn2"))))))
     (home-page "https://github.com/r-lib/covr")
     (synopsis "Test coverage for R packages")
     (description
@@ -24425,14 +24929,14 @@ in pipelines.")
 (define-public r-parameters
   (package
     (name "r-parameters")
-    (version "0.20.2")
+    (version "0.20.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "parameters" version))
        (sha256
         (base32
-         "197qna5lb3ypbl8zgsmar61gbsyyj5ma2q7r74sm0b70c9rhk9n8"))))
+         "1ciqcw5pqk01knznnsvj95gss5yx73vaqw9kinph8symvslcmpdk"))))
     (properties `((upstream-name . "parameters")))
     (build-system r-build-system)
     (propagated-inputs
@@ -24934,14 +25438,14 @@ long-term reliability under stochastic load profiles.")
 (define-public r-rglpk
   (package
     (name "r-rglpk")
-    (version "0.6-4")
+    (version "0.6-5")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Rglpk" version))
        (sha256
         (base32
-         "19mzpyimzq9zqnbi05j79b2di3nzaln8swggs9p8sqdr60qvr3d2"))))
+         "18bwnpb8645vf233andr411shzp1sm3i7bn848sgxswgb80grvxa"))))
     (properties `((upstream-name . "Rglpk")))
     (build-system r-build-system)
     (propagated-inputs
@@ -27087,14 +27591,14 @@ number embedded in the file rather than the file extension.")
 (define-public r-imager
   (package
     (name "r-imager")
-    (version "0.42.18")
+    (version "0.42.19")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "imager" version))
        (sha256
         (base32
-         "0ljkcvs91sjddndwdbaqg0nf9sksm0284s6kg05k027wnvbkc5f1"))))
+         "1qp1190cb7pssl22vakd8z8zvj6mmhrn7jk6wkjyrv28lv5vqyhq"))))
     (properties `((upstream-name . "imager")))
     (build-system r-build-system)
     (inputs
@@ -27147,14 +27651,14 @@ it may be seen by an animal with less acute vision.")
 (define-public r-caret
   (package
     (name "r-caret")
-    (version "6.0-93")
+    (version "6.0-94")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "caret" version))
        (sha256
         (base32
-         "01sa1h9pc3a062pwm0rxadvg9qxszwcylya7llv08fcxhy46n5ac"))))
+         "1a191n9qswvf8ri6id8picqgdqx15l6mp996v6f77fv0l8yfh597"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-e1071
@@ -27990,14 +28494,14 @@ OpenMP.")
 (define-public r-emplik
   (package
     (name "r-emplik")
-    (version "1.2")
+    (version "1.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "emplik" version))
        (sha256
         (base32
-         "039kz7703ri91j2i93dr8ixap7i63sr72id9zp74cm7ws9pd1b27"))))
+         "14jgwwxvsglkbq7kwjl34lyax45qn4hkra4qmmv4ybnvvcmbcag1"))))
     (properties `((upstream-name . "emplik")))
     (build-system r-build-system)
     (propagated-inputs
@@ -28515,14 +29019,14 @@ machine learning, visually representing text and text analyses, and more.")
 (define-public r-topicmodels
   (package
     (name "r-topicmodels")
-    (version "0.2-13")
+    (version "0.2-14")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "topicmodels" version))
        (sha256
         (base32
-         "16mw0l7wm5idc831csxlk176c42a5xw8qm8xhbnmmdl2hjk0cqbx"))))
+         "1jaw9fjcl5ac0l57lack9gswqx2wzid1gkwsksyr4dlpxbw0zm5c"))))
     (properties `((upstream-name . "topicmodels")))
     (build-system r-build-system)
     (inputs
@@ -28880,14 +29384,14 @@ Complete access to optimized C functions is made available with
 (define-public r-openmx
   (package
     (name "r-openmx")
-    (version "2.21.1")
+    (version "2.21.8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "OpenMx" version))
        (sha256
         (base32
-         "13ka7c7qlb0q2jrmxg1y43gqcbsxcsw5s4cf6ckkh25gdf4mq6v3"))))
+         "1vvlb9q3w6i6g7kf0r5jnrlmdxskh3rbfss90icand046rl37qdz"))))
     (properties `((upstream-name . "OpenMx")))
     (build-system r-build-system)
     (propagated-inputs
@@ -29080,14 +29584,14 @@ network, tree, dendrogram, and Sankey graphs from R using data frames.")
 (define-public r-qgraph
   (package
     (name "r-qgraph")
-    (version "1.9.3")
+    (version "1.9.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "qgraph" version))
        (sha256
         (base32
-         "14azjxlvb02wlbskbsv5x3a6gpfb8hfyijfpbay6fimnsaqnmbj6"))))
+         "12rn3jxy4g248cg6323m1zbmazq8ffjp0ywinnq57rwnz1bva434"))))
     (properties `((upstream-name . "qgraph")))
     (build-system r-build-system)
     (propagated-inputs
@@ -29483,14 +29987,14 @@ using the @code{rstan} and @code{rstanarm} packages).")
 (define-public r-rstantools
   (package
     (name "r-rstantools")
-    (version "2.3.0")
+    (version "2.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rstantools" version))
        (sha256
         (base32
-         "0bc22fxpw4xvdxx8716wbasw8rpkpipb428cv764s8c0mkk2szlk"))))
+         "0xb9rb6nlqsqxi08hx9iwqpfz6ssdmh6axyk7d399j7zhklg5m42"))))
     (properties `((upstream-name . "rstantools")))
     (build-system r-build-system)
     (inputs (list pandoc))
@@ -29511,13 +30015,13 @@ recommendations for developers.")
 (define-public r-loo
   (package
     (name "r-loo")
-    (version "2.5.1")
+    (version "2.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "loo" version))
        (sha256
-        (base32 "1wa5hxk7lkr88mway6b7xd5arrkkl2ldl9rf0v1nqwp8lia2ysl6"))))
+        (base32 "040jk0zmpljq3ayd87bjy5vwwfy49im6kylp6z4wnqisypyn1nk6"))))
     (properties `((upstream-name . "loo")))
     (build-system r-build-system)
     (inputs
@@ -29692,14 +30196,14 @@ Additional storage back-ends can be added easily.")
 (define-public r-zyp
   (package
     (name "r-zyp")
-    (version "0.11")
+    (version "0.11-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "zyp" version))
        (sha256
         (base32
-         "0jmddxg88qb9f38ywdy4min7w5qadnkhqxd46b0j0gjsq95vw85q"))))
+         "0gqds43ivbsi4770nxj5sf4mp51m410svnap0v1rh8vlk3gkb3l9"))))
     (properties `((upstream-name . "zyp")))
     (build-system r-build-system)
     (propagated-inputs
@@ -29716,13 +30220,13 @@ climate data.")
 (define-public r-rlecuyer
   (package
     (name "r-rlecuyer")
-    (version "0.3-5")
+    (version "0.3-7")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "rlecuyer" version))
               (sha256
                (base32
-                "09mniai7v8gapr6hd3zm8sm3vi1zcyhgym389904ykb2yx7l68s7"))))
+                "0g5z26wsbv3wzrc3gl1z97qxdk5m2pvfg3f5zqkz98wzh1z49b35"))))
     (properties `((upstream-name . "rlecuyer")))
     (build-system r-build-system)
     (home-page
@@ -30525,24 +31029,22 @@ here.")
 (define-public r-projpred
   (package
     (name "r-projpred")
-    (version "2.4.0")
+    (version "2.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "projpred" version))
        (sha256
         (base32
-         "1cny3svzrmqc1yxqms7l4v1ilpw8yfb5akn41zm95nnv3mzvn0bg"))))
+         "0faf0hq5kvibqyzgqqz2sdqms8g3vvxy6calpm6d2wzmbczi5v5n"))))
     (properties `((upstream-name . "projpred")))
     (build-system r-build-system)
     (propagated-inputs
      (list r-abind
-           r-dplyr
            r-gamm4
            r-ggplot2
            r-lme4
            r-loo
-           r-magrittr
            r-mass
            r-mclogit
            r-mgcv
@@ -30551,7 +31053,6 @@ here.")
            r-ordinal
            r-rcpp
            r-rcpparmadillo
-           r-rlang
            r-rstantools
            r-ucminf))
     (native-inputs (list r-knitr r-rmarkdown))
@@ -30568,14 +31069,14 @@ vignette for more information and examples.")
 (define-public r-distributional
   (package
     (name "r-distributional")
-    (version "0.3.1")
+    (version "0.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "distributional" version))
        (sha256
         (base32
-         "0pr34yq6igb7ciqss2ldwa7gc55xvla040x8rkd8m2hcrz5mczkj"))))
+         "1y08s301mxz7c54lxa1j0zzbsrgphxv5hsyam3jswcw274rxd0y8"))))
     (properties
      `((upstream-name . "distributional")))
     (build-system r-build-system)
@@ -30902,18 +31403,18 @@ counting and recursive k-means partitioning.")
 (define-public r-hardhat
   (package
     (name "r-hardhat")
-    (version "1.2.0")
+    (version "1.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "hardhat" version))
        (sha256
         (base32
-         "0y5dxpd4gsrs365x1v4qf2vq7hq2qb6f6x50dyj29xmmn760wcpr"))))
+         "0bp83yw7j34iwir2f73ainic11cdz0q18m5v1kbx8vdsw84z17zy"))))
     (properties `((upstream-name . "hardhat")))
     (build-system r-build-system)
     (propagated-inputs
-     (list r-glue r-rlang r-tibble r-vctrs))
+     (list r-cli r-glue r-rlang r-tibble r-vctrs))
     (native-inputs
      (list r-knitr))
     (home-page "https://github.com/tidymodels/hardhat")
@@ -32781,14 +33282,14 @@ Design} (SFD) and to test their quality.")
 (define-public r-dials
   (package
     (name "r-dials")
-    (version "1.1.0")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "dials" version))
        (sha256
         (base32
-         "1ly675h6shfclikwg82x8vwvrb63qmklamrbsqxsa0npbafqgvpb"))))
+         "1zj8f47jzgaydp3cff96w0kx1gm208vyq3f77p3g59nc01r0wri4"))))
     (properties `((upstream-name . "dials")))
     (build-system r-build-system)
     (propagated-inputs
@@ -32817,14 +33318,14 @@ for creating, simulating, or validating values for such parameters.")
 (define-public r-tune
   (package
     (name "r-tune")
-    (version "1.0.1")
+    (version "1.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tune" version))
        (sha256
         (base32
-         "044bz8g3p8vj97w9ycpiw39iakzghxbqzmb4lxqpplpxymc8ybkm"))))
+         "1pp3pgxwpqihxfjwf9mb5rc0yv60q47n7z399z21zp4jbwryxymh"))))
     (properties `((upstream-name . "tune")))
     (build-system r-build-system)
     (propagated-inputs
@@ -33391,18 +33892,19 @@ package also provides functions to visualize the observed data and the MLE.")
 (define-public r-metafor
   (package
     (name "r-metafor")
-    (version "3.8-1")
+    (version "4.0-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "metafor" version))
        (sha256
         (base32
-         "05053cvk65fh2p4wrmygkvgqvrl73kz22rdbxsjxhi21jmzmg56n"))))
+         "0fy2ildv2g3gckxh5jd4y7b1mpc616l4r52d5rf78nr2mzmm5maw"))))
     (properties `((upstream-name . "metafor")))
     (build-system r-build-system)
     (propagated-inputs
-     (list r-mathjaxr r-matrix r-metadat r-nlme r-pbapply))
+     (list r-mathjaxr r-matrix r-metadat r-nlme r-numderiv r-pbapply))
+    (native-inputs (list r-r-rsp))
     (home-page "https://cran.r-project.org/web/packages/metafor/")
     (synopsis "Meta-analysis package for R")
     (description
@@ -33556,14 +34058,14 @@ data (variant call format, e.g. VCF or BCF) or meta-analysis results in R.")
 (define-public r-maldiquant
   (package
     (name "r-maldiquant")
-    (version "1.22")
+    (version "1.22.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "MALDIquant" version))
        (sha256
         (base32
-         "05fhr7945m0qxh7f5c4ax9v2k32s4n4v4xc1dm1crk1vbzha40bv"))))
+         "0721j8lzv6ywv0hf8rjw446dmvl18gm5ymf5a35fg9vnprfsalha"))))
     (properties `((upstream-name . "MALDIquant")))
     (build-system r-build-system)
     (native-inputs
@@ -33911,13 +34413,13 @@ Journal of Statistical Software, 39(10), 1-24.")
 (define-public r-densestbayes
   (package
     (name "r-densestbayes")
-    (version "1.0-2.1")
+    (version "1.0-2.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "densEstBayes" version))
        (sha256
-        (base32 "1pzmgn65lv91zg1588qhwczy9f2zgciknlc4l072mvh2i7hncw2b"))))
+        (base32 "0ydnjyprv8fz037nkfvjd8w6hg4a19lbnq4kl7yankxksjfdyqc3"))))
     (properties `((upstream-name . "densEstBayes")))
     (build-system r-build-system)
     (propagated-inputs
@@ -34130,13 +34632,13 @@ package also supersedes the package @code{BBmisc}.")
 (define-public r-mlr3pipelines
   (package
     (name "r-mlr3pipelines")
-    (version "0.4.2")
+    (version "0.4.3")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "mlr3pipelines" version))
               (sha256
                (base32
-                "09pk3dwjcg5rbpwa1k21srdpvf2dlxq4b5p71cvkha85jx2gdgh6"))))
+                "1ycrm4i0k38mkw1r1a5sxp761wdz3p0q72xz6qqg3qsyva4ba0wz"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-backports
@@ -35251,14 +35753,14 @@ latter.")
 (define-public r-readtext
   (package
     (name "r-readtext")
-    (version "0.81")
+    (version "0.82")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "readtext" version))
         (sha256
           (base32
-            "0k782h5hns5v5h8a6qyfqck2hc15nq0awg8bsp196q4zviv5jw3c"))))
+            "13j0avf5443m46lczdznpw1zlc01psk61m5wrxks9inv0684xg1s"))))
     (properties `((upstream-name . "readtext")))
     (build-system r-build-system)
     (propagated-inputs
@@ -35268,12 +35770,12 @@ latter.")
             r-httr
             r-jsonlite
             r-pdftools
+            r-pillar
             r-readods
             r-readxl
             r-streamr
             r-stringi
             r-striprtf
-            r-tibble
             r-xml2))
     (native-inputs (list r-knitr))
     (home-page
@@ -35457,14 +35959,14 @@ Application Program Interfaces (API)}.")
 (define-public r-intervals
   (package
     (name "r-intervals")
-    (version "0.15.2")
+    (version "0.15.3")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "intervals" version))
         (sha256
           (base32
-            "0mvwfwc03ifb30a3dzbmkv9adwqb8ajxhcw24d8xip8px063plhb"))))
+            "1i6z86dnsb5md4hxaz049azpjpp8m8c9b0q7x1sfi6sbqzvzw0c5"))))
     (properties `((upstream-name . "intervals")))
     (build-system r-build-system)
     (home-page "https://github.com/edzer/intervals")
@@ -36305,14 +36807,14 @@ between them.")
 (define-public r-keras
   (package
     (name "r-keras")
-    (version "2.11.0")
+    (version "2.11.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "keras" version))
        (sha256
         (base32
-         "19r11mlxpdl09f7sfwzflnjhx2a6jgm57hjzg81pk8kprk4w7lvp"))))
+         "0h3p8hscb8l440x2zg0lakk3zrcdq4lqy49vni2p6q5fpvaqfm8r"))))
     (properties `((upstream-name . "keras")))
     (build-system r-build-system)
     (propagated-inputs
@@ -37719,14 +38221,14 @@ be efficient and easy to use.")
 (define-public r-ggh4x
   (package
     (name "r-ggh4x")
-    (version "0.2.3")
+    (version "0.2.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggh4x" version))
        (sha256
         (base32
-         "0da5r8zfx1ixhk266byspfm2aifhm0jrvbk264xya712pxayiw4a"))))
+         "15b2agnk5dsinrxkbq5bmqgckssvlrkwarj2pi7xi8lxsqqrpw3w"))))
     (properties `((upstream-name . "ggh4x")))
     (build-system r-build-system)
     (propagated-inputs
@@ -37886,13 +38388,13 @@ API.")
 (define-public r-spacetime
   (package
     (name "r-spacetime")
-    (version "1.2-8")
+    (version "1.3-0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "spacetime" version))
               (sha256
                (base32
-                "0nacy8a9mbxh22q248zxhnlcfrmgj9yslrgc3kj35zscmcks15s2"))))
+                "06slxywh94g4k7dxnfs9g5yjvwjk2lxwydrjwawg0mgkqsjh569f"))))
     (properties `((upstream-name . "spacetime")))
     (build-system r-build-system)
     (propagated-inputs (list r-lattice r-sp r-zoo r-xts r-intervals))
@@ -37910,13 +38412,13 @@ matching or aggregation, retrieving coordinates, print, summary, etc.")
 (define-public r-gstat
   (package
     (name "r-gstat")
-    (version "2.1-0")
+    (version "2.1-1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "gstat" version))
               (sha256
                (base32
-                "0vrdiyjav92wbbms8ljmv1i0l8cdjblfnmhyrsd1a7v0z93fp9jp"))))
+                "09ax28di93r4r334qwdp84i95809lkr6587w4xlgpvsma7k0bcj8"))))
     (properties `((upstream-name . "gstat")))
     (build-system r-build-system)
     (propagated-inputs
@@ -37942,13 +38444,13 @@ supports @command{sf} and @command{stars}.")
 (define-public r-automap
   (package
     (name "r-automap")
-    (version "1.1-1")
+    (version "1.1-9")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "automap" version))
               (sha256
                (base32
-                "11l6iygq66jg11lilwjmf7l250dcvhilx6zv2lm746rjzchwga0s"))))
+                "0hrsdynjxv0n5n1pbdk05rgrcwfd0g5p9pgdbicx4ljk73nhl1zk"))))
     (properties `((upstream-name . "automap")))
     (build-system r-build-system)
     (propagated-inputs (list r-ggplot2
diff --git a/gnu/packages/crates-graphics.scm b/gnu/packages/crates-graphics.scm
index a1b29a4022..2f072354a0 100644
--- a/gnu/packages/crates-graphics.scm
+++ b/gnu/packages/crates-graphics.scm
@@ -38,6 +38,7 @@
   #:use-module (gnu packages assembly)
   #:use-module (gnu packages crates-io)
   #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages gl)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -3103,7 +3104,7 @@ the platform-specific getters provided by winit, or another library.")
 (define-public rust-x11-2
   (package
     (name "rust-x11")
-    (version "2.18.2")
+    (version "2.20.1")
     (source
      (origin
        (method url-fetch)
@@ -3111,12 +3112,14 @@ the platform-specific getters provided by winit, or another library.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0wz7l6dlbraa9zalh9i45v9wibvkir9m2m1sg0jnzcbcaj9d1v3p"))))
+        (base32 "10pbvmcyqm6j6zr4zk7znk8silmilihv8jxmbxbl1b0pkidqsqy2"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-libc" ,rust-libc-0.2)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
+    (propagated-inputs
+     (list mesa))
     (home-page "https://github.com/erlepereira/x11-rs")
     (synopsis "X11 library bindings for Rust")
     (description "This crate provides X11 library bindings for Rust.")
diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index bf5164abd0..a8f4c83336 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -12,12 +12,11 @@
 ;;; Copyright © 2020 André Batista <nandre@riseup.net>
 ;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2020 Antoine Côté <antoine.cote@posteo.net>
-;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 aecepoglu <aecepoglu@fastmail.fm>
 ;;; Copyright © 2021, 2022 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro>
 ;;; Copyright © 2021 Antero Mejr <antero@kodmin.com>
-;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 muradm <mail@muradm.net>
 ;;; Copyright © 2021, 2022 Petr Hodina <phodina@protonmail.com>
@@ -31,6 +30,7 @@
 ;;; Copyright © 2022 ( <paren@disroot.org>
 ;;; Copyright © 2022 Greg Hogan <code@greghogan.com>
 ;;; Copyright © 2022 Paul A. Patience <paul@apatience.com>
+;;; Copyright © 2022 Paul Alesius <paul@unnservice.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -53,6 +53,7 @@
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
@@ -68,6 +69,7 @@
   #:use-module (gnu packages databases)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gettext)
+  #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
@@ -2678,6 +2680,50 @@ it outputs messages to Android's logcat.")
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-log" ,rust-log-0.4))))))
 
+(define-public rust-android-system-properties-0.1
+  (package
+    (name "rust-android-system-properties")
+    (version "0.1.5")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "android-system-properties" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32 "04b3wrz12837j7mdczqd95b732gw5q7q66cv4yn4646lvccp57l1"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs (("rust-libc" ,rust-libc-0.2))))
+    (home-page "https://github.com/nical/android_system_properties")
+    (synopsis "Minimal Android system properties wrapper")
+    (description
+     "This package provides a minimal Android system properties wrapper.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-anes-0.1
+  (package
+    (name "rust-anes")
+    (version "0.1.6")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "anes" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "16bj1ww1xkwzbckk32j2pnbn5vk6wgsl3q4p3j9551xbcarwnijb"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f                   ;FIXME: unresolved import anes::parser..?
+       #:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.3)
+        ("rust-libc" ,rust-libc-0.2))
+       #:cargo-inputs (("rust-bitflags" ,rust-bitflags-1))))
+    (home-page "https://github.com/zrzka/anes-rs")
+    (synopsis "Parse ANSI escape sequences")
+    (description
+     "This package contains an ANSI escape sequences provider and parser.")
+    ;; The user can choose either license.
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-ansi-parser-0.6
   (package
     (name "rust-ansi-parser")
@@ -2893,14 +2939,14 @@ last place (ULPs) comparisons.")
 (define-public rust-arbitrary-1
   (package
     (name "rust-arbitrary")
-    (version "1.0.1")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "arbitrary" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "14a6r7q9b1kf1m7810p8bcl51q11mrwc5z7fjkz0lx6kdvyk0x13"))))
+        (base32 "106qgz0qxs202xlvjfyvw8dkb6ynr1ymmcclfh89l56mj2zpzm19"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -3712,17 +3758,17 @@ library for Rust.")
              ("rust-mime" ,rust-mime-0.3)
              ("rust-mime-guess" ,rust-mime-guess-2))))))
 
-(define-public rust-asn1-derive-0.8
+(define-public rust-asn1-derive-0.13
   (package
     (name "rust-asn1-derive")
-    (version "0.8.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (crate-uri "asn1_derive" version))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "098w0mxz4bx9w7v72gsl5wva6f0qbvzyc52m0s0n8svqbyh4z2dw"))))
+    (version "0.13.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "asn1-derive" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1bvqriazb23gysygpzng1dhzjgnlv274q2yj5gpmlpl7jp0pkaxz"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -3736,21 +3782,34 @@ library for Rust.")
      "This package provides #[derive] support for @code{asn1}.")
     (license license:bsd-3)))
 
-(define-public rust-asn1-0.8
+(define-public rust-asn1-derive-0.8
   (package
-    (name "rust-asn1")
+    (inherit rust-asn1-derive-0.13)
+    (name "rust-asn1-derive")
     (version "0.8.7")
     (source
      (origin
        (method url-fetch)
-       (uri (crate-uri "asn1" version))
+       (uri (crate-uri "asn1_derive" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1caacmvgn463n1yc4ac6vl9phrh56ij7l3xgf6qgzbpyjm8v7zyg"))))
+        (base32 "098w0mxz4bx9w7v72gsl5wva6f0qbvzyc52m0s0n8svqbyh4z2dw"))))))
+
+(define-public rust-asn1-0.13
+  (package
+    (name "rust-asn1")
+    (version "0.13.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "asn1" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1idxxw14h3dvrj72k4g0hx1aqigd986a00cg0yxfw2gfc9gbmzra"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-asn1-derive" ,rust-asn1-derive-0.8)
+       (("rust-asn1-derive" ,rust-asn1-derive-0.13)
         ("rust-chrono" ,rust-chrono-0.4))
        #:cargo-development-inputs
        (("rust-libc" ,rust-libc-0.2))))
@@ -3760,6 +3819,26 @@ library for Rust.")
      "This is a Rust library for parsing and generating ASN.1 data (DER only).")
     (license license:bsd-3)))
 
+(define-public rust-asn1-0.8
+  (package
+    (inherit rust-asn1-0.13)
+    (name "rust-asn1")
+    (version "0.8.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "asn1" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1caacmvgn463n1yc4ac6vl9phrh56ij7l3xgf6qgzbpyjm8v7zyg"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-asn1-derive" ,rust-asn1-derive-0.8)
+        ("rust-chrono" ,rust-chrono-0.4))
+       #:cargo-development-inputs
+       (("rust-libc" ,rust-libc-0.2))))))
+
 (define-public rust-as-slice-0.1
   (package
     (name "rust-as-slice")
@@ -5654,8 +5733,42 @@ RFC4648 Base32 or in Crockford Base32.")
 c6e7d37.  However, this package works only up to 128 bytes.")
     (license license:expat)))
 
+(define-public rust-base64-0.21
+  (package
+    (name "rust-base64")
+    (version "0.21.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "base64" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0sidjip5b33sr6w7kasfj9qxpbda41nw0x4gjjk55g55a6mdv954"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.4)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-rstest" ,rust-rstest-0.15)
+        ("rust-rstest-reuse" ,rust-rstest-reuse-0.4)
+        ("rust-structopt" ,rust-structopt-0.3))
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'relax-requirements
+                    (lambda _
+                      (substitute* "Cargo.toml"
+                        (("0.12.0")
+                         ,(package-version rust-rstest-0.15))
+                        (("0.3.0")
+                         ,(package-version rust-rstest-reuse-0.4))))))))
+    (home-page "https://github.com/marshallpierce/rust-base64")
+    (synopsis "Encodes and decodes base64 as bytes or utf8")
+    (description
+     "This package encodes and decodes base64 as bytes or utf8.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-base64-0.13
   (package
+    (inherit rust-base64-0.21)
     (name "rust-base64")
     (version "0.13.0")
     (source
@@ -5666,7 +5779,6 @@ c6e7d37.  However, this package works only up to 128 bytes.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "1z82g23mbzjgijkpcrilc7nljpxpvpf7zxf6iyiapkgka2ngwkch"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-development-inputs
@@ -5674,17 +5786,12 @@ c6e7d37.  However, this package works only up to 128 bytes.")
         ("rust-rand" ,rust-rand-0.6)
         ("rust-structopt" ,rust-structopt-0.3))
        #:phases
-        (modify-phases %standard-phases
+       (modify-phases %standard-phases
          (add-after 'unpack 'fix-criterion-minor-version
-          (lambda* _
-           (substitute* "Cargo.toml"
-             (("0\\.3\\.2")
-              ,(package-version rust-criterion-0.3))))))))
-    (home-page "https://github.com/marshallpierce/rust-base64")
-    (synopsis "Encodes and decodes base64 as bytes or utf8")
-    (description
-     "This package encodes and decodes base64 as bytes or utf8.")
-    (license (list license:expat license:asl2.0))))
+           (lambda* _
+             (substitute* "Cargo.toml"
+               (("0\\.3\\.2")
+                ,(package-version rust-criterion-0.3))))))))))
 
 (define-public rust-base64-0.12
   (package
@@ -6068,17 +6175,17 @@ that uses Serde for transforming structs into bytes and vice versa!")
        (("rust-serde-bytes" ,rust-serde-bytes-0.10)
         ("rust-serde-derive" ,rust-serde-derive-1))))))
 
-(define-public rust-bindgen-0.59
+(define-public rust-bindgen-0.64
   (package
     (name "rust-bindgen")
-    (version "0.59.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (crate-uri "bindgen" version))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "1f4fpycxmbrqk8r2x9brhfgjh86mzc6bngn4a9631x78b2jaklib"))))
+    (version "0.64.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "bindgen" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1d0zmfc5swjgaydbamxb4xm687ahgv18dbcpvrzbf39665h3w964"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -6086,8 +6193,6 @@ that uses Serde for transforming structs into bytes and vice versa!")
        (("rust-bitflags" ,rust-bitflags-1)
         ("rust-cexpr" ,rust-cexpr-0.6)
         ("rust-clang-sys" ,rust-clang-sys-1)
-        ("rust-clap" ,rust-clap-2)
-        ("rust-env-logger" ,rust-env-logger-0.9)
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-lazycell" ,rust-lazycell-1)
         ("rust-log" ,rust-log-0.4)
@@ -6097,6 +6202,7 @@ that uses Serde for transforming structs into bytes and vice versa!")
         ("rust-regex" ,rust-regex-1)
         ("rust-rustc-hash" ,rust-rustc-hash-1)
         ("rust-shlex" ,rust-shlex-1)
+        ("rust-syn" ,rust-syn-1)
         ("rust-which" ,rust-which-4))))
     (home-page "https://rust-lang.github.io/rust-bindgen/")
     (synopsis "Generate Rust FFI bindings to C and C++ libraries")
@@ -6104,6 +6210,19 @@ that uses Serde for transforming structs into bytes and vice versa!")
 bindings to C and C++ libraries.")
     (license license:bsd-3)))
 
+(define-public rust-bindgen-0.59
+  (package
+    (inherit rust-bindgen-0.64)
+    (name "rust-bindgen")
+    (version "0.59.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bindgen" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1f4fpycxmbrqk8r2x9brhfgjh86mzc6bngn4a9631x78b2jaklib"))))))
+
 (define-public rust-bindgen-0.58
   (package
     (inherit rust-bindgen-0.59)
@@ -8465,8 +8584,33 @@ of built-in fundamental numeric types.")
      "This package provides a library for interaction with units of bytes.")
     (license license:expat)))
 
+(define-public rust-bytecheck-0.6
+  (package
+    (name "rust-bytecheck")
+    (version "0.6.9")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "bytecheck" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0vs0a8p3bpaz3vc15zknqkd5ajgzgswf2bmd1mbwdbdm28naq76i"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-bytecheck-derive" ,rust-bytecheck-derive-0.6)
+        ("rust-ptr-meta" ,rust-ptr-meta-0.1)
+        ("rust-simdutf8" ,rust-simdutf8-0.1)
+        ("rust-uuid" ,rust-uuid-1))))
+    (home-page "https://github.com/rkyv/bytecheck")
+    (synopsis "Type validation framework")
+    (description "This package provides a type validation framework for
+Rust.")
+    (license license:expat)))
+
 (define-public rust-bytecheck-0.5
   (package
+    (inherit rust-bytecheck-0.6)
     (name "rust-bytecheck")
     (version "0.5.2")
     (source
@@ -8476,22 +8620,40 @@ of built-in fundamental numeric types.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0q11ap6nqj0rsc8ypwjh918916zlrcrzdgqm175gnpb2yn9axyh1"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bytecheck-derive" ,rust-bytecheck-derive-0.5)
         ("rust-log" ,rust-log-0.4)
         ("rust-ptr-meta" ,rust-ptr-meta-0.1)
-        ("rust-simdutf8" ,rust-simdutf8-0.1))))
+        ("rust-simdutf8" ,rust-simdutf8-0.1))))))
+
+(define-public rust-bytecheck-derive-0.6
+  (package
+    (name "rust-bytecheck-derive")
+    (version "0.6.9")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "bytecheck_derive" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1gxr63mi91rrjzfzcb8pfwsnarp9i2w1n168nc05aq4fx7mpdr8k"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
     (home-page "https://github.com/rkyv/bytecheck")
-    (synopsis "Type validation framework")
-    (description "This package provides a type validation framework for
-Rust.")
+    (synopsis "Derive macro for bytecheck")
+    (description "This package provides a Derive macro for bytecheck, the type
+validation framework for Rust.")
     (license license:expat)))
 
 (define-public rust-bytecheck-derive-0.5
   (package
+    (inherit rust-bytecheck-derive-0.6)
     (name "rust-bytecheck-derive")
     (version "0.5.2")
     (source
@@ -8501,17 +8663,11 @@ Rust.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0grbkwwv5j91n7zrimci6fh4k79flxga3mkjg50jysnyraizi088"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-proc-macro2" ,rust-proc-macro2-1)
         ("rust-quote" ,rust-quote-1)
-        ("rust-syn" ,rust-syn-1))))
-    (home-page "https://github.com/rkyv/bytecheck")
-    (synopsis "Derive macro for bytecheck")
-    (description "This package provides a Derive macro for bytecheck, the type
-validation framework for Rust.")
-    (license license:expat)))
+        ("rust-syn" ,rust-syn-1))))))
 
 (define-public rust-bytecount-0.6
   (package
@@ -8585,33 +8741,10 @@ in a byte slice, fast.")
         ("rust-quickcheck" ,rust-quickcheck-0.6)
         ("rust-rand" ,rust-rand-0.4))))))
 
-(define-public rust-bytemuck-1.5
-  (package
-    (name "rust-bytemuck")
-    (version "1.5.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "bytemuck" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "18355qn3r9yp7ibg00r688sjx58g2qsjylwyq15w5b41b46asjss"))))
-    (build-system cargo-build-system)
-    (arguments
-     `(#:cargo-inputs
-       (("rust-bytemuck-derive" ,rust-bytemuck-derive-1))))
-    (home-page "https://github.com/Lokathor/bytemuck")
-    (synopsis "Crate for mucking around with piles of bytes")
-    (description
-     "This package provides a crate for mucking around with piles of bytes.")
-    (license license:zlib)))
-
 (define-public rust-bytemuck-1
   (package
     (name "rust-bytemuck")
-    (version "1.4.0")
+    (version "1.12.3")
     (source
       (origin
         (method url-fetch)
@@ -8620,7 +8753,7 @@ in a byte slice, fast.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "071043n73hwi55z9c55ga4v52v8a7ri56gqja8r98clkdyxns14j"))))
+          "0zwlaqkrp7r7bnl2n40x9ncpspb93d8xcckar61f54nal7csi8xa"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -8634,7 +8767,7 @@ in a byte slice, fast.")
 (define-public rust-bytemuck-derive-1
   (package
     (name "rust-bytemuck-derive")
-    (version "1.0.0")
+    (version "1.3.0")
     (source
       (origin
         (method url-fetch)
@@ -8642,7 +8775,7 @@ in a byte slice, fast.")
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "1k59b6g2d87nf32qwhp73vng3al0zklxg64iiwf0pkxy74xf5ni8"))))
+          "1d1j74dgq9b0wx73hvirsyzr3hmi7ip16bfvwc3q0bzic2wk7qjz"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -9312,10 +9445,10 @@ capabilities.")
         ("rust-error-chain" ,rust-error-chain-0.12)
         ("rust-libc" ,rust-libc-0.2))))))
 
-(define-public rust-cargo-0.53
+(define-public rust-cargo-0.60
   (package
     (name "rust-cargo")
-    (version "0.53.0")
+    (version "0.60.0")
     (source
      (origin
        (method url-fetch)
@@ -9324,7 +9457,7 @@ capabilities.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "12ns9v4dd8vnvsaqgd897h2zc19w00i5ii3slda653zbhfzm6zna"))))
+         "0xws4y7h4mmq8flnzsgf6fph2hx3rjgypyll4wzp15035ymly6dw"))))
     (build-system cargo-build-system)
     (arguments
      `(;; The test suite is disabled as the internal 'cargo-test-macro' and
@@ -9335,6 +9468,7 @@ capabilities.")
         ("rust-atty" ,rust-atty-0.2)
         ("rust-bytesize" ,rust-bytesize-1)
         ("rust-cargo-platform" ,rust-cargo-platform-0.1)
+        ("rust-cargo-util" ,rust-cargo-util-0.1)
         ("rust-clap" ,rust-clap-2)
         ("rust-core-foundation" ,rust-core-foundation-0.9)
         ("rust-crates-io" ,rust-crates-io-0.33)
@@ -9342,7 +9476,7 @@ capabilities.")
         ("rust-crypto-hash" ,rust-crypto-hash-0.3)
         ("rust-curl" ,rust-curl-0.4)
         ("rust-curl-sys" ,rust-curl-sys-0.4)
-        ("rust-env-logger" ,rust-env-logger-0.8)
+        ("rust-env-logger" ,rust-env-logger-0.9)
         ("rust-filetime" ,rust-filetime-0.2)
         ("rust-flate2" ,rust-flate2-1)
         ("rust-flate2" ,rust-flate2-1)
@@ -9364,22 +9498,23 @@ capabilities.")
         ("rust-memchr" ,rust-memchr-2)
         ("rust-miow" ,rust-miow-0.3)
         ("rust-num-cpus" ,rust-num-cpus-1)
-        ("rust-opener" ,rust-opener-0.4)
+        ("rust-opener" ,rust-opener-0.5)
         ("rust-openssl" ,rust-openssl-0.10)
+        ("rust-os-info" ,rust-os-info-3)
         ("rust-percent-encoding" ,rust-percent-encoding-2)
         ("rust-pretty-env-logger" ,rust-pretty-env-logger-0.4)
         ("rust-rand" ,rust-rand-0.8)
         ("rust-rustc-workspace-hack" ,rust-rustc-workspace-hack-1)
-        ("rust-rustfix" ,rust-rustfix-0.5)
+        ("rust-rustfix" ,rust-rustfix-0.6)
         ("rust-same-file" ,rust-same-file-1)
         ("rust-semver" ,rust-semver-0.10)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-ignored" ,rust-serde-ignored-0.1)
         ("rust-serde-json" ,rust-serde-json-1)
         ("rust-shell-escape" ,rust-shell-escape-0.1)
+        ("rust-socket2" ,rust-socket2-0.4)
         ("rust-strip-ansi-escapes" ,rust-strip-ansi-escapes-0.1)
         ("rust-tar" ,rust-tar-0.4)
-        ("rust-tar" ,rust-tar-0.4)
         ("rust-tempfile" ,rust-tempfile-3)
         ("rust-termcolor" ,rust-termcolor-1)
         ("rust-toml" ,rust-toml-0.5)
@@ -9587,7 +9722,7 @@ optional dependency graph analysis.")
 (define-public rust-cargo-platform-0.1
   (package
     (name "rust-cargo-platform")
-    (version "0.1.1")
+    (version "0.1.2")
     (source
      (origin
        (method url-fetch)
@@ -9596,7 +9731,7 @@ optional dependency graph analysis.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1mzi60pf0z83qkzqp7jwd61xnqz2b5ydsj7rnnikbgyicd5989h2"))))
+         "09zsf76b9yr02jh17xq925xp1w824w2bwvb78fd0gpx5m1fq5nyb"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -9607,6 +9742,48 @@ optional dependency graph analysis.")
 supported by Cargo.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-cargo-util-0.1
+  (package
+    (name "rust-cargo-util")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cargo-util" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1sz0gzcyp9ycb4zwj69qs9gd8kn9hv9nh2dq42c59x5xccqph755"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/rust-lang/cargo")
+    (synopsis "Utilities for Cargo")
+    (description "Miscellaneous support code used by Cargo.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-cargon-0.0
+  (package
+    (name "rust-cargon")
+    (version "0.0.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "cargon" version))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1cszlab7jk736p0lb50ag4l9nv72m7j41bwrmygl0lr4iz0350w2"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-gcc" ,rust-gcc-0.3))))
+    (home-page "https://github.com/bryant/argon2rs")
+    (synopsis "Thin wrapper around the Argon2 C library")
+    (description
+     "This package provides a thin wrapper around the Argon2 C library.  It is
+used in argon2rs' bench suite.")
+    (license license:wtfpl2)))
+
 (define-public rust-cassowary-0.3
   (package
     (name "rust-cassowary")
@@ -9659,7 +9836,7 @@ box''.")
   (package
     (inherit rust-cast-0.3)
     (name "rust-cast")
-    (version "0.2.3")
+    (version "0.2.7")
     (source
      (origin
        (method url-fetch)
@@ -9668,12 +9845,11 @@ box''.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1c5z7zryj0zwnhdgs6rw5dfvnlwc1vm19jzrlgx5055alnwk952b"))))
+         "16p3bqi3qad1qdjgjc1r0x72iinj1aw2k8fw5zx2l51s52sdl92c"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
-       (("rust-rustc-version" ,rust-rustc-version-0.2))
+     `(#:cargo-inputs
+       (("rust-rustc-version" ,rust-rustc-version-0.4))
        #:cargo-development-inputs
        (("rust-quickcheck" ,rust-quickcheck-0.9))))))
 
@@ -9702,7 +9878,7 @@ box''.")
 (define-public rust-cc-1
   (package
     (name "rust-cc")
-    (version "1.0.73")
+    (version "1.0.79")
     (source
      (origin
        (method url-fetch)
@@ -9710,7 +9886,7 @@ box''.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "04ccylrjq94jssh8f7d7hxv64gs9f1m1jrsxb7wqgfxk4xljmzrg"))))
+         "07x93b8zbf3xc2dggdd460xlk1wg8lxm6yflwddxj8b15030klsh"))))
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #f
@@ -10161,7 +10337,7 @@ Encoding Standard.")
 (define-public rust-chrono-0.4
   (package
     (name "rust-chrono")
-    (version "0.4.19")
+    (version "0.4.24")
     (source
      (origin
        (method url-fetch)
@@ -10170,22 +10346,25 @@ Encoding Standard.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0wyfl6c00vhfl562spnfcna3zkw8jqvcp652m9iskhl8j26dc2k7"))))
+         "0fv7idr8c7vdb0xi32w45a7pafnyzk7m0bknfggj5pva0qcmjg2f"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-js-sys" ,rust-js-sys-0.3)
-        ("rust-libc" ,rust-libc-0.2)
+       (("rust-arbitrary" ,rust-arbitrary-1)
+        ("rust-criterion" ,rust-criterion-0.4)
+        ("rust-iana-time-zone" ,rust-iana-time-zone-0.1)
+        ("rust-js-sys" ,rust-js-sys-0.3)
         ("rust-num-integer" ,rust-num-integer-0.1)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-pure-rust-locales" ,rust-pure-rust-locales-0.5)
+        ("rust-rkyv" ,rust-rkyv-0.7)
         ("rust-rustc-serialize" ,rust-rustc-serialize-0.3)
         ("rust-serde" ,rust-serde-1)
         ("rust-time" ,rust-time-0.1)
-        ("rust-wasm-bindgen" ,rust-wasm-bindgen-0.2))
+        ("rust-wasm-bindgen" ,rust-wasm-bindgen-0.2)
+        ("rust-winapi" ,rust-winapi-0.3))
        #:cargo-development-inputs
-       (("rust-bincode" ,rust-bincode-0.8)
-        ("rust-criterion" ,rust-criterion-0.3)
+       (("rust-bincode" ,rust-bincode-1)
         ("rust-doc-comment" ,rust-doc-comment-0.3)
         ("rust-num-iter" ,rust-num-iter-0.1)
         ("rust-serde-derive" ,rust-serde-derive-1)
@@ -10328,6 +10507,75 @@ transfer coding.")
        (sha256
         (base32 "11yghnd24w0i9p8g368c3pg7qh9nfz7kgri6pywja9pnmakj13a9"))))))
 
+(define-public rust-ciborium-0.2
+  (package
+    (name "rust-ciborium")
+    (version "0.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "ciborium" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "13vqkm88kaq8nvxhaj6qsl0gsc16rqsin014fx5902y6iib3ghdh"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-ciborium-io" ,rust-ciborium-io-0.2)
+        ("rust-ciborium-ll" ,rust-ciborium-ll-0.2)
+        ("rust-serde" ,rust-serde-1))
+       #:cargo-development-inputs
+       (("rust-hex" ,rust-hex-0.4)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-rstest" ,rust-rstest-0.11)
+        ("rust-serde-bytes" ,rust-serde-bytes-0.11))))
+    (home-page "https://github.com/enarx/ciborium")
+    (synopsis "Serde implementation of CBOR")
+    (description
+     "This package provides CBOR serialization implementations for serde.")
+    (license license:asl2.0)))
+
+(define-public rust-ciborium-io-0.2
+  (package
+    (name "rust-ciborium-io")
+    (version "0.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "ciborium-io" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0sdkk7l7pqi2nsbm9c6g8im1gb1qdd83l25ja9xwhg07mx9yfv9l"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/enarx/ciborium")
+    (synopsis "Simplified Read/Write traits")
+    (description
+     "This package provides simplified Read/Write traits for @code{no_std}
+usage.")
+    (license license:asl2.0)))
+
+(define-public rust-ciborium-ll-0.2
+  (package
+    (name "rust-ciborium-ll")
+    (version "0.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "ciborium-ll" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "06ygqh33k3hp9r9mma43gf189b6cyq62clk65f4w1q54nni30c11"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-development-inputs (("rust-hex" ,rust-hex-0.4))
+       #:cargo-inputs (("rust-ciborium-io" ,rust-ciborium-io-0.2)
+                       ("rust-half" ,rust-half-1))))
+    (home-page "https://github.com/enarx/ciborium")
+    (synopsis "Low-level CBOR codec primitives")
+    (description
+     "This package provides low-level primitives for parsing the CBOR codec.")
+    (license license:asl2.0)))
+
 (define-public rust-ci-info-0.3
   (package
     (name "rust-ci-info")
@@ -10776,28 +11024,45 @@ for programs written with Clap.")
 with Clap to generate Fig completion scripts.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-clap-lex-0.2
+(define-public rust-clap-lex-0.3
   (package
     (name "rust-clap-lex")
-    (version "0.2.4")
+    (version "0.3.0")
     (source (origin
               (method url-fetch)
-              (uri (crate-uri "clap-lex" version))
+              (uri (crate-uri "clap_lex" version))
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1ib1a9v55ybnaws11l63az0jgz5xiy24jkdgsmyl7grcm3sz4l18"))))
+                "1a4dzbnlxiamfsn0pnkhn7n9bdfjh66j9fxm6mmr7d227vvrhh8d"))))
     (build-system cargo-build-system)
     (arguments
-     (list #:cargo-inputs
-           `(("rust-os-str-bytes" ,rust-os-str-bytes-6))))
+     `(#:cargo-inputs (("rust-os-str-bytes" ,rust-os-str-bytes-6))))
     (home-page "https://github.com/clap-rs/clap/tree/master/clap_lex")
     (synopsis "Command line parser for Clap")
     (description
-     "This package provides a parser for command line options.  As opposed to a
-declarative parser, @code{rust-clap-lex} processes arguments as a stream of tokens.")
+     "This package provides a parser for command line options.  As opposed
+to a declarative parser, @code{rust-clap-lex} processes arguments as a
+stream of tokens.")
+    ;; The user can choose either license.
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-clap-lex-0.2
+  (package
+    (inherit rust-clap-lex-0.3)
+    (name "rust-clap-lex")
+    (version "0.2.4")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "clap-lex" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1ib1a9v55ybnaws11l63az0jgz5xiy24jkdgsmyl7grcm3sz4l18"))))
+    (build-system cargo-build-system)
+    (arguments
+     (list #:cargo-inputs `(("rust-os-str-bytes" ,rust-os-str-bytes-6))))))
+
 (define-public rust-clearscreen-1
   (package
     (name "rust-clearscreen")
@@ -11291,21 +11556,28 @@ CMAKE environmental variable is set.")
 (define-public rust-codespan-reporting-0.11
   (package
     (name "rust-codespan-reporting")
-    (version "0.11.0")
+    (version "0.11.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "codespan-reporting" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "04wwbn2c5rcfz3zn4kj7nyvpj37hn5cxh0m8w1r3af4ak6w45kn6"))))
+        (base32 "0vkfay0aqk73d33kh79k1kqxx06ka22894xhqi89crnc6c6jff1m"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-serde" ,rust-serde-1)
         ("rust-termcolor" ,rust-termcolor-1)
-        ("rust-unicode-width" ,rust-unicode-width-0.1))))
+        ("rust-unicode-width" ,rust-unicode-width-0.1))
+       #:cargo-development-inputs
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-insta" ,rust-insta-1)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-peg" ,rust-peg-0.6)
+        ("rust-rustyline" ,rust-rustyline-6)
+        ("rust-structopt" ,rust-structopt-0.3)
+        ("rust-unindent" ,rust-unindent-0.1))))
     (home-page "https://github.com/brendanzab/codespan")
     (synopsis "Beautiful diagnostic reporting for text-based programming languages")
     (description
@@ -11469,17 +11741,18 @@ colors.")
 (define-public rust-combine-4
   (package
     (name "rust-combine")
-    (version "4.6.3")
+    (version "4.6.6")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "combine" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0qihymj493vvs054gzpcmp4lzb098zrj2p9miv19yzvrrjm2gdsh"))))
+        (base32 "1m7s43cpi36vihmlda217xxgsdni3pbwgwfsa9zimdghhjfnxv9m"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
+     `(#:cargo-development-inputs
+       (("rust-partial-io" ,rust-partial-io-0.3))
        #:cargo-inputs
        (("rust-bytes" ,rust-bytes-1)
         ("rust-bytes" ,rust-bytes-0.5)
@@ -11491,7 +11764,7 @@ colors.")
         ("rust-tokio" ,rust-tokio-1)
         ("rust-tokio" ,rust-tokio-0.3)
         ("rust-tokio" ,rust-tokio-0.2)
-        ("rust-tokio-util" ,rust-tokio-util-0.6))))
+        ("rust-tokio-util" ,rust-tokio-util-0.7))))
     (home-page "https://github.com/Marwes/combine")
     (synopsis "Parser combinators on arbitrary streams with zero-copy support")
     (description
@@ -12312,8 +12585,32 @@ the browser's console.")
 const functions with conditional compilations.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-const-oid-0.9
+  (package
+    (name "rust-const-oid")
+    (version "0.9.1")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "const-oid" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0fyxvwnl3x6bxhy08a3g4ryf8mky6wnhwd6ll4g6mjxgfnk1ihyf"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t))
+    (home-page "https://github.com/RustCrypto/formats/tree/master/const-oid")
+    (synopsis "Implementation of the ISO/IEC Object Identifier (OID)")
+    (description
+     "This package is a const-friendly implementation of the ISO/IEC Object
+Identifier (OID) standard as defined in ITU X.660, with support for BER/DER
+encoding/decoding as well as heapless no_std (i.e., embedded) support.")
+    ;; The user can choose either license.
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-const-oid-0.6
   (package
+    (inherit rust-const-oid-0.9)
     (name "rust-const-oid")
     (version "0.6.2")
     (source
@@ -12323,15 +12620,7 @@ const functions with conditional compilations.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "12vv7csqqjj0x1l5mf51lgqiw76k5c3mb1yzfhfcqysks2j2lvwx"))))
-    (build-system cargo-build-system)
-    (arguments `(#:skip-build? #t))
-    (home-page "https://github.com/RustCrypto/formats/tree/master/const-oid")
-    (synopsis "Implementation of the ISO/IEC Object Identifier (OID)")
-    (description
-     "This package is a const-friendly implementation of the ISO/IEC Object
-Identifier (OID) standard as defined in ITU X.660, with support for BER/DER
-encoding/decoding as well as heapless no_std (i.e., embedded) support.")
-    (license (list license:asl2.0 license:expat))))
+    (arguments `(#:skip-build? #t))))
 
 (define-public rust-const-random-0.1
   (package
@@ -12494,8 +12783,42 @@ semantics than those provided by @code{as} or @code{From}/@code{Into}.")
     (description "Convert strings into any case.")
     (license license:expat)))
 
+(define-public rust-cookie-0.15
+  (package
+    (name "rust-cookie")
+    (version "0.15.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cookie" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "03gql9c2l0wg3hpfp67wg2ns21wysk0xsjxwdbjrf0s6grrcgwfm"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-aes-gcm" ,rust-aes-gcm-0.8)
+        ("rust-base64" ,rust-base64-0.13)
+        ("rust-hkdf" ,rust-hkdf-0.10)
+        ("rust-hmac" ,rust-hmac-0.10)
+        ("rust-percent-encoding" ,rust-percent-encoding-2)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-sha2" ,rust-sha2-0.9)
+        ("rust-subtle" ,rust-subtle-2)
+        ("rust-time" ,rust-time-0.2)
+        ("rust-version-check" ,rust-version-check-0.9))))
+    (home-page "https://github.com/SergioBenitez/cookie-rs")
+    (synopsis
+     "Crate for parsing HTTP cookie headers and managing a cookie jar")
+    (description
+     "Parse HTTP cookie headers and manage a cookie jar with this crate.
+It supports signed and private (encrypted + signed) jars.")
+    ;; The user can choose either license.
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-cookie-0.12
   (package
+    (inherit rust-cookie-0.15)
     (name "rust-cookie")
     (version "0.12.0")
     (source
@@ -12507,20 +12830,12 @@ semantics than those provided by @code{as} or @code{From}/@code{Into}.")
        (sha256
         (base32
          "1mdvqixahcywvqp0y8k2skkgbpfhsp0w73l9mz93dcrx1gq091l8"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-base64" ,rust-base64-0.10)
         ("rust-ring" ,rust-ring-0.14)
         ("rust-time" ,rust-time-0.1)
-        ("rust-url" ,rust-url-1))))
-    (home-page "https://github.com/SergioBenitez/cookie-rs")
-    (synopsis
-     "Crate for parsing HTTP cookie headers and managing a cookie jar")
-    (description
-     "Parse HTTP cookie headers and manage a cookie jar with this crate.
-It supports signed and private (encrypted + signed) jars.")
-    (license (list license:asl2.0 license:expat))))
+        ("rust-url" ,rust-url-1))))))
 
 (define-public rust-cookie-0.11
   (package
@@ -12640,36 +12955,6 @@ contents of the OS-level clipboard.")
 numbers using the CORDIC method.")
     (license license:bsd-3)))
 
-(define-public rust-cookie-0.15
-  (package
-    (name "rust-cookie")
-    (version "0.15.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (crate-uri "cookie" version))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "03gql9c2l0wg3hpfp67wg2ns21wysk0xsjxwdbjrf0s6grrcgwfm"))))
-    (build-system cargo-build-system)
-    (arguments
-     `(#:cargo-inputs
-       (("rust-aes-gcm" ,rust-aes-gcm-0.8)
-        ("rust-base64" ,rust-base64-0.13)
-        ("rust-hkdf" ,rust-hkdf-0.10)
-        ("rust-hmac" ,rust-hmac-0.10)
-        ("rust-percent-encoding" ,rust-percent-encoding-2)
-        ("rust-rand" ,rust-rand-0.8)
-        ("rust-sha2" ,rust-sha2-0.9)
-        ("rust-subtle" ,rust-subtle-2)
-        ("rust-time" ,rust-time-0.2)
-        ("rust-version-check" ,rust-version-check-0.9))))
-    (home-page "https://github.com/SergioBenitez/cookie-rs")
-    (synopsis "HTTP cookie parsing and cookie jar management")
-    (description "This package provides HTTP cookie parsing and cookie jar
-management.  It supports signed and private (encrypted, authenticated) jars.")
-    (license (list license:expat license:asl2.0))))
-
 (define-public rust-core2-0.3
   (package
     (name "rust-core2")
@@ -12912,14 +13197,14 @@ intrinsics.")
 (define-public rust-core-foundation-sys-0.8
   (package
     (name "rust-core-foundation-sys")
-    (version "0.8.2")
+    (version "0.8.3")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "core-foundation-sys" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "06wq7yb7mlkc4h2kbc0yjfi0xv44z4snzdpr7c1l0zm4hi91n8pa"))))
+        (base32 "1p5r2wckarkpkyc4z83q08dwpvcafrb1h6fxfa3qnikh8szww9sq"))))
     (build-system cargo-build-system)
     (home-page "https://github.com/servo/core-foundation-rs")
     (synopsis "Bindings to Core Foundation for macOS")
@@ -13234,7 +13519,7 @@ to the @code{is_x86_feature_detected!} macro.")
 (define-public rust-crates-io-0.33
   (package
     (name "rust-crates-io")
-    (version "0.33.0")
+    (version "0.33.1")
     (source
      (origin
        (method url-fetch)
@@ -13243,7 +13528,7 @@ to the @code{is_x86_feature_detected!} macro.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "147mggf85fz77vsrzsvsxxwid4f4fg30zwfyirx7sl1k7y33hw91"))))
+         "0nmpzr697a6v12ljwpmjrhqpmkf784nsm8m1g6jwadmkq96p3mxj"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -13356,8 +13641,59 @@ final xor value.  It has many built-in CRC functions.")
 Rust.")
     (license license:bsd-3)))
 
+(define-public rust-criterion-0.4
+  (package
+    (name "rust-criterion")
+    (version "0.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "criterion" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1jsl4r0yc3fpkyjbi8aa1jrm69apqq9rxwnjnd9brqmaq44nxiz7"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-anes" ,rust-anes-0.1)
+        ("rust-async-std" ,rust-async-std-1)
+        ("rust-atty" ,rust-atty-0.2)
+        ("rust-cast" ,rust-cast-0.3)
+        ("rust-ciborium" ,rust-ciborium-0.2)
+        ("rust-clap" ,rust-clap-3)
+        ("rust-criterion-plot" ,rust-criterion-plot-0.5)
+        ("rust-csv" ,rust-csv-1)
+        ("rust-futures" ,rust-futures-0.3)
+        ("rust-itertools" ,rust-itertools-0.10)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-num-traits" ,rust-num-traits-0.2)
+        ("rust-oorandom" ,rust-oorandom-11.1)
+        ("rust-plotters" ,rust-plotters-0.3)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-smol" ,rust-smol-1)
+        ("rust-tinytemplate" ,rust-tinytemplate-1)
+        ("rust-tokio" ,rust-tokio-1)
+        ("rust-walkdir" ,rust-walkdir-2))
+       #:cargo-development-inputs
+       (("rust-approx" ,rust-approx-0.5)
+        ("rust-futures" ,rust-futures-0.3)
+        ("rust-quickcheck" ,rust-quickcheck-1)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-tempfile" ,rust-tempfile-3))))
+    (home-page "https://bheisler.github.io/criterion.rs/book/index.html")
+    (synopsis "Statistics-driven micro-benchmarking library")
+    (description
+     "This package provides a statistics-driven micro-benchmarking library.")
+    ;; The user can choose either license.
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-criterion-0.3
   (package
+    (inherit rust-criterion-0.4)
     (name "rust-criterion")
     (version "0.3.5")
     (source
@@ -13368,7 +13704,6 @@ Rust.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "044d2x7cxfvw2g558lzyllcv7jcdkw9xmacmb0nzx8pv4pyxl10n"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-async-std" ,rust-async-std-1)
@@ -13398,12 +13733,7 @@ Rust.")
         ("rust-futures" ,rust-futures-0.3)
         ("rust-quickcheck" ,rust-quickcheck-1)
         ("rust-rand" ,rust-rand-0.8)
-        ("rust-tempfile" ,rust-tempfile-3))))
-    (home-page "https://bheisler.github.io/criterion.rs/book/index.html")
-    (synopsis "Statistics-driven micro-benchmarking library")
-    (description
-     "This package provides a statistics-driven micro-benchmarking library.")
-    (license (list license:asl2.0 license:expat))))
+        ("rust-tempfile" ,rust-tempfile-3))))))
 
 (define-public rust-criterion-0.2
   (package
@@ -13468,8 +13798,35 @@ Rust.")
 criterion.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-criterion-plot-0.5
+  (package
+    (name "rust-criterion-plot")
+    (version "0.5.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "criterion-plot" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1c866xkjqqhzg4cjvg01f8w6xc1j3j7s58rdksl52skq89iq4l3b"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-development-inputs
+       (("rust-itertool-num" ,rust-itertools-num-0.1)
+        ("rust-num-complex" ,rust-num-complex-0.4)
+        ("rust-rand" ,rust-rand-0.8))
+       #:cargo-inputs
+       (("rust-cast" ,rust-cast-0.3)
+        ("rust-itertools" ,rust-itertools-0.10))))
+    (home-page "https://github.com/bheisler/criterion.rs")
+    (synopsis "Criterion's plotting library")
+    (description "This package provides criterion's plotting library.")
+    ;; The user can choose either license.
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-criterion-plot-0.4
   (package
+    (inherit rust-criterion-plot-0.5)
     (name "rust-criterion-plot")
     (version "0.4.4")
     (source
@@ -13480,7 +13837,6 @@ criterion.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "0mys2zkizh5az6ax77m5aqifk0vz35rn0a6wykvmjx9gkzg9c2fh"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-cast" ,rust-cast-0.2)
@@ -13488,11 +13844,7 @@ criterion.")
        #:cargo-development-inputs
        (("rust-itertools-num" ,rust-itertools-num-0.1)
         ("rust-num-complex" ,rust-num-complex-0.2)
-        ("rust-rand" ,rust-rand-0.4))))
-    (home-page "https://github.com/bheisler/criterion.rs")
-    (synopsis "Criterion's plotting library")
-    (description "This package provides criterion's plotting library.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-rand" ,rust-rand-0.4))))))
 
 (define-public rust-criterion-plot-0.3
   (package
@@ -13521,14 +13873,14 @@ criterion.")
 (define-public rust-critical-section-1
   (package
     (name "rust-critical-section")
-    (version "1.1.0")
+    (version "1.1.1")
     (source (origin
               (method url-fetch)
               (uri (crate-uri "critical-section" version))
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "06p0j7yy289six3k7j3m3f1phk9n7h9x2cd8fjfbw6fhh4aaaayh"))))
+                "0ljyfwzl8avwsr42kqmg7mmcw01d5rn1m8gnw48y2j95bnns0j35"))))
     (build-system cargo-build-system)
     (home-page "https://github.com/rust-embedded/critical-section")
     (synopsis "Critical section abstraction")
@@ -13562,24 +13914,25 @@ criterion.")
 (define-public rust-crossbeam-0.8
   (package
     (name "rust-crossbeam")
-    (version "0.8.0")
+    (version "0.8.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "crossbeam" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "103xnwzkk1zd9kiy6f0f131ap433qfkc757wyrha5bxa7pmsc0gx"))))
+        (base32 "0b0s0ans81ja6gm7awlaw3k2rqywzmhq4mm9ra8yaak16q6sy098"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-cfg-if" ,rust-cfg-if-1)
         ("rust-crossbeam-channel" ,rust-crossbeam-channel-0.5)
         ("rust-crossbeam-deque" ,rust-crossbeam-deque-0.8)
         ("rust-crossbeam-epoch" ,rust-crossbeam-epoch-0.9)
         ("rust-crossbeam-queue" ,rust-crossbeam-queue-0.3)
-        ("rust-crossbeam-utils" ,rust-crossbeam-utils-0.8))))
+        ("rust-crossbeam-utils" ,rust-crossbeam-utils-0.8))
+       #:cargo-development-inputs
+       (("rust-rand" ,rust-rand-0.8))))
     (home-page "https://github.com/crossbeam-rs/crossbeam")
     (synopsis "Tools for concurrent programming in Rust")
     (description "This package provides tools for concurrent programming.")
@@ -13639,7 +13992,7 @@ message passing.")
   (package
     (inherit rust-crossbeam-channel-0.5)
     (name "rust-crossbeam-channel")
-    (version "0.4.2")
+    (version "0.4.4")
     (source
       (origin
         (method url-fetch)
@@ -13648,7 +14001,7 @@ message passing.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "0qd05n5bcwafkmbzq1lspwrfi29xnzlw46qarg1sl0lwj68qdvfc"))))
+          "11zvmp8p94vaqp4xyhzymw8xndnpwq12x5qgvxkway7lprygwlxi"))))
     (arguments
      `(#:cargo-inputs
         (("rust-crossbeam-utils" ,rust-crossbeam-utils-0.7)
@@ -13683,18 +14036,17 @@ message passing.")
 (define-public rust-crossbeam-deque-0.8
   (package
     (name "rust-crossbeam-deque")
-    (version "0.8.0")
+    (version "0.8.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "crossbeam-deque" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1ad995vzq74k7jd1pgn9zxbacyzj9ii6l0svhlb2dxzy8vxnxbwl"))))
+        (base32 "1z6ifz35lyk0mw818xcl3brgss2k8islhgdmfk9s5fwjnr982pki"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-cfg-if" ,rust-cfg-if-1)
         ("rust-crossbeam-epoch" ,rust-crossbeam-epoch-0.9)
         ("rust-crossbeam-utils" ,rust-crossbeam-utils-0.8))))
@@ -13708,7 +14060,7 @@ message passing.")
   (package
     (inherit rust-crossbeam-deque-0.8)
     (name "rust-crossbeam-deque")
-    (version "0.7.3")
+    (version "0.7.4")
     (source
      (origin
        (method url-fetch)
@@ -13717,7 +14069,7 @@ message passing.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "11c2c0x5grdba3ah3g94yn6b8s47xi8qwm85h8hq5vmf9nbsy0lz"))))
+         "1v99xcdjk4zixvxnq7pssip670mlyhw1ma3qc88ca11jxnfz43y2"))))
     (arguments
      `(#:cargo-inputs
        (("rust-crossbeam-epoch" ,rust-crossbeam-epoch-0.8)
@@ -13729,24 +14081,26 @@ message passing.")
 (define-public rust-crossbeam-epoch-0.9
   (package
     (name "rust-crossbeam-epoch")
-    (version "0.9.1")
+    (version "0.9.13")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "crossbeam-epoch" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "17anyfg5azjpmcfidq6wn4phj9h0a0zqcxksi33w44akz4wsgam1"))))
+        (base32 "0nlxkmx3q93jvsshnmwaiich6bf7ddq1jzhzmaw4pxrf9hgsza81"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
-       (("rust-cfg-if" ,rust-cfg-if-1)
-        ("rust-const-fn" ,rust-const-fn-0.4)
+     `(#:cargo-inputs
+       (("rust-autocfg" ,rust-autocfg-1)
+        ("rust-cfg-if" ,rust-cfg-if-1)
         ("rust-crossbeam-utils" ,rust-crossbeam-utils-0.8)
-        ("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-memoffset" ,rust-memoffset-0.6)
-        ("rust-scopeguard" ,rust-scopeguard-1))))
+        ("rust-loom" ,rust-loom-0.5)
+        ("rust-memoffset" ,rust-memoffset-0.7)
+        ("rust-scopeguard" ,rust-scopeguard-1))
+       #:cargo-development-inputs
+       (("rust-rand" ,rust-rand-0.8)
+        ("rust-rustversion" ,rust-rustversion-1))))
     (home-page
      "https://github.com/crossbeam-rs/crossbeam/tree/master/crossbeam-epoch")
     (synopsis "Epoch-based garbage collection")
@@ -13782,19 +14136,21 @@ message passing.")
 (define-public rust-crossbeam-queue-0.3
   (package
     (name "rust-crossbeam-queue")
-    (version "0.3.6")
+    (version "0.3.8")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "crossbeam-queue" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "19ram1wp87i57w834hwl95mzz9g53qlzkraq6lvab629n21jbm0w"))))
+        (base32 "1p9s6n4ckwdgxkb7a8ay9zjzmgc8ppfbxix2vr07rwskibmb7kyi"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-cfg-if" ,rust-cfg-if-1)
-        ("rust-crossbeam-utils" ,rust-crossbeam-utils-0.8))))
+        ("rust-crossbeam-utils" ,rust-crossbeam-utils-0.8))
+       #:cargo-development-inputs
+       (("rust-rand" ,rust-rand-0.6))))
     (home-page
      "https://github.com/crossbeam-rs/crossbeam/tree/master/crossbeam-utils")
     (synopsis "Concurrent queues in Rust")
@@ -13846,20 +14202,22 @@ message passing.")
 (define-public rust-crossbeam-utils-0.8
   (package
     (name "rust-crossbeam-utils")
-    (version "0.8.11")
+    (version "0.8.14")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "crossbeam-utils" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1g426qw2j7czkbg0vw6mzifhgy1ng4qgpp2sn4vlamkvvi57v22i"))))
+        (base32 "17wjbnlj4whbdvc1syk2gfy8maqx01sg2hmqpdnjh9l7g7x6ddsg"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-cfg-if" ,rust-cfg-if-1)
-        ("rust-loom" ,rust-loom-0.5)
-        ("rust-once-cell" ,rust-once-cell-1))))
+        ("rust-loom" ,rust-loom-0.5))
+       #:cargo-development-inputs
+       (("rust-rand" ,rust-rand-0.8)
+        ("rust-rustversion" ,rust-rustversion-1))))
     (home-page
      "https://github.com/crossbeam-rs/crossbeam/tree/master/crossbeam-utils")
     (synopsis "Utilities for concurrent programming")
@@ -14194,24 +14552,26 @@ using const generics.")
 (define-public rust-crypto-common-0.1
   (package
     (name "rust-crypto-common")
-    (version "0.1.1")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "crypto-common" version))
-        (file-name (string-append name "-" version ".tar.gz"))
-        (sha256
-          (base32 "1l4q4ync13i056vjc775v0za8qh987da7yvrjj25q909cd9nngb8"))))
+    (version "0.1.6")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "crypto-common" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1cvby95a6xg7kxdz5ln3rl9xh66nz66w46mm3g56ri1z5x815yqv"))))
     (build-system cargo-build-system)
     (arguments
-      `(#:skip-build?
-        #t
-        #:cargo-inputs
-        (("rust-generic-array" ,rust-generic-array-0.14)
-         ("rust-rand-core" ,rust-rand-core-0.6))))
+     `(#:cargo-inputs
+       (("rust-generic-array" ,rust-generic-array-0.14)
+        ("rust-rand-core" ,rust-rand-core-0.6)
+        ("rust-typenum" ,rust-typenum-1))))
     (home-page "https://github.com/RustCrypto/traits")
     (synopsis "Common cryptographic traits")
-    (description "Common cryptographic traits")
+    (description
+     "This package contains a collection of traits which describe functionality
+of cryptographic primitives.")
+    ;; The user can choose either license.
     (license (list license:expat license:asl2.0))))
 
 (define-public rust-crypto-mac-0.11
@@ -14867,14 +15227,14 @@ use with bindgen.")
 (define-public rust-curl-0.4
   (package
     (name "rust-curl")
-    (version "0.4.34")
+    (version "0.4.43")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "curl" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0vkm6fyizf8m9yxpv3n5pm9ag3bwlyqa6nz2ga8qkzm5y4m1cs72"))))
+        (base32 "07v5s3qafyl9gnnlzbddgg5fzy41gncy00ahbbv46nr0xyp5bn1p"))))
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #false                  ;require internet access
@@ -14904,7 +15264,7 @@ requests")
 (define-public rust-curl-sys-0.4
   (package
     (name "rust-curl-sys")
-    (version "0.4.44+curl-7.77.0")
+    (version "0.4.53+curl-7.82.0")
     (source
       (origin
         (method url-fetch)
@@ -14912,7 +15272,7 @@ requests")
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "1wds1gi15fja0i8gjfgk0a6c17ljsv17jvlngh8ky69b6blqavab"))
+          "0lh398vd34c55afyw5csbxqmnp7caxgpgci3y89c60lmb9d914l0"))
         (modules '((guix build utils)))
         (snippet
          '(begin (delete-file-recursively "curl") #t))))
@@ -15003,7 +15363,7 @@ attributes.")
 (define-public rust-cxx-1
   (package
     (name "rust-cxx")
-    (version "1.0.49")
+    (version "1.0.86")
     (source
       (origin
         (method url-fetch)
@@ -15012,7 +15372,7 @@ attributes.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "0xj29zzd45bkk797902h22kppzmrzm7v9a2wijfiqr964vhrldk5"))))
+          "0yc5gz723hiwqk7waygj63655fh5vzq3551p1j2wyzc06xf0glai"))))
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #f  ; Cannot compile cxx-test-suite.
@@ -15063,7 +15423,7 @@ attributes.")
 (define-public rust-cxx-build-1
   (package
     (name "rust-cxx-build")
-    (version "1.0.49")
+    (version "1.0.86")
     (source
       (origin
         (method url-fetch)
@@ -15072,7 +15432,7 @@ attributes.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "0shmkgv3cnh06ws1p555znj1hh23phynaz73rgnz95gradsdwnwg"))))
+          "0w5a2wdkdh44gmi0psynaazx4j7d1947sr7nyaccayxjc4gjhi2h"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -15084,7 +15444,8 @@ attributes.")
         ("rust-scratch" ,rust-scratch-1)
         ("rust-syn" ,rust-syn-1))
        #:cargo-development-inputs
-       (("rust-cxx-gen" ,rust-cxx-gen-0.7)
+       (("rust-cxx" ,rust-cxx-1)
+        ("rust-cxx-gen" ,rust-cxx-gen-0.7)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (home-page "https://cxx.rs")
     (synopsis "C++ code generator")
@@ -15123,7 +15484,7 @@ crate into a Cargo build.")
 (define-public rust-cxx-gen-0.7
   (package
     (name "rust-cxx-gen")
-    (version "0.7.49")
+    (version "0.7.86")
     (source
       (origin
         (method url-fetch)
@@ -15132,12 +15493,11 @@ crate into a Cargo build.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "08v366jxd2vc8jc2cbvrga0866pwfcaq6hl8yylfx0vhs2n53j53"))))
+          "1z08a3c4xpnz91a4nc2b4f2kbmadjrrimr8awx1k4g0rmjdmq5mr"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-cc" ,rust-cc-1)
-        ("rust-codespan-reporting" ,rust-codespan-reporting-0.11)
+       (("rust-codespan-reporting" ,rust-codespan-reporting-0.11)
         ("rust-proc-macro2" ,rust-proc-macro2-1)
         ("rust-quote" ,rust-quote-1)
         ("rust-syn" ,rust-syn-1))))
@@ -15193,7 +15553,7 @@ crate into higher level tools.")
 (define-public rust-cxxbridge-flags-1
   (package
     (name "rust-cxxbridge-flags")
-    (version "1.0.49")
+    (version "1.0.86")
     (source
       (origin
         (method url-fetch)
@@ -15202,7 +15562,7 @@ crate into higher level tools.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "18cv8a8sgyiwfqspdyfq18jizf0rlhg90ibdl0zp8jhcv498s6gr"))))
+          "073qx3gnf8df9xzfy9xfcz9b79m0638x4a0isfq2fb527g4hpdb1"))))
     (build-system cargo-build-system)
     (home-page "https://github.com/dtolnay/cxx")
     (synopsis "Compiler configuration of the `cxx` crate")
@@ -15228,7 +15588,7 @@ crate (implementation detail).")
 (define-public rust-cxxbridge-macro-1
   (package
     (name "rust-cxxbridge-macro")
-    (version "1.0.49")
+    (version "1.0.86")
     (source
       (origin
         (method url-fetch)
@@ -15237,7 +15597,7 @@ crate (implementation detail).")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "0gkwvihw74dh8p3fz3552wnxanrpwmwfy38ylz2z8knjq0y8y4v3"))))
+          "19c7pjvjll72yb9wyrmpdylwqglizn8kayww8qcm24b2gvd1zrir"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -15725,7 +16085,7 @@ hexadecimal, base32, and base64.")
 (define-public rust-data-url-0.1
   (package
     (name "rust-data-url")
-    (version "0.1.0")
+    (version "0.1.1")
     (source
       (origin
         (method url-fetch)
@@ -15734,7 +16094,7 @@ hexadecimal, base32, and base64.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "176wa1n8h71iwyaxhar4sqwrgrvb5sxk26az0fy88vnxrsffjgyk"))))
+          "14z15yiyklp5dv0k0q6pd83irrn0y8hj9y3fj17akkrbf37byc1s"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -15965,7 +16325,7 @@ verifying the contents.")
 (define-public rust-decimal-2
   (package
     (name "rust-decimal")
-    (version "2.0.4")
+    (version "2.1.0")
     (source
       (origin
         (method url-fetch)
@@ -15974,7 +16334,7 @@ verifying the contents.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "1vb3i8vg1dxrw3kzbfiag3gg7rdjd73z80mwbwkq60vnphiqfig6"))))
+          "0k8ij9brz6kdk7j4hq916s85qrplpy3ixs9v9h1ibsxsj5zbg2js"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -16400,14 +16760,14 @@ Rust.")
 (define-public rust-derive-arbitrary-1
   (package
     (name "rust-derive-arbitrary")
-    (version "1.0.1")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "derive_arbitrary" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0nig0iydva7a9h9i9qyi6an9w5qjafmn3qlzvdqqiw0x2kp824jz"))))
+        (base32 "0zw12jc6k6aixqs6m2rsj56grhx2xjw2l8rhr8rj1wj897qdy0s9"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -18065,7 +18425,7 @@ Rust.")
 (define-public rust-dtoa-0.4
   (package
     (name "rust-dtoa")
-    (version "0.4.4")
+    (version "0.4.8")
     (source
       (origin
         (method url-fetch)
@@ -18073,9 +18433,8 @@ Rust.")
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "0phbm7i0dpn44gzi07683zxaicjap5064w62pidci4fhhciv8mza"))))
+          "1c5j0wz118dhrczx6spc5za7dnbfxablr4adyahg9aknrsc9i2an"))))
     (build-system cargo-build-system)
-    (arguments '(#:skip-build? #t))
     (home-page "https://github.com/dtolnay/dtoa")
     (synopsis "Fast functions for printing floating-point primitives")
     (description "This crate provides fast functions for printing
@@ -18086,7 +18445,7 @@ floating-point primitives to an @code{io::Write}.")
 (define-public rust-dtoa-short-0.3
   (package
     (name "rust-dtoa-short")
-    (version "0.3.2")
+    (version "0.3.3")
     (source
       (origin
         (method url-fetch)
@@ -18095,13 +18454,13 @@ floating-point primitives to an @code{io::Write}.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "1wkn7ziqffq8hj0a411lgn7674ackzdk734ikp230rmp2f2hn0jr"))))
+          "1mh22nwja3v8922h0hq77c29k1da634lvkn9cvg9xrqhmqlk7q5x"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-dtoa" ,rust-dtoa-0.4))
        #:cargo-development-inputs
-       (("rust-float-cmp" ,rust-float-cmp-0.3))))
+       (("rust-float-cmp" ,rust-float-cmp-0.4))))
     (home-page "https://github.com/upsuper/dtoa-short")
     (synopsis "Serialize float number and truncate to certain precision")
     (description
@@ -18462,7 +18821,7 @@ signing, and verification in pure Rust.")
 (define-public rust-either-1
   (package
     (name "rust-either")
-    (version "1.6.1")
+    (version "1.8.0")
     (source
      (origin
        (method url-fetch)
@@ -18471,11 +18830,11 @@ signing, and verification in pure Rust.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0mwl9vngqf5jvrhmhn9x60kr5hivxyjxbmby2pybncxfqhf4z3g7"))))
+         "15z70yaivlkpx27vzv99ibf8d2x5jp24yn69y0xi20w86v4c3rch"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs (("rust-serde" ,rust-serde-1))))
+     `(#:cargo-inputs (("rust-serde" ,rust-serde-1))
+       #:cargo-development-inputs (("rust-serde-json" ,rust-serde-json-1))))
     (home-page "https://github.com/bluss/either")
     (synopsis
      "Enum @code{Either} with variants @code{Left} and @code{Right}")
@@ -19022,7 +19381,7 @@ encodings.")
 (define-public rust-encoding-rs-0.8
   (package
     (name "rust-encoding-rs")
-    (version "0.8.28")
+    (version "0.8.31")
     (source
      (origin
        (method url-fetch)
@@ -19031,7 +19390,7 @@ encodings.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0rf0r99q4kgjrx22kx7pjyjg4lm21599y3ggvy3hzj2spi7h5pw0"))))
+         "0azc6rblf75vd862ymjahdfch27j1sshb7zynshrx7ywi5an6llq"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -19574,7 +19933,7 @@ deserialized from environment variables.")
 (define-public rust-erased-serde-0.3
   (package
     (name "rust-erased-serde")
-    (version "0.3.11")
+    (version "0.3.24")
     (source
      (origin
        (method url-fetch)
@@ -19583,16 +19942,17 @@ deserialized from environment variables.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1lgkpkk7nx6f24gmr3psyj8d2avc9701r9jyw1i4ssp10lbnv2yq"))))
+         "0zdaj96bf39h75rkdxkd1znik97s3j7m8ppgbxxfq5y0h59n1jp4"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-serde" ,rust-serde-1))
        #:cargo-development-inputs
-       (;("rust-serde-cbor" ,rust-serde-cbor-0.9)
+       (("rust-rustversion" ,rust-rustversion-1)
+        ("rust-serde-cbor" ,rust-serde-cbor-0.11)
         ("rust-serde-derive" ,rust-serde-derive-1)
-        ("rust-serde-json" ,rust-serde-json-1))))
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-trybuild" ,rust-trybuild-1))))
     (home-page "https://github.com/dtolnay/erased-serde")
     (synopsis "Type-erased Serialize and Serializer traits")
     (description
@@ -20110,20 +20470,28 @@ traits but without the boilerplate.")
 (define-public rust-eyre-0.6
   (package
     (name "rust-eyre")
-    (version "0.6.6")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (crate-uri "eyre" version))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "1f0fbmrcykp84av1yb1d4cqj28jwf0zg1z49a1cgw8vrcf7ms8mw"))))
+    (version "0.6.8")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "eyre" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1sy7x8p74jfx1mvj4ifl0lxkxaqvmswdgdr84y1dqb6055d6nasc"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
-       (("rust-indenter" ,rust-indenter-0.3)
-        ("rust-once-cell" ,rust-once-cell-1))))
+     `(#:cargo-inputs (("rust-indenter" ,rust-indenter-0.3)
+                       ("rust-once-cell" ,rust-once-cell-1)
+                       ("rust-pyo3" ,rust-pyo3-0.13))
+       #:cargo-development-inputs (("rust-anyhow" ,rust-anyhow-1)
+                                   ("rust-backtrace" ,rust-backtrace-0.3)
+                                   ("rust-futures" ,rust-futures-0.3)
+                                   ("rust-pyo3" ,rust-pyo3-0.13)
+                                   ("rust-rustversion" ,rust-rustversion-1)
+                                   ("rust-syn" ,rust-syn-1)
+                                   ("rust-thiserror" ,rust-thiserror-1)
+                                   ("rust-trybuild" ,rust-trybuild-1))))
+    (native-inputs (list python))
     (home-page "https://github.com/yaahc/eyre")
     (synopsis "Trait object based error handling type")
     (description
@@ -22077,7 +22445,7 @@ stabilized, and eventually removed.  This library reïnstates these traits.")
 (define-public rust-futf-0.1
   (package
     (name "rust-futf")
-    (version "0.1.4")
+    (version "0.1.5")
     (source
      (origin
        (method url-fetch)
@@ -22086,7 +22454,7 @@ stabilized, and eventually removed.  This library reïnstates these traits.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0fxc18bnabird5jl941nsd6d25vq8cn8barmz4d30dlkzbiir73w"))))
+         "0hvqk2r7v4fnc34hvc3vkri89gn52d5m9ihygmwn75l1hhp0whnz"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -22101,7 +22469,7 @@ stabilized, and eventually removed.  This library reïnstates these traits.")
 (define-public rust-futures-0.3
   (package
     (name "rust-futures")
-    (version "0.3.12")
+    (version "0.3.26")
     (source
      (origin
        (method url-fetch)
@@ -22110,7 +22478,7 @@ stabilized, and eventually removed.  This library reïnstates these traits.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0l7i1hcag46k5v34cbn5dk45gwxn5yy5rxcvmbaxhi02lnhm546s"))))
+         "115z5bqihd2jq75s8n7jxy4k83kpv67vhic4snch6d7h1wmpkqhk"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -22153,7 +22521,7 @@ featuring zero allocations, composability, and iterator-like interfaces.")
 (define-public rust-futures-channel-0.3
   (package
     (name "rust-futures-channel")
-    (version "0.3.12")
+    (version "0.3.26")
     (source
      (origin
        (method url-fetch)
@@ -22162,7 +22530,7 @@ featuring zero allocations, composability, and iterator-like interfaces.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0ihq3a3yc6ial3sw536q75hrhixq22xk6wn5qzpnxazgqxz1plzj"))))
+         "1xadcvj4hi6278hq6i0vnrsa231fyiylh2n03rx7d2ch79k1flrf"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -22204,7 +22572,7 @@ featuring zero allocations, composability, and iterator-like interfaces.")
 (define-public rust-futures-core-0.3
   (package
     (name "rust-futures-core")
-    (version "0.3.12")
+    (version "0.3.26")
     (source
      (origin
        (method url-fetch)
@@ -22213,9 +22581,12 @@ featuring zero allocations, composability, and iterator-like interfaces.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0r8ag0mkxx9cd74yrccjk31lph4gr6lhgb9di6rx39wdvrfi9rbr"))))
+         "02467z5mv0219hkrgmpvsb3h7vb8pg31s1j901h7vxg11x6zz47c"))))
     (build-system cargo-build-system)
-    (arguments '(#:skip-build? #t))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-portable-atomic" ,rust-portable-atomic-1))))
     (home-page "https://rust-lang.github.io/futures-rs")
     (synopsis "Core traits and types in for the @code{futures} library")
     (description "This package provides the core traits and types in for the
@@ -22271,7 +22642,7 @@ the computation on the threads themselves.")
 (define-public rust-futures-executor-0.3
   (package
     (name "rust-futures-executor")
-    (version "0.3.12")
+    (version "0.3.26")
     (source
      (origin
        (method url-fetch)
@@ -22280,7 +22651,7 @@ the computation on the threads themselves.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1ffr1zclhz60ql49n2pj44jhhk22yah41xwlpyb30jws03f9zrg9"))))
+         "03mm37yv235i2ifjfaacw5cl8cmiyirj8ap3d64fr5xblqshmpp8"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -22356,7 +22727,7 @@ intrusive collections.")
 (define-public rust-futures-io-0.3
   (package
     (name "rust-futures-io")
-    (version "0.3.12")
+    (version "0.3.26")
     (source
      (origin
        (method url-fetch)
@@ -22365,7 +22736,7 @@ intrusive collections.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0005hz30pdxlbdamhd0imixmxcjpwrfxxr27kljxh6i84lshbgi8"))))
+         "0cc5s3qdgls25rlm3zpdf9fdk6gwmfp0fiiph39b5bmjdwdkgf5z"))))
     (build-system cargo-build-system)
     (arguments `(#:skip-build? #t))
     (home-page "https://rust-lang.github.io/futures-rs")
@@ -22478,20 +22849,19 @@ and removes almost all unsafe code from it.")
 (define-public rust-futures-macro-0.3
   (package
     (name "rust-futures-macro")
-    (version "0.3.12")
+    (version "0.3.26")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "futures-macro" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1pgyb219ybh3fj3ig0h1c2b7k4cqldy95ifdpnd9yb9jvmdd51y2"))))
+        (base32 "0w3ahy69varlfw57rb2pag7jwngy771vvzmcag7mlfx3gpw3m9wm"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-proc-macro-hack" ,rust-proc-macro-hack-0.5)
-        ("rust-proc-macro2" ,rust-proc-macro2-1)
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
         ("rust-quote" ,rust-quote-1)
         ("rust-syn" ,rust-syn-1))))
     (home-page "https://rust-lang.github.io/futures-rs")
@@ -22565,7 +22935,7 @@ different @code{Future}s at once and handling the first one to complete.")
 (define-public rust-futures-sink-0.3
   (package
     (name "rust-futures-sink")
-    (version "0.3.12")
+    (version "0.3.26")
     (source
      (origin
        (method url-fetch)
@@ -22574,7 +22944,7 @@ different @code{Future}s at once and handling the first one to complete.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1mj22d4w6digh7wfp6jkr5fdcl9r138q41fxzm1yg8mx568cdxfa"))))
+         "0r43djzf0caz89c724ishpzxy59y6nw7ykfvh1nd9kz8nc5q447k"))))
     (build-system cargo-build-system)
     (arguments `(#:skip-build? #t))
     (home-page "https://rust-lang.github.io/futures-rs")
@@ -22610,18 +22980,17 @@ futures-rs library.")
 (define-public rust-futures-task-0.3
   (package
     (name "rust-futures-task")
-    (version "0.3.12")
+    (version "0.3.26")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "futures-task" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "11ldlpl7mis5crys731dj7s7npgigdgrzdm7mi2y86m8ivmhgphk"))))
+        (base32 "0rk3jg6lri1rrn03ns89cmw8lircbaf2i2d4mr10zc8hyqdrmxyw"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs (("rust-once-cell" ,rust-once-cell-1))))
+     `(#:skip-build? #t))
     (home-page "https://rust-lang.github.io/futures-rs")
     (synopsis "Tools for working with tasks")
     (description "This package provides tools for working with tasks.")
@@ -22630,7 +22999,7 @@ futures-rs library.")
 (define-public rust-futures-test-0.3
   (package
     (name "rust-futures-test")
-    (version "0.3.5")
+    (version "0.3.26")
     (source
      (origin
        (method url-fetch)
@@ -22638,16 +23007,19 @@ futures-rs library.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0v9r2mmgdbm0x4gppd5jzf4rss7439ivkqwi604m0r2il3zap6ci"))))
+         "0pbdzvbmzrnc67bpp7hbh7l5mavqifpgk2vhaprr0vlr6qrpcyi4"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
+     `(#:tests? #f          ; Doc tests fail.
+       #:cargo-inputs
        (("rust-futures-core" ,rust-futures-core-0.3)
         ("rust-futures-executor" ,rust-futures-executor-0.3)
         ("rust-futures-io" ,rust-futures-io-0.3)
+        ("rust-futures-macro" ,rust-futures-macro-0.3)
+        ("rust-futures-sink" ,rust-futures-sink-0.3)
         ("rust-futures-task" ,rust-futures-task-0.3)
         ("rust-futures-util" ,rust-futures-util-0.3)
-        ("rust-once-cell" ,rust-once-cell-1)
+        ("rust-pin-project" ,rust-pin-project-1)
         ("rust-pin-utils" ,rust-pin-utils-0.1))))
     (home-page "https://rust-lang.github.io/futures-rs")
     (synopsis "Test components built off futures-rs")
@@ -22734,7 +23106,7 @@ timeouts and delays with futures.")
 (define-public rust-futures-util-0.3
   (package
     (name "rust-futures-util")
-    (version "0.3.12")
+    (version "0.3.26")
     (source
      (origin
        (method url-fetch)
@@ -22742,7 +23114,7 @@ timeouts and delays with futures.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0jv25s07igmqavigdfzr02yw6j1q0vg8pw2p2vmgvcx4yb88qak3"))))
+        (base32 "1lbvdf6hq62yczd87glm6ih8h5qkagsl7xdiwhmqvwzymkins7cw"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -22757,8 +23129,6 @@ timeouts and delays with futures.")
         ("rust-memchr" ,rust-memchr-2)
         ("rust-pin-project-lite" ,rust-pin-project-lite-0.2)
         ("rust-pin-utils" ,rust-pin-utils-0.1)
-        ("rust-proc-macro-hack" ,rust-proc-macro-hack-0.5)
-        ("rust-proc-macro-nested" ,rust-proc-macro-nested-0.1)
         ("rust-slab" ,rust-slab-0.4)
         ("rust-tokio-io" ,rust-tokio-io-0.1))))
     (home-page "https://rust-lang.github.io/futures-rs")
@@ -23996,7 +24366,7 @@ libcurl, which is intended to be used with the @code{git2} crate.")
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-approx" ,rust-approx-0.5)
-        ("rust-bytemuck" ,rust-bytemuck-1.5)
+        ("rust-bytemuck" ,rust-bytemuck-1)
         ("rust-mint" ,rust-mint-0.5)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-rand" ,rust-rand-0.8)
@@ -24024,7 +24394,7 @@ graphics.")
      `(#:skip-build? #t  ; TODO: we need a more recent criterion
        #:cargo-inputs
        (("rust-approx" ,rust-approx-0.4)
-        ("rust-bytemuck" ,rust-bytemuck-1.5)
+        ("rust-bytemuck" ,rust-bytemuck-1)
         ("rust-mint" ,rust-mint-0.5)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-rand" ,rust-rand-0.8)
@@ -24051,7 +24421,7 @@ graphics.")
     (arguments
      `(#:skip-build? #t  ; TODO: we need a more recent criterion
        #:cargo-inputs
-       (("rust-bytemuck" ,rust-bytemuck-1.5)
+       (("rust-bytemuck" ,rust-bytemuck-1)
         ("rust-mint" ,rust-mint-0.5)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-rand" ,rust-rand-0.8)
@@ -24078,7 +24448,7 @@ graphics.")
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-bytemuck" ,rust-bytemuck-1.5)
+       (("rust-bytemuck" ,rust-bytemuck-1)
         ("rust-mint" ,rust-mint-0.5)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-rand" ,rust-rand-0.8)
@@ -24109,7 +24479,7 @@ graphics.")
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-bytemuck" ,rust-bytemuck-1.5)
+       (("rust-bytemuck" ,rust-bytemuck-1)
         ("rust-mint" ,rust-mint-0.5)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-rand" ,rust-rand-0.7)
@@ -25578,8 +25948,35 @@ consistent, and reasonably well performing.")
        #:cargo-inputs
        (("rust-unicode-segmentation" ,rust-unicode-segmentation-1))))))
 
+(define-public rust-hermit-abi-0.2
+  (package
+    (name "rust-hermit-abi")
+    (version "0.2.6")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "hermit-abi" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1iz439yz9qzk3rh9pqx2rz5c4107v3qbd7bppfsbzb1mzr02clgf"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-compiler-builtins" ,rust-compiler-builtins-0.1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-rustc-std-workspace-alloc" ,rust-rustc-std-workspace-alloc-1)
+        ("rust-rustc-std-workspace-core" ,rust-rustc-std-workspace-core-1))))
+    (home-page "https://github.com/hermitcore/rusty-hermit")
+    (synopsis "Small interface to call functions from RustyHermit")
+    (description
+     "Hermit-abi is small interface to call functions from the unikernel RustyHermit.
+It is used to build the target x86_64-unknown-hermit.")
+    ;; The user can choose either license.
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-hermit-abi-0.1
   (package
+    (inherit rust-hermit-abi-0.2)
     (name "rust-hermit-abi")
     (version "0.1.10")
     (source
@@ -25591,19 +25988,12 @@ consistent, and reasonably well performing.")
         (sha256
          (base32
           "0blmmzik5cs79ivq70s9gal8ypgzj50wnl2hwsaam46gjjbz2p3j"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
         (("rust-compiler-builtins" ,rust-compiler-builtins-0.1)
          ("rust-libc" ,rust-libc-0.2)
-         ("rust-rustc-std-workspace-core" ,rust-rustc-std-workspace-core-1))))
-    (home-page "https://github.com/hermitcore/rusty-hermit")
-    (synopsis "Small interface to call functions from RustyHermit")
-    (description
-     "Hermit-abi is small interface to call functions from the unikernel RustyHermit.
-It is used to build the target x86_64-unknown-hermit.")
-    (license (list license:expat license:asl2.0))))
+         ("rust-rustc-std-workspace-core" ,rust-rustc-std-workspace-core-1))))))
 
 (define-public rust-hex-0.4
   (package
@@ -26999,6 +27389,56 @@ with hyper.")
      "This package provides a Knuth-Liang hyphenation for a variety of languages.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-iana-time-zone-haiku-0.1
+  (package
+    (name "rust-iana-time-zone-haiku")
+    (version "0.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "iana-time-zone-haiku" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32 "1jix9qrqxclj9r4wkg7d3fr987d77vdg3qy2c5hl4ry19wlaw0q7"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-cxx" ,rust-cxx-1)
+        ("rust-cxx-build" ,rust-cxx-build-1))))
+    (home-page "https://github.com/strawlab/iana-time-zone")
+    (synopsis "IANA-time-zone support crate for Haiku OS")
+    (description
+     "This package provides iana-time-zone support crate for Haiku OS.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-iana-time-zone-0.1
+  (package
+    (name "rust-iana-time-zone")
+    (version "0.1.53")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "iana-time-zone" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0ra7nvai8n3alvljswacjbnhfcpivpi7xqbc5n048w18gdk25hb4"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f                      ; Not all files included.
+       #:cargo-inputs
+       (("rust-android-system-properties" ,rust-android-system-properties-0.1)
+        ("rust-core-foundation-sys" ,rust-core-foundation-sys-0.8)
+        ("rust-iana-time-zone-haiku" ,rust-iana-time-zone-haiku-0.1)
+        ("rust-js-sys" ,rust-js-sys-0.3)
+        ("rust-wasm-bindgen" ,rust-wasm-bindgen-0.2)
+        ("rust-winapi" ,rust-winapi-0.3))
+       #:cargo-development-inputs
+       (("rust-wasm-bindgen-test" ,rust-wasm-bindgen-test-0.3))))
+    (home-page "https://github.com/strawlab/iana-time-zone")
+    (synopsis "IANA time zone")
+    (description
+     "This package provides the IANA time zone for the current system.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-ident-case-1
   (package
     (name "rust-ident-case")
@@ -27400,28 +27840,28 @@ that efficiently appends and removes common indentation after every newline.")
 (define-public rust-indexmap-1
   (package
     (name "rust-indexmap")
-    (version "1.7.0")
+    (version "1.9.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "indexmap" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "19b2zwfajhsfcgny0clv8y4jppy704znfhv8nv2dw9a18l2kcqxw"))))
+        (base32 "16dkr2h5p379jcr8rnb420396yvzid2myirc2w70zcf43yffg18q"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-autocfg" ,rust-autocfg-1)
-        ("rust-hashbrown" ,rust-hashbrown-0.11)
-        ("rust-rayon" ,rust-rayon-1)
+       (("rust-arbitrary" ,rust-arbitrary-1)
+        ("rust-quickcheck" ,rust-quickcheck-1)
+        ("rust-rustc-rayon" ,rust-rustc-rayon-0.4)
         ("rust-serde" ,rust-serde-1))
        #:cargo-development-inputs
        (("rust-fnv" ,rust-fnv-1)
         ("rust-fxhash" ,rust-fxhash-0.2)
-        ("rust-itertools" ,rust-itertools-0.9)
+        ("rust-itertools" ,rust-itertools-0.10)
         ("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-quickcheck" ,rust-quickcheck-0.9)
-        ("rust-rand" ,rust-rand-0.7)
+        ("rust-quickcheck" ,rust-quickcheck-1)
+        ("rust-rand" ,rust-rand-0.8)
         ("rust-serde-derive" ,rust-serde-derive-1))))
     (home-page "https://github.com/bluss/indexmap")
     (synopsis "Hash table with consistent order and fast iteration")
@@ -27435,6 +27875,33 @@ removals, and it allows lookup of its elements by either hash table key
 or numerical index.  A corresponding hash set type is also provided.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-indexmap-1.7
+  (package
+    (inherit rust-indexmap-1)
+    (name "rust-indexmap")
+    (version "1.7.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "indexmap" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "19b2zwfajhsfcgny0clv8y4jppy704znfhv8nv2dw9a18l2kcqxw"))))
+    (arguments
+     `(#:cargo-inputs
+       (("rust-autocfg" ,rust-autocfg-1)
+        ("rust-hashbrown" ,rust-hashbrown-0.11)
+        ("rust-rayon" ,rust-rayon-1)
+        ("rust-serde" ,rust-serde-1))
+       #:cargo-development-inputs
+       (("rust-fnv" ,rust-fnv-1)
+        ("rust-fxhash" ,rust-fxhash-0.2)
+        ("rust-itertools" ,rust-itertools-0.9)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-quickcheck" ,rust-quickcheck-0.9)
+        ("rust-rand" ,rust-rand-0.7)
+        ("rust-serde-derive" ,rust-serde-derive-1))))))
+
 (define-public rust-indicatif-0.16
   (package
     (name "rust-indicatif")
@@ -28080,8 +28547,38 @@ versions < 0.2.")
     ;; Either license can be chosen at the users option.
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-io-lifetimes-1
+  (package
+    (name "rust-io-lifetimes")
+    (version "1.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "io-lifetimes" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0g76f1c4w3cgyl6qn3kfmi7srphrmjhx3a0rl4qks4ib4n9jl4a6"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs (("rust-async-std" ,rust-async-std-1)
+                       ("rust-fs-err" ,rust-fs-err-2)
+                       ("rust-libc" ,rust-libc-0.2)
+                       ("rust-mio" ,rust-mio-0.8)
+                       ("rust-os-pipe" ,rust-os-pipe-1)
+                       ("rust-socket2" ,rust-socket2-0.4)
+                       ("rust-tokio" ,rust-tokio-1)
+                       ("rust-windows-sys" ,rust-windows-sys-0.42))))
+    (home-page "https://github.com/sunfishcode/io-lifetimes")
+    (synopsis "Low-level I/O ownership and borrowing library")
+    (description
+     "This package provides a low-level I/O ownership and borrowing
+library.")
+    ;; The user can choose either license.
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-io-lifetimes-0.7
   (package
+    (inherit rust-io-lifetimes-1)
     (name "rust-io-lifetimes")
     (version "0.7.5")
     (source (origin
@@ -28091,7 +28588,6 @@ versions < 0.2.")
               (sha256
                (base32
                 "0x10ak2iy4p24g7bnp1rfrq6aqddjlzkykgwjdayi7nl97wmxkjr"))))
-    (build-system cargo-build-system)
     (arguments
      (list #:cargo-inputs
            `(("rust-async-std" ,rust-async-std-1)
@@ -28101,14 +28597,7 @@ versions < 0.2.")
              ("rust-os-pipe" ,rust-os-pipe-1)
              ("rust-socket2" ,rust-socket2-0.4)
              ("rust-tokio" ,rust-tokio-1)
-             ("rust-windows-sys" ,rust-windows-sys-0.42))))
-    (home-page "https://github.com/sunfishcode/io-lifetimes")
-    (synopsis "Low-level I/O ownership and borrowing library")
-    (description
-     "This package provides a low-level I/O ownership and borrowing
-library.")
-    (license (list license:asl2.0
-                   license:expat))))
+             ("rust-windows-sys" ,rust-windows-sys-0.42))))))
 
 (define-public rust-iovec-0.1
   (package
@@ -28374,6 +28863,31 @@ and locking in the core framework.")
 whether or not a given path points to an executable file.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-is-terminal-0.4
+  (package
+    (name "rust-is-terminal")
+    (version "0.4.1")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "is-terminal" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0c2322dg9s35h87ln33w6qsjlgplhzza89rwmkvac4r9ikvhjxlj"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-hermit-abi" ,rust-hermit-abi-0.2)
+        ("rust-io-lifetimes" ,rust-io-lifetimes-1)
+        ("rust-rustix" ,rust-rustix-0.36)
+        ("rust-windows-sys" ,rust-windows-sys-0.42))))
+    (home-page "https://github.com/sunfishcode/is-terminal")
+    (synopsis "Test whether a given stream is a terminal")
+    (description
+     "@code{is-terminal} is a simple utility that tests whether a given
+stream runs in a TTY.")
+    (license license:expat)))
+
 (define-public rust-iso8601-0.3
   (package
     (name "rust-iso8601")
@@ -28398,14 +28912,14 @@ whether or not a given path points to an executable file.")
 (define-public rust-itertools-0.10
   (package
     (name "rust-itertools")
-    (version "0.10.3")
+    (version "0.10.5")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "itertools" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1qy55fqbaisr9qgbn7cvdvqlfqbh1f4ddf99zwan56z7l6gx3ad9"))))
+        (base32 "0ww45h7nxx5kj6z2y6chlskxd1igvs4j507anr6dzg99x1h25zdh"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -28915,7 +29429,7 @@ the jni-bindgen code generator for binding to JVM APIs from Rust.")
 (define-public rust-jobserver-0.1
   (package
     (name "rust-jobserver")
-    (version "0.1.22")
+    (version "0.1.24")
     (source
      (origin
        (method url-fetch)
@@ -28924,7 +29438,7 @@ the jni-bindgen code generator for binding to JVM APIs from Rust.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1zg7p4khibisbvd8b1lqvvni6lr00g49d4bq2zj6m76bs7jmlbwp"))))
+         "1yn1vxbbqv7dqir6qbfcj8h8ddjf89m5mhvm36h13xx7k5raf9dg"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -30373,7 +30887,7 @@ functions and static variables these libraries contain.")
 (define-public rust-libm-0.2
   (package
     (name "rust-libm")
-    (version "0.2.1")
+    (version "0.2.6")
     (source
      (origin
        (method url-fetch)
@@ -30382,7 +30896,7 @@ functions and static variables these libraries contain.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0akh56sh51adhagmk9l84dyrlz60gv8ri05xhr13i1b18czkpmy7"))))
+         "1ywg7jfcgfv4jypxi3f6rpf7n9509ky695bfzy1fqhms7ymhi09l"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -30906,7 +31420,7 @@ to count the number of lines in a file.")
 (define-public rust-link-cplusplus-1
   (package
     (name "rust-link-cplusplus")
-    (version "1.0.4")
+    (version "1.0.8")
     (source
       (origin
         (method url-fetch)
@@ -30915,7 +31429,7 @@ to count the number of lines in a file.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "0m7365ig7r88x7b4gkzj5m7b6wiq42pi1ign7mvyq63jr22sfspr"))))
+          "1x84vvg7gn94x9zrvd67602h3ricmhlv19cpl2alzhqkqz4hglpc"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs (("rust-cc" ,rust-cc-1))))
@@ -31020,8 +31534,37 @@ in plain text.  It is smart about where a link ends, such as with trailing
 punctuation.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-linux-raw-sys-0.1
+  (package
+    (name "rust-linux-raw-sys")
+    (version "0.1.3")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "linux-raw-sys" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0zxlp1c4h7kkc4ldgcj5cn7dzynvlksg8y0s9czn2v1sjvc0i7wg"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-development-inputs
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-static-assertions" ,rust-static-assertions-1))
+       #:cargo-inputs
+       (("rust-compiler-builtins" ,rust-compiler-builtins-0.1)
+        ("rust-rustc-std-workspace-core" ,rust-rustc-std-workspace-core-1))))
+    (home-page "https://github.com/sunfishcode/linux-raw-sys")
+    (synopsis "Generated bindings for Linux APIs")
+    (description
+     "This package provides automatically generated bindings for
+Linux userspace APIs.")
+    ;; The user can choose either license, or a variant of ASL2.0 with
+    ;; LLVM exception.  See COPYRIGHT in the repository.
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-linux-raw-sys-0.0.46
   (package
+    (inherit rust-linux-raw-sys-0.1)
     (name "rust-linux-raw-sys")
     (version "0.0.46")
     (source (origin
@@ -31038,14 +31581,7 @@ punctuation.")
              ("rust-rustc-std-workspace-core" ,rust-rustc-std-workspace-core-1))
            #:cargo-development-inputs
            `(("rust-libc" ,rust-libc-0.2)
-             ("rust-static-assertions" ,rust-static-assertions-1))))
-    (home-page "https://github.com/sunfishcode/linux-raw-sys")
-    (synopsis "Generated bindings for Linux APIs")
-    (description
-     "This package provides automatically generated bindings for
-Linux userspace APIs.")
-    (license (list license:asl2.0
-                   license:expat))))
+             ("rust-static-assertions" ,rust-static-assertions-1))))))
 
 (define-public rust-libssh2-sys-0.2
   (package
@@ -31182,7 +31718,7 @@ by inspecting the system for user preference.")
 (define-public rust-lock-api-0.4
   (package
     (name "rust-lock-api")
-    (version "0.4.5")
+    (version "0.4.9")
     (source
      (origin
        (method url-fetch)
@@ -31190,11 +31726,12 @@ by inspecting the system for user preference.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "028izfyraynijd9h9x5miv1vmg6sjnw1v95wgm7f4xlr7h4lsaki"))))
+         "1py41vk243hwk345nhkn5nw0bd4m03gzjmprdjqq6rg5dwv12l23"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-owning-ref" ,rust-owning-ref-0.4)
+       (("rust-autocfg" ,rust-autocfg-1)
+        ("rust-owning-ref" ,rust-owning-ref-0.4)
         ("rust-scopeguard" ,rust-scopeguard-1)
         ("rust-serde" ,rust-serde-1))))
     (home-page "https://github.com/Amanieu/parking_lot")
@@ -31892,22 +32429,23 @@ library")
 (define-public rust-macrotest-1
   (package
     (name "rust-macrotest")
-    (version "1.0.8")
+    (version "1.0.9")
     (source
       (origin
         (method url-fetch)
         (uri (crate-uri "macrotest" version))
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
-          (base32 "06xk9i9amh325vr6w9dmnlxfp6zamrq57zfl031zd0fscqm3vjx2"))))
+          (base32 "043gc53ch1szw7ihdclnygn464v62viw48iigd5l2iffhq4sx2bl"))))
     (build-system cargo-build-system)
     (arguments
       `(#:cargo-inputs
         (("rust-diff" ,rust-diff-0.1)
          ("rust-glob" ,rust-glob-0.3)
-         ("rust-rand" ,rust-rand-0.7)
+         ("rust-prettyplease" ,rust-prettyplease-0.1)
          ("rust-serde" ,rust-serde-1)
          ("rust-serde-json" ,rust-serde-json-1)
+         ("rust-syn" ,rust-syn-1)
          ("rust-toml" ,rust-toml-0.5))))
     (home-page "https://github.com/eupn/macrotest")
     (synopsis "Test harness for macro expansion")
@@ -32045,7 +32583,7 @@ algorithms.  It supports CBC block cipher mode, PKCS5 padding and 64, 128,
 (define-public rust-markup5ever-0.10
   (package
     (name "rust-markup5ever")
-    (version "0.10.0")
+    (version "0.10.1")
     (source
       (origin
         (method url-fetch)
@@ -32054,19 +32592,16 @@ algorithms.  It supports CBC block cipher mode, PKCS5 padding and 64, 128,
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "1aqxl1lsc8s6ycsw5ibwynadnb9qpiab4ggwgdq9pjlnjdk8vqxa"))))
+          "1zf8iq2czd6kz99fjs3pgf5c17lfz75ds31khkfiqbc50gxl0kx2"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-log" ,rust-log-0.4)
         ("rust-phf" ,rust-phf-0.8)
-        ("rust-string-cache" ,rust-string-cache-0.8)
-        ("rust-tendril" ,rust-tendril-0.4)
         ("rust-phf-codegen" ,rust-phf-codegen-0.8)
-        ("rust-serde" ,rust-serde-1)
-        ("rust-serde-derive" ,rust-serde-derive-1)
-        ("rust-serde-json" ,rust-serde-json-1)
-        ("rust-string-cache-codegen" ,rust-string-cache-codegen-0.5))))
+        ("rust-string-cache" ,rust-string-cache-0.8)
+        ("rust-string-cache-codegen" ,rust-string-cache-codegen-0.5)
+        ("rust-tendril" ,rust-tendril-0.4))))
     (home-page "https://github.com/servo/html5ever")
     (synopsis "Common code for xml5ever and html5ever")
     (description
@@ -32172,7 +32707,7 @@ statement, the first matching branch is the item that gets emitted.")
 (define-public rust-matches-0.1
   (package
     (name "rust-matches")
-    (version "0.1.8")
+    (version "0.1.9")
     (source
       (origin
         (method url-fetch)
@@ -32180,9 +32715,8 @@ statement, the first matching branch is the item that gets emitted.")
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "020axl4q7rk9vz90phs7f8jas4imxal9y9kxl4z4v7a6719mrz3z"))))
+          "0gw5ib38jfgyyah8nyyxr036grqv1arkf1srgfa4h386dav7iqx3"))))
     (build-system cargo-build-system)
-    (arguments '(#:skip-build? #t))
     (home-page "https://github.com/SimonSapin/rust-std-candidates")
     (synopsis "Macro to evaluate whether an expression matches a pattern")
     (description "This package provides a macro to evaluate, as a boolean,
@@ -32356,7 +32890,7 @@ parallelize and optimize.")
   (package
     (inherit rust-matrixmultiply-0.3)
     (name "rust-matrixmultiply")
-    (version "0.2.3")
+    (version "0.2.4")
     (source
       (origin
         (method url-fetch)
@@ -32364,13 +32898,13 @@ parallelize and optimize.")
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "13s7nfd3dfcsrixld2lk8c563ih5xzczl2w36hprfc016rkfrxyl"))))
+          "1hc4vp19x823xgkm374wsxnzmqbjhmyaj5nr0lhm9k9i02x0cs4i"))))
     (arguments
      `(#:cargo-inputs
        (("rust-rawpointer" ,rust-rawpointer-0.2))
        #:cargo-development-inputs
        (("rust-bencher" ,rust-bencher-0.1)
-        ("rust-itertools" ,rust-itertools-0.7))))))
+        ("rust-itertools" ,rust-itertools-0.8))))))
 
 (define-public rust-matrixmultiply-0.1
   (package
@@ -32600,7 +33134,7 @@ unstable -Z self-profile flag.")
 (define-public rust-memchr-2
   (package
     (name "rust-memchr")
-    (version "2.4.1")
+    (version "2.5.0")
     (source
       (origin
         (method url-fetch)
@@ -32609,12 +33143,15 @@ unstable -Z self-profile flag.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "0smq8xzd40njqpfzv5mghigj91fzlfrfg842iz8x0wqvw2dw731h"))))
+          "0vanfk5mzs1g1syqnj03q8n0syggnhn55dq535h2wxr7rwpfbzrd"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
-       (("rust-libc" ,rust-libc-0.2))))
+     `(#:cargo-inputs
+       (("rust-compiler-builtins" ,rust-compiler-builtins-0.1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-rustc-std-workspace-core" ,rust-rustc-std-workspace-core-1))
+       #:cargo-development-inputs
+       (("rust-quickcheck" ,rust-quickcheck-1))))
     (home-page "https://github.com/BurntSushi/rust-memchr")
     (synopsis "Safe interface to memchr")
     (description "The @code{memchr} crate provides heavily optimized routines
@@ -34392,7 +34929,7 @@ transformations and statically-sized or dynamically-sized matrices.")
         (("rust-abomonation" ,rust-abomonation-0.7)
          ("rust-alga" ,rust-alga-0.9)
          ("rust-approx" ,rust-approx-0.4)
-         ("rust-bytemuck" ,rust-bytemuck-1.5)
+         ("rust-bytemuck" ,rust-bytemuck-1)
          ("rust-glam" ,rust-glam-0.13)
          ("rust-matrixcompare-core" ,rust-matrixcompare-core-0.1)
          ("rust-matrixmultiply" ,rust-matrixmultiply-0.3)
@@ -35315,7 +35852,7 @@ cryptographic library.")
 (define-public rust-new-debug-unreachable-1
   (package
     (name "rust-new-debug-unreachable")
-    (version "1.0.3")
+    (version "1.0.4")
     (source
      (origin
        (method url-fetch)
@@ -35324,7 +35861,7 @@ cryptographic library.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0c1br326qa0rrzxrn2rd5ah7xaprig2i9r4rwsx06vnvc1f003zl"))))
+         "0m1bg3wz3nvxdryg78x4i8hh9fys4wp2bi0zg821dhvf44v4g8p4"))))
     (build-system cargo-build-system)
     (arguments `(#:skip-build? #t))
     (home-page
@@ -36035,7 +36572,7 @@ implementation (which is unstable / requires nightly).")
 (define-public rust-nom-7
   (package
     (name "rust-nom")
-    (version "7.1.1")
+    (version "7.1.2")
     (source
      (origin
        (method url-fetch)
@@ -36044,29 +36581,16 @@ implementation (which is unstable / requires nightly).")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0djc3lq5xihnwhrvkc4bj0fd58sjf632yh6hfiw545x355d3x458"))))
+         "132lkkqd8hcbmpb90hncwknr7rn6knfq7774d679k74iqilpfl75"))))
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #f  ; Tests require example directory, not included in tarball.
        #:cargo-inputs
        (("rust-memchr" ,rust-memchr-2)
-        ("rust-minimal-lexical" ,rust-minimal-lexical-0.2)
-        ("rust-version-check" ,rust-version-check-0.9))
+        ("rust-minimal-lexical" ,rust-minimal-lexical-0.2))
        #:cargo-development-inputs
-       (("rust-criterion" ,rust-criterion-0.3)
-        ("rust-doc-comment" ,rust-doc-comment-0.3)
-        ("rust-jemallocator" ,rust-jemallocator-0.3)
-        ("rust-proptest" ,rust-proptest-1))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'configure 'override-jemalloc
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((jemalloc (assoc-ref inputs "jemalloc")))
-               (setenv "JEMALLOC_OVERRIDE"
-                       (string-append jemalloc "/lib/libjemalloc_pic.a")))
-             #t)))))
-    (native-inputs
-     (list jemalloc))
+       (("rust-doc-comment" ,rust-doc-comment-0.3)
+        ("rust-proptest" ,rust-proptest-1))))
     (home-page "https://github.com/Geal/nom")
     (synopsis
      "Byte-oriented, zero-copy, parser combinators library")
@@ -36079,7 +36603,7 @@ combinators library.")
   (package
     (inherit rust-nom-7)
     (name "rust-nom")
-    (version "6.0.1")
+    (version "6.2.1")
     (source
      (origin
        (method url-fetch)
@@ -36088,11 +36612,18 @@ combinators library.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1w0ppq112myzwk23c8m0wmq0nv73xvn0g9gl2kfm83aadgylq0w8"))))
+         "19h3l5hajpcszwl6nzcmgs4mpng73ifn6akslq7n4g1s12wm2p4w"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Allow any version of memchr 2.
+           (substitute* "Cargo.toml"
+             ((">=2.0, <2.4") "2.0"))))))
     (arguments
      `(#:tests? #f  ; Tests require example directory, not included in tarball.
        #:cargo-inputs
        (("rust-bitvec" ,rust-bitvec-0.19)
+        ("rust-funty" ,rust-funty-1)
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-lexical-core" ,rust-lexical-core-0.7)
         ("rust-memchr" ,rust-memchr-2)
@@ -36109,7 +36640,8 @@ combinators library.")
              (let ((jemalloc (assoc-ref inputs "jemalloc")))
                (setenv "JEMALLOC_OVERRIDE"
                        (string-append jemalloc "/lib/libjemalloc_pic.a")))
-             #t)))))))
+             #t)))))
+    (native-inputs (list jemalloc))))
 
 (define-public rust-nom-5
   (package
@@ -37157,7 +37689,7 @@ directly.")
   (package
     (inherit rust-num-rational-0.3)
     (name "rust-num-rational")
-    (version "0.2.3")
+    (version "0.2.4")
     (source
      (origin
        (method url-fetch)
@@ -37166,7 +37698,7 @@ directly.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "18q3vq3xldhaj0z3f92am8f59m1awywgdj28c7wvx0bcksgwfkfs"))))
+         "1vsaz96chxcgpqd5a0dq8hb3b4sj6dnlhwmpbkf4mx6vnls0202w"))))
     (arguments
      `(#:cargo-inputs
        (("rust-num-bigint" ,rust-num-bigint-0.2)
@@ -37771,7 +38303,7 @@ other crates to create safe wrappers around Oniguruma.")
 (define-public rust-once-cell-1
   (package
     (name "rust-once-cell")
-    (version "1.15.0")
+    (version "1.17.0")
     (source
      (origin
        (method url-fetch)
@@ -37779,14 +38311,17 @@ other crates to create safe wrappers around Oniguruma.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1q9r8c0ls1qgjp89p4rd36sjv4671pz6710c106ajwcv2c2asbg8"))))
+         "0rpackaf6ljxkcaa3svaiak1ddsbh0hqf5z3l7bb78hyfjhznqbg"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
+     `(#:tests? #f      ; Needs a newer rust
+       #:cargo-inputs
        (("rust-atomic-polyfill" ,rust-atomic-polyfill-1)
+        ("rust-critical-section" ,rust-critical-section-1)
         ("rust-parking-lot-core" ,rust-parking-lot-core-0.9))
        #:cargo-development-inputs
-       (("rust-crossbeam-utils" ,rust-crossbeam-utils-0.8)
+       (("rust-critical-section" ,rust-critical-section-1)
+        ("rust-crossbeam-utils" ,rust-crossbeam-utils-0.8)
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-regex" ,rust-regex-1))))
     (home-page "https://github.com/matklad/once_cell")
@@ -37896,10 +38431,10 @@ the system.")
        (("rust-pathdiff" ,rust-pathdiff-0.2)
         ("rust-winapi" ,rust-winapi-0.3))))))
 
-(define-public rust-opener-0.4
+(define-public rust-opener-0.5
   (package
     (name "rust-opener")
-    (version "0.4.1")
+    (version "0.5.0")
     (source
      (origin
        (method url-fetch)
@@ -37908,7 +38443,7 @@ the system.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1bpknqvhqkalhmq8n2m97apc0r3y194ppybl1qxay34xr83p848k"))))
+         "0lkrn4fv1h4m8gmp7ll6x7vjvb6kls2ngwa5cgsh2ix5fb6yp8sf"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -37946,14 +38481,14 @@ crate.")
 (define-public rust-openssl-0.10
   (package
     (name "rust-openssl")
-    (version "0.10.41")
+    (version "0.10.49")
     (source (origin
               (method url-fetch)
               (uri (crate-uri "openssl" version))
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1l2vpxq5ln326s64lbacqs4hq6k5yn2zhwqbyby0sj9nagvfp3v1"))))
+                "0cssygqbgdim10y7qrgz0rj5k839jqiv2n9ccw1lx8ipp1m10bsd"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -38056,14 +38591,14 @@ system for OpenSSL.")
 (define-public rust-openssl-sys-0.9
   (package
     (name "rust-openssl-sys")
-    (version "0.9.75")
+    (version "0.9.84")
     (source
       (origin
         (method url-fetch)
         (uri (crate-uri "openssl-sys" version))
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
-         (base32 "0bxlrsfkvryv179na416mvj0s90v9yngkmkkv8y1lm0h4w6bvyg5"))
+         (base32 "1ym0vcfnyp8bf8lidz8w0yx0n6pva37nvdww0c22kn62kp7fl81s"))
         (patches (search-patches "rust-openssl-sys-no-vendor.patch"))))
     (build-system cargo-build-system)
     (arguments
@@ -38071,13 +38606,13 @@ system for OpenSSL.")
        (("rust-libc" ,rust-libc-0.2)
         ;; Build dependencies:
         ("rust-autocfg" ,rust-autocfg-1)
-        ("rust-bindgen" ,rust-bindgen-0.59)
+        ("rust-bindgen" ,rust-bindgen-0.64)
         ("rust-cc" ,rust-cc-1)
         ("rust-pkg-config" ,rust-pkg-config-0.3)
         ("rust-vcpkg" ,rust-vcpkg-0.2))))
     (native-inputs
      (list pkg-config))
-    (inputs
+    (propagated-inputs
      (list openssl))
     (home-page "https://github.com/sfackler/rust-openssl")
     (synopsis "FFI bindings to OpenSSL")
@@ -38193,8 +38728,37 @@ system for OpenSSL.")
 PartialOrd types, like floats.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-ordered-float-3
+  (package
+    (name "rust-ordered-float")
+    (version "3.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "ordered-float" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1gr31ksgbqariv6hz3s5bc15a5vh4k65dyn8m7j59lhnji0b2knq"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs (("rust-arbitrary" ,rust-arbitrary-1)
+                       ("rust-bytemuck" ,rust-bytemuck-1)
+                       ("rust-num-traits" ,rust-num-traits-0.2)
+                       ("rust-proptest" ,rust-proptest-1)
+                       ("rust-rand" ,rust-rand-0.8)
+                       ("rust-rkyv" ,rust-rkyv-0.7)
+                       ("rust-schemars" ,rust-schemars-0.8)
+                       ("rust-serde" ,rust-serde-1)
+                       ("rust-speedy" ,rust-speedy-0.8))))
+    (home-page "https://github.com/reem/rust-ordered-float")
+    (synopsis "Wrappers for total ordering on floats")
+    (description
+     "This package provides wrappers for total ordering on floats in Rust.")
+    (license license:expat)))
+
 (define-public rust-ordered-float-2
   (package
+    (inherit rust-ordered-float-3)
     (name "rust-ordered-float")
     (version "2.1.1")
     (source
@@ -38206,7 +38770,6 @@ PartialOrd types, like floats.")
        (sha256
         (base32
          "0632g8bacvras6nig1bb1ihgc560476jkrb3is6n542ll86q8vvn"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build?
        #t
@@ -38214,12 +38777,7 @@ PartialOrd types, like floats.")
        (("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-serde" ,rust-serde-1))
        #:cargo-development-inputs
-       (("rust-serde-test" ,rust-serde-test-1))))
-    (home-page "https://github.com/reem/rust-ordered-float")
-    (synopsis "Wrappers for total ordering on floats")
-    (description
-     "This package provides wrappers for total ordering on floats in Rust.")
-    (license license:expat)))
+       (("rust-serde-test" ,rust-serde-test-1))))))
 
 (define-public rust-ordered-float-1
   (package
@@ -38293,22 +38851,49 @@ iteration.  NOTE: This crate was renamed to @code{indexmap}.  Please use it
 under its new name.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-os-info-3
+  (package
+    (name "rust-os-info")
+    (version "3.0.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "os_info" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "09x2sm4pgcpk14hakj4iq0zkglx1bwxlq3a5mbwc737dpwh11jba"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-development-inputs
+       (("rust-doc-comment" ,rust-doc-comment-0.3)
+        ("rust-pretty-assertions" ,rust-pretty-assertions-0.7))
+       #:cargo-inputs
+       (("rust-log" ,rust-log-0.4)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-winapi" ,rust-winapi-0.3))))
+    (home-page "https://github.com/stanislav-tkach/os_info")
+    (synopsis "Detect the operating system type and version")
+    (description
+     "This library detects the operating system type and version.")
+    (license license:expat)))
+
 (define-public rust-os-pipe-1
   (package
     (name "rust-os-pipe")
-    (version "1.0.1")
+    (version "1.1.2")
     (source
       (origin
         (method url-fetch)
         (uri (crate-uri "os-pipe" version))
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
-         (base32 "0mczqmqrkzmln4xg5ki1gwgykf4dsii0h4p7fxf667889ysz54ic"))))
+         (base32 "0fa640v9bi1qcq3jgq1p76lphi4fwj4a9msrmfrq87n1z3qm58n6"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-libc" ,rust-libc-0.2)
-        ("rust-winapi" ,rust-winapi-0.3))))
+        ("rust-windows-sys" ,rust-windows-sys-0.42))))
     (native-inputs
      (list python-minimal-wrapper))     ; For the tests.
     (home-page "https://github.com/oconnor663/os_pipe.rs")
@@ -38638,7 +39223,7 @@ normally prevent moving a type that has been borrowed from.")
 (define-public rust-packed-simd-2-0.3
   (package
     (name "rust-packed-simd-2")
-    (version "0.3.6")
+    (version "0.3.8")
     (source
      (origin
        (method url-fetch)
@@ -38646,21 +39231,17 @@ normally prevent moving a type that has been borrowed from.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1i8hmhsyzqsas2rhxg088mcwvzljrqhvf8lfz8b1dj6g2rkw1h3i"))
+        (base32 "10p2bm0p57shg3arlpfwm6z0bbnlkyr4g0dlkmpwvz6qaba4r4d1"))
        (modules '((guix build utils)))
        (snippet
         '(begin
            ;; Unpin the dependencies.
            (substitute* "Cargo.toml"
-             (("=0.2.73") "^0.2.73")
-             (("=0.3.23") "^0.3.23"))
-           #t))))
+             (("version = \"=") "version = \"^"))))))
     (build-system cargo-build-system)
     (arguments
-     `(#:tests? #f  ; error[E0432]: unresolved import `packed_simd`
-       #:skip-build? #t
-       #:cargo-inputs
-       (("rust-cfg-if" ,rust-cfg-if-0.1)
+     `(#:cargo-inputs
+       (("rust-cfg-if" ,rust-cfg-if-1)
         ("rust-core-arch" ,rust-core-arch-0.1)
         ("rust-libm" ,rust-libm-0.1)
         ("rust-sleef-sys" ,rust-sleef-sys-0.1))
@@ -38673,8 +39254,7 @@ normally prevent moving a type that has been borrowed from.")
        (modify-phases %standard-phases
          (add-after 'unpack 'enable-unstable-features
            (lambda _
-             (setenv "RUSTC_BOOTSTRAP" "1")
-             #t)))))
+             (setenv "RUSTC_BOOTSTRAP" "1"))))))
     (home-page "https://github.com/rust-lang-nursery/packed_simd")
     (synopsis "Portable Packed SIMD vectors")
     (description "Portable Packed SIMD vectors.")
@@ -39040,11 +39620,12 @@ unparking.")
         (base32 "13r2xk7mnxfc5g0g6dkdxqdqad99j7s7z8zhzz4npw5r0g0v4hip"))))
     (build-system cargo-build-system)
     (arguments
-     (list #:skip-build? #t
-           #:cargo-inputs
-           `(("rust-instant" ,rust-instant-0.1)
-             ("rust-lock-api" ,rust-lock-api-0.4)
-             ("rust-parking-lot-core" ,rust-parking-lot-core-0.8))))
+     (list #:cargo-inputs
+           `(("rust-lock-api" ,rust-lock-api-0.4)
+             ("rust-parking-lot-core" ,rust-parking-lot-core-0.9))
+           #:cargo-development-inputs
+           `(("rust-bincode" ,rust-bincode-1)
+             ("rust-rand" ,rust-rand-0.8))))
     (home-page "https://github.com/Amanieu/parking_lot")
     (synopsis
      "Efficient implementations of the standard synchronization primitives")
@@ -39178,14 +39759,14 @@ synchronization primitives.")
 (define-public rust-parking-lot-core-0.9
   (package
     (name "rust-parking-lot-core")
-    (version "0.9.3")
+    (version "0.9.6")
     (source (origin
               (method url-fetch)
               (uri (crate-uri "parking_lot_core" version))
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0ab95rljb99rm51wcic16jgbajcr6lgbqkrr21w7bc2wyb5pk8h9"))))
+                "1grkf6s7zgl5blgw941g98z5csfjbrxavprspc8396aw9f0zh7ms"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -39196,7 +39777,7 @@ synchronization primitives.")
         ("rust-redox-syscall" ,rust-redox-syscall-0.2)
         ("rust-smallvec" ,rust-smallvec-1)
         ("rust-thread-id" ,rust-thread-id-4)
-        ("rust-windows-sys" ,rust-windows-sys-0.36))))
+        ("rust-windows-sys" ,rust-windows-sys-0.42))))
     (home-page "https://github.com/Amanieu/parking_lot")
     (synopsis "API for creating custom synchronization primitives")
     (description "This package provides an advanced API for creating custom
@@ -40177,20 +40758,22 @@ runtime support for rust-peg grammars.  To use rust-peg, see the peg crate.")
 (define-public rust-pem-1
   (package
     (name "rust-pem")
-    (version "1.0.2")
+    (version "1.1.1")
     (source
       (origin
         (method url-fetch)
         (uri (crate-uri "pem" version))
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
-          (base32 "0iqrvfnm71x9pvff39d5ajwn3gc9glxlv4d4h22max7342db18z9"))))
+          (base32 "1f184b7vs5kgwglfsy9adqqy7625jsq8jj1lsxah9abn78kmr0x8"))))
     (build-system cargo-build-system)
     (arguments
       `(#:cargo-inputs
-        (("rust-base64" ,rust-base64-0.13))
+        (("rust-base64" ,rust-base64-0.13)
+         ("rust-serde" ,rust-serde-1))
         #:cargo-development-inputs
-        (("rust-criterion" ,rust-criterion-0.3))))
+        (("rust-criterion" ,rust-criterion-0.3)
+         ("rust-serde-json" ,rust-serde-json-1))))
     (home-page "https://github.com/jcreekmore/pem-rs")
     (synopsis "Parse and encode PEM-encoded data")
     (description
@@ -40356,7 +40939,7 @@ algorithm.")
 (define-public rust-pest-2
   (package
     (name "rust-pest")
-    (version "2.1.3")
+    (version "2.5.3")
     (source
      (origin
        (method url-fetch)
@@ -40365,13 +40948,16 @@ algorithm.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0lry80bm90x47nq71wxq83kjrm9ashpz4kbm92p90ysdx4m8gx0h"))))
+         "02n3b2hv9ciysybs9qzxza25gp8493dd7r8b57kfkxwi9nhb8ms2"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-serde" ,rust-serde-1)
+       (("rust-bytecount" ,rust-bytecount-0.6)
+        ("rust-memchr" ,rust-memchr-2)
+        ("rust-serde" ,rust-serde-1)
         ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-thiserror" ,rust-thiserror-1)
         ("rust-ucd-trie" ,rust-ucd-trie-0.1))))
     (home-page "https://pest.rs/")
     (synopsis "The Elegant Parser")
@@ -40381,7 +40967,7 @@ algorithm.")
 (define-public rust-pest-derive-2
   (package
     (name "rust-pest-derive")
-    (version "2.1.0")
+    (version "2.5.3")
     (source
      (origin
        (method url-fetch)
@@ -40390,7 +40976,7 @@ algorithm.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1l5jfa6ril71cw5nsiw0r45br54dd8cj2r1nc2d1wq6wb3jilgc3"))))
+         "19m0wd2lcg6d2halnlfcgl0mfpgjy5a29q875vk6bp8c7cwxl714"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -40405,7 +40991,7 @@ algorithm.")
 (define-public rust-pest-generator-2
   (package
     (name "rust-pest-generator")
-    (version "2.1.1")
+    (version "2.5.3")
     (source
      (origin
        (method url-fetch)
@@ -40414,7 +41000,7 @@ algorithm.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1h3z8jccki87mn7gppy4292s1ah98z4md998w5pd04jpkclwz7vv"))))
+         "0z52iw9g9jcg8v7d56s9m49cbl1k5wsxax1wjl1666f8v0s3dda6"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -40432,7 +41018,7 @@ algorithm.")
 (define-public rust-pest-meta-2
   (package
     (name "rust-pest-meta")
-    (version "2.1.2")
+    (version "2.5.3")
     (source
      (origin
        (method url-fetch)
@@ -40441,14 +41027,14 @@ algorithm.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0iymvrh7lcfi8iarkgq0hwgarr00np3l4xg4bx42rmvgi6czshyz"))))
+         "0lbskklh77xnyk1yr8c387l80s37s30lrfv636s7hild58rz3x0f"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-maplit" ,rust-maplit-1)
+       (("rust-once-cell" ,rust-once-cell-1)
         ("rust-pest" ,rust-pest-2)
-        ("rust-sha-1" ,rust-sha-1-0.8))))
+        ("rust-sha2" ,rust-sha2-0.10))))
     (home-page "https://pest.rs")
     (synopsis "Pest meta language parser and validator")
     (description
@@ -40545,21 +41131,22 @@ and graph algorithms.")
 (define-public rust-phf-0.10
   (package
     (name "rust-phf")
-    (version "0.10.0")
+    (version "0.10.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "phf" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "17s0k0z1rjczk37cpbmn718h7dkqci1kk9w2spbmjjwc06qkvz5r"))))
+        (base32 "0naj8n5nasv5hj5ldlva3cl6y3sv7zp3kfgqylhbrg55v3mg3fzs"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
+     `(#:tests? #f          ; Doc tests fail.
        #:cargo-inputs
        (("rust-phf-macros" ,rust-phf-macros-0.10)
         ("rust-phf-shared" ,rust-phf-shared-0.10)
-        ("rust-proc-macro-hack" ,rust-proc-macro-hack-0.5))))
+        ("rust-proc-macro-hack" ,rust-proc-macro-hack-0.5)
+        ("rust-serde" ,rust-serde-1))))
     (home-page "https://github.com/sfackler/rust-phf")
     (synopsis "Runtime support for perfect hash function data structures")
     (description "This package provides runtime support for perfect hash
@@ -40900,21 +41487,20 @@ function data structures.")
 (define-public rust-pin-project-1
   (package
     (name "rust-pin-project")
-    (version "1.0.2")
+    (version "1.0.12")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "pin-project" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "19qw2nm2kk38v9j16nsm8j3fkh0g8pjq0k4cplx7i2f4q8vj5k4w"))))
+        (base32 "1k3f9jkia3idxl2pqxamszwnl89dk52fa4jqj3p7zmmwnq4scadd"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-pin-project-internal" ,rust-pin-project-internal-1))
        #:cargo-development-inputs
-       (("rust-pin-project-auxiliary-macro"
-         ,rust-pin-project-auxiliary-macro-0.0)
+       (("rust-macrotest" ,rust-macrotest-1)
         ("rust-rustversion" ,rust-rustversion-1)
         ("rust-static-assertions" ,rust-static-assertions-1)
         ("rust-trybuild" ,rust-trybuild-1))))
@@ -40928,18 +41514,28 @@ function data structures.")
   (package
     (inherit rust-pin-project-1)
     (name "rust-pin-project")
-    (version "0.4.22")
+    (version "0.4.30")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "pin-project" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "05wwxy46j9z27ibbiisjqk0rivf0z00h4al1f92mwjp9pz6sdqqj"))))
+        (base32 "0nlxmsiq39bc73iryh92yslrp2jzlkdjjxd7rv5sjzpflljgkw1y"))
+       (snippet
+        #~(begin
+            (use-modules (guix build utils))
+            (substitute* "Cargo.toml"
+              (("version = \"=") "version = \"^"))))))
     (arguments
-     `(#:tests? #f ; XXX: Fix-me.
-       #:cargo-inputs
-       (("rust-pin-project-internal" ,rust-pin-project-internal-0.4))))))
+     `(#:cargo-inputs
+       (("rust-pin-project-internal" ,rust-pin-project-internal-0.4))
+       #:cargo-development-inputs
+       (("rust-rustversion" ,rust-rustversion-1)
+        ("rust-ryu" ,rust-ryu-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-toml" ,rust-toml-0.5)
+        ("rust-trybuild" ,rust-trybuild-1))))))
 
 (define-public rust-pin-project-auxiliary-macro-0.0
   (package
@@ -40962,14 +41558,14 @@ function data structures.")
 (define-public rust-pin-project-internal-1
   (package
     (name "rust-pin-project-internal")
-    (version "1.0.2")
+    (version "1.0.12")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "pin-project-internal" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0pwy3m32scf3ypjb9ai151lmaa27vyj06lc64i28l0r31fzx5s7q"))))
+        (base32 "0maa6icn7rdfy4xvgfaq7m7bwpw9f19wg76f1ncsiixd0lgdp6q6"))))
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #false
@@ -40988,20 +41584,22 @@ crate.")
   (package
     (inherit rust-pin-project-internal-1)
     (name "rust-pin-project-internal")
-    (version "0.4.22")
+    (version "0.4.30")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "pin-project-internal" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1xxac6f3ip45zqbfcmmk748ywjw9sbavz1fcswvqgn3rrx2zs3va"))))
+        (base32 "07p6mwz6kz317a6n3p93yk4llj939ihqdz7d1mwl7gmyx468s745"))))
     (arguments
-     `(#:tests? #f ; XXX: Fix-me.
+     `(#:tests? #f ; XXX: Doc tests fail.
        #:cargo-inputs
        (("rust-proc-macro2" ,rust-proc-macro2-1)
         ("rust-quote" ,rust-quote-1)
-        ("rust-syn" ,rust-syn-1))))))
+        ("rust-syn" ,rust-syn-1))
+       #:cargo-development-inputs
+       (("rust-rustversion" ,rust-rustversion-1))))))
 
 (define-public rust-pin-project-lite-0.2
   (package
@@ -41185,7 +41783,7 @@ with additional support for PKCS#8v2 asymmetric key packages (RFC 5958).")
 (define-public rust-pkg-config-0.3
   (package
     (name "rust-pkg-config")
-    (version "0.3.19")
+    (version "0.3.26")
     (source
      (origin
        (method url-fetch)
@@ -41193,7 +41791,7 @@ with additional support for PKCS#8v2 asymmetric key packages (RFC 5958).")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0k4860955riciibxr8bhnklp79jydp4xfylwdn5v9kj96hxlac9q"))))
+         "0q2i61dhqvawc51zfzl3jich57w0cjgfa894hn6ings7ffgsbjba"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-development-inputs
@@ -41992,6 +42590,40 @@ for constructing a Message Authentication Code (MAC).")
 overloading without macros in Rust.")
     (license license:expat)))
 
+(define-public rust-portable-atomic-1
+  (package
+    (name "rust-portable-atomic")
+    (version "1.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "portable-atomic" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32 "06p5dglnqj43m4fj70dwcqhv9rmy9amn9pdpgpzd8fx0hf30rh1r"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f              ; Not all test dependencies declared.
+       #:cargo-inputs
+       (("rust-critical-section" ,rust-critical-section-1)
+        ("rust-serde" ,rust-serde-1))
+       #:cargo-development-inputs
+       (("rust-critical-section" ,rust-critical-section-1)
+        ("rust-crossbeam-utils" ,rust-crossbeam-utils-0.8)
+        ("rust-fastrand" ,rust-fastrand-1)
+        ("rust-once-cell" ,rust-once-cell-1)
+        ("rust-paste" ,rust-paste-1)
+        ("rust-rustversion" ,rust-rustversion-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-test" ,rust-serde-test-1)
+        ("rust-sptr" ,rust-sptr-0.3)
+        ("rust-static-assertions" ,rust-static-assertions-1))))
+    (home-page "https://github.com/taiki-e/portable-atomic")
+    (synopsis "Portable atomic types")
+    (description
+     "This package provides portable atomic types, including support for
+128-bit atomics, atomic float, etc.")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-postgres-0.19
   (package
     (name "rust-postgres")
@@ -42642,6 +43274,29 @@ replacements, adding colorful diffs.")
         ("rust-chrono" ,rust-chrono-0.4)
         ("rust-env-logger" ,rust-env-logger-0.6))))))
 
+(define-public rust-prettyplease-0.1
+  (package
+    (name "rust-prettyplease")
+    (version "0.1.23")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "prettyplease" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32 "0y2wbmflbkgp13ywd7qyq7hyi59x5zazmljnw8gg09wnfwak4zp9"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-syn" ,rust-syn-1))
+       #:cargo-development-inputs
+       (("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/dtolnay/prettyplease")
+    (synopsis "Minimal `syn` syntax tree pretty-printer")
+    (description
+     "This package provides a minimal `syn` syntax tree pretty-printer.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-prettytable-rs-0.8
   (package
     (name "rust-prettytable-rs")
@@ -42910,7 +43565,7 @@ in your code.")
 (define-public rust-proc-macro2-1
   (package
     (name "rust-proc-macro2")
-    (version "1.0.43")
+    (version "1.0.47")
     (source
       (origin
         (method url-fetch)
@@ -42918,7 +43573,7 @@ in your code.")
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "1avvpf4qki8mg2na60yr3afbsfl5p6vllac6516xgwy93g3a4b0a"))))
+          "09g7alc7mlbycsadfh7lwskr1qfxbiic9qp9z751cqz3n04dk8sy"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-test-flags '("--lib")
@@ -43788,19 +44443,17 @@ ecosystem.")
   (package
     (inherit rust-pyo3-build-config-0.16)
     (name "rust-pyo3-build-config")
-    (version "0.15.1")
+    (version "0.15.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "pyo3-build-config" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0aw5zfqwzj5rzfxjyqvrqfam138d1009jh6kia4xrgdz538y9yfv"))))
+        (base32 "0414biclhrxv6y0bjm6s9fq9z6yah393ffkd8748pqdq83y3k4kp"))))
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
-       (("rust-once-cell" ,rust-once-cell-1))))
-    (native-inputs '())))
+     `(#:cargo-inputs
+       (("rust-once-cell" ,rust-once-cell-1))))))
 
 (define-public rust-pyo3-ffi-0.16
   (package
@@ -43854,22 +44507,21 @@ ecosystem.")
   (package
     (inherit rust-pyo3-macros-backend-0.16)
     (name "rust-pyo3-macros-backend")
-    (version "0.15.1")
+    (version "0.15.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "pyo3-macros-backend" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "12i1n1j8l4q4lzalsvvlw2pak1h8wnz3xcn7y82s2jgf4pl0jkzl"))))
-    (build-system cargo-build-system)
+        (base32 "15bhc1xib9yz4l1sd2lk3nc7scbqsjfvgvlr3mj0xq0jqh92i32s"))))
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-proc-macro2" ,rust-proc-macro2-1)
         ("rust-pyo3-build-config" ,rust-pyo3-build-config-0.15)
         ("rust-quote" ,rust-quote-1)
-        ("rust-syn" ,rust-syn-1))))))
+        ("rust-syn" ,rust-syn-1))))
+    (native-inputs (list python))))
 
 (define-public rust-pyo3-macros-0.16
   (package
@@ -43918,21 +44570,20 @@ ecosystem.")
   (package
     (inherit rust-pyo3-macros-0.16)
     (name "rust-pyo3-macros")
-    (version "0.15.1")
+    (version "0.15.2")
     (source
       (origin
         (method url-fetch)
         (uri (crate-uri "pyo3-macros" version))
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
-          (base32 "0mfp3yz6743vrsp2vh8is3gbyzlxzx4bam5wnhi9g6hz5friww37"))))
-    (build-system cargo-build-system)
+         (base32 "0fmrzl185i00c6kdvy7icmhhc99c51pyha46incqggk4qvl4gch0"))))
     (arguments
-      `(#:skip-build? #t
-        #:cargo-inputs
-        (("rust-pyo3-macros-backend" ,rust-pyo3-macros-backend-0.15)
-         ("rust-quote" ,rust-quote-1)
-         ("rust-syn" ,rust-syn-1))))))
+     `(#:cargo-inputs
+       (("rust-pyo3-macros-backend" ,rust-pyo3-macros-backend-0.15)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (native-inputs (list python))))
 
 (define-public rust-pyo3-0.16
   (package
@@ -43952,7 +44603,7 @@ ecosystem.")
         ("rust-cfg-if" ,rust-cfg-if-1)
         ("rust-eyre" ,rust-eyre-0.6)
         ("rust-hashbrown" ,rust-hashbrown-0.11)
-        ("rust-indexmap" ,rust-indexmap-1)
+        ("rust-indexmap" ,rust-indexmap-1.7)
         ("rust-indoc" ,rust-indoc-1)
         ("rust-inventory" ,rust-inventory-0.2)
         ("rust-libc" ,rust-libc-0.2)
@@ -44010,29 +44661,26 @@ Python code from a Rust binary is also supported.")
   (package
     (inherit rust-pyo3-0.16)
     (name "rust-pyo3")
-    (version "0.15.1")
+    (version "0.15.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "pyo3" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "082p014xd8ipwnfsq1ln871wkslxmbrxd7kpqwa0mbq53jzivw3w"))
+        (base32 "0ljp3m1frg8y50al4cbadwxfwwrgsvslmljclp4cf20y4ykm07fl"))
        (modules '((guix build utils)))
        (snippet
-        ;; XXX: Relax "dev-dependencies.criterion"; this must match the
-        ;; version of RUST-CRITERION-0.3.
-        '(substitute* "Cargo.toml"
-           (("\"=0\\.3\\.4\"")
-            "\"^0.3.4\"")))))
-    (build-system cargo-build-system)
+        '(begin (substitute* "Cargo.toml"
+                  (("\"=([[:digit:]]+(\\.[[:digit:]]+)*)" _ version)
+                   (string-append "\"^" version)))))))
     (arguments
      `(#:cargo-inputs
        (("rust-anyhow" ,rust-anyhow-1)
         ("rust-cfg-if" ,rust-cfg-if-1)
         ("rust-eyre" ,rust-eyre-0.6)
         ("rust-hashbrown" ,rust-hashbrown-0.11)
-        ("rust-indexmap" ,rust-indexmap-1)
+        ("rust-indexmap" ,rust-indexmap-1.7)
         ("rust-indoc" ,rust-indoc-0.3)
         ("rust-inventory" ,rust-inventory-0.1)
         ("rust-libc" ,rust-libc-0.2)
@@ -44046,7 +44694,8 @@ Python code from a Rust binary is also supported.")
         ("rust-unindent" ,rust-unindent-0.1))
        #:cargo-development-inputs
        (("rust-assert-approx-eq" ,rust-assert-approx-eq-1)
-        ("rust-bitflags" ,rust-bitflags-1.2)
+        ("rust-bitflags" ,rust-bitflags-1)
+        ("rust-clap" ,rust-clap-2)
         ("rust-criterion" ,rust-criterion-0.3)
         ("rust-half" ,rust-half-1)
         ("rust-proptest" ,rust-proptest-0.10)
@@ -44866,25 +45515,26 @@ learnt from TrieMap and Sequence Trie.")
 (define-public rust-rand-0.8
   (package
     (name "rust-rand")
-    (version "0.8.4")
+    (version "0.8.5")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rand" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1n5wska2fbfj4dsfz8mc0pd0dgjlrb6c9anpk5mwym345rip6x9f"))))
+        (base32 "013l6931nn7gkc23jz5mm3qdhf93jjf0fg64nz2lp4i51qd8vbrl"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-libc" ,rust-libc-0.2)
         ("rust-log" ,rust-log-0.4)
         ("rust-packed-simd-2" ,rust-packed-simd-2-0.3)
         ("rust-rand-chacha" ,rust-rand-chacha-0.3)
         ("rust-rand-core" ,rust-rand-core-0.6)
-        ("rust-rand-hc" ,rust-rand-hc-0.3)
-        ("rust-serde" ,rust-serde-1))))
+        ("rust-serde" ,rust-serde-1))
+       #:cargo-development-inputs
+       (("rust-bincode" ,rust-bincode-1)
+        ("rust-rand-pcg" ,rust-rand-pcg-0.3))))
     (home-page "https://crates.io/crates/rand")
     (synopsis "Random number generators and other randomness functionality")
     (description
@@ -45022,20 +45672,22 @@ useful types and distributions, and some randomness-related algorithms.")
 (define-public rust-rand-chacha-0.3
   (package
     (name "rust-rand-chacha")
-    (version "0.3.0")
+    (version "0.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rand_chacha" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "03df2xh5nbdvwr17qm3sviaxa95r8yhm1nil2pr0pqf90p7ka9z1"))))
+        (base32 "123x2adin558xbhvqb8w4f6syjsdkmqff8cxwhmjacpsl1ihmhg6"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-ppv-lite86" ,rust-ppv-lite86-0.2)
-        ("rust-rand-core" ,rust-rand-core-0.6))))
+        ("rust-rand-core" ,rust-rand-core-0.6)
+        ("rust-serde" ,rust-serde-1))
+       #:cargo-development-inputs
+       (("rust-serde-json" ,rust-serde-json-1))))
     (home-page "https://crates.io/crates/rand_chacha")
     (synopsis "ChaCha random number generator")
     (description
@@ -45083,18 +45735,17 @@ useful types and distributions, and some randomness-related algorithms.")
 (define-public rust-rand-core-0.6
   (package
     (name "rust-rand-core")
-    (version "0.6.2")
+    (version "0.6.4")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rand_core" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1rvas1afjvd2827b8mf2ilg78h3ksl9npkrdds3wbw9x33mndkrl"))))
+        (base32 "0b4j2v4cb5krak1pv6kakv4sz6xcwbrmy2zckc32hsigbrwy82zc"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-getrandom" ,rust-getrandom-0.2)
         ("rust-serde" ,rust-serde-1))))
     (home-page "https://rust-random.github.io/book")
@@ -45181,30 +45832,25 @@ tools for implementation.")
 (define-public rust-rand-distr-0.4
   (package
     (name "rust-rand-distr")
-    (version "0.4.2")
+    (version "0.4.3")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rand_distr" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0brd2946xfapm2bmhmczfbwck041x7khsfhqxw1f24kxis7m8kcn"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           (substitute* "Cargo.toml"
-             ;; The resolver feature is not supported by our versions of Cargo.
-             (("resolver = \"2\".*") ""))))))
+        (base32 "0cgfwg3z0pkqhrl0x90c77kx70r6g9z4m6fxq9v0h2ibr2dhpjrj"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-average" ,rust-average-0.13)
-        ("rust-num-traits" ,rust-num-traits-0.2)
+       (("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-rand" ,rust-rand-0.8)
-        ("rust-serde" ,rust-serde-1)
-        ("rust-special" ,rust-special-0.8))
+        ("rust-serde" ,rust-serde-1))
        #:cargo-development-inputs
-       (("rust-rand-pcg" ,rust-rand-pcg-0.3))))
+       (("rust-average" ,rust-average-0.13)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-rand-pcg" ,rust-rand-pcg-0.3)
+        ("rust-special" ,rust-special-0.8))))
     (home-page "https://rust-random.github.io/book/")
     (synopsis "Sampling from random number distributions")
     (description "This package provides tool for sampling from random number
@@ -45261,7 +45907,7 @@ distributions.")
 (define-public rust-rand-hc-0.3
   (package
     (name "rust-rand-hc")
-    (version "0.3.0")
+    (version "0.3.1")
     (source
      (origin
        (method url-fetch)
@@ -45269,11 +45915,10 @@ distributions.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0wra6ar22zdjkry9dsq1mg620m4h3qb9s8rfykkz4im4crqfz41i"))))
+        (base32 "1rwpykyvhkxs4jvqdja3mzp9dqaqamzn113cxaigs9z2dmcry7nm"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-rand-core" ,rust-rand-core-0.6))))
     (home-page "https://crates.io/crates/rand_hc")
     (synopsis "HC128 random number generator")
@@ -45466,7 +46111,7 @@ generator based on timing jitter.")
 (define-public rust-rand-pcg-0.3
   (package
     (name "rust-rand-pcg")
-    (version "0.3.0")
+    (version "0.3.1")
     (source
       (origin
         (method url-fetch)
@@ -45474,7 +46119,7 @@ generator based on timing jitter.")
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "1w47awndfhgcc31zbji66pwndqmc6lsyairqi9b17f82f19riqbx"))))
+          "0gn79wzs5b19iivybwa09wv4lhi4kbcqciasiqqynggnr8cd1jjr"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -45868,27 +46513,23 @@ accessors.")
 (define-public rust-rayon-1
   (package
     (name "rust-rayon")
-    (version "1.5.1")
+    (version "1.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rayon" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "143dl2453bazgk7rwjrickmyqd0ks3q69nfz8axcins19n0clsn0"))))
+        (base32 "1dsr0yyfgdsg8ggh37kq678mfa5j3js6p16ksb7knazhml9s5cvd"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-autocfg" ,rust-autocfg-1)
-        ("rust-crossbeam-deque" ,rust-crossbeam-deque-0.8)
-        ("rust-either" ,rust-either-1)
+       (("rust-either" ,rust-either-1)
         ("rust-rayon-core" ,rust-rayon-core-1))
        #:cargo-development-inputs
-       (("rust-docopt" ,rust-docopt-1)
-        ("rust-lazy-static" ,rust-lazy-static-1)
+       (("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-rand" ,rust-rand-0.8)
-        ("rust-rand-xorshift" ,rust-rand-xorshift-0.3)
-        ("rust-serde" ,rust-serde-1))))
+        ("rust-rand-xorshift" ,rust-rand-xorshift-0.3))))
     (home-page "https://github.com/rayon-rs/rayon")
     (synopsis "Simple work-stealing parallelism for Rust")
     (description
@@ -45947,14 +46588,14 @@ Rust.")
 (define-public rust-rayon-core-1
   (package
     (name "rust-rayon-core")
-    (version "1.9.1")
+    (version "1.10.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rayon-core" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "13kdcnqp2p1a5a3amamfjpnm7ay463vq4dfxy4rrh9shr3i210fp"))))
+        (base32 "1lvavqk42lmll47q008j8y6nw54f3sfvcjlbaa26iaq0bnpi1i6a"))))
     (build-system cargo-build-system)
     (arguments
      ;; One of the tests attempts to overflow the stack, but the compiler has
@@ -45964,12 +46605,11 @@ Rust.")
        (("rust-crossbeam-channel" ,rust-crossbeam-channel-0.5)
         ("rust-crossbeam-deque" ,rust-crossbeam-deque-0.8)
         ("rust-crossbeam-utils" ,rust-crossbeam-utils-0.8)
-        ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-num-cpus" ,rust-num-cpus-1))
        #:cargo-development-inputs
        (("rust-libc" ,rust-libc-0.2)
-        ("rust-rand" ,rust-rand-0.7)
-        ("rust-rand-xorshift" ,rust-rand-xorshift-0.2)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-rand-xorshift" ,rust-rand-xorshift-0.3)
         ("rust-scoped-tls" ,rust-scoped-tls-1))))
     (home-page "https://github.com/rayon-rs/rayon")
     (synopsis "Core APIs for Rayon")
@@ -46322,14 +46962,14 @@ memory to speed up reallocation.")
 (define-public rust-regex-1
   (package
     (name "rust-regex")
-    (version "1.6.0")
+    (version "1.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "regex" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "12wqvyh4i75j7pc8sgvmqh4yy3qaj4inc4alyv1cdf3lf4kb6kjc"))))
+        (base32 "0czp6hxg02lm02hvlhp9xjkd65cjcagw119crnaznwd5idsabaj8"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -46653,6 +47293,26 @@ uses finite automata and guarantees linear time matching on all inputs.")
        #:cargo-development-inputs
        (("rust-doc-comment" ,rust-doc-comment-0.3))))))
 
+(define-public rust-rend-0.3
+  (package
+    (name "rust-rend")
+    (version "0.3.6")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "rend" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "15fz3rw8c74586kxl6dcdn4s864ph884wfpg9shgnbrnnss69bvr"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs (("rust-bytecheck" ,rust-bytecheck-0.6))))
+    (home-page "https://github.com/rkyv/rend")
+    (synopsis "Endian-aware primitives for Rust")
+    (description
+     "This package provides endian-aware primitives for Rust.")
+    (license license:expat)))
+
 (define-public rust-reopen-0.3
   (package
     (name "rust-reopen")
@@ -47553,6 +48213,27 @@ rust.")
 and table-based tests.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-rstest-0.11
+  (package
+    (inherit rust-rstest-0.15)
+    (name "rust-rstest")
+    (version "0.11.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "rstest" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "02nh4kpfg1j4v95fhc0bxx9ak3wnz5jg70f94z92wfzyx9mcd212"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs (("rust-cfg-if" ,rust-cfg-if-1)
+                       ("rust-proc-macro2" ,rust-proc-macro2-1)
+                       ("rust-quote" ,rust-quote-1)
+                       ("rust-rustc-version" ,rust-rustc-version-0.4)
+                       ("rust-syn" ,rust-syn-1))))))
+
 (define-public rust-rstest-0.10
   (package
     (inherit rust-rstest-0.15)
@@ -48502,8 +49183,41 @@ hex conversion traits.")
         (sha256
           (base32 "07pff94vqc1mhrqp9i06xzayiad4xfx7588zkqsdw875lpkqrsqc"))))))
 
+(define-public rust-rustc-rayon-0.4
+  (package
+    (name "rust-rustc-rayon")
+    (version "0.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "rustc-rayon" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0ykjr1i56jmi8ykkcr7x555wnxki1vsi703mz6n2x7k0naqg0y8s"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f                      ;XXX can not find rayon?
+       #:cargo-inputs
+       (("rust-autocfg" ,rust-autocfg-1)
+        ("rust-crossbeam-deque" ,rust-crossbeam-deque-0.7)
+        ("rust-either" ,rust-either-1)
+        ("rust-rustc-rayon-core" ,rust-rustc-rayon-core-0.4))
+       #:cargo-development-inputs
+       (("rust-docopt" ,rust-docopt-1))))
+    (home-page "https://github.com/rust-lang/rustc-rayon")
+    (synopsis
+     "Simple work-stealing parallelism for Rust - fork for rustc")
+    (description
+     "Rustc-rayon is a fork of the Rayon crate.  It adds a few \"in progress\"
+features that rustc is using, mostly around deadlock detection.  These features
+are not stable and should not be used by others -- though they may find their
+way into rayon proper at some point.  In general, if you are not rustc, you
+should be using the real rayon crate, not rustc-rayon.")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-rustc-rayon-0.3
   (package
+    (inherit rust-rustc-rayon-0.4)
     (name "rust-rustc-rayon")
     (version "0.3.0")
     (source
@@ -48515,7 +49229,6 @@ hex conversion traits.")
        (sha256
         (base32
          "0fjvy8bf0hd1zq9d3fdxbdp4z4p1k8jfyx51k5qip3wk1pwnf9zk"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:tests? #f
        #:cargo-inputs
@@ -48529,20 +49242,39 @@ hex conversion traits.")
         ("rust-rand" ,rust-rand-0.6)
         ("rust-rand-xorshift" ,rust-rand-xorshift-0.1)
         ("rust-serde" ,rust-serde-1)
-        ("rust-serde-derive" ,rust-serde-derive-1))))
+        ("rust-serde-derive" ,rust-serde-derive-1))))))
+
+(define-public rust-rustc-rayon-core-0.4
+  (package
+    (name "rust-rustc-rayon-core")
+    (version "0.4.1")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "rustc-rayon-core" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0c4cf58056ya3282c24bnyq39cwm1rd1m96lymfbb6yvl12929h2"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:tests? #f   ;XXX cannot find rayon_core?
+       #:cargo-inputs
+       (("rust-crossbeam-channel" ,rust-crossbeam-channel-0.5)
+        ("rust-crossbeam-deque" ,rust-crossbeam-deque-0.8)
+        ("rust-crossbeam-utils" ,rust-crossbeam-utils-0.8)
+        ("rust-num-cpus" ,rust-num-cpus-1))))
     (home-page "https://github.com/rust-lang/rustc-rayon")
-    (synopsis
-     "Simple work-stealing parallelism for Rust - fork for rustc")
+    (synopsis "Core APIs for Rayon - fork for rustc")
     (description
-     "Rustc-rayon is a fork of the Rayon crate.  It adds a few \"in progress\"
-features that rustc is using, mostly around deadlock detection.  These features
-are not stable and should not be used by others -- though they may find their
-way into rayon proper at some point.  In general, if you are not rustc, you
-should be using the real rayon crate, not rustc-rayon.")
+     "Note: This package is an unstable fork made for use in rustc
+
+Rayon-core represents the \"core, stable\" APIs of Rayon: join, scope, and so
+forth, as well as the ability to create custom thread-pools with ThreadPool.")
     (license (list license:asl2.0 license:expat))))
 
 (define-public rust-rustc-rayon-core-0.3
   (package
+    (inherit rust-rustc-rayon-core-0.4)
     (name "rust-rustc-rayon-core")
     (version "0.3.0")
     (source
@@ -48554,7 +49286,6 @@ should be using the real rayon crate, not rustc-rayon.")
         (sha256
          (base32
           "1cwc50mcclzfmhmi87953fjk6cc9ppmchn9mlwzfllq03y1jf97a"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:tests? #f
        #:cargo-inputs
@@ -48567,15 +49298,7 @@ should be using the real rayon crate, not rustc-rayon.")
        (("rust-libc" ,rust-libc-0.2)
         ("rust-rand" ,rust-rand-0.6)
         ("rust-rand-xorshift" ,rust-rand-xorshift-0.1)
-        ("rust-scoped-tls" ,rust-scoped-tls-1))))
-    (home-page "https://github.com/rust-lang/rustc-rayon")
-    (synopsis "Core APIs for Rayon - fork for rustc")
-    (description
-     "Note: This package is an unstable fork made for use in rustc
-
-Rayon-core represents the \"core, stable\" APIs of Rayon: join, scope, and so
-forth, as well as the ability to create custom thread-pools with ThreadPool.")
-    (license (list license:asl2.0 license:expat))))
+        ("rust-scoped-tls" ,rust-scoped-tls-1))))))
 
 (define-public rust-rustc-serialize-0.3
   (package
@@ -48812,8 +49535,28 @@ rustc compiler.")
      "This package provides a tool to manipulate rustdoc comments.")
     (license license:asl2.0)))
 
+(define-public rust-rustfix-0.6
+  (package
+    (name "rust-rustfix")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rustfix" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0apkjxv3z70vhnyz2kpwsivvndk6qk7kkp0rf7sg8pk7q1gy02vg"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/rust-lang/rustfix")
+    (synopsis "Automatically apply the suggestions made by rustc")
+    (description "Automatically apply the suggestions made by rustc.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-rustfix-0.5
   (package
+    (inherit rust-rustfix-0.6)
     (name "rust-rustfix")
     (version "0.5.1")
     (source
@@ -48839,12 +49582,7 @@ rustc compiler.")
         ("rust-env-logger" ,rust-env-logger-0.6)
         ("rust-log" ,rust-log-0.4)
         ("rust-proptest" ,rust-proptest-0.9)
-        ("rust-tempdir" ,rust-tempdir-0.3))))
-    (home-page "https://github.com/rust-lang/rustfix")
-    (synopsis "Automatically apply the suggestions made by rustc")
-    (description
-     "Automatically apply the suggestions made by rustc.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-tempdir" ,rust-tempdir-0.3))))))
 
 (define-public rust-rustfix-0.4
   (package/inherit rust-rustfix-0.5
@@ -48865,8 +49603,51 @@ rustc compiler.")
         `(("rust-failure" ,rust-failure-0.1)
           ,@(alist-delete "rust-anyhow" cargo-inputs)))))))
 
+(define-public rust-rustix-0.36
+  (package
+    (name "rust-rustix")
+    (version "0.36.4")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "rustix" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "08vwnvf76nkgb2bbxf8cn51c43x6sc9k462khrwbb2z0g19fi4yb"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-development-inputs
+       (("rust-criterion" ,rust-criterion-0.4)
+        ("rust-ctor" ,rust-ctor-0.1)
+        ("rust-errno" ,rust-errno-0.2)
+        ("rust-flate2" ,rust-flate2-1)
+        ("rust-io-lifetimes" ,rust-io-lifetimes-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-memoffset" ,rust-memoffset-0.7)
+        ("rust-serial-test" ,rust-serial-test-0.6))
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-cc" ,rust-cc-1)
+        ("rust-compiler-builtins" ,rust-compiler-builtins-0.1)
+        ("rust-errno" ,rust-errno-0.2)
+        ("rust-io-lifetimes" ,rust-io-lifetimes-1)
+        ("rust-itoa" ,rust-itoa-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-linux-raw-sys" ,rust-linux-raw-sys-0.1)
+        ("rust-once-cell" ,rust-once-cell-1)
+        ("rust-rustc-std-workspace-alloc" ,rust-rustc-std-workspace-alloc-1)
+        ("rust-rustc-std-workspace-core" ,rust-rustc-std-workspace-core-1)
+        ("rust-windows-sys" ,rust-windows-sys-0.42))))
+    (home-page "https://github.com/bytecodealliance/rustix")
+    (synopsis "Safe Rust bindings to POSIX syscalls")
+    (description
+     "This package provides safe Rust bindings to POSIX syscalls.")
+    ;; Apache 2.0, Apache 2.0 with LLVM exception, or Expat.
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-rustix-0.35
   (package
+    (inherit rust-rustix-0.36)
     (name "rust-rustix")
     (version "0.35.13")
     (source (origin
@@ -48876,7 +49657,6 @@ rustc compiler.")
               (sha256
                (base32
                 "1yfmkj5nwghxd3nha5ywf1cj6zqh44qwm0cavwifr1ppcmnilykj"))))
-    (build-system cargo-build-system)
     (arguments
      (list #:cargo-inputs
            `(("rust-bitflags" ,rust-bitflags-1)
@@ -48901,14 +49681,7 @@ rustc compiler.")
              ("rust-libc" ,rust-libc-0.2)
              ("rust-memoffset" ,rust-memoffset-0.6)
              ("rust-serial-test" ,rust-serial-test-0.6)
-             ("rust-tempfile" ,rust-tempfile-3))))
-    (home-page "https://github.com/bytecodealliance/rustix")
-    (synopsis "Safe Rust bindings to POSIX syscalls")
-    (description
-     "This package provides safe Rust bindings to POSIX syscalls.")
-    ;; Apache 2.0, Apache 2.0 with LLVM exception, or Expat.
-    (license (list license:asl2.0
-                   license:expat))))
+             ("rust-tempfile" ,rust-tempfile-3))))))
 
 (define-public rust-rustls-0.20
   (package
@@ -49622,8 +50395,37 @@ sub-processes using a fork-like interface.")
         (base32
          "1n3iw9kaq70dw1rvvma0gjwydbj0f2mvvqvrva69f5cl6yv1dnd0"))))))
 
+(define-public rust-rkyv-0.7
+  (package
+    (name "rust-rkyv")
+    (version "0.7.39")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "rkyv" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "05gdspzw03hq6l58si4ixfj5xd27ljw6fiqksggnvn87bd4b7hnf"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs (("rust-bytecheck" ,rust-bytecheck-0.6)
+                       ("rust-hashbrown" ,rust-hashbrown-0.12)
+                       ("rust-indexmap" ,rust-indexmap-1)
+                       ("rust-ptr-meta" ,rust-ptr-meta-0.1)
+                       ("rust-rend" ,rust-rend-0.3)
+                       ("rust-rkyv-derive" ,rust-rkyv-derive-0.7)
+                       ("rust-seahash" ,rust-seahash-4)
+                       ("rust-smallvec" ,rust-smallvec-1)
+                       ("rust-tinyvec" ,rust-tinyvec-1)
+                       ("rust-uuid" ,rust-uuid-1))))
+    (home-page "https://github.com/rkyv/rkyv")
+    (synopsis "Zero-copy deserialization framework for Rust")
+    (description "Rkyv is a zero-copy deserialization framework for Rust.")
+    (license license:expat)))
+
 (define-public rust-rkyv-0.6
   (package
+    (inherit rust-rkyv-0.7)
     (name "rust-rkyv")
     (version "0.6.7")
     (source
@@ -49633,7 +50435,6 @@ sub-processes using a fork-like interface.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "01wsn0i8gsw958j892w8i4fyzjdsyhrh7c5zajig049kbqz5n4yb"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -49641,14 +50442,35 @@ sub-processes using a fork-like interface.")
         ("rust-memoffset" ,rust-memoffset-0.6)
         ("rust-ptr-meta" ,rust-ptr-meta-0.1)
         ("rust-rkyv-derive" ,rust-rkyv-derive-0.6)
-        ("rust-seahash" ,rust-seahash-4))))
+        ("rust-seahash" ,rust-seahash-4))))))
+
+
+(define-public rust-rkyv-derive-0.7
+  (package
+    (name "rust-rkyv-derive")
+    (version "0.7.39")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "rkyv_derive" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1i1lmir3lm8zj8k1an7j2rchv1admqhysh6r6bfkcgmmi3fdmbkf"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(;#:skip-build? #t
+       #:cargo-inputs (("rust-proc-macro2" ,rust-proc-macro2-1)
+                       ("rust-quote" ,rust-quote-1)
+                       ("rust-syn" ,rust-syn-1))))
     (home-page "https://github.com/rkyv/rkyv")
-    (synopsis "Zero-copy deserialization framework for Rust")
-    (description "Rkyv is a zero-copy deserialization framework for Rust.")
+    (synopsis "Derive macro for zero-copy deserialization framework")
+    (description "This package provides a Derive macro for the rkyv
+deserialization framework.")
     (license license:expat)))
 
 (define-public rust-rkyv-derive-0.6
   (package
+    (inherit rust-rkyv-derive-0.7)
     (name "rust-rkyv-derive")
     (version "0.6.7")
     (source
@@ -49658,23 +50480,17 @@ sub-processes using a fork-like interface.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "1mc7rnps41gdywahsffqlypsp9jqmp0r6hlh2nxm31bddfgli3xs"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-proc-macro2" ,rust-proc-macro2-1)
         ("rust-quote" ,rust-quote-1)
-        ("rust-syn" ,rust-syn-1))))
-    (home-page "https://github.com/rkyv/rkyv")
-    (synopsis "Derive macro for zero-copy deserialization framework")
-    (description "This package provides a Derive macro for the rkyv
-deserialization framework.")
-    (license license:expat)))
+        ("rust-syn" ,rust-syn-1))))))
 
 (define-public rust-ryu-1
   (package
     (name "rust-ryu")
-    (version "1.0.3")
+    (version "1.0.12")
     (source
       (origin
         (method url-fetch)
@@ -49682,15 +50498,15 @@ deserialization framework.")
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "0xlx9ybzncrb7d6r9533g8ydlg6mr252pfzl4g9cqaqkpvk24mjk"))))
+          "1ppcgnyfs12p545bl7762jp9b11rlzmgb7yzrr5lnzb8xm1rfjvv"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-no-panic" ,rust-no-panic-0.1))
        #:cargo-development-inputs
        (("rust-num-cpus" ,rust-num-cpus-1)
-        ("rust-rand" ,rust-rand-0.7)
-        ("rust-rand-xorshift" ,rust-rand-xorshift-0.2))))
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-rand-xorshift" ,rust-rand-xorshift-0.3))))
     (home-page "https://github.com/dtolnay/ryu")
     (synopsis "Fast floating point to string conversion")
     (description
@@ -51121,18 +51937,17 @@ macOS and iOS.")
 (define-public rust-semver-1
   (package
     (name "rust-semver")
-    (version "1.0.3")
+    (version "1.0.16")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "semver" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1gna1p10i86sf1pqfqndkwl0wks35x84yvjw77c74ckzxrbsqfjz"))))
+        (base32 "0amsbj3572r1kx5wdcpcgfhfwbmcc17axp9adc6nkiwg6xkrbg2q"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-serde" ,rust-serde-1))))
     (home-page "https://docs.rs/crate/semver")
     (synopsis "Semantic version parsing and comparison")
@@ -51412,14 +52227,14 @@ fragment of code.")
 (define-public rust-serde-1
   (package
     (name "rust-serde")
-    (version "1.0.133")
+    (version "1.0.152")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "serde" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "16lq33l09nkm0hxdhfjjmh3yjv83rrcqw9lbxb8y4q3va5km0mlp"))))
+        (base32 "1ysykpc4a9f1yn7zikdwhyfs0bpa7mlc8vsm7sl4glr1606iyzdv"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -51479,21 +52294,21 @@ fragment of code.")
 (define-public rust-serde-big-array-0.3
   (package
     (name "rust-serde-big-array")
-    (version "0.3.2")
+    (version "0.3.3")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "serde-big-array" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0qpy3nk3dpxrrmcfmcnsijad10yi0jxy1x6gc6bbwywma9vhxchq"))))
+        (base32 "190hrlbilvarn5almh3n2s4di9qagxnz3chv6xaw1c72dygzacfd"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-serde" ,rust-serde-1)
-        ("rust-serde-derive" ,rust-serde-derive-1))
+       (("rust-serde" ,rust-serde-1))
        #:cargo-development-inputs
-       (("rust-serde-json" ,rust-serde-json-1))))
+       (("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-serde-json" ,rust-serde-json-1))))
     (home-page "https://github.com/est31/serde-big-array")
     (synopsis "Big array helper for serde")
     (description "This package provides a big array helper for serde.")
@@ -51542,7 +52357,7 @@ fragment of code.")
 (define-public rust-serde-bytes-0.11
   (package
     (name "rust-serde-bytes")
-    (version "0.11.5")
+    (version "0.11.8")
     (source
      (origin
        (method url-fetch)
@@ -51550,11 +52365,10 @@ fragment of code.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1fcb6sw8wkrj4ylm118wkb31hw124nkjnqyhbgqnd8w85zfhgbhn"))))
+        (base32 "06a8lv3x1zm1ynzq6xri4k46zklnzh62i6y47w4rjvxkypzwb3bi"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-serde" ,rust-serde-1))
        #:cargo-development-inputs
        (("rust-bincode" ,rust-bincode-1)
@@ -51767,22 +52581,21 @@ TOML/JSON/MessagePack strings and serializable values.")
 (define-public rust-serde-derive-1
   (package
     (name "rust-serde-derive")
-    (version "1.0.133")
+    (version "1.0.152")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "serde-derive" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0dym0l8a0pch0mkqnhrf89n4wngzwf0d1z88hb8dhs456acic87d"))))
+        (base32 "07jlbk3khspawlqayr5lhzgqirv031ap4p8asw199l7ciq8psj5g"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
+     `(#:skip-build? #t
+       #:cargo-inputs
        (("rust-proc-macro2" ,rust-proc-macro2-1)
         ("rust-quote" ,rust-quote-1)
-        ("rust-syn" ,rust-syn-1))
-       #:cargo-development-inputs
-       (("rust-serde" ,rust-serde-1))))
+        ("rust-syn" ,rust-syn-1))))
     (home-page "https://serde.rs")
     (synopsis
      "Macros 1.1 implementation of #[derive(Serialize, Deserialize)]")
@@ -51844,7 +52657,7 @@ derive macros.")
 (define-public rust-serde-ignored-0.1
   (package
     (name "rust-serde-ignored")
-    (version "0.1.2")
+    (version "0.1.7")
     (source
      (origin
        (method url-fetch)
@@ -51853,7 +52666,7 @@ derive macros.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0bzz3546g3p01hgwh6jh0gyqdwc28xcp3pir4al2wbsgs4wpsb0w"))))
+         "19j5mrngznhxa7yfvxwmc4dc0mdzvm7w92i0m4adz2xshx04mswl"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -51871,14 +52684,14 @@ data.  This crate provides a wrapper that works with any existing Serde
 (define-public rust-serde-json-1
   (package
     (name "rust-serde-json")
-    (version "1.0.74")
+    (version "1.0.91")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "serde-json" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0hiixjnrnrvvpyh58av73ds924zgzi4wl0mv8p9nan0w0v6vjazf"))))
+        (base32 "10v8vb4959ayycw1zmqvxxi758djqkskchj6qal0fjbi6daj6z47"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -51888,7 +52701,10 @@ data.  This crate provides a wrapper that works with any existing Serde
         ("rust-serde" ,rust-serde-1))
        #:cargo-development-inputs
        (("rust-automod" ,rust-automod-1)
+        ("rust-indoc" ,rust-indoc-1)
+        ("rust-ref-cast" ,rust-ref-cast-1)
         ("rust-rustversion" ,rust-rustversion-1)
+        ("rust-serde" ,rust-serde-1)
         ("rust-serde-bytes" ,rust-serde-bytes-0.11)
         ("rust-serde-derive" ,rust-serde-derive-1)
         ("rust-serde-stacker" ,rust-serde-stacker-0.1)
@@ -51927,7 +52743,7 @@ data.  This crate provides a wrapper that works with any existing Serde
 (define-public rust-serde-path-to-error-0.1
   (package
     (name "rust-serde-path-to-error")
-    (version "0.1.4")
+    (version "0.1.9")
     (source
       (origin
         (method url-fetch)
@@ -51935,12 +52751,10 @@ data.  This crate provides a wrapper that works with any existing Serde
         (file-name
           (string-append name "-" version ".tar.gz"))
         (sha256
-          (base32
-            "0n5ilbsxvi174m2fd506ivd43kws0yh523li1xz0zqh60ngi1xj2"))))
+         (base32 "0hbkdhmz82hwx5bxasym776f74jlvnivsx00l4qi7jb3nli4zc16"))))
     (build-system cargo-build-system)
     (arguments
-      `(#:skip-build? #t
-        #:cargo-inputs
+      `(#:cargo-inputs
         (("rust-serde" ,rust-serde-1))
         #:cargo-development-inputs
         (("rust-serde-derive" ,rust-serde-derive-1)
@@ -51991,21 +52805,25 @@ commonly used by Ruby on Rails via Rack.")
 (define-public rust-serde-repr-0.1
   (package
     (name "rust-serde-repr")
-    (version "0.1.6")
+    (version "0.1.10")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "serde_repr" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0xhwamlb1ax3w87mpq0awcphwchprh93y1hb47rm3c0p3favgiid"))))
+        (base32 "0knbzc87nlrfnm1jh3zmx77hxflnzk0xl8xcv7jvn3m2fkxcjpls"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-proc-macro2" ,rust-proc-macro2-1)
         ("rust-quote" ,rust-quote-1)
-        ("rust-syn" ,rust-syn-1))))
+        ("rust-syn" ,rust-syn-1))
+       #:cargo-development-inputs
+       (("rust-rustversion" ,rust-rustversion-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-trybuild" ,rust-trybuild-1))))
     (home-page "https://github.com/dtolnay/serde-repr")
     (synopsis "Serialize and deserialize C-like enum as underlying repr")
     (description
@@ -52017,7 +52835,7 @@ of a C-like enum.")
 (define-public rust-serde-stacker-0.1
   (package
     (name "rust-serde-stacker")
-    (version "0.1.4")
+    (version "0.1.7")
     (source
      (origin
        (method url-fetch)
@@ -52026,7 +52844,7 @@ of a C-like enum.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1qlfpy0nmxrvahz4hs9p1y84rb0vy6mbxn1lfgvq6fryls8j7jgl"))))
+         "1zgwd22cswfsjsxmnpf97nw5fzyv0s6mif5blbb948q7qgskvxrm"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -52044,7 +52862,7 @@ by dynamically growing the stack.")
 (define-public rust-serde-test-1
   (package
     (name "rust-serde-test")
-    (version "1.0.113")
+    (version "1.0.152")
     (source
      (origin
        (method url-fetch)
@@ -52053,10 +52871,11 @@ by dynamically growing the stack.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "02s7zjs12m5abk13j5farc00rzissk1anpl015vawpzz914jsan3"))))
+         "17pdigm0w1wvch7vpnk13199wn3gmkb0883l0hr53qv75l6j249n"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
+     `(#:tests? #f                  ; Requires a newer rust
+       #:cargo-inputs
        (("rust-serde" ,rust-serde-1))
        #:cargo-development-inputs
        (("rust-serde" ,rust-serde-1)
@@ -52118,21 +52937,23 @@ by dynamically growing the stack.")
 (define-public rust-serde-urlencoded-0.7
   (package
     (name "rust-serde-urlencoded")
-    (version "0.7.0")
+    (version "0.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "serde_urlencoded" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1s9wnjrak5a0igfhcghhz51kvi7n010j5rs9lmhd5hfrz2kmgypd"))))
+        (base32 "1zgklbdaysj3230xivihs30qi5vkhigg323a9m62k8jwf4a1qjfk"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-form-urlencoded" ,rust-form-urlencoded-1)
-        ("rust-itoa" ,rust-itoa-0.4)
+        ("rust-itoa" ,rust-itoa-1)
         ("rust-ryu" ,rust-ryu-1)
-        ("rust-serde" ,rust-serde-1))))
+        ("rust-serde" ,rust-serde-1))
+       #:cargo-development-inputs
+       (("rust-serde-derive" ,rust-serde-derive-1))))
     (home-page "https://github.com/nox/serde_urlencoded")
     (synopsis "`x-www-form-urlencoded` meets Serde")
     (description
@@ -52214,23 +53035,24 @@ for later processing.")
 (define-public rust-serde-yaml-0.8
   (package
     (name "rust-serde-yaml")
-    (version "0.8.17")
+    (version "0.8.26")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "serde_yaml" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "08xvb5zxz3x5dgx0fy1q0aq9aa9fibcvi75333wnnwk1mga4wr8m"))))
+        (base32 "06y7gxy312mink8nsnmci9cw0ykpgsdcxmayg0snmdbnnwrp92jp"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-dtoa" ,rust-dtoa-0.4)
-        ("rust-linked-hash-map" ,rust-linked-hash-map-0.5)
+       (("rust-indexmap" ,rust-indexmap-1)
+        ("rust-ryu" ,rust-ryu-1)
         ("rust-serde" ,rust-serde-1)
         ("rust-yaml-rust" ,rust-yaml-rust-0.4))
        #:cargo-development-inputs
-       (("rust-indoc" ,rust-indoc-1)
+       (("rust-anyhow" ,rust-anyhow-1)
+        ("rust-indoc" ,rust-indoc-1)
         ("rust-serde-derive" ,rust-serde-derive-1))))
     (home-page "https://github.com/dtolnay/serde-yaml")
     (synopsis "YAML support for Serde")
@@ -53763,7 +54585,7 @@ designed for @code{immutable.rs}.")
 (define-public rust-slab-0.4
   (package
     (name "rust-slab")
-    (version "0.4.2")
+    (version "0.4.8")
     (source
       (origin
         (method url-fetch)
@@ -53771,8 +54593,17 @@ designed for @code{immutable.rs}.")
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "1y59xsa27jk84sxzswjk60xcjf8b4fm5960jwpznrrcmasyva4f1"))))
+          "0bgwxig8gkqp6gz8rvrpdj6qwa10karnsxwx7wsj5ay8kcf3aa35"))))
     (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-development-inputs
+       (("rust-rustversion" ,rust-rustversion-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-test" ,rust-serde-test-1))
+       #:cargo-inputs (("rust-autocfg" ,rust-autocfg-1)
+                       ("rust-serde" ,rust-serde-1))))
+    (native-inputs
+     (list rust-autocfg-1))
     (home-page "https://github.com/carllerche/slab")
     (synopsis "Pre-allocated storage for a uniform data type")
     (description "This create provides a pre-allocated storage for a uniform
@@ -54083,14 +54914,14 @@ implementations.")
 (define-public rust-slog-stdlog-4
   (package
     (name "rust-slog-stdlog")
-    (version "4.1.0")
+    (version "4.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "slog-stdlog" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0nhg9mwaf5y1gs2f7nbz3r9fngq0g3d3qvz66z5lzgxd09rsna42"))))
+        (base32 "0gpsf62ckblpc6a70dnhsz677c7s5cz4glpqsf8p5bmvwnnb41k7"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -54258,7 +55089,7 @@ inline storage.")
 (define-public rust-smallvec-1
   (package
     (name "rust-smallvec")
-    (version "1.9.0")
+    (version "1.10.0")
     (source
      (origin
        (method url-fetch)
@@ -54267,14 +55098,16 @@ inline storage.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1lfss4vs5z5njm3ac9c499s5m1gphzm5a7gxcbw1zncpjmsdpl1g"))))
+         "1q2k15fzxgwjpcdv3f323w24rbbfyv711ayz85ila12lg7zbw1x5"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-arbitrary" ,rust-arbitrary-1)
         ("rust-serde" ,rust-serde-1))
        #:cargo-development-inputs
-       (("rust-bincode" ,rust-bincode-1))))
+       (("rust-bincode" ,rust-bincode-1)
+        ("rust-debugger-test" ,rust-debugger-test-0.1)
+        ("rust-debugger-test-parser" ,rust-debugger-test-parser-0.1))))
     (home-page "https://github.com/servo/rust-smallvec")
     (synopsis "Small vector optimization")
     (description
@@ -54898,6 +55731,57 @@ maximal amount of configuration possible intended.")
      "An RSpec inspired minimal testing framework for Rust.")
     (license license:expat)))
 
+(define-public rust-speedy-0.8
+  (package
+    (name "rust-speedy")
+    (version "0.8.5")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "speedy" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "02crzzdlaadz2ya2ij86wamsixbklhp6lbbnji6wz46rkdhqdmip"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs (("rust-chrono" ,rust-chrono-0.4)
+                       ("rust-glam" ,rust-glam-0.17)
+                       ("rust-indexmap" ,rust-indexmap-1)
+                       ("rust-memoffset" ,rust-memoffset-0.7)
+                       ("rust-regex" ,rust-regex-1)
+                       ("rust-smallvec" ,rust-smallvec-1)
+                       ("rust-speedy-derive" ,rust-speedy-derive-0.8)
+                       ("rust-uuid" ,rust-uuid-1))))
+    (home-page "https://github.com/koute/speedy")
+    (synopsis "Binary serialization framework")
+    (description
+     "This package provides a fast binary serialization framework for Rust.")
+    ;; The user can choose either license.
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-speedy-derive-0.8
+  (package
+    (name "rust-speedy-derive")
+    (version "0.8.5")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "speedy-derive" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1xx4v0h2i6ncnvi7v5y5l44xh12v4pjfkakahk6f27c0c084lazb"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs (("rust-proc-macro2" ,rust-proc-macro2-1)
+                       ("rust-quote" ,rust-quote-1)
+                       ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/koute/speedy")
+    (synopsis "Binary serialization framework")
+    (description
+     "This package provides a fast binary serialization framework,
+@code{#[derive(Readable, Writable)]} support")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-spin-0.9
   (package
     (name "rust-spin")
@@ -55235,6 +56119,22 @@ service.")
      "This package provides a single-producer single-consumer lock-free buffer.")
     (license license:expat)))
 
+(define-public rust-sptr-0.3
+  (package
+    (name "rust-sptr")
+    (version "0.3.2")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "sptr" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32 "0shddkys046nnrng929mrnjjrh31mlxl95ky7dgxd6i4kclkk6rv"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/Gankra/sptr")
+    (synopsis "The Strict Provenance Polyfill")
+    (description "This package provides sptr, The Strict Provenance Polyfill.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-sqlite-0.26
   (package
     (name "rust-sqlite")
@@ -56087,7 +56987,7 @@ configurable byte storage.")
 (define-public rust-string-cache-0.8
   (package
     (name "rust-string-cache")
-    (version "0.8.0")
+    (version "0.8.4")
     (source
       (origin
         (method url-fetch)
@@ -56096,13 +56996,14 @@ configurable byte storage.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "12i0synp8l0qpnzi5qki4pjq3jx28ykikyffjjjg6fsfxddwfh19"))))
+          "020ahbx93gp85s3k3k5c342j10ml0b77i4q4hri180xmlavr8d11"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-new-debug-unreachable" ,rust-new-debug-unreachable-1)
-        ("rust-phf-shared" ,rust-phf-shared-0.8)
+       (("rust-new-debug-unreachable" ,rust-new-debug-unreachable-1)
+        ("rust-once-cell" ,rust-once-cell-1)
+        ("rust-parking-lot" ,rust-parking-lot-0.12)
+        ("rust-phf-shared" ,rust-phf-shared-0.10)
         ("rust-precomputed-hash" ,rust-precomputed-hash-0.1)
         ("rust-serde" ,rust-serde-1))))
     (home-page "https://github.com/servo/string-cache")
@@ -56142,7 +57043,7 @@ developed as part of the Servo project.")
 (define-public rust-string-cache-codegen-0.5
   (package
     (name "rust-string-cache-codegen")
-    (version "0.5.1")
+    (version "0.5.2")
     (source
       (origin
         (method url-fetch)
@@ -56151,12 +57052,12 @@ developed as part of the Servo project.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "15vbk5i7kkj5bbx7f0fi477js4svw5py39gi4rk74anj35g8wk7j"))))
+          "1249fafaa7r3m67zxcbcw1bddanygv13r3209bvlzgi2ny4h5cvb"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-phf-generator" ,rust-phf-generator-0.8)
-        ("rust-phf-shared" ,rust-phf-shared-0.8)
+       (("rust-phf-generator" ,rust-phf-generator-0.10)
+        ("rust-phf-shared" ,rust-phf-shared-0.10)
         ("rust-proc-macro2" ,rust-proc-macro2-1)
         ("rust-quote" ,rust-quote-1))))
     (home-page "https://github.com/servo/string-cache")
@@ -57040,7 +57941,7 @@ interface")
 (define-public rust-syn-1
   (package
     (name "rust-syn")
-    (version "1.0.99")
+    (version "1.0.105")
     (source
      (origin
        (method url-fetch)
@@ -57048,7 +57949,7 @@ interface")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "04xba78p559nl737llv7nqcwm723dp6ah5bbp0h5w1amqrpfznsq"))))
+         "0279ivl07g0y5fs5bwmglhkdvi99ypcm36yb774f8bbh8lyv9fb0"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -57911,7 +58812,7 @@ without a mutable reference.")
 (define-public rust-tar-0.4
   (package
     (name "rust-tar")
-    (version "0.4.26")
+    (version "0.4.36")
     (source
       (origin
         (method url-fetch)
@@ -57919,7 +58820,7 @@ without a mutable reference.")
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "1lr6v3cpkfxd2lk5ll2jd8wr1xdskwj35smnh5sfb8xvzzxnn6dk"))))
+          "0iz40bd47xr69dsbckd6rv5ry2nqb2dp3z850q41pvpnmk6xk441"))))
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #f      ; Test tarballs not included in crate.
@@ -58777,7 +59678,7 @@ directories.")
 (define-public rust-tendril-0.4
   (package
     (name "rust-tendril")
-    (version "0.4.1")
+    (version "0.4.3")
     (source
      (origin
        (method url-fetch)
@@ -58786,11 +59687,10 @@ directories.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0fsx7blrrzgca8aa2yqy8zxyi8s7amskhgkk1ml5sbaqyalyszvh"))))
+         "1c3vip59sqwxn148i714nmkrvjzbk7105vj0h92s6r64bw614jnj"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t
-       #:cargo-inputs
+     `(#:cargo-inputs
        (("rust-encoding" ,rust-encoding-0.2)
         ("rust-encoding-rs" ,rust-encoding-rs-0.8)
         ("rust-futf" ,rust-futf-0.1)
@@ -60293,19 +61193,20 @@ C library.")
 (define-public rust-tinyvec-1
   (package
     (name "rust-tinyvec")
-    (version "1.2.0")
+    (version "1.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "tinyvec" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0hn3fkpb9nca9nf9znz2dxlp4ccv37hnbh67aczpzpmpbgq20ljv"))))
+        (base32 "0l6bl2h62a5m44jdnpn7lmj14rd44via8180i7121fvm73mmrk47"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-serde" ,rust-serde-1)
+       (("rust-arbitrary" ,rust-arbitrary-1)
+        ("rust-serde" ,rust-serde-1)
         ("rust-tinyvec-macros" ,rust-tinyvec-macros-0.1))))
     (home-page "https://crates.io/crates/tinyvec")
     (synopsis "Safe vec-like data structures")
@@ -61945,17 +62846,17 @@ stream-based WebSocket implementation.")
     (description "Unix Domain sockets for Tokio.")
     (license license:expat)))
 
-(define-public rust-tokio-util-0.6
+(define-public rust-tokio-util-0.7
   (package
     (name "rust-tokio-util")
-    (version "0.6.4")
+    (version "0.7.4")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "tokio-util" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0agvfvvgh225vgb2z9w83lwqcqsy3pvkcbvnaz7m7rj6dg6facgc"))))
+        (base32 "0h67jb56bsxy4pi1a41pda8d52569ci5clvqv3c6cg9vy1sy1chb"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -61965,16 +62866,42 @@ stream-based WebSocket implementation.")
         ("rust-futures-io" ,rust-futures-io-0.3)
         ("rust-futures-sink" ,rust-futures-sink-0.3)
         ("rust-futures-util" ,rust-futures-util-0.3)
-        ("rust-log" ,rust-log-0.4)
+        ("rust-hashbrown" ,rust-hashbrown-0.12)
         ("rust-pin-project-lite" ,rust-pin-project-lite-0.2)
         ("rust-slab" ,rust-slab-0.4)
-        ("rust-tokio" ,rust-tokio-1))))
+        ("rust-tokio" ,rust-tokio-1)
+        ("rust-tracing" ,rust-tracing-0.1))))
     (home-page "https://tokio.rs")
     (synopsis "Additional utilities for working with Tokio")
     (description
      "This package provides additional utilities for working with Tokio.")
     (license license:expat)))
 
+(define-public rust-tokio-util-0.6
+  (package
+    (inherit rust-tokio-util-0.7)
+    (name "rust-tokio-util")
+    (version "0.6.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "tokio-util" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0agvfvvgh225vgb2z9w83lwqcqsy3pvkcbvnaz7m7rj6dg6facgc"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bytes" ,rust-bytes-1)
+        ("rust-futures-core" ,rust-futures-core-0.3)
+        ("rust-futures-io" ,rust-futures-io-0.3)
+        ("rust-futures-sink" ,rust-futures-sink-0.3)
+        ("rust-futures-util" ,rust-futures-util-0.3)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-pin-project-lite" ,rust-pin-project-lite-0.2)
+        ("rust-slab" ,rust-slab-0.4)
+        ("rust-tokio" ,rust-tokio-1))))))
+
 (define-public rust-tokio-util-0.4
   (package
     (inherit rust-tokio-util-0.6)
@@ -62133,6 +63060,27 @@ serializing Rust structures.")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-toml-datetime-0.5
+  (package
+    (name "rust-toml-datetime")
+    (version "0.5.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "toml_datetime" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1zcjvygkix0hm7nv7i6ag4fd0l1pglga1wyq2l8zgy0fgpjm32w0"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs (("rust-serde" ,rust-serde-1))))
+    (home-page "https://github.com/toml-rs/toml")
+    (synopsis "TOML-compatible datetime type")
+    (description
+     "This package provides a TOML-compatible datetime type for Rust.")
+    ;; The user can choose either license.
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-toml-edit-0.14
   (package
     (name "rust-toml-edit")
@@ -63685,14 +64633,14 @@ the Trust-DNS client to use rustls for TLS.")
 (define-public rust-trybuild-1
   (package
     (name "rust-trybuild")
-    (version "1.0.54")
+    (version "1.0.75")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "trybuild" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0gzxbal0zdjnwilsisgbm59c242gvym8dafwsl5s8b5nhvzl6hzh"))))
+        (base32 "1wylxysdpbjz3cddaxvjnfk8vadi05chdivwg9l878c7b8hjq8gi"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -64119,7 +65067,7 @@ deserialization.")
 (define-public rust-typenum-1
   (package
     (name "rust-typenum")
-    (version "1.12.0")
+    (version "1.15.0")
     (source
       (origin
         (method url-fetch)
@@ -64127,8 +65075,10 @@ deserialization.")
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "0cvbksljz61ian21fnn0h51kphl0pwpzb932bv4s0rwy1wh8lg1p"))))
+          "11yrvz1vd43gqv738yw1v75rzngjbs7iwcgzjy3cq5ywkv2imy6w"))))
     (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs (("rust-scale-info" ,rust-scale-info-1))))
     (home-page "https://github.com/paholg/typenum")
     (synopsis "Rust library for type-level numbers evaluated at compile time")
     (description "Typenum is a Rust library for type-level numbers evaluated at
@@ -64167,19 +65117,18 @@ Unicode character database.")
 (define-public rust-ucd-trie-0.1
   (package
     (name "rust-ucd-trie")
-    (version "0.1.2")
+    (version "0.1.5")
     (source
       (origin
         (method url-fetch)
         (uri (crate-uri "ucd-trie" version))
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
-         (base32
-          "1hh6kyzh5xygwy96wfmsf8v8czlzhps2lgbcyhj1xzy1w1xys04g"))))
+         (base32 "10ggllapxq99cxxy179wbklmabj5fikm02233v4idf7djvcw8ycy"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-development-inputs
-       (("rust-lazy-static" ,rust-lazy-static-1))))
+       (("rust-once-cell" ,rust-once-cell-1))))
     (home-page "https://github.com/BurntSushi/ucd-generate")
     (synopsis "Trie for storing Unicode codepoint sets and maps")
     (description
@@ -65320,7 +66269,7 @@ Unix users and groups.")
 (define-public rust-utf-8-0.7
   (package
     (name "rust-utf-8")
-    (version "0.7.5")
+    (version "0.7.6")
     (source
      (origin
        (method url-fetch)
@@ -65329,7 +66278,7 @@ Unix users and groups.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1iw5rp4i3mfi9k51picbr5bgjqhjcmnxx7001clh5ydq31y2zr05"))))
+         "1a9ns3fvgird0snjkd3wbdhwd3zdpc2h5gpyybrfr6ra5pkqxk09"))))
     (build-system cargo-build-system)
     (arguments `(#:skip-build? #t))
     (home-page "https://github.com/SimonSapin/rust-utf8")
@@ -65436,8 +66385,47 @@ first byte.")
         (base32
          "0zamsj2986shm4x9zncjf2m5qy9scaw7qnxw4f89b2afpg6a8wl7"))))))
 
+(define-public rust-uuid-1
+  (package
+    (name "rust-uuid")
+    (version "1.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "uuid" version))
+              (file-name
+               (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0k6fchay62ryjhkxsbbj38030lm3797c13vsp54bkd9ij3gf0bj2"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-development-inputs
+       (("rust-bincode" ,rust-bincode-1)
+        ("rust-trybuild" ,rust-trybuild-1)
+        ("rust-wasm-bindgen-test" ,rust-wasm-bindgen-test-0.3)
+        ("rust-windows-sys" ,rust-windows-sys-0.42))
+       #:cargo-inputs
+       (("rust-arbitrary" ,rust-arbitrary-1)
+        ("rust-atomic" ,rust-atomic-0.5)
+        ("rust-getrandom" ,rust-getrandom-0.2)
+        ("rust-md-5" ,rust-md-5-0.10)
+        ("rust-rand" ,rust-rand-0.8)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-sha1-smol" ,rust-sha1-smol-1)
+        ("rust-slog" ,rust-slog-2)
+        ("rust-uuid-macro-internal" ,rust-uuid-macro-internal-1)
+        ("rust-wasm-bindgen" ,rust-wasm-bindgen-0.2)
+        ("rust-zerocopy" ,rust-zerocopy-0.6))))
+    (home-page "https://github.com/uuid-rs/uuid")
+    (synopsis "Library to generate and parse UUIDs")
+    (description
+     "This package provides a library to generate and parse UUIDs.")
+    ;; The user can choose either license.
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-uuid-0.8
   (package
+    (inherit rust-uuid-1)
     (name "rust-uuid")
     (version "0.8.2")
     (source
@@ -65449,7 +66437,6 @@ first byte.")
         (sha256
          (base32
           "1dy4ldcp7rnzjy56dxh7d2sgrcvn4q77y0a8r0a48946h66zjp5w"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -65458,12 +66445,7 @@ first byte.")
         ("rust-serde" ,rust-serde-1)
         ("rust-sha1" ,rust-sha1-0.6)
         ("rust-slog" ,rust-slog-2)
-        ("rust-winapi" ,rust-winapi-0.3))))
-    (home-page "https://github.com/uuid-rs/uuid")
-    (synopsis "Library to generate and parse UUIDs")
-    (description
-     "This package provides a library to generate and parse UUIDs.")
-    (license (list license:asl2.0 license:expat))))
+        ("rust-winapi" ,rust-winapi-0.3))))))
 
 (define-public rust-uuid-0.7
   (package
@@ -65522,6 +66504,31 @@ first byte.")
         ("rust-serde" ,rust-serde-1)
         ("rust-sha1" ,rust-sha1-0.2))))))
 
+(define-public rust-uuid-macro-internal-1
+  (package
+    (name "rust-uuid-macro-internal")
+    (version "1.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "uuid-macro-internal" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1n3nw8vydhm5l3d32j3wgdwfd68rg71m400y4ijyd4s5i7r8kg3k"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/uuid-rs/uuid")
+    (synopsis "@code{uuid!} macro implementation details")
+    (description
+     "This package contains private implementation details of the
+@code{uuid!} macro.  It is not intended for direct usage.")
+    ;; The user can choose either license.
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-v-frame-0.2
   (package
     (name "rust-v-frame")
@@ -68023,8 +69030,43 @@ extended attributes.")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-xcb-1
+  (package
+    (name "rust-xcb")
+    (version "1.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "xcb" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1ifnchjzf9xlwy6pfa90mwa6j43bx2bi5xl40m5gykymwbbv9bhg"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-build-flags '("--all-features")
+       #:cargo-test-flags '("--all-features")
+       #:cargo-development-inputs
+       (("rust-gl" ,rust-gl-0.14)
+        ("rust-png" ,rust-png-0.17)
+        ("rust-x11" ,rust-x11-2))
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-quick-xml" ,rust-quick-xml-0.22)
+        ("rust-x11" ,rust-x11-2))))
+    (inputs
+     (list mesa))                      ;required by rust-x11-2
+    (native-inputs
+     (list pkg-config))
+    (home-page "https://github.com/rust-x-bindings/rust-xcb")
+    (synopsis "Rust bindings and wrappers for XCB")
+    (description
+     "This package provides Rust bindings and wrappers for XCB.")
+    (license license:expat)))
+
 (define-public rust-xcb-0.9
   (package
+    (inherit rust-xcb-1)
     (name "rust-xcb")
     (version "0.9.0")
     (source
@@ -68047,12 +69089,7 @@ extended attributes.")
     (inputs
      (list libx11 libxcb xcb-proto))
     (native-inputs
-     (list pkg-config python))
-    (home-page "https://github.com/rtbo/rust-xcb")
-    (synopsis "Rust bindings and wrappers for XCB")
-    (description
-     "This package provides Rust bindings and wrappers for XCB.")
-    (license license:expat)))
+     (list pkg-config python))))
 
 (define-public rust-xcursor-0.3
   (package
@@ -68226,7 +69263,7 @@ including a line breaking iterator.")
 (define-public rust-xml5ever-0.16
   (package
     (name "rust-xml5ever")
-    (version "0.16.1")
+    (version "0.16.2")
     (source
       (origin
         (method url-fetch)
@@ -68235,7 +69272,7 @@ including a line breaking iterator.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "0nbapmdrn4zqry5p01l2mmbb48fcq0gga377p1c4lkb1x3k546qb"))))
+          "0rfqys8yyigkzrqcrn5c6r10v42pwxahccyyzhc293px30w1cd4j"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm
index 60f8a28dd1..935a77be04 100644
--- a/gnu/packages/crypto.scm
+++ b/gnu/packages/crypto.scm
@@ -868,6 +868,8 @@ BLAKE.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32 "04z631v0vzl52g73v390ask5fnzi5wg83lcjkjhpmmymaz0jn152"))))
+      ;; "This code requires at least SSE2".
+      (supported-systems '("x86_64-linux"))
       (build-system gnu-build-system)
       (arguments
        `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm
index 5791d4994a..beeb05c50d 100644
--- a/gnu/packages/cups.scm
+++ b/gnu/packages/cups.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015-2018, 2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Mark H Weaver <mhw@netris.org>
@@ -272,6 +272,14 @@ filters for the PDF-centric printing workflow introduced by OpenPrinting.")
            #:tests? #f
            #:phases
            #~(modify-phases %standard-phases
+               (add-after 'unpack 'update-config-scripts
+                 (lambda* (#:key native-inputs inputs #:allow-other-keys)
+                   (for-each (lambda (file)
+                               (install-file
+                                (search-input-file
+                                 (or native-inputs inputs)
+                                 (string-append "/bin/" file)) "."))
+                             '("config.guess" "config.sub"))))
                (add-after 'unpack 'never-cupsAdminGetServerSettings
                  ;; Rather than just ask the daemon, this part of CUPS assumes
                  ;; that (1) it has access to a cupsd.conf under CUPS_SERVERROOT
@@ -310,7 +318,10 @@ filters for the PDF-centric printing workflow introduced by OpenPrinting.")
                      (("(\\$count != )33" _ prefix)
                       (string-append prefix "39"))))))))
     (native-inputs
-     (list pkg-config))
+     (append (if (target-riscv64?)
+                 (list config)
+                 '())
+             (list pkg-config)))
     (inputs
      (list zlib gnutls))
     (home-page "https://openprinting.github.io/cups")
diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm
index f8dc3ce692..484937bf0a 100644
--- a/gnu/packages/curl.scm
+++ b/gnu/packages/curl.scm
@@ -138,9 +138,6 @@ tunneling, and so on.")
                                    "See COPYING in the distribution."))
     (home-page "https://curl.haxx.se/")))
 
-(define-public curl-minimal
-  (deprecated-package "curl-minimal" curl))
-
 (define-public curl-ssh
   (package/inherit curl
     (arguments
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index a2bd284659..b37bb255a4 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -32,7 +32,7 @@
 ;;; Copyright © 2017 Kristofer Buffington <kristoferbuffington@gmail.com>
 ;;; Copyright © 2018 Amirouche Boubekki <amirouche@hypermove.net>
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
-;;; Copyright © 2018, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2018, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
 ;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2019 Gábor Boskovits <boskovits@gmail.com>
@@ -59,6 +59,7 @@
 ;;; Copyright © 2022 muradm <mail@muradm.net>
 ;;; Copyright © 2022 Thomas Albers Raviola <thomas@thomaslabs.org>
 ;;; Copyright © 2021, 2022 jgart <jgart@dismail.de>
+;;; Copyright © 2023 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -132,6 +133,7 @@
   #:use-module (gnu packages perl-web)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
+  #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
@@ -899,7 +901,7 @@ Language.")
 (define-public mariadb
   (package
     (name "mariadb")
-    (version "10.5.12")
+    (version "10.10.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://downloads.mariadb.com/MariaDB"
@@ -907,21 +909,11 @@ Language.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1gg4h9ahmk78cx01zyw0fqr6hhd78fsyhs0s34p3gi9hkak1qkxb"))
+                "1ciw7y08wms9g3hzhyria49r1b9n5wpbhkndazv95d925c8x1jsp"))
               (modules '((guix build utils)))
               (snippet
                '(begin
-                  ;; Delete bundled snappy and xz.
-                  (delete-file-recursively "storage/tokudb/PerconaFT/third_party")
-                  (substitute* "storage/tokudb/PerconaFT/CMakeLists.txt"
-                    ;; This file checks that the bundled sources are present and
-                    ;; declares build procedures for them.
-                    (("^include\\(TokuThirdParty\\)") ""))
-                  (substitute* "storage/tokudb/PerconaFT/ft/CMakeLists.txt"
-                    ;; Don't attempt to use the procedures we just removed.
-                    ((" build_lzma build_snappy") ""))
-
-                  ;; Preserve CMakeLists.txt for these.
+                  ;; Delete bundled libraries, but preserve CMakeLists.txt.
                   (for-each (lambda (file)
                               (unless (string-suffix? "CMakeLists.txt" file)
                                 (delete-file file)))
@@ -933,21 +925,10 @@ Language.")
      `(#:configure-flags
        (list
          "-DBUILD_CONFIG=mysql_release"
-         ;; Linking with libarchive fails, like this:
-
-         ;; ld: /gnu/store/...-libarchive-3.2.2/lib/libarchive.a(archive_entry.o):
-         ;; relocation R_X86_64_32 against `.bss' can not be used when
-         ;; making a shared object; recompile with -fPIC
-
-         ;; For now, disable the features that that use libarchive (xtrabackup).
-         "-DWITH_LIBARCHIVE=OFF"
-
-         ;; Disable the TokuDB engine, because its test suite frequently fails,
-         ;; and loading it crashes the server: <https://bugs.gnu.org/35521>.
-         "-DTOKUDB_OK=OFF"
 
          ;; Ensure the system libraries are used.
          "-DWITH_JEMALLOC=yes"
+         "-DWITH_LIBFMT=system"
          "-DWITH_PCRE=system"
          "-DWITH_SSL=system"
          "-DWITH_ZLIB=system"
@@ -987,14 +968,6 @@ Language.")
        #:parallel-tests? ,(target-x86-64?)
        #:phases
        (modify-phases %standard-phases
-         ,@(if (target-ppc32?)
-             `((add-after 'unpack 'apply-libatomics-patch
-                 (lambda* (#:key inputs #:allow-other-keys)
-                   (let ((patch-file
-                           (assoc-ref inputs
-                                               "mariadb-link-libatomic.patch")))
-                     (invoke "patch" "-p1" "-i" patch-file)))))
-             '())
          (add-after 'unpack 'adjust-output-references
            (lambda _
              ;; The build system invariably prepends $CMAKE_INSTALL_PREFIX
@@ -1030,6 +1003,9 @@ Language.")
                       "main.explain_non_select"
                       "main.upgrade_MDEV-19650"
                       "roles.acl_statistics"
+                      "main.stat_tables_innodb"
+                      "main.stat_tables"
+                      "main.mysql_upgrade"
 
                       ;; Probably same as above, test failure reported upstream:
                       ;; <https://jira.mariadb.org/browse/MDEV-26320>.
@@ -1056,36 +1032,19 @@ Language.")
                          disabled-tests)
                (close-port unstable-tests)
 
-               ;; XXX: These fail because they expect a latin1 charset and
-               ;; collation.  See <https://jira.mariadb.org/browse/MDEV-21264>.
-               (substitute* '("mysql-test/main/gis_notembedded.result"
-                              "mysql-test/main/system_mysql_db.result")
-                 (("latin1_swedish_ci") "utf8_general_ci")
-                 (("\tlatin1") "\tutf8"))
-
                (substitute* "mysql-test/suite/binlog/t/binlog_mysqlbinlog_stop_never.test"
                  (("/bin/bash")
                   (which "bash")))
 
-               (substitute* "mysql-test/mysql-test-run.pl"
+               (substitute* "mysql-test/mariadb-test-run.pl"
                  (("/bin/ls") (which "ls"))
                  (("/bin/sh") (which "sh"))))))
-         (add-before 'configure 'disable-plugins
-           (lambda _
-             (let ((disable-plugin (lambda (name)
-                                     (call-with-output-file
-                                         (string-append "plugin/" name
-                                                        "/CMakeLists.txt")
-                                       (lambda (port)
-                                         (format port "\n")))))
-                   (disabled-plugins '(;; XXX: Causes a test failure.
-                                       "disks")))
-               (for-each disable-plugin disabled-plugins))))
          (replace 'check
            (lambda* (#:key (tests? #t) parallel-tests? #:allow-other-keys)
              (if tests?
                  (with-directory-excursion "mysql-test"
-                   (invoke "./mtr" "--verbose"
+                   (invoke "./mariadb-test-run"
+                           "--verbose"
                            "--retry=3"
                            "--suite=main"
                            "--testcase-timeout=40"
@@ -1099,13 +1058,12 @@ Language.")
                            "--skip-rpl"
                            "--skip-test-list=unstable-tests"))
                  (format #t "test suite not run~%"))))
-         (add-after
-          'install 'post-install
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            (let* ((out     (assoc-ref outputs "out"))
+         (add-after 'install 'post-install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out     (assoc-ref outputs "out"))
                    (dev     (assoc-ref outputs "dev"))
                    (lib     (assoc-ref outputs "lib"))
-                   (openssl (assoc-ref inputs "openssl")))
+                   (openssl (dirname (search-input-file inputs "lib/libssl.so"))))
               (substitute* (list (string-append out "/bin/mariadb-install-db")
                                  (string-append out "/bin/mysql_install_db"))
                 (("basedir=\"\"")
@@ -1132,7 +1090,7 @@ Language.")
               (mkdir-p (string-append dev "/lib"))
               (rename-file (string-append lib "/lib/pkgconfig")
                            (string-append dev "/lib/pkgconfig"))
-              (rename-file (string-append lib "/bin/mariadb_config")
+              (rename-file (string-append out "/bin/mariadb_config")
                            (string-append dev "/bin/mariadb_config"))
               (rename-file (string-append out "/bin/mysql_config")
                            (string-append dev "/bin/mysql_config"))
@@ -1143,25 +1101,20 @@ Language.")
               (substitute* (list (string-append dev "/bin/mysql_config")
                                  (string-append dev "/lib/pkgconfig/mariadb.pc"))
                 (("-lssl -lcrypto" all)
-                 (string-append "-L" openssl "/lib " all)))))))))
+                 (string-append "-L" openssl " " all)))))))))
     (native-inputs
-     (if (target-ppc32?)
-       `(("mariadb-link-libatomic.patch"
-          ,(search-patch "mariadb-link-libatomic.patch"))
-         ("patch" ,patch)
-         ("bison" ,bison)
-         ("perl" ,perl))
-       (list bison perl)))
+     (list bison perl))
     (inputs
-     `(("jemalloc" ,jemalloc)
-       ("libaio" ,libaio)
-       ("libxml2" ,libxml2)
-       ("ncurses" ,ncurses)
-       ("openssl" ,openssl-1.1)
-       ("pam" ,linux-pam)
-       ("pcre2" ,pcre2)
-       ("xz" ,xz)
-       ("zlib" ,zlib)))
+     (list fmt
+           jemalloc
+           libaio
+           libxml2
+           ncurses
+           openssl
+           linux-pam
+           pcre2
+           xz
+           zlib))
     ;; The test suite is very resource intensive and can take more than three
     ;; hours on a x86_64 system.  Give slow and busy machines some leeway.
     (properties '((timeout . 64800)))        ;18 hours
@@ -1287,14 +1240,14 @@ pictures, sounds, or video.")
   (package
     (inherit postgresql-15)
     (name "postgresql")
-    (version "14.4")
+    (version "14.6")
     (source (origin
               (inherit (package-source postgresql-15))
               (uri (string-append "https://ftp.postgresql.org/pub/source/v"
                                   version "/postgresql-" version ".tar.bz2"))
               (sha256
                (base32
-                "0slg7ld5mldmv3pn1wxxwglm4s3xc6c91ixx24apj713qlvn4fy2"))))))
+                "08nzkq321fzfi8ba8gck9zxxg7xvv8vz3mbl4avrmlq933y4122h"))))))
 
 (define-public postgresql-13
   (package
@@ -2520,6 +2473,66 @@ protocol is supported.")
     (home-page "https://github.com/redis/hiredis")
     (license license:bsd-3)))
 
+(define-public ruby-hiredis
+  (package
+    (name "ruby-hiredis")
+    (version "0.6.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/redis/hiredis-rb")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "05y4g7frhym59m9x208zpvg2qvqvfjlgqmygxj8sqgl07n0ww1ks"))
+              (patches (search-patches
+                        "ruby-hiredis-use-system-hiredis.patch"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:tests? #f                       ;require native extension
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-hiredis-include-directory
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "ext/hiredis_ext/extconf.rb"
+                ;; Adjust the hiredis include directory.
+                (("\\$CFLAGS << \" -I/usr/include/hiredis\"")
+                 (format #f "$CFLAGS << \" -I~a\""
+                         (search-input-directory inputs "include/hiredis"))))))
+          (add-after 'unpack 'disable-building-c-extension
+            (lambda _
+              ;; FIXME: The produced native extension appears to segfault when
+              ;; run; disable building it until a solution is found (see:
+              ;; https://github.com/redis/hiredis-rb/issues/93).
+              (substitute* "ext/hiredis_ext/extconf.rb"
+                (("build_hiredis = true")
+                 "build_hiredis = false"))))
+          ;; FIXME: Un-comment phase after the extension can be made to run
+          ;; without crashing (see above).
+          ;; (add-after 'build 'build-ext
+          ;;   (lambda _
+          ;;     (setenv "CC" #$(cc-for-target))
+          ;;     (invoke "rake" "compile")))
+          (add-before 'check 'start-redis
+            (lambda _
+              (invoke "redis-server" "--daemonize" "yes")))
+          (add-after 'install 'delete-mkmf.log
+            (lambda _
+              ;; This build log captures non-deterministic file names (see:
+              ;; https://github.com/rubygems/rubygems/issues/6259).
+              (for-each delete-file (find-files #$output "^mkmf\\.log$")))))))
+    (native-inputs (list redis ruby-rake-compiler))
+    (inputs (list hiredis))
+    (synopsis "Ruby wrapper for hiredis")
+    (description "@code{hiredis-rb} is a Ruby extension that wraps
+@code{hiredis}, a minimalist C client for Redis.  Both the synchronous
+connection API and a separate protocol reader are supported.  It is primarily
+intended to speed up parsing multi bulk replies.")
+    (home-page "https://github.com/redis/hiredis-rb")
+    (license license:bsd-3)))
+
 (define-public ruby-redis
   (package
     (name "ruby-redis")
@@ -3561,6 +3574,79 @@ this library provides functions to facilitate such comparisons.")
 SQLAlchemy Database Toolkit for Python.")
     (license license:expat)))
 
+(define-public python-sqlite-fts4
+  (package
+    (name "python-sqlite-fts4")
+    (version "1.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "sqlite-fts4" version))
+              (sha256
+               (base32
+                "034kx0ac556sywy1p4qcrc36l24w3q0xwswqv2z9s3k8yvm5xc3q"))))
+    (build-system python-build-system)
+    (native-inputs (list python-pytest))
+    (home-page "https://github.com/simonw/sqlite-fts4")
+    (synopsis "Python functions for working with SQLite FTS4 search")
+    (description "This package provides custom SQLite functions written
+in Python for ranking documents indexed using the SQLite's FTS4 full
+text search extension.")
+    (license license:asl2.0)))
+
+(define-public python-sqlite-utils
+  (package
+    (name "python-sqlite-utils")
+    (version "3.30")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/simonw/sqlite-utils")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1a58syvh5jp40vi5libsxkqy99z75kj4ckxqmylbhd342ppfy1wp"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'relax-requirements
+                          (lambda _
+                            (substitute* "setup.py"
+                              ;; This is a variant designed to have a binary
+                              ;; wheel made available on PyPI, which is not a
+                              ;; concern to Guix.
+                              (("click-default-group-wheel")
+                               "click-default-group")))))))
+    (propagated-inputs (list python-click python-click-default-group
+                             python-dateutil python-sqlite-fts4
+                             python-tabulate))
+    (native-inputs (list python-pytest))
+    (home-page "https://github.com/simonw/sqlite-utils")
+    (synopsis
+     "CLI tool and Python utility functions for manipulating SQLite databases")
+    (description
+     "This package provides a CLI tool and Python utility functions for
+manipulating SQLite databases.  It's main features are:
+@itemize
+@item
+Pipe JSON (or CSV or TSV) directly into a new SQLite database file,
+automatically creating a table with the appropriate schema.
+@item
+Run in-memory SQL queries, including joins, directly against data in
+CSV, TSV or JSON files and view the results.
+@item
+Configure SQLite full-text search against your database tables and run
+search queries against them, ordered by relevance.
+@item
+Run transformations against your tables to make schema changes that
+SQLite ALTER TABLE does not directly support, such as changing the type
+of a column.
+@item
+Extract columns into separate tables to better normalize your existing
+data.
+@end itemize")
+    (license license:asl2.0)))
+
 (define-public python-pickleshare
   (package
     (name "python-pickleshare")
@@ -3972,7 +4058,7 @@ reasonable substitute.")
 (define-public python-redis
   (package
     (name "python-redis")
-    (version "4.5.2")
+    (version "4.5.4")
     (source (origin
               ;; The PyPI archive lacks some test resources such as the TLS
               ;; certificates under docker/stunnel/keys.
@@ -3983,7 +4069,7 @@ reasonable substitute.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0cz3gji3rb1h5dczyl11hm42wgsbz5v896cgbi14dij160b7m35i"))))
+                "0s5pswykjcyqbx471ib3gwy29xxa5ckgch9hy476x2s4pvhkbgmr"))))
     (build-system pyproject-build-system)
     (arguments
      (list
@@ -5019,3 +5105,84 @@ generic interface to caching backends of any variety, and additionally
 provides API hooks which integrate these cache backends with the locking
 mechanism of @code{dogpile}.")
     (license license:expat)))
+
+(define-public datasette
+  (package
+    (name "datasette")
+    (version "0.64.2")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/simonw/datasette")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1c8ajdaraynrjvsb8xxxnkb7zgm5fwq60qczaz00n465ki80j4h3"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:test-flags
+      ;; There are multiple unexplained test failures (see:
+      ;; https://github.com/simonw/datasette/issues/2048).
+      #~(list "-k" (string-append
+                    "not (test_database_page_for_database_with_dot_in_name"
+                    " or test_row_strange_table_name"
+                    " or test_database_with_space_in_name"
+                    " or test_tilde_encoded_database_names"
+                    " or test_weird_database_names"
+                    " or test_css_classes_on_body"
+                    " or test_templates_considered"
+                    " or test_row_html_compound_primary_key"
+                    " or test_edit_sql_link_on_canned_queries"
+                    " or test_alternate_url_json"
+                    " or test_table_with_slashes_in_name"
+                    " or test_searchable"
+                    " or test_custom_query_with_unicode_characters"
+                    " or test_searchmode)")
+              "-n" (number->string (parallel-job-count))
+              "-m" "not serial")        ;cannot run in parallel
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'relax-requirements
+            (lambda _
+              ;; The package needlessly specifies exact versions
+              ;; of dependencies, when it works fine with others.
+              (substitute* "setup.py"
+                (("(black)==[0-9\\.]+" _ package)
+                 package)
+                (("click-default-group-wheel")
+                 "click-default-group")))))))
+    (propagated-inputs
+     (list python-aiofiles
+           python-asgi-csrf
+           python-asgiref
+           python-click
+           python-click-default-group
+           python-httpx
+           python-hupper
+           python-itsdangerous
+           python-janus
+           python-jinja2
+           python-mergedeep
+           python-pint
+           python-pluggy-next
+           python-pyyaml
+           python-uvicorn))
+    (native-inputs
+     (list python-beautifulsoup4
+           python-black
+           python-cogapp
+           python-pytest-7.1
+           python-pytest-asyncio
+           python-pytest-runner
+           python-pytest-timeout
+           python-pytest-xdist
+           python-setuptools
+           python-trustme))
+    (home-page "https://datasette.io/")
+    (synopsis "Multi-tool for exploring and publishing data")
+    (description "Datasette is a tool for exploring and publishing data.
+It helps people take data of any shape or size and publish that as an
+interactive, explorable website and accompanying API.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/datastructures.scm b/gnu/packages/datastructures.scm
index 9f4514a247..bd6044e1d0 100644
--- a/gnu/packages/datastructures.scm
+++ b/gnu/packages/datastructures.scm
@@ -27,6 +27,7 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages pkg-config)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix gexp)
@@ -441,3 +442,42 @@ and tsl::robin_pg_set. The first two are faster and use a power of two growth
 policy, the last two use a prime growth policy instead and are able to cope
 better with a poor hash function.")
     (license license:expat)))
+
+(define-public zix
+  (let ((commit "56ec14c4369c591f5efbb500b0829b760bee7800")
+        (revision "0"))
+    (package
+      (name "zix")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://gitlab.com/drobilla/zix.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "095b2vjmwh9swbwkkkjpcdhsi0c93lxrzd76k7hzdyyf7zb5rgdx"))))
+      (build-system meson-build-system)
+      (arguments
+       (list #:configure-flags #~(list "-Ddocs=disabled"))) ;needs "sphinxygen"
+      (native-inputs (list pkg-config))
+      (home-page "https://gitlab.com/drobilla/zix")
+      (synopsis "C library of portability wrappers and data structures")
+      (description
+       "Zix is a C library of portability wrappers and data structures.  It
+provides the following components:
+@table @code
+@item ZixAllocator A customizable allocator.
+@item ZixBumpAllocator A simple realtime-safe bump-pointer allocator.
+@item ZixBTree A page-allocated B-tree.
+@item ZixHash An open-addressing hash table.
+@item ZixRing A lock-free realtime-safe ring buffer.
+@item ZixSem A portable semaphore wrapper.
+@item ZixThread A portable thread wrapper.
+@item ZixTree A binary search tree.
+@item zixgest.h Digest functions suitable for hashing arbitrary data.
+zix/filesystem.h Functions for working with filesystems.
+@item zix/path.h Functions for working with filesystem paths lexically.
+@end table")
+      (license license:isc))))
diff --git a/gnu/packages/debug.scm b/gnu/packages/debug.scm
index 154232ed50..fe00cb5705 100644
--- a/gnu/packages/debug.scm
+++ b/gnu/packages/debug.scm
@@ -837,7 +837,7 @@ engineering.")
 (define-public seer-gdb
   (package
     (name "seer-gdb")
-    (version "1.14")
+    (version "1.16")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -846,7 +846,7 @@ engineering.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "16mz1c58jf1zrgjpxmp58bx8viyidhs1qg0y8ql2f07wgyy6zx33"))))
+                "0jdvyg2jab1pvf36pvkyrfsg2wyy8zp1qx0v2ksclgrnr1hja6k6"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ; Those are strangely manual
diff --git a/gnu/packages/diffoscope.scm b/gnu/packages/diffoscope.scm
index 0e2ab49ae8..ee4eec35fc 100644
--- a/gnu/packages/diffoscope.scm
+++ b/gnu/packages/diffoscope.scm
@@ -74,7 +74,7 @@
 (define-public diffoscope
   (package
     (name "diffoscope")
-    (version "238")
+    (version "239")
     (source
      (origin
        (method git-fetch)
@@ -83,7 +83,7 @@
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "11bib2h149b4jzxqhdi3dwivk6m4rvzjl8kg2n68sykgwa2fv24p"))))
+        (base32 "1awxazbrqqzqr5x50kam50ibmnjvidynkzp2158rdx5gy5lmnwcy"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -194,7 +194,7 @@
             openssh
             openssl
             pgpdump
-            poppler-next
+            poppler
             python-jsbeautifier
             r-minimal
             rpm
diff --git a/gnu/packages/dlang.scm b/gnu/packages/dlang.scm
index 7b6e9cf267..fad3e683da 100644
--- a/gnu/packages/dlang.scm
+++ b/gnu/packages/dlang.scm
@@ -217,7 +217,8 @@ bootstrapping more recent compilers written in D.")
   (package
     (inherit ldc-bootstrap)
     (arguments
-     (substitute-keyword-arguments (package-arguments ldc-bootstrap)
+     (substitute-keyword-arguments
+       (strip-keyword-arguments '(#:tests?) (package-arguments ldc-bootstrap))
        ((#:make-flags _ #f)
         '(list "all"
                ;; Also build the test runner binaries.
@@ -226,7 +227,6 @@ bootstrapping more recent compilers written in D.")
         `(,@flags "-DBUILD_SHARED_LIBS=ON"
                   "-DLDC_LINK_MANUALLY=OFF"
                   "-DLDC_DYNAMIC_COMPILE=OFF"))
-       ((#:tests? _) #t)
        ((#:phases phases)
         `(modify-phases ,phases
            (add-after 'unpack 'fix-compiler-rt-library-discovery
diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index cc1ef25a83..60aced1be4 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -582,7 +582,7 @@ a pen-tablet display and a beamer.")
 (define-public fet
   (package
     (name "fet")
-    (version "6.8.4")
+    (version "6.8.7")
     (source
      (origin
        (method url-fetch)
@@ -591,7 +591,7 @@ a pen-tablet display and a beamer.")
               (list (string-append directory base)
                     (string-append directory "old/" base))))
        (sha256
-        (base32 "0bwm6j0drxkrmx8zbr78a7xbbzb1i9365qv93fkwjg9v92b9clhr"))))
+        (base32 "0wcl2scgqf1vj0zy5an7hhhmsl5j1y605fcz0d7ylbzw5ixnbf1m"))))
     (build-system gnu-build-system)
     (arguments
      (list
diff --git a/gnu/packages/efi.scm b/gnu/packages/efi.scm
index 4625538d26..75eb24bf86 100644
--- a/gnu/packages/efi.scm
+++ b/gnu/packages/efi.scm
@@ -96,10 +96,6 @@ environment presented by Intel's EFI.")
 information.")
       (license license:bsd-2))))
 
-(define-public efi_analyzer
-  ;; For a short while the package name contained an underscore.
-  (deprecated-package "efi_analyzer" efi-analyzer))
-
 (define-public sbsigntools
   (package
     (name "sbsigntools")
diff --git a/gnu/packages/electronics.scm b/gnu/packages/electronics.scm
index 98b71e041e..e1ab054bc7 100644
--- a/gnu/packages/electronics.scm
+++ b/gnu/packages/electronics.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2019 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -252,7 +252,7 @@ supported devices, as well as input/output file format support.")
 (define-public openboardview
   (package
     (name "openboardview")
-    (version "8.95.2")
+    (version "9.95.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -271,10 +271,10 @@ supported devices, as well as input/output file format support.")
                             (scandir "." (negate (cut member <> keep))))))
               (patches
                (search-patches "openboardview-use-system-imgui.patch"
-                               "openboardview-use-system-utf8.patch"))
+                               "openboardview-use-system-mpc.patch"))
               (sha256
                (base32
-                "1n2yfi8wpky0y231kq2zdgwn7f7kff8m53m904hxi5ppmwhx1d6q"))))
+                "1safjd729a7591rigkiy3c678bivrj5q1qwg1f18sijhlsfkf5b3"))))
     (build-system cmake-build-system)
     (arguments
      (list
@@ -298,13 +298,6 @@ supported devices, as well as input/output file format support.")
                   "add_subdirectory("
                   (search-input-directory inputs "share/glad") ;source_dir
                   " src/glad)\n")))))                          ;binary dir
-          (add-before 'configure 'fix-utf8-include-directive
-            ;; Our utf8-h package makes the header available as "utf8.h"
-            ;; directly rather than "utf8/utf8.h".
-            (lambda _
-              (substitute* '("src/openboardview/FileFormats/BRDFile.cpp"
-                             "src/openboardview/BoardView.cpp")
-                (("utf8/utf8.h") "utf8.h"))))
           (add-before 'configure 'dynamically-load-gtk-via-absolute-path
             ;; The GTK library is not linked thus not present in the RUNPATH of
             ;; the produced binary; the absolute path of the libraries must to
@@ -327,11 +320,14 @@ supported devices, as well as input/output file format support.")
     (inputs
      (list fontconfig
            gtk+
-           imgui
+           ;; OpenBoardView can build with Dear ImGui 1.88, but there are some
+           ;; usability problems such as the difficulty to register clicks.
+           imgui-1.87
+           orangeduck-mpc
            sdl2
            sqlite
            zlib))
-    (home-page "https://openboardview.org/")
+    (home-page "https://github.com/OpenBoardView/OpenBoardView")
     (synopsis "Viewer for BoardView files")
     (description "OpenBoardView is a viewer for BoardView files, which present
 the details of a printed circuit board (PCB).  It comes with features
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index b1f72ee009..6264d4deea 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -49,7 +49,7 @@
 ;;; Copyright © 2019, 2020, 2021 Joseph LaFreniere <joseph@lafreniere.xyz>
 ;;; Copyright © 2019 Todor Kondić <tk.code@protonmail.com>15669
 ;;; Copyright © 2019 Amar Singh <nly@disroot.org>
-;;; Copyright © 2019, 2022 Baptiste Strazzulla <bstrazzull@hotmail.fr>
+;;; Copyright © 2019, 2022, 2023 Baptiste Strazzulla <bstrazzull@hotmail.fr>
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2019 Jens Mølgaard <jens@zete.tk>
 ;;; Copyright © 2019, 2020 Amin Bandali <bandali@gnu.org>
@@ -256,6 +256,7 @@
   #:use-module (gnu packages erlang)
   #:use-module (gnu packages statistics)
   #:use-module (gnu packages libcanberra)
+  #:use-module (gnu packages web-browsers)
   #:use-module (gnu packages wget)
   #:use-module (guix utils)
   #:use-module (srfi srfi-1)
@@ -417,6 +418,45 @@ favourite Scheme implementation, you also need the corresponding geiser package,
 e.g. emacs-geiser-guile for Guile.")
     (license license:bsd-3)))
 
+(define-public emacs-gptel
+  (package
+    (name "emacs-gptel")
+    (version "0.3.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/karthink/gptel")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0g4p0y7bk14ixiz841am2v36fdbwigz77q4zz745m4hviaq3s30y"))))
+    (build-system emacs-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'use-appropriate-curl
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "gptel-curl.el"
+                (("\"curl\"")
+                 (string-append "\""
+                                (search-input-file inputs "/bin/curl")
+                                "\"")))
+              (emacs-substitute-variables "gptel.el"
+                ("gptel-use-curl" 't)))))))
+    (inputs (list curl))
+    (propagated-inputs (list emacs-map))
+    (home-page "https://github.com/karthink/gptel")
+    (synopsis "GPTel is a simple ChatGPT client for Emacs")
+    (description
+     "GPTel is a simple ChatGPT asynchronous client for Emacs with no external
+dependencies.  It can interact with ChatGPT from any Emacs buffer with ChatGPT
+responses encoded in Markdown or Org markup.  It supports conversations, not
+just one-off queries and multiple independent sessions.  It requires an OpenAI
+API key.")
+    (license license:gpl3+)))
+
 (define-public emacs-geiser-guile
   (package
     (name "emacs-geiser-guile")
@@ -582,7 +622,7 @@ a generic Scheme interaction mode for the GNU Emacs editor.")
 (define-public emacs-geiser-chez
   (package
     (name "emacs-geiser-chez")
-    (version "0.17")
+    (version "0.18")
     (source
      (origin
        (method git-fetch)
@@ -591,7 +631,7 @@ a generic Scheme interaction mode for the GNU Emacs editor.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "03fc9ahb0pmznkcnxzgpni4clj1zgky6vaqkc94nf8b8swniwkm9"))))
+        (base32 "19yv5brhzf10hsazmm8s1b058d434hv60a52s08m3kxyrkwr5sca"))))
     (build-system emacs-build-system)
     (arguments
      '(#:include (cons "^src/" %default-include)
@@ -645,29 +685,27 @@ server}.  The main advantage compared to @code{vc-hg} is speed.")
     (license license:gpl3+)))
 
 (define-public emacs-telephone-line
-  (let ((commit "6f3455a365912e8f0c45a2240ea79507dee45ade")
-        (revision "0"))
-    (package
-      (name "emacs-telephone-line")
-      (version (git-version "0.5" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri
-          (git-reference
-           (url "https://github.com/dbordak/telephone-line")
-           (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "1hnd6wnc52sc0ckriqnhaz64pyjk027y0dpcmh2zhpd27i8d4hmq"))))
-      (build-system emacs-build-system)
-      (home-page "https://github.com/dbordak/telephone-line")
-      (synopsis "Implementation of Powerline for Emacs")
-      (description
-       "Telephone Line is a new implementation of Powerline for Emacs with
+  (package
+    (name "emacs-telephone-line")
+    (version "0.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/dbordak/telephone-line")
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1pv6hlzks02bvxkfyg8m04l36clg39h5w7nq2k6ppi5bh4d4kmc8"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/dbordak/telephone-line")
+    (synopsis "Implementation of Powerline for Emacs")
+    (description
+     "Telephone Line is a new implementation of Powerline for Emacs with
 optional baked-in Evil support, antialiased separators, and an easy
 configuration language which makes it trivial to write your own themes.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-inspector
   (let ((commit "0b2cf2f00a827f06bda717da8250eafec4108fb3")) ;version bump
@@ -1261,8 +1299,8 @@ libgit2 bindings for Emacs, intended to boost the performance of Magit.")
       (license license:gpl2+))))
 
 (define-public emacs-magit
-  (let ((commit "2c91c080a8e2f35e3b036a2f6b8011fa897d23a1")
-        (revision "3"))
+  (let ((commit "a760dd107843a8fb632e647f6ba9ed34d7c2dd45")
+        (revision "4"))
     (package
       (name "emacs-magit")
       (version (git-version "3.3.0" revision commit))
@@ -1274,7 +1312,7 @@ libgit2 bindings for Emacs, intended to boost the performance of Magit.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "00ibnr76nfyf4fff3ga324d7dbqnsb4crlxgr94npiy8rsclaszp"))))
+          (base32 "0pqw171xi9vrlm0jkz53bhl18z2vnycn2bynb7lh6g5zgppkzdy0"))))
       (build-system emacs-build-system)
       (arguments
        (list
@@ -1329,7 +1367,9 @@ libgit2 bindings for Emacs, intended to boost the performance of Magit.")
       (inputs
        (list git perl))
       (propagated-inputs
-       (list emacs-dash emacs-with-editor emacs-compat))
+       ;; Note: the 'git-commit' and 'magit-section' dependencies are part of
+       ;; magit itself.
+       (list emacs-compat emacs-dash emacs-transient emacs-with-editor))
       (home-page "https://magit.vc/")
       (synopsis "Emacs interface for the Git version control system")
       (description
@@ -2265,6 +2305,29 @@ and help selectively enable or disable diagnostic functions based on major
 modes.")
     (license license:expat)))
 
+(define-public emacs-flymake-popon
+  (package
+    (name "emacs-flymake-popon")
+    (version "0.5.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://codeberg.org/akib/emacs-flymake-popon")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0ljqnnl5k2f62ilahilx0ldv0spjp9hpgyikd4py1348flzq4k31"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+      (list emacs-popon
+            emacs-posframe))
+    (home-page "https://codeberg.org/akib/emacs-flymake-popon")
+    (synopsis "Flymake diagnostics on cursor hover")
+    (description "This package shows Flymake diagnostics on cursor hover.")
+    (license license:gpl3+)))
+
 (define-public emacs-flymake-flycheck
   (package
     (name "emacs-flymake-flycheck")
@@ -2685,14 +2748,14 @@ project root.")
 (define-public emacs-relint
   (package
     (name "emacs-relint")
-    (version "1.21")
+    (version "1.22")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "relint-" version ".tar"))
        (sha256
-        (base32 "12453agy7y3ayqn32fi11ljlnk8ck3i1aljw5wzm0yyqp00m73x3"))))
+        (base32 "1525hk961q4af06c5a60m7ryp5g8yvfxjp5nmmgkci7vl3ing8zi"))))
     (build-system emacs-build-system)
     (propagated-inputs (list emacs-xr))
     (home-page "https://github.com/mattiase/relint")
@@ -3893,7 +3956,7 @@ of bibliographic references.")
 (define-public emacs-corfu
   (package
     (name "emacs-corfu")
-    (version "0.35")
+    (version "0.36")
     (source
      (origin
        (method git-fetch)
@@ -3902,7 +3965,7 @@ of bibliographic references.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1xqg796844wk6kvn3xw4bqlxn9ra6jlwk7rsc5gy4j77l0gwl441"))))
+        (base32 "02glwnny9b4pwhq5inrakfz03zrq0zq1vr4npv88yla6pg8v87xx"))))
     (build-system emacs-build-system)
     (arguments
      (list
@@ -4600,53 +4663,6 @@ written text.  Unlike dynamic abbreviation, the text is analysed
 during idle time, while Emacs is doing nothing else.")
     (license license:gpl3+)))
 
-(define-public emacs-pasp-mode
-  (let ((commit "59385eb0e8ebcfc8c11dd811fb145d4b0fa3cc92")
-        (revision "1"))
-    (package
-     (name "emacs-pasp-mode")
-     (version (git-version "0.1.0" revision commit))
-     (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/santifa/pasp-mode")
-                    (commit commit)))
-              (patches
-               (search-patches "emacs-pasp-mode-quote-file-names.patch"))
-              (sha256
-               (base32
-                "1ar4vws3izzmir7m870mccci620ns3c5j26dcmwaxavhgw45wcmf"))))
-     (build-system emacs-build-system)
-     (arguments
-      (list
-       #:phases
-       #~(modify-phases %standard-phases
-           (add-after 'unpack 'defconst-version
-             (lambda _
-               (emacs-batch-edit-file "pasp-mode.el"
-                 '(progn
-                   (search-forward-regexp "(defcustom pasp-mode-version")
-                   (forward-sexp)
-                   (kill-sexp)
-                   (backward-sexp)
-                   (beginning-of-line)
-                   (kill-sexp)
-                   (insert (format "(defconst emacs-pasp-version \"%s\" %s)"
-                                   #$version (cadr kill-ring)))
-                   (basic-save-buffer)))))
-           (add-after 'unpack 'hardcode-clingo
-             (lambda* (#:key inputs #:allow-other-keys)
-               (emacs-substitute-variables "pasp-mode.el"
-                 ("pasp-clingo-path"
-                  (search-input-file inputs "/bin/clingo"))))))))
-     (inputs (list clingo))
-     (home-page "https://github.com/santifa/pasp-mode")
-     (synopsis "Major mode for editing answer set programs")
-     (description
-      "This package provides a major mode for editing answer set programs,
-in particular ones that can be solved by @command{clingo}.")
-     (license license:gpl3+))))
-
 (define-public emacs-pdf-tools
   (package
     (name "emacs-pdf-tools")
@@ -5362,33 +5378,42 @@ environments.")
     (license license:gpl2+)))
 
 (define-public emacs-lemon
-  (let ((commit "37a6e6d6ef0900ca19c820a2dbc122c7fe6d86cf")
-        (revision "0"))
-    (package
-      (name "emacs-lemon")
-      (version (git-version "2.0.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://codeberg.org/emacs-weirdware/lemon")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0bc77vzi4p6mlzmhgybbldlpcsiiv4xqrd5lnc7wzvmxv8byhqpm"))))
-      (build-system emacs-build-system)
-      (native-inputs
-       (list emacs-blight emacs-emms))
-      (propagated-inputs
-       (list emacs-s))
-      (home-page "https://codeberg.org/emacs-weirdware/lemon")
-      (synopsis "System monitors in the echo area")
-      (description
-       "Lemon is a tiny system monitor which displays system information in
+  (package
+    (name "emacs-lemon")
+    (version "2.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://codeberg.org/emacs-weirdware/lemon")
+             (commit "b10e992a25757a91723c7d554a5fa8e14291e702")))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "18yclk2zzqcahzhz2kq8g9gy1xnnxiy6rxs2lwhskj475kvwy2f9"))))
+    (build-system emacs-build-system)
+    (arguments
+     (list
+      #:tests? #true
+
+      ;; Only one test out of the four passes
+      #:test-command #~(list "emacs" "-Q" "--batch" "-L" "."
+                             ;; "-l" "lemon--test.el"
+                             ;; "-l" "lemon-monitor--test.el"
+                             ;; "-l" "lemon-sparkline--test.el"
+                             "-l" "lemon-time--test.el"
+                             "-f" "ert-run-tests-batch-and-exit")))
+    (native-inputs
+     (list emacs-blight emacs-emms))
+    (propagated-inputs
+     (list emacs-s))
+    (home-page "https://codeberg.org/emacs-weirdware/lemon")
+    (synopsis "System monitors in the echo area")
+    (description
+     "Lemon is a tiny system monitor which displays system information in
 the echo area when Emacs is has been idle for a few seconds.  This is a fork
 of zk_phi’s Symon, which has been largely rewritten.  It works nicely with
 EXWM.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-sx
   (let ((version "20191229")
@@ -6170,7 +6195,7 @@ result.")
 (define-public emacs-rg
   (package
     (name "emacs-rg")
-    (version "2.2.1")
+    (version "2.3.0")
     (source
      (origin
        (method git-fetch)
@@ -6179,7 +6204,7 @@ result.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1nxzplpk5cf6hhr2v85bmg68i6am96shi2zq7m83fs96bilhwsp5"))))
+        (base32 "1adici6hs4ivz7lqhrgdm9g1rz0mgvrsa7pkr2pcx6mg1f0qnlmr"))))
     (build-system emacs-build-system)
     (arguments
      (list
@@ -7143,7 +7168,7 @@ snippets for yasnippet.")
   ;; Package has no release.  Version is extracted from "Version:" keyword in
   ;; main file.
   (let ((commit "02b1da6278e43cc9cc0356110cc6bfbb37eb8241")
-	(revision "1"))
+        (revision "1"))
     (package
       (name "emacs-mode-line-idle")
       (version (git-version "0.1" revision commit))
@@ -7227,7 +7252,7 @@ truncation.")
 (define-public emacs-sqlite
   ;; XXX: There is no tagged commit.
   (let ((commit "dad42b8bbca4994be1871343dd18fd6528ee5797")
-	(revision "0"))
+        (revision "0"))
     (package
       (name "emacs-sqlite")
       (build-system emacs-build-system)
@@ -7236,8 +7261,8 @@ truncation.")
        (origin
          (method git-fetch)
          (uri (git-reference
-	       (url "https://gitlab.com/cnngimenez/sqlite.el")
-	       (commit commit)))
+               (url "https://gitlab.com/cnngimenez/sqlite.el")
+               (commit commit)))
          (file-name (git-file-name name version))
          (sha256
           (base32 "06ln4vijl8kii3nzc5cscgsadx1fqgxksflijd3ain83bn8g4wrd"))))
@@ -7251,7 +7276,7 @@ It is not intended as a user interface.")
 (define-public emacs-sqlite3-api
   (package
     (name "emacs-sqlite3-api")
-    (version "0.16")
+    (version "0.17")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -7260,7 +7285,7 @@ It is not intended as a user interface.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0yrfwb3yvhp1ib4izxh1ds68b3zw8gjkjhlk1kivarxnfjnjnly2"))))
+                "1y36818nd47mzfi3xcp31nr8n0izzmdyiqfx9hgp7ag98rbm7wlx"))))
     (build-system emacs-build-system)
     (arguments
      (list
@@ -7625,7 +7650,7 @@ repetitions for example).")
 (define-public emacs-flycheck-guile
   (package
     (name "emacs-flycheck-guile")
-    (version "0.4")
+    (version "0.5")
     (source
      (origin
        (method git-fetch)
@@ -7635,7 +7660,7 @@ repetitions for example).")
          (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0hkj3y7xlbbnwagmccav620r3qngpc909pj3n5b876r8gp6rm87p"))))
+        (base32 "18rkkc7zdcdqp8zlpz6n4zhqky0svacf03arqw0b1whb62p44j9r"))))
     (propagated-inputs
      (list emacs-flycheck emacs-geiser emacs-geiser-guile))
     (build-system emacs-build-system)
@@ -7901,14 +7926,14 @@ user.")
 (define-public emacs-subed
   (package
     (name "emacs-subed")
-    (version "1.2.0")
+    (version "1.2.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://elpa.nongnu.org/nongnu/subed-"
                                   version ".tar"))
               (sha256
                (base32
-                "1cdgnwd1saqc07xizdpaadnnl88w0hwc39jklhql1m2a0ii52lck"))))
+                "09a3ggnqsm4lxqhj0z9z3df6qzibvv9lpwqij2gpiifbb4lkvj4b"))))
     (arguments
      (list
       #:tests? #t
@@ -8238,14 +8263,14 @@ variables, and so on.  The mode also allows you to execute Tup commands.")
 (define-public emacs-compat
   (package
     (name "emacs-compat")
-    (version "29.1.4.0")
+    (version "29.1.4.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://elpa.gnu.org/packages/"
                                   "compat-" version ".tar"))
               (sha256
                (base32
-                "1y1x50r4ai4k8sa5qi5zbjz8216lpk9vjd0k681l1ha2aqn8l3pr"))))
+                "1r8laxmdyrpz4nmzjrndd668bks4fgmbya04m0bfzwvhlrsca940"))))
     (build-system emacs-build-system)
     (home-page "https://git.sr.ht/~pkal/compat")
     (synopsis "Emacs Lisp Compatibility Library")
@@ -9022,7 +9047,7 @@ SuperCollider is a platform for audio synthesis and algorithmic composition.")
 (define-public emacs-soothe-theme
   ;; There is no named branch.
   (let ((commit "0786fe70c6c1b4ddcfb932fdc6862b9611cfc09b")
-	(revision "0"))
+        (revision "0"))
     (package
      (name "emacs-soothe-theme")
      (version (git-version "20141027.2233" revision commit))
@@ -9030,11 +9055,11 @@ SuperCollider is a platform for audio synthesis and algorithmic composition.")
       (origin
        (method git-fetch)
        (uri (git-reference
-	     (url "https://github.com/emacsfodder/emacs-soothe-theme")
-	     (commit commit)))
+             (url "https://github.com/emacsfodder/emacs-soothe-theme")
+             (commit commit)))
        (file-name (git-file-name name version))
        (sha256
-	(base32 "10gh1hvxq9gm29r6qzlnva7vjidd7n4kih4z2ihyvbvy9za20xqw"))))
+        (base32 "10gh1hvxq9gm29r6qzlnva7vjidd7n4kih4z2ihyvbvy9za20xqw"))))
      (build-system emacs-build-system)
      (home-page "https://github.com/emacsfodder/emacs-soothe-theme")
      (synopsis "Colorful, but muted theme for Emacs, dark background with light text")
@@ -9209,6 +9234,8 @@ in @code{html-mode}.")
                             (delete-file f))
                           doc-files)
                 (delete-file-recursively "doc")))))))
+    (propagated-inputs
+     (list emacs-macrostep))
     (native-inputs
      (list texinfo))
     (home-page "https://github.com/slime/slime")
@@ -9696,6 +9723,30 @@ insertion mode.  When enabled all keys are implicitly prefixed with
 sgml/html integration, and indentation (working with sgml).")
     (license license:gpl3+)))
 
+(define-public emacs-jit-spell
+  (package
+    (name "emacs-jit-spell")
+    (version "0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://elpa.gnu.org/packages/jit-spell-"
+                                  version ".tar"))
+              (sha256
+               (base32
+                "0q8wd9phd0zcjhc92j633vz82fr0ji8zc9vir7kcn1msrf6jspwz"))))
+    (build-system emacs-build-system)
+    (propagated-inputs (list emacs-compat))
+    (home-page "https://github.com/astoff/jit-spell")
+    (synopsis "Just-in-time spell checking")
+    (description
+     "This package highlights all misspelled words in a window, just like a
+word processor or web browser does.  This behavior is different from the
+built-in Flyspell package, which only checks words as the cursor moves over
+them.  Moreover, unlike Flyspell, Jit-spell communicates with the
+spell-checking subprocess entirely asynchronously, which can lead to a
+noticeable performance improvement.")
+    (license license:gpl3+)))
+
 (define-public emacs-company-cabal
   ;; The latest version is 0.3.0, but no release has been provided after 0.2.1.
   (let ((commit "62112a7259e24bd6c08885629a185afe512b7d3d")
@@ -12462,6 +12513,38 @@ for SPARQL.  It can also execute queries against a SPARQL HTTP endpoint, such
 as Fuseki or DBPedia.")
     (license license:gpl3+)))
 
+(define-public emacs-sphinx-doc
+  (let ((commit "1eda612a44ef027e5229895daa77db99a21b8801")
+        (revision "1"))
+    (package
+      (name "emacs-sphinx-doc")
+      (version (git-version "0.3.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/naiquevin/sphinx-doc.el")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0q72i95yx3xa57jlgr7dik6prf20hi8bp8xf3f5c6ificv7i5378"))))
+      (build-system emacs-build-system)
+      (arguments
+       (list
+        #:tests? #true
+        #:test-command #~(list "emacs" "-Q" "--batch"
+                               "-l" "sphinx-doc-tests.el"
+                               "-f" "ert-run-tests-batch-and-exit")))
+      (propagated-inputs (list emacs-dash emacs-s))
+      (home-page "https://github.com/naiquevin/sphinx-doc.el")
+      (synopsis
+       "Generate Sphinx friendly docstrings for Python functions in Emacs")
+      (description
+       "Sphinx Doc is an Emacs minor mode for inserting docstring skeletons
+for Python functions and methods.  The structure of the docstring is as per
+the equirement of the Sphinx documentation generator.")
+      (license license:expat))))
+
 (define-public emacs-better-defaults
   (package
     (name "emacs-better-defaults")
@@ -12470,8 +12553,8 @@ as Fuseki or DBPedia.")
      (origin
        (method git-fetch)
        (uri (git-reference
-              (url "https://git.sr.ht/~technomancy/better-defaults")
-              (commit version)))
+             (url "https://git.sr.ht/~technomancy/better-defaults")
+             (commit version)))
        (file-name (git-file-name name version))
        (sha256
         (base32
@@ -12579,7 +12662,7 @@ mode with the package emacs-julia-mode.")
 (define-public emacs-julia-snail
   (package
     (name "emacs-julia-snail")
-    (version "1.1.5")
+    (version "1.2.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -12588,7 +12671,7 @@ mode with the package emacs-julia-mode.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "04nh37izz04lxkvkxhsig8khbrrgdl4p6pkjsv5bxymnp84zwlw7"))))
+                "1m6hh041gc10dfc1q5vxrgv64s1240whc9igqjm7asmnprajdiab"))))
     (build-system emacs-build-system)
     (arguments
      (list
@@ -12600,6 +12683,7 @@ mode with the package emacs-julia-mode.")
      (list libvterm
            emacs-julia-mode             ;required by parser
            emacs-parsec                 ;required by parser
+           emacs-popup
            emacs-vterm
            julia-tokenize
            julia-cstparser))
@@ -12634,7 +12718,7 @@ to all the other commands, too.")
 (define-public emacs-js2-mode
   (package
     (name "emacs-js2-mode")
-    (version "20220710")
+    (version "20230408")
     (source
      (origin
        (method git-fetch)
@@ -12643,7 +12727,7 @@ to all the other commands, too.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0whvhmgpv6yxqiljd1l4a880i0dhp0z0jxqaad7jjvwij07vvla4"))))
+        (base32 "1vwykla43315wlky52807pn2nm508dx6593alk7hnrl2qkl7852s"))))
     (build-system emacs-build-system)
     (arguments
      `(#:tests? #t
@@ -12651,7 +12735,7 @@ to all the other commands, too.")
     (home-page "https://github.com/mooz/js2-mode/")
     (synopsis "Improved JavaScript editing mode for Emacs")
     (description
-     "Js2-mode provides a JavaScript major mode for Emacs that is more
+     "Js2 mode provides a JavaScript major mode for Emacs that is more
 advanced than the built-in javascript-mode.  Features include accurate syntax
 highlighting using a recursive-descent parser, on-the-fly reporting of syntax
 errors and strict-mode warnings, smart line-wrapping within comments and
@@ -13395,6 +13479,27 @@ Python, together offering features such as navigation, documentation,
 completion, interactive development and more.")
       (license license:gpl3+))))
 
+(define-public emacs-railscasts-theme
+  (let ((commit "1340c3f6c2717761cab95617cf8dcbd962b1095b")
+        (revision "0"))
+    (package
+      (name "emacs-railscasts-theme")
+      (version (git-version "0.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/mikenichols/railscasts-theme")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "021x1l5kzsbm0qj5a3bngxa7ickm4lbwsdz81a2ks9pi1ivmw205"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/mikenichols/railscasts-theme")
+      (synopsis "Railscasts is a color theme for Emacs")
+      (description "Railscasts is a color theme for Emacs.")
+      (license license:expat))))
+
 (define-public emacs-rainbow-delimiters
   (package
     (name "emacs-rainbow-delimiters")
@@ -14121,7 +14226,7 @@ implementation.")
 (define-public emacs-cider
   (package
     (name "emacs-cider")
-    (version "1.6.0")
+    (version "1.7.0")
     (source
      (origin
        (method git-fetch)
@@ -14130,7 +14235,7 @@ implementation.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1a3xbfn1id8dcy3178kmdnzcvh7lq2pdwwg4axhncw6jq9hqiqja"))))
+        (base32 "0jqjgygdvny1vhjbx7k0l492fhamwndsjcbb2mccwp9j47k4qar9"))))
     (build-system emacs-build-system)
     (arguments
      '(#:exclude                        ;don't exclude 'cider-test.el'
@@ -14191,8 +14296,8 @@ e.g., the expression you've just evaluated would briefly flash and so on.")
 
 (define-public emacs-sly
   ;; Update together with sbcl-slynk.
-  (let ((commit "4513c382f07a2a2cedb3c046231b69eae2f5e6f0")
-        (revision "6"))
+  (let ((commit "82b20a9a83209b4dbfbfb62a1536896aed5f85f7")
+        (revision "7"))
     ;; Versions are not always tagged.  Besides, latest master contains
     ;; important fixes.
     (package
@@ -14207,7 +14312,7 @@ e.g., the expression you've just evaluated would briefly flash and so on.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "10bzxhi5d7h18hqclxqy2z857d0sfbsnyxvrhmfkdi0h75zz7m4n"))))
+           "0dvr36qvb490gml0znay0slw63czp7azvajnv7srh8s0j8pqpcaj"))))
       (build-system emacs-build-system)
       (native-inputs
        (list texinfo))
@@ -14516,7 +14621,7 @@ Lua programming language}.")
 (define-public emacs-ebuild-mode
   (package
     (name "emacs-ebuild-mode")
-    (version "1.62")
+    (version "1.63")
     (source
      (origin
        (method url-fetch)
@@ -14525,7 +14630,7 @@ Lua programming language}.")
              "ebuild-mode-" version ".tar.xz"))
        (file-name (string-append name "-" version ".tar.xz"))
        (sha256
-        (base32 "1l547d2q9l62zn53cwnjkxzqsblx72jh9a1vl753qlnyy689zvfp"))))
+        (base32 "1pkdyxiprj94z062y6nlm5w34gxyazbkg3yzhfscnm087p7pbg82"))))
     (build-system emacs-build-system)
     (arguments
      (list
@@ -14613,7 +14718,7 @@ extensions.")
 (define-public emacs-evil-collection
   (package
     (name "emacs-evil-collection")
-    (version "0.0.8")
+    (version "0.0.9")
     (source
      (origin
        (method git-fetch)
@@ -14622,12 +14727,22 @@ extensions.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "159i3qvjnp7jiffwpr517nnxcy3w3g40302vyzxvz6mb6qay6f2c"))))
+        (base32 "1y1ig4shqaaiiwqm5pv8hvh8ynr6irhffkgmpyzmhdaaicxnfazc"))))
     (build-system emacs-build-system)
-    (propagated-inputs
-     (list emacs-evil emacs-annalist))
     (arguments
-     `(#:include (cons* "^modes\\/" %default-include)))
+     (list
+      #:include #~(cons* "^modes\\/" %default-include)
+      #:tests? #true
+      #:test-command #~(list "emacs" "-Q" "--batch"
+                             "-L" "."
+                             "-L" "./test"
+                             "-l" "evil-collection-test.el"
+                             "-l" "evil-collection-magit-tests.el"
+                             "-f" "ert-run-tests-batch-and-exit")))
+    (native-inputs
+     (list emacs-magit))
+    (propagated-inputs
+     (list emacs-annalist emacs-evil))
     (home-page "https://github.com/emacs-evil/evil-collection")
     (synopsis "Collection of Evil bindings for many major and minor modes")
     (description "This is a collection of Evil bindings for the parts of
@@ -15173,7 +15288,7 @@ passive voice.")
 (define-public emacs-org
   (package
     (name "emacs-org")
-    (version "9.6.1")
+    (version "9.6.3")
     (source
      (origin
        (method git-fetch)
@@ -15182,7 +15297,7 @@ passive voice.")
              (commit (string-append "release_" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0iycj54ksanx6n3s06xhf0ax1cqjdcxynmz6cby27bcsj0sqflnp"))))
+        (base32 "0gsvhqn93mlgzhwhy5ynb03fbvl55zdfbbdgzh0y42ffyc643v8p"))))
     (build-system emacs-build-system)
     (arguments
      (list
@@ -15615,11 +15730,10 @@ extensibility.")
     (license license:gpl3+)))
 
 (define-public emacs-autocrypt
-  (let ((commit "5b55f8d37545e9c441788627c17e350d7edf4055")
-        (revision "0"))
+  (let ((commit "a90aa6b644fe8cf72af9e1615a7c50b36b739e7c")) ;version bump
     (package
       (name "emacs-autocrypt")
-      (version (git-version "0.4.0" revision commit))
+      (version "0.4.1")
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -15628,19 +15742,15 @@ extensibility.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0b06xnjkgwjpxl96mdi674pmvdaiwncifi1a30wxhl1dwr7kr084"))))
+                  "124qf96g2xbz3wz0ihix4l1g4prpa023hx0klf72clx92dhjjgjj"))))
       (build-system emacs-build-system)
       (home-page "https://git.sr.ht/~pkal/autocrypt")
       (synopsis "Autocrypt implementation for Emacs")
-      (description "@code{emacs-autocrypt} is an implementation of
-Autocrypt (@url{https://autocrypt.org/}) for various Emacs MUAs.  Autocrypt is
+      (description "Autocrypt package is an implementation of
+Autocrypt (@url{https://autocrypt.org/}) for various Emacs MUAs,
 a cryptographic protocol for email clients aiming to simplify key exchange and
-encryption.
-
-Run @code{M-x autocrypt-create-account} to initialize an autocrypt key, and
-add @code{autocrypt-mode} to your MUA's hooks (@code{gnus-mode-hook},
-@code{message-mode-hook}, ...) to activate its usage.")
-      (license license:cc0))))
+encryption.")
+      (license license:gpl3+))))
 
 (define-public emacs-nginx-mode
   (package
@@ -15809,6 +15919,26 @@ reference to any other metadata.  Denote basically streamlines the creation of
 such files while providing facilities to link between them.")
     (license license:gpl3+)))
 
+(define-public emacs-denote-menu
+  (package
+    (name "emacs-denote-menu")
+    (version "1.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://elpa.gnu.org/packages/"
+                           "denote-menu-" version ".tar"))
+       (sha256
+        (base32 "12ry0rv45hv1vrwx9wih72s9h0f3r18xssnkzfa9ilp77kgbas5q"))))
+    (build-system emacs-build-system)
+    (propagated-inputs (list emacs-denote))
+    (home-page "https://www.scss.tcd.ie/~sulimanm/posts/denote-menu.html")
+    (synopsis "View and filter Denote files in a tabulated list")
+    (description "This package provides an interface for viewing your
+Denote files that goes beyond using the standard Dired Emacs command to
+view your Denote directory.")
+    (license license:gpl3+)))
+
 (define-public emacs-logos
   ;; XXX: Upstream did not tag latest release.  Use the commit matching
   ;; version bump.
@@ -15896,6 +16026,47 @@ using a convenient notation.")
     (license (list license:gpl3+
                    license:fdl1.3+)))) ;GFDLv1.3+ for the manual
 
+(define-public emacs-beframe
+  (let ((commit "edfab6eefe4ac35cd8d1ed87fc7f670496d25e40")) ;version bump
+    (package
+      (name "emacs-beframe")
+      (version "0.2.0")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://git.sr.ht/~protesilaos/beframe")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0sd8r3icaj2gl7f62fyzlwkkb05mc3cwsqgicw0n1x07s5ir3129"))))
+      (build-system emacs-build-system)
+      (arguments
+       (list
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'install 'makeinfo
+              (lambda _
+                (invoke "emacs"
+                        "--batch"
+                        "--eval=(require 'ox-texinfo)"
+                        "--eval=(find-file \"README.org\")"
+                        "--eval=(org-texinfo-export-to-info)")
+                (install-file "beframe.info"
+                              (string-append #$output "/share/info")))))))
+      (native-inputs
+       (list texinfo))
+      (home-page "https://protesilaos.com/emacs/beframe")
+      (synopsis "Isolate Emacs buffers per frame")
+      (description
+       "Beframe enables a frame-oriented Emacs workflow where each frame has
+access to the list of buffers visited therein.  In the interest of brevity, we
+call buffers that belong to frames ``beframed''.  Producing multiple frames
+does not generate multiple buffer lists.  There still is only one global list
+of buffers.  Beframing them simply filters the list.")
+      (license (list license:gpl3+
+                     license:fdl1.3+))))) ; GFDLv1.3+ for the manual
+
 (define-public emacs-gn-mode
   (package
     (name "emacs-gn-mode")
@@ -17215,7 +17386,7 @@ in Emacs.")
 (define-public emacs-php-mode
   (package
     (name "emacs-php-mode")
-    (version "1.24.2")
+    (version "1.24.3")
     (source
      (origin
        (method git-fetch)
@@ -17224,14 +17395,24 @@ in Emacs.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "13lkzvamr86409whr8as4721gx9xrlfkmxvv941775mryliqk6j6"))))
+        (base32 "01yw10z1kf38nz4z3gmpx56wmc7a7caf4nk6rccg0w4kklqw1h94"))))
     (build-system emacs-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'enter-source-directory
-           (lambda _
-             (chdir "lisp"))))))
+     (list
+      #:tests? #true
+      #:test-command #~(list "emacs" "-Q" "--batch"
+                             "-l" "../tests/php-mode-test.el"
+                             "-f" "ert-run-tests-batch-and-exit")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'prepare-testing-bed
+            (lambda _
+              ;; This file is necessary for `php-project-root' test.
+              (call-with-output-file "tests/project/1/.git"
+                (const #t))))
+          (add-after 'prepare-testing-bed 'enter-source-directory
+            (lambda _
+              (chdir "lisp"))))))
     (propagated-inputs (list emacs-projectile))
     (home-page "https://github.com/ejmr/php-mode")
     (synopsis "Major mode for editing PHP code")
@@ -17243,6 +17424,48 @@ guidelines.  It also includes a couple handy IDE-type features such as
 documentation search and a source and class browser.")
     (license license:gpl3+)))
 
+(define-public emacs-pippel
+  (let ((commit "cb194952ee150e77601d3233dabdb521b976ee79")
+        (revision "0"))
+    (package
+      (name "emacs-pippel")
+      (version (git-version "0.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/arifer612/pippel")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "17606l24yyrjxa4rc0p2zj50lfbayqldw4phhi59yqf61289d520"))))
+      (build-system emacs-build-system)
+      (arguments
+       (list
+        #:include #~(cons "^pippel\\.py$" %default-include)
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'substitute-pippel-package-path
+              (lambda _
+                (emacs-substitute-variables "pippel.el"
+                  ("pippel-package-path" (elpa-directory #$output)))))
+            (add-after 'unpack 'substitute-python-path
+              (lambda* (#:key inputs #:allow-other-keys)
+                (emacs-substitute-variables "pippel.el"
+                  ("pippel-python-command"
+                   (search-input-file inputs "/bin/python"))))))))
+      (inputs
+       (list python-wrapper))
+      (propagated-inputs
+       (list emacs-dash emacs-s))
+      (home-page "https://github.com/arifer612/pippel")
+      (synopsis "Emacs frontend to Python package manager Pip")
+      (description
+       "Pippel is an Emacs frontend for the Python package manager Pip.  As
+Pippel also uses Tabulated List mode, it provides a similar package menu like
+@code{package-list-packages}.")
+      (license license:gpl3+))))
+
 (define-public emacs-pos-tip
   (package
     (name "emacs-pos-tip")
@@ -17406,14 +17629,14 @@ the center of the screen and not at the bottom.")
 (define-public emacs-posframe
   (package
     (name "emacs-posframe")
-    (version "1.4.0")
+    (version "1.4.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "posframe-" version ".tar"))
        (sha256
-        (base32 "0pqy7scdi3qxj518xm0bbr3979byfxqxxh64wny37xzhd4apsw5j"))))
+        (base32 "02kw3d6760015q61sryw8k3zqdnzhcwwyfjfysbfs07cljkqpjnh"))))
     (build-system emacs-build-system)
     ;; emacs-minimal does not include the function font-info.
     (arguments
@@ -17979,7 +18202,7 @@ Emacs.")
 (define-public emacs-eglot
   (package
     (name "emacs-eglot")
-    (version "1.13")
+    (version "1.14")
     (source
      (origin
        (method url-fetch)
@@ -17987,7 +18210,7 @@ Emacs.")
                            ".tar"))
        (sha256
         (base32
-         "1yg6ddldd2qnnhlhc2r5rq7rjc0pigqjgzpvnqqb33nssw1lkw82"))))
+         "0aw28gdx90k87czxf436r9bva58bal55cdnp90ga36c89wzdjznj"))))
     (build-system emacs-build-system)
     (propagated-inputs
      (list emacs-external-completion
@@ -18065,14 +18288,14 @@ more information.")
 (define-public emacs-eldoc
   (package
     (name "emacs-eldoc")
-    (version "1.13.0")
+    (version "1.14.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
              "https://elpa.gnu.org/packages/eldoc-" version ".tar"))
        (sha256
-        (base32 "0c05dzrs7vrhibj46jpz625482ah6xywji7way6wcvwc711y74fz"))))
+        (base32 "15bg61nbfb6l51frlsn430ga3vscns2651wvi6377vlyra7kgn39"))))
     (build-system emacs-build-system)
     (home-page "https://elpa.gnu.org/packages/eldoc.html")
     (synopsis "Show function arglist or variable docstring in echo area")
@@ -18096,12 +18319,12 @@ variable instead, to remind you of that variable's meaning.")
      (origin
        (method git-fetch)
        (uri (git-reference
-	     (url "https://github.com/rejeep/ert-runner.el")
-	     (commit (string-append "v" version))))
+             (url "https://github.com/rejeep/ert-runner.el")
+             (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-	(base32
-	 "08gygn9fjank5gpi4v6ynrkn0jbknxbwsn7md4p9ndygdbmnkf98"))))
+        (base32
+         "08gygn9fjank5gpi4v6ynrkn0jbknxbwsn7md4p9ndygdbmnkf98"))))
     (build-system emacs-build-system)
     (inputs
      (list emacs-ansi
@@ -18113,22 +18336,22 @@ variable instead, to remind you of that variable's meaning.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-	 (add-after 'install 'install-executable
-	   (lambda* (#:key inputs outputs #:allow-other-keys)
-	     (let ((out (assoc-ref outputs "out"))
-		   (source-directory (string-append
-				      (getenv "TMPDIR") "/source")))
-	       (substitute* "bin/ert-runner"
-		 (("ERT_RUNNER=\"\\$\\(dirname \\$\\(dirname \\$0\\)\\)")
-		  (string-append "ERT_RUNNER=\"" (elpa-directory out))))
-	       (install-file "bin/ert-runner" (string-append out "/bin"))
-	       (wrap-program (string-append out "/bin/ert-runner")
-		 (list "EMACSLOADPATH" ":" 'prefix
-		       ;; Do not capture the transient source directory in
-		       ;; the wrapper.
-		       (delete source-directory
-			       (string-split (getenv "EMACSLOADPATH") #\:))))
-	       #t))))
+         (add-after 'install 'install-executable
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (source-directory (string-append
+                                      (getenv "TMPDIR") "/source")))
+               (substitute* "bin/ert-runner"
+                 (("ERT_RUNNER=\"\\$\\(dirname \\$\\(dirname \\$0\\)\\)")
+                  (string-append "ERT_RUNNER=\"" (elpa-directory out))))
+               (install-file "bin/ert-runner" (string-append out "/bin"))
+               (wrap-program (string-append out "/bin/ert-runner")
+                 (list "EMACSLOADPATH" ":" 'prefix
+                       ;; Do not capture the transient source directory in
+                       ;; the wrapper.
+                       (delete source-directory
+                               (string-split (getenv "EMACSLOADPATH") #\:))))
+               #t))))
        #:include (cons* "^reporters/.*\\.el$" %default-include)))
     (home-page "https://github.com/rejeep/ert-runner.el")
     (synopsis "Opinionated Ert testing workflow")
@@ -18807,7 +19030,7 @@ multiplexer.")
 (define-public emacs-plz
   (package
     (name "emacs-plz")
-    (version "0.3")
+    (version "0.4")
     (source
      (origin
        (method git-fetch)
@@ -18816,11 +19039,12 @@ multiplexer.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1ack4rajjdmb3fqz5v394rqpvn9mfvbkrxra27yrcqz97mma1ki7"))))
+        (base32 "0sfgbq6nn9prxqg5qs576rlpszbhp70yj3d8r7hqckrd5s0sbk13"))))
     (build-system emacs-build-system)
     (inputs (list curl))
     (arguments
      (list
+      #:tests? #f                       ;require internet access
       #:phases
       #~(modify-phases %standard-phases
           (add-after 'unpack 'substitute-curl-path
@@ -18837,7 +19061,7 @@ which avoids some of the issues with using Emacs’s built-in Url library.")
 (define-public emacs-ement
   (package
     (name "emacs-ement")
-    (version "0.7")
+    (version "0.8.2")
     (source
      (origin
        (method git-fetch)
@@ -18846,12 +19070,13 @@ which avoids some of the issues with using Emacs’s built-in Url library.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0fmqllvz0dqv8gvj5sbn7xc5qw67ip9gdrj0139zgi2z9fj9b188"))))
+        (base32 "0qzml4hrylvsd25vyyj1pf77kvv8kzjyzap00d4s182gvva4lvks"))))
     (build-system emacs-build-system)
     (arguments
-     `(#:emacs ,emacs))               ;need libxml support
+     (list #:emacs emacs))              ;need libxml support
     (propagated-inputs
-     (list emacs-plz
+     (list emacs-persist
+           emacs-plz
            emacs-svg-lib
            emacs-taxy
            emacs-taxy-magit-section
@@ -19920,8 +20145,8 @@ files.")
        (origin
          (method git-fetch)
          (uri (git-reference
-	       (url "https://github.com/jschaf/powershell.el")
-	       (commit commit)))
+               (url "https://github.com/jschaf/powershell.el")
+               (commit commit)))
          (file-name (git-file-name name version))
          (sha256
           (base32 "1cxhzaaig88zhylyycvb3849r85j1ijqklnh9zbqsfl2zhpb0g5c"))))
@@ -21761,7 +21986,7 @@ automatically fetched from well-curated sources, and formatted as BibTeX.")
 (define-public emacs-citar
   (package
     (name "emacs-citar")
-    (version "1.2.0")
+    (version "1.3.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -21770,7 +21995,7 @@ automatically fetched from well-curated sources, and formatted as BibTeX.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "186h6wbjwh7ws3jmc81wx2cv7gbppl2j3gwdq67crhml5xjc4fh7"))))
+                "12chdrmkggnpci1kdkkrz4a2bnsbzc8pra318zbnn3qxinlpngyy"))))
     (build-system emacs-build-system)
     (arguments
      (list
@@ -21809,7 +22034,7 @@ citations.")
 (define-public emacs-citar-org-roam
   (package
     (name "emacs-citar-org-roam")
-    (version "0.3")
+    (version "0.5.1")
     (source
      (origin
        (method git-fetch)
@@ -21818,9 +22043,9 @@ citations.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1ldfs7g7ixnrwj23draiph4vy6xq7qgw18vhi7vbw6wvkh9fcv9r"))))
+        (base32 "0iwhwfllbcd938qkvh5m5cn6s8pn01xb02yjbv1hl4jpiayianqa"))))
     (build-system emacs-build-system)
-    (propagated-inputs (list emacs-org-roam emacs-citar))
+    (propagated-inputs (list emacs-citar emacs-org-roam))
     (home-page "https://github.com/emacs-citar/citar-org-roam")
     (synopsis "Emacs package to provide tighter Citar and Org-Roam integration")
     (description "\
@@ -21834,7 +22059,7 @@ Citar note support:
 @item ability to query note citations by reference
 @item ``live'' updating of Citar UI for presence of notes
 @end itemize")
-    (license license:gpl3)))
+    (license license:gpl3+)))
 
 (define-public emacs-helm-bibtex
   (let ((commit "8ebf50d5bd368082d0b7ab79d26a52f372cdef98")
@@ -23495,27 +23720,29 @@ time is being spent during Emacs startup in order to optimize startup time.")
     (license license:gpl3+)))
 
 (define-public emacs-magit-gerrit
-  (package
-    (name "emacs-magit-gerrit")
-    (version "0.4")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/terranpro/magit-gerrit")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "1q4kcr2ha2kir7pj0cshmgllgq51543syxkkk5jk3ksfiaba4crj"))))
-    (build-system emacs-build-system)
-    (propagated-inputs
-     (list emacs-magit))
-    (home-page "https://github.com/terranpro/magit-gerrit")
-    (synopsis "Magit extension for Gerrit")
-    (description "This Magit extension provides integration with Gerrit,
+  (let ((commit "a97521574c5b7d4b7ab89e25c358c87fd5b1887f")
+        (revision "1"))
+    (package
+      (name "emacs-magit-gerrit")
+      (version (git-version "0.4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/emacsorphanage/magit-gerrit")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0p6h67x7f6iraw6jqn7dmqy2m2mwwvbwcs61hq8jc602v6hkslqn"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       (list emacs-magit))
+      (home-page "https://github.com/emacsorphanage/magit-gerrit")
+      (synopsis "Magit extension for Gerrit")
+      (description "This Magit extension provides integration with Gerrit,
 which makes it possible to conduct Gerrit code reviews directly from within
 Emacs.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-magit-org-todos-el
   (package
@@ -24624,27 +24851,25 @@ appropriate directory if no @code{eshell} session is active.")
     (license license:gpl3+)))
 
 (define-public emacs-eshell-syntax-highlighting
-  (let ((commit "1ba39a9ffb2298cd716a4314cf3f369028c7bafe")
-        (revision "0"))
-    (package
-      (name "emacs-eshell-syntax-highlighting")
-      (version (git-version "0.3" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/akreisher/eshell-syntax-highlighting")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0w2f5a9cxa365hcc92c24b3kq5dwry3prig57jgnicwmjn5nkqlz"))))
-      (build-system emacs-build-system)
-      (home-page "https://github.com/akreisher/eshell-syntax-highlighting")
-      (synopsis "Add syntax highlighting to Eshell")
-      (description
-       "This package highlights user commands at the Eshell interactive prompt
+  (package
+    (name "emacs-eshell-syntax-highlighting")
+    (version "0.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/akreisher/eshell-syntax-highlighting")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1ib46fs70grx7rmw45i817v1dyvcj0b8xdmndvaz7papiimf6vrj"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/akreisher/eshell-syntax-highlighting")
+    (synopsis "Add syntax highlighting to Eshell")
+    (description
+     "This package highlights user commands at the Eshell interactive prompt
 to provide feedback on the validity of commands and syntax.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-eshell-z
   (package
@@ -26890,6 +27115,31 @@ scratch, and you think the Spacemacs theme looks good.
           (base32 "11lwckqcgzsahrkkm5wk1ph4kc7d4yz05r7251g8c9f0q6vdj9dp"))
          (file-name (git-file-name name version)))))))
 
+(define-public emacs-column-enforce-mode
+  (let ((commit "14a7622f2268890e33536ccd29510024d51ee96f")
+        (revision "1"))
+    (package
+      (name "emacs-column-enforce-mode")
+      (version (git-version "1.0.4" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url
+                       "https://github.com/jordonbiondo/column-enforce-mode")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1vxra5vk78yns2sw89m41bggczqg1akq6xvzfs9kylhkg5yz3g7g"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/jordonbiondo/column-enforce-mode")
+      (synopsis "Highlight text that extends beyond a certain column")
+      (description
+       "Column Enforce mode highlights text that extends beyond a certain
+column.  It can be used to enforce 80 column rule.  It can also be configured
+for any @var{N}-column rule.")
+      (license license:gpl3+))))
+
 (define-public emacs-column-marker
   (package
     (name "emacs-column-marker")
@@ -27137,6 +27387,16 @@ targets the Emacs based IDEs (CIDER, ESS, Geiser, Robe, SLIME etc.)")
       #:test-command #~(list "make" "test")
       #:phases
       #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-spy-on-test
+            (lambda _
+              (substitute* "buttercup.el"
+                ;; The spy-on test fails with native compilation, which was
+                ;; fixed in v1.30 but with a variable name for Emacs newer
+                ;; than 28.2.  Add in the same fix with the current variable
+                ;; name.  Upstream bug and fix:
+                ;; <https://github.com/jorgenschaefer/emacs-buttercup/issues/236>
+                (("\\(native-comp-enable-subr-trampolines nil\\)" all)
+                 (string-append all " (comp-enable-subr-trampolines nil)")))))
           (add-after 'install 'install-bin
             (lambda _
               (install-file "bin/buttercup"
@@ -27628,6 +27888,37 @@ Nix expressions.  It supports syntax highlighting, indenting and refilling of
 comments.")
     (license license:lgpl2.1+)))
 
+(define-public emacs-nyxt
+  (package
+    (name "emacs-nyxt")
+    (version "0.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://git.sr.ht/~conses/nyxt.el")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1hgb10pk5m3v2gsl4h6i821nyzksss0rk4hhjnfb7nm98lalzbl6"))))
+    (build-system emacs-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-file-name
+            (lambda* (#:key inputs #:allow-other-keys)
+              (emacs-substitute-variables "nyxt.el"
+                ("nyxt-path"
+                 (search-input-file inputs "/bin/nyxt"))))))))
+    (inputs (list nyxt))
+    (propagated-inputs (list emacs-sly))
+    (home-page "https://git.sr.ht/~conses/nyxt.el")
+    (synopsis "Interact with Nyxt from Emacs")
+    (description "This package consists of custom logic to interact with Nyxt
+from Emacs.")
+    (license license:gpl3+)))
+
 (define-public emacs-libmpdel
   (package
     (name "emacs-libmpdel")
@@ -27740,7 +28031,7 @@ tabulated-lists).")
 (define-public emacs-eat
   (package
     (name "emacs-eat")
-    (version "0.6")
+    (version "0.7")
     (source
      (origin
        (method git-fetch)
@@ -27750,7 +28041,7 @@ tabulated-lists).")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1279dcagg01vb5izd95lm7i6z5zck136vw3lb06kam8xagrkvfjf"))
+         "05wpjqbj0jv1sax788rdj0myfi596rimvfwh4mg0w6kcza291xiq"))
        (modules '((guix build utils)))
        (snippet
         #~(begin
@@ -27772,9 +28063,17 @@ tabulated-lists).")
               (invoke "make" "info")))
           (add-before 'install 'build-terminfo-database
             (lambda _
-              (invoke "make" "terminfo"))))))
+              (invoke "make" "terminfo")))
+          (add-before 'install 'patch-ncurses-tic-executable
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let ((tic (search-input-file inputs "/bin/tic")))
+                (substitute* "eat.el"
+                  (("\\(executable-find \"tic\"\\)")
+                   (string-append "\"" tic "\"")))))))))
     (native-inputs
-     (list ncurses texinfo))
+     (list texinfo))
+    (inputs
+     (list ncurses))
     (home-page "https://codeberg.org/akib/emacs-eat")
     (synopsis "Terminal emulator in Emacs")
     (description
@@ -28543,7 +28842,7 @@ processes for Emacs.")
 (define-public emacs-treemacs
   (package
     (name "emacs-treemacs")
-    (version "3.0")
+    (version "3.1")
     (source
      (origin
        (method git-fetch)
@@ -28552,20 +28851,8 @@ processes for Emacs.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0l6pbfrkl0v1iyc43vyhchbcfy7cjhinn8pw07aq4ssh6lxil7kp"))))
+        (base32 "1rs0l0k9fd8xav627944jfm518yillcmjbdrkzjw3xq1wx80pn95"))))
     (build-system emacs-build-system)
-    (propagated-inputs
-     (list emacs-ace-window
-           emacs-dash
-           emacs-f
-           emacs-ht
-           emacs-hydra
-           emacs-pfuture
-           emacs-s))
-    (native-inputs
-     (list emacs-buttercup emacs-el-mock))
-    (inputs
-     (list python))
     (arguments
      (list
       #:tests? #t
@@ -28582,16 +28869,6 @@ processes for Emacs.")
             ;; Elisp directory is not in root of the source.
             (lambda _
               (chdir "src/elisp")))
-          (add-before 'check 'delete-failing-tests
-            ;; FIXME: 4 tests out of 254 are failing.
-            (lambda _
-              (emacs-batch-edit-file "../../test/treemacs-test.el"
-                '(progn
-                  (goto-char (point-min))
-                  (re-search-forward "describe \"treemacs--parent\"")
-                  (beginning-of-line)
-                  (kill-sexp)
-                  (basic-save-buffer)))))
           (add-before 'install 'patch-paths
             (lambda* (#:key inputs #:allow-other-keys)
               (make-file-writable "treemacs-core-utils.el")
@@ -28618,6 +28895,18 @@ processes for Emacs.")
                 (copy-recursively
                  "src/scripts"
                  (string-append (elpa-directory #$output) "/scripts"))))))))
+    (native-inputs
+     (list emacs-buttercup emacs-el-mock))
+    (inputs
+     (list python))
+    (propagated-inputs
+     (list emacs-ace-window
+           emacs-dash
+           emacs-f
+           emacs-ht
+           emacs-hydra
+           emacs-pfuture
+           emacs-s))
     (home-page "https://github.com/Alexander-Miller/treemacs")
     (synopsis "Emacs tree style file explorer")
     (description
@@ -28632,23 +28921,23 @@ utilities.")
   (package
     (inherit emacs-treemacs)
     (name "emacs-treemacs-extra")
-    (propagated-inputs
-     `(,@(package-propagated-inputs emacs-treemacs)
-       ("emacs-all-the-icons" ,emacs-all-the-icons)
-       ("emacs-evil" ,emacs-evil)
-       ("emacs-magit" ,emacs-magit)
-       ("emacs-projectile" ,emacs-projectile)
-       ("emacs-perspective" ,emacs-perspective)
-       ("emacs-persp-mode" ,emacs-persp-mode)
-       ("mu" ,mu)))
     (arguments
      (substitute-keyword-arguments
          (package-arguments emacs-treemacs)
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'chdir-elisp 'copy-extra
-             (lambda _
-               (copy-recursively "../extra" ".")))))))))
+        #~(modify-phases #$phases
+            (add-after 'chdir-elisp 'copy-extra
+              (lambda _
+                (copy-recursively "../extra" ".")))))))
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs emacs-treemacs)
+       (append emacs-all-the-icons
+               emacs-evil
+               emacs-magit
+               emacs-projectile
+               emacs-persp-mode
+               emacs-perspective
+               mu)))))
 
 (define-public emacs-libyaml
   ;; Upstream made no release so far.
@@ -28915,44 +29204,48 @@ as Emacs Lisp.")
     (license license:gpl3+)))
 
 (define-public emacs-transient
-  (package
-    (name "emacs-transient")
-    (version "0.3.7")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/magit/transient")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0c7wbd0j0b802bzdpdkrx2q7wm7b9s56rk554dnadkpywhmdiqwn"))))
-    (build-system emacs-build-system)
-    (arguments
-     `(#:tests? #f                      ;no test suite
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'build-info-manual
-           (lambda _
-             (invoke "make" "info")
-             ;; Move the info file to lisp so that it gets installed by the
-             ;; emacs-build-system.
-             (rename-file "docs/transient.info" "lisp/transient.info")))
-         (add-after 'build-info-manual 'enter-lisp-directory
-           (lambda _
-             (chdir "lisp"))))))
-    (native-inputs
-     (list texinfo))
-    (propagated-inputs
-     (list emacs-dash))
-    (home-page "https://magit.vc/manual/transient")
-    (synopsis "Transient commands in Emacs")
-    (description "Taking inspiration from prefix keys and prefix arguments
+  ;; Use the latest commit as the latest release is getting old and has known
+  ;; problems, according to its one of its maintainers (see:
+  ;; https://github.com/magit/magit/issues/4676#issuecomment-1473912505).
+  (let ((commit "0ae0de43590b5b6984a83f9e044e7c426455ac6e")
+        (revision "1"))
+    (package
+      (name "emacs-transient")
+      (version (git-version "0.3.7" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/magit/transient")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "01b60pj8k3vwvs2xsx5md2myz0l1dj1myh9jrdyaiyhcaacvlbq8"))))
+      (build-system emacs-build-system)
+      (arguments
+       `(#:tests? #f ;no test suite
+         #:phases (modify-phases %standard-phases
+                    (add-after 'unpack 'build-info-manual
+                      (lambda _
+                        (invoke "make" "info")
+                        ;; Move the info file to lisp so that it gets
+                        ;; installed by the emacs-build-system.
+                        (rename-file "docs/transient.info"
+                                     "lisp/transient.info")))
+                    (add-after 'build-info-manual 'enter-lisp-directory
+                      (lambda _
+                        (chdir "lisp"))))))
+      (native-inputs (list texinfo))
+      (propagated-inputs (list emacs-compat))
+      (home-page "https://magit.vc/manual/transient")
+      (synopsis "Transient commands in Emacs")
+      (description
+       "Taking inspiration from prefix keys and prefix arguments
 in Emacs, Transient implements a similar abstraction involving a prefix
 command, infix arguments and suffix commands.  We could call this abstraction
 a \"transient command\", but because it always involves at least two
 commands (a prefix and a suffix) we prefer to call it just a \"transient\".")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-forge
   (package
@@ -29485,6 +29778,27 @@ generating a temp buffer in which any useful Emacs utilities and modes can be
 invoked.")
       (license license:gpl3+))))
 
+(define-public emacs-exwm-modeline
+  (package
+    (name "emacs-exwm-modeline")
+    (version "0.1.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/SqrtMinusOne/exwm-modeline")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0b84wa8n5740p7wyia3skc8683inypha51w85mxn62wz6vfpjfp4"))))
+    (build-system emacs-build-system)
+    (propagated-inputs (list emacs-exwm))
+    (home-page "https://github.com/SqrtMinusOne/exwm-modeline")
+    (synopsis "Modeline segment for EXWM")
+    (description "This package provides a modeline segment to display EXWM
+workspaces.")
+    (license license:gpl3+)))
+
 (define-public emacs-ert-async
   (package
     (name "emacs-ert-async")
@@ -30274,14 +30588,14 @@ well as an option for visually flashing evaluated s-expressions.")
 (define-public emacs-tramp
   (package
     (name "emacs-tramp")
-    (version "2.6.0.2")
+    (version "2.6.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "tramp-" version ".tar"))
        (sha256
-        (base32 "0pfrsgci1rqrykkfyxm9wsn7f0l3rzc2vj1fas27w925l0k0lrci"))))
+        (base32 "0hcm20qk62k9irqdfcb44js9jkff43fji07la33arnjqvswrqs6n"))))
     (build-system emacs-build-system)
     (arguments
      (list
@@ -30933,7 +31247,7 @@ it forcibly
 (define-public emacs-elpher
   (package
     (name "emacs-elpher")
-    (version "3.4.2")
+    (version "3.4.3")
     (source
      (origin
        (method git-fetch)
@@ -30942,7 +31256,7 @@ it forcibly
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1c6pid2ip2c2lpww42wxgq4qflx1m8vxilyva03h8xzgr39kwq64"))))
+        (base32 "04m226by90mv4rxxy6is8appxnvxq4npr585k2y2l1vmrj0qwn49"))))
     (build-system emacs-build-system)
     (arguments
      (list
@@ -31393,27 +31707,37 @@ contains a track position, playback will start at the specified position.")
 
 (define-public emacs-org-jira
   (package
-   (name "emacs-org-jira")
-   (version "4.4.0")
-   (source
-    (origin
-     (method git-fetch)
-     (uri (git-reference
-           (url "https://github.com/ahungry/org-jira")
-           (commit version)))
-     (file-name (git-file-name name version))
-     (sha256
-      (base32
-       "1s91l4ibjvvc7rfvd8gldxqrcgjq00q83fdww217ck2ps5yrzyjl"))))
-   (build-system emacs-build-system)
-   (propagated-inputs
-    (list emacs-request emacs-s emacs-dash emacs-org))
-   (home-page "https://github.com/ahungry/org-jira")
-   (synopsis "Syncing between Jira and Org-mode")
-   (description
-    "This package provides an extension to org-mode for syncing issues with
+    (name "emacs-org-jira")
+    (version "4.4.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/ahungry/org-jira")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1pkqyvziwp2573hnr8s41chsbm40564f76i3l8ynjr7955nccsms"))))
+    (build-system emacs-build-system)
+    (arguments
+     (list
+      #:tests? #true
+      #:test-command #~(list "emacs" "-Q" "--batch"
+                             "-l" "jiralib.el"
+                             "-l" "org-jira-sdk.el"
+                             "-l" "org-jira.el"
+                             "-l" "t/org-jira-t.el"
+                             "-l" "t/jiralib-t.el"
+                             "-f" "ert-run-tests-batch-and-exit")))
+    (propagated-inputs
+     (list emacs-dash emacs-org emacs-request))
+    (home-page "https://github.com/ahungry/org-jira")
+    (synopsis "Syncing between Jira and Org mode")
+    (description
+     "This package provides an extension to Org mode for syncing issues with
 JIRA issue servers.")
-   (license license:gpl3+)))
+    (license license:gpl3+)))
 
 (define-public emacs-slime-volleyball
   (package
@@ -33082,8 +33406,8 @@ Wordnet.")
 
 (define-public emacs-metal-mercury-mode
   (let ((commit "99e2d8fb7177cae3bfa2dec2910fc28216d5f5a8")
-	(revision "1")
-	(version "0.0.0"))
+        (revision "1")
+        (version "0.0.0"))
     (package
       (name "emacs-metal-mercury-mode")
       (version (git-version version revision commit))
@@ -35052,7 +35376,7 @@ complementary packages.")
 (define-public emacs-wisp-mode
   (package
     (name "emacs-wisp-mode")
-    (version "1.0.10")
+    (version "1.0.11")
     (source
      (origin
        (method hg-fetch)
@@ -35061,7 +35385,7 @@ complementary packages.")
              (changeset (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "13xlagkjmnzv0fn6bwb3vrqn6arxx1g2m1b4wg2rzm7dadlpgmpn"))))
+        (base32 "1w2wx5001aiwky25kvk190d1bgz6g856nm5hhaggsyb1h9f5ws17"))))
     (build-system emacs-build-system)
     (home-page "https://www.draketo.de/software/wisp")
     (synopsis "Syntax highlighting and indentation support for Wisp files")
@@ -36386,6 +36710,31 @@ a Vertico extension which provides a way to pop up a frame at point to show
 a vertical completion UI.")
     (license license:gpl3+)))
 
+(define-public emacs-tintin-mode
+  (let ((commit "82e71e1db92ee3d94c7d0208bafc5de337193de8")
+	(revision "1"))
+    (package
+      (name "emacs-tintin-mode")
+      (version (git-version "1.0.1" revision commit))
+      (source
+       (origin
+	 (method git-fetch)
+	 (uri (git-reference
+	       (url "https://github.com/sunwayforever/tintin-mode")
+	       (commit commit)))
+	 (file-name (git-file-name name version))
+	 (sha256
+	  (base32 "1p6ryqb8m30cp0zyawb6bs8wy3ga7gm60lcan0xx1fy3wx8qip33"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/sunwayforever/tintin-mode")
+      (synopsis "Emacs major mode for TinTin++ scripts")
+      (description
+       "This major mode focuses on highlighting as many aspects of the
+TinTin++ scripting language as possible, organizing commands into functional
+categories and highlighting specific modes that many commands use to
+accomplish different tasks.")
+      (license license:asl2.0))))
+
 ;;;
 ;;; Avoid adding new packages to the end of this file. To reduce the chances
 ;;; of a merge conflict, place them above by existing packages with similar
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 6934fe2f91..fa1f07eaf3 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -17,6 +17,8 @@
 ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2023 c4droid <c4droid@foxmail.com>
+;;; Copyright © 2023 Yovan Naumovski <yovan@gorski.stream>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1758,7 +1760,7 @@ This is a part of the TiLP project.")
 (define-public mame
   (package
     (name "mame")
-    (version "0.251")
+    (version "0.252")
     (source
      (origin
        (method git-fetch)
@@ -1767,7 +1769,7 @@ This is a part of the TiLP project.")
              (commit (apply string-append "mame" (string-split version #\.)))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "102p6kz4ph9m0sxsyavqhjzg00gmnq8m5mnd5sf14c61d2jc0vzk"))
+        (base32 "07qhcm1v47sy2wj30nx3cbhvcbgki0cl83gabr0miiw60fhgyn6j"))
        (modules '((guix build utils)))
        (snippet
         ;; Remove bundled libraries.
@@ -2538,7 +2540,7 @@ on a Commodore C64, C128 etc.")
     (license license:zlib)))
 
 (define-public uxn
-  (let ((commit "1b2049e238df96f32335edf1c6db35bd09f8b42d")
+  (let ((commit "83237c9641490d303a42c81ca247314d11055dea")
         (revision "1"))
     (package
       (name "uxn")
@@ -2551,7 +2553,7 @@ on a Commodore C64, C128 etc.")
                 (file-name (string-append name "-" version))
                 (sha256
                  (base32
-                  "0d3hy1db1mfk2l7q7wdxvp1z0vkmyyb9pdp81d9zm58ylpxaq2cp"))))
+                  "159qfz66k1jc43jhyl8by3yiphsr2dyiyclw1x7mkr3zciwc29z3"))))
       (build-system gnu-build-system)
       (arguments
        (list #:tests? #f ;no tests
@@ -2580,3 +2582,42 @@ on a Commodore C64, C128 etc.")
        "This package provides an assembler and emulator for the Uxn
 stack-machine, written in ANSI C.  Graphical output is implemented using SDL2.")
       (license license:expat))))
+
+(define-public emu8051
+  (let ((commit "5dc681275151c4a5d7b85ec9ff4ceb1b25abd5a8")
+        (revision "1"))
+    (package
+      (name "emu8051")
+      (version (git-version "0.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/jarikomppa/emu8051")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1xxmkcwvd5fjnhwbricafg4xvxvr8dxhfanyfp4rbksw37dgk2fx"))
+                (modules '((guix build utils)))
+                (snippet #~(begin
+                             ;; Replace LDFLAGS -lcurses to -lncurses
+                             (substitute* "Makefile"
+                               (("-lcurses") "-lncurses"))))))
+      (build-system gnu-build-system)
+      (arguments
+       (list #:tests? #f ;No test suite
+             #:make-flags #~(list (string-append "CC="
+                                                 #$(cc-for-target)))
+             #:phases
+             #~(modify-phases %standard-phases
+                 (delete 'configure)    ;No ./configure script
+                 (replace 'install
+                   ;; No installation procedure
+                   (lambda _
+                     (install-file "emu"
+                                   (string-append #$output "/bin")))))))
+      (inputs (list ncurses))
+      (home-page "https://github.com/jarikomppa/emu8051")
+      (synopsis "8051/8052 emulator with curses-based UI")
+      (description "emu8051 is a simulator of the 8051/8052 microcontrollers.")
+      (license license:expat))))
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index ca1beea585..9952c0443b 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -35,7 +35,8 @@
 ;;; Copyright © 2022 Greg Hogan <code@greghogan.com>
 ;;; Copyright © 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com>
 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
-;;; Copyright © 2022 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2022, 2023 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2023 Theofilos Pechlivanis <theofilos.pechlivanis@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -132,6 +133,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages protobuf)
+  #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-crypto)
@@ -298,7 +300,7 @@ utilities.")
   (package
     (inherit geda-gaf)
     (name "lepton-eda")
-    (version "1.9.14-20210407")
+    (version "1.9.18-20220529")
     (home-page "https://github.com/lepton-eda/lepton-eda")
     (source (origin
               (method git-fetch)
@@ -307,7 +309,7 @@ utilities.")
                     (commit version)))
               (sha256
                (base32
-                "0kyq0g6271vlwraw98637fn8bq2l6q4rll6748nn8rwsmfz71d0m"))
+                "06plrcab3s2rpyf0qv2gzc1yp33627xi8105niasgixckk6glnc2"))
               (file-name (git-file-name name version))))
     (arguments
      (list
@@ -328,28 +330,40 @@ utilities.")
                 "CFLAGS=-fcommon"))
       #:phases
       #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-tests
+            (lambda _
+              ;; For logs and auto-compilation
+              (setenv "HOME" "/tmp")
+
+              ;; Ensure that readline is found by lepton-shell
+              (substitute* "script.in"
+                (("\\(eval-when \\(expand load eval\\)" m)
+                 (string-append "
+(add-to-load-path \"" #$(this-package-input "guile-readline")
+"/share/guile/site/3.0\")
+(set! %load-compiled-path (cons \""
+#$(this-package-input "guile-readline")
+"/lib/guile/3.0/site-ccache/"
+"\" %load-compiled-path))
+" m)))))
           (add-before 'build 'fix-dynamic-link
-            (lambda* (#:key inputs outputs #:allow-other-keys)
-              (substitute* "libleptongui/scheme/schematic/ffi.scm.in"
-                (("@LIBLEPTONGUI@")
-                 (string-append #$output "/lib/libleptongui.so")))
-              (substitute* '("libleptongui/scheme/schematic/ffi/gtk.scm.in"
-                             "utils/attrib/lepton-attrib.scm")
-                (("@LIBGTK@")
-                 (search-input-file inputs "/lib/libgtk-3.so")))
-              (substitute* '("libleptongui/scheme/schematic/ffi/gobject.scm.in")
-                (("@LIBGOBJECT@")
-                 (search-input-file inputs "/lib/libgobject-2.0.so")))
-              (substitute* "liblepton/scheme/lepton/ffi.scm.in"
-                (("@LIBLEPTON@")
-                 (string-append #$output "/lib/liblepton.so")))
-              (substitute* "utils/attrib/lepton-attrib.scm"
-                (("@LIBLEPTONATTRIB@")
-                 (string-append (assoc-ref outputs "out")
-                                "/lib/libleptonattrib.so")))
-              (substitute* "liblepton/scheme/lepton/log.scm.in"
-                (("@LIBGLIB@")
-                 (search-input-file inputs "/lib/libglib-2.0.so")))
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "liblepton/scheme/lepton/ffi/lib.scm"
+                (("\"liblepton\"")
+                 (string-append "\"" #$output "/lib/liblepton.so" "\""))
+                (("\"libleptonattrib\"")
+                 (string-append "\"" #$output "/lib/libleptonattrib.so" "\""))
+                (("\"libleptongui\"")
+                 (string-append "\"" #$output "/lib/libleptongui.so" "\""))
+                (("\"libglib-2.0\"")
+                 (string-append
+                  "\"" (search-input-file inputs "/lib/libglib-2.0.so") "\""))
+                (("\"libgobject-2.0\"")
+                 (string-append
+                  "\"" (search-input-file inputs "/lib/libgobject-2.0.so") "\""))
+                (("\"libgtk-3\"")
+                 (string-append
+                  "\"" (search-input-file inputs "/lib/libgtk-3.so") "\"")))
 
               ;; For finding libraries when running tests before installation.
               (setenv "LIBLEPTONGUI"
@@ -408,6 +422,7 @@ utilities.")
            gtk+
            gtksheet
            guile-3.0
+           guile-readline
            shared-mime-info
            m4
            pcb))
@@ -763,14 +778,14 @@ ready for production.")
 (define-public qelectrotech
   (package
     (name "qelectrotech")
-    (version "0.8.0")
+    (version "0.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://git.tuxfamily.org/qet/qet.git/"
                            "snapshot/qet-" version ".tar.gz"))
        (sha256
-        (base32 "0w70fqwhqqzga1kfp34v8z1xf9988nvvi3d5gwl2sg429p9mpsk2"))))
+        (base32 "1qkgagx2bk2jfzs3d91kki01y5bs5p85f4c8xjxn45hmw4rl512b"))))
     (build-system qt-build-system)
     (arguments
      ;; XXX: tests are built for the CMake build option but it seems to be
@@ -1613,6 +1628,49 @@ the API of spice simulators.  Based on transformations specified in XML
 language, ADMS transforms Verilog-AMS code into other target languages.")
     (license license:gpl3)))
 
+(define-public audmes
+  (package
+    (name "audmes")
+    (version "20220420")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/audmes/audmes%20sources/"
+                           "audmes-source-" version ".zip"))
+       (sha256
+        (base32 "0yxjq2p1ca2wy2idwrlxr3b4vbp0d9268jll90y7l55fbid8vkp2"))))
+    (build-system cmake-build-system)
+    (arguments
+     (list
+      #:tests? #false                   ;there are none
+      #:phases
+      '(modify-phases %standard-phases
+         (add-after 'unpack 'prepare-csv.h
+           (lambda* (#:key inputs #:allow-other-keys)
+             (mkdir "libfccp")
+             (install-file (search-input-file inputs "csv.h") "libfccp"))))))
+    (inputs
+     (list alsa-lib pulseaudio wxwidgets))
+    (native-inputs
+     (list unzip
+           (let ((commit "4ade42d5f8c454c6c57b3dce9c51c6dd02182a66"))
+             (origin
+               (method git-fetch)
+               (uri (git-reference
+                     (url "https://github.com/ben-strasser/fast-cpp-csv-parser")
+                     (commit commit)))
+               (file-name (git-file-name "csv.h" (git-version "0" "0" commit)))
+               (sha256
+                (base32
+                 "1y7ads97gkrjg1jc532n8gmjry0qhqxginw1gq7b4lk9s0pyl540"))))))
+    (home-page "https://sourceforge.net/projects/audmes/")
+    (synopsis "Oscilloscope and spectrum analyzer using sound card")
+    (description
+     "The audio measurement system is a system for audio measurement through
+sound card.  It contains: generator, oscilloscope, audio spectrum
+analyzer (FFT) and frequency sweep plot.")
+    (license license:gpl2+)))
+
 (define-public capstone
   (package
     (name "capstone")
@@ -1810,7 +1868,7 @@ high-performance parallel differential evolution (DE) optimization algorithm.")
   ;; See <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=27344#236>.
   (package
     (name "libngspice")
-    (version "38")
+    (version "40")
     (source
      (origin
        (method url-fetch)
@@ -1821,7 +1879,7 @@ high-performance parallel differential evolution (DE) optimization algorithm.")
                             "old-releases/" version
                             "/ngspice-" version ".tar.gz")))
        (sha256
-        (base32 "0mkw66d2isyyxssziwramd08amd7l1qm6dfg86r5s5kvqkv24gic"))))
+        (base32 "03c9irc44msdpqhbn2fhvb4g0sry8a2qgxl4mbbf557mq1xwl0z3"))))
     (build-system gnu-build-system)
     (arguments
      `(;; No tests for libngspice exist.
@@ -2418,7 +2476,7 @@ measurement devices and test equipment via GPIB, RS232, Ethernet or USB.")
 (define-public python-scikit-rf
   (package
     (name "python-scikit-rf")
-    (version "0.24.1")
+    (version "0.26.0")
     (source (origin
               (method git-fetch) ;PyPI misses some files required for tests
               (uri (git-reference
@@ -2426,7 +2484,7 @@ measurement devices and test equipment via GPIB, RS232, Ethernet or USB.")
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "1shp8q8324dkwf448mv9zzi7krx882p122ma4fk015qz91sg4wff"))
+                "1v7dag6sm96b18y4p46cjjyqnq9r2r7qmiy0xvdwy3js4zf4iwcv"))
               (file-name (git-file-name name version))))
     (build-system pyproject-build-system)
     (propagated-inputs (list python-matplotlib
@@ -3033,40 +3091,37 @@ data structures and to operate on them.")
 @code{Poke Ras mode} and @code{Poke Map mode}.")))
 
 (define-public pcb2gcode
-  ;; Take some additional commits after v2.4.0 to fix build against
-  ;; geos 3.10.1.
-  (let ((commit "ae41f9fe41e57ee5d0cced6c3b3c8aea9c3f5392"))
-    (package
-     (name "pcb2gcode")
-     (version (git-version "2.4.0" "1" commit))
-     (source
-      (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/pcb2gcode/pcb2gcode")
-             (commit commit)
-             (recursive? #t)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1r1qmvpn5ffi2xpq2gigwsk8kn79s4s2ywfvicwf8i7rzwhkdf17"))))
-     (build-system gnu-build-system)
-     (inputs
-      (list boost
-            geos
-            gerbv
-            glibmm
-            gtkmm-2
-            librsvg))
-     (native-inputs
-      (list autoconf automake libtool pkg-config))
-     (home-page "https://github.com/pcb2gcode/pcb2gcode")
-     (synopsis "Generate G-code for milling PCBs")
-     (description "pcb2gcode is a command-line program for isolation routing
+  (package
+   (name "pcb2gcode")
+   (version "2.5.0")
+   (source
+    (origin
+     (method git-fetch)
+     (uri (git-reference
+           (url "https://github.com/pcb2gcode/pcb2gcode")
+           (commit (string-append "v" version))
+           (recursive? #t)))
+     (file-name (git-file-name name version))
+     (sha256
+      (base32
+       "01s41znkcq9x1rinsdqrrdj8p35isckrcxs14ajsi7wr39n1m5kk"))))
+   (build-system gnu-build-system)
+   (inputs
+    (list boost
+          geos
+          gerbv
+          glibmm
+          gtkmm-2
+          librsvg))
+   (native-inputs
+    (list autoconf automake libtool pkg-config))
+   (home-page "https://github.com/pcb2gcode/pcb2gcode")
+   (synopsis "Generate G-code for milling PCBs")
+   (description "pcb2gcode is a command-line program for isolation routing
 and drilling of PCBs.  It takes Gerber files as input and outputs G-code files
 for the milling of PCBs.  It also includes an autoleveller for the automatic
 dynamic calibration of the milling depth.")
-     (license license:gpl3+))))
+   (license license:gpl3+)))
 
 ;; libdxfrw has no readme, no version release, no tags.  Initial commit says
 ;; "libdxfrw-0.6.3 import", but it shares no git history with "upstream"
@@ -4044,7 +4099,7 @@ form, numpad.
 (define-public rizin
   (package
     (name "rizin")
-    (version "0.4.1")
+    (version "0.5.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -4052,7 +4107,7 @@ form, numpad.
                     version "/rizin-src-v" version ".tar.xz"))
               (sha256
                (base32
-                "1f5zzlnr2na4hkvcwn4n9cjlk6595945vwrw89pa683qk5mrb7b6"))))
+                "18zca3iwdif200wiivm065fs0a5g520q6380205cijca7ky81avi"))))
     (build-system meson-build-system)
     (arguments
      (list
@@ -4067,7 +4122,12 @@ form, numpad.
               "-Duse_sys_xxhash=enabled"
               "-Duse_sys_openssl=enabled"
               "-Duse_sys_tree_sitter=enabled"
-              "-Duse_sys_libuv=enabled"
+              "-Duse_sys_lzma=enabled"
+              "-Duse_sys_libmspack=enabled"
+              "-Duse_zlib=true"
+              "-Duse_lzma=true"
+              "-Dinstall_sigdb=false"
+              "-Duse_swift_demangler=true"
               "-Duse_gpl=true")
       #:phases
       #~(modify-phases %standard-phases
@@ -4078,10 +4138,13 @@ form, numpad.
               ;; And 2 of them are failing, reported upstream:
               ;; <https://github.com/rizinorg/rizin/issues/2905>.
               (substitute* "test/meson.build"
-                (("subdir\\('integration'\\)") "")))))))
+                (("subdir\\('integration'\\)") ""))
+              ;;; Skip analysis_var test, which is failing.
+              (substitute* "test/unit/meson.build"
+                (("'analysis_var',\n") "")))))))
     (native-inputs (list pkg-config))
     (inputs
-     (list capstone file libuv libzip lz4 openssl tree-sitter xxhash zlib))
+     (list capstone file libuv libzip lz4 openssl tree-sitter xxhash zlib libmspack))
     (home-page "https://rizin.re")
     (synopsis "Disasm, debug, analyze and manipulate binary files")
     (description
diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm
index 57350a523c..7564c2a560 100644
--- a/gnu/packages/erlang.scm
+++ b/gnu/packages/erlang.scm
@@ -45,7 +45,7 @@
 (define-public erlang
   (package
     (name "erlang")
-    (version "25.0.4")
+    (version "25.3")
     (source (origin
               (method git-fetch)
               ;; The tarball from http://erlang.org/download contains many
@@ -57,7 +57,7 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0n39pd5d8mmyj03d8fdan0zb2pcc383pmqf0v7s356fgirdbsrcm"))
+                "0jw230fy0z358aj1xi80hg14qyqyj5p4wp0pfifkr0n694j3h2d1"))
               (patches (search-patches "erlang-man-path.patch"))))
     (build-system gnu-build-system)
     (native-inputs
@@ -71,7 +71,7 @@
                                (version-major+minor version) ".tar.gz"))
            (sha256
             (base32
-             "17ap4kawlbqmcl13c543gh54p1ng8ivxmbn6lbbij07k81ry5p1y"))))))
+             "0vnpds5q17xc4jjj3sbsllpx68wyhgvx70714vkzyd68rbjmhmk7"))))))
     (inputs
      (list ncurses openssl wxwidgets))
     (propagated-inputs
diff --git a/gnu/packages/fcitx.scm b/gnu/packages/fcitx.scm
index 5741b8d622..2143419d3b 100644
--- a/gnu/packages/fcitx.scm
+++ b/gnu/packages/fcitx.scm
@@ -52,7 +52,7 @@
 (define-public fcitx-qt5
   (package
     (name "fcitx-qt5")
-    (version "1.2.6")
+    (version "1.2.7")
     (source
      (origin
        (method git-fetch)
@@ -63,7 +63,7 @@
        (file-name
         (git-file-name name version))
        (sha256
-        (base32 "13sanrir696fv7s44b7q453s5qi4r7ag0r3iyggyzk8xyf6rw8fk"))))
+        (base32 "1gw51m7hfnplkym33dzwfa8g0q20ji61pr80s2i6xhy2glrm1ssj"))))
     (build-system qt-build-system)
     (arguments
      `(#:tests? #f                      ; No target
@@ -71,12 +71,12 @@
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-install-dir
            (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "quickphrase-editor/CMakeLists.txt"
+             (substitute* "qt5/quickphrase-editor/CMakeLists.txt"
                (("\\$\\{FCITX4_ADDON_INSTALL_DIR\\}")
                 (string-append
                  (assoc-ref outputs "out")
                  "/lib/fcitx")))
-             (substitute* "platforminputcontext/CMakeLists.txt"
+             (substitute* "qt5/platforminputcontext/CMakeLists.txt"
                (("\\$\\{CMAKE_INSTALL_QTPLUGINDIR\\}")
                 (string-append
                  (assoc-ref outputs "out")
diff --git a/gnu/packages/fcitx5.scm b/gnu/packages/fcitx5.scm
index c365d63157..d03c931458 100644
--- a/gnu/packages/fcitx5.scm
+++ b/gnu/packages/fcitx5.scm
@@ -56,7 +56,7 @@
 (define-public xcb-imdkit
   (package
     (name "xcb-imdkit")
-    (version "1.0.4")
+    (version "1.0.5")
     (source
      (origin
        (method url-fetch)
@@ -64,7 +64,7 @@
              "https://download.fcitx-im.org/fcitx5/xcb-imdkit/xcb-imdkit-"
              version ".tar.xz"))
        (sha256
-        (base32 "1jfhrqq89grrkwmp4lbn1pxi7935jhhz9xr8yqa07aarqb86skw2"))
+        (base32 "1k03ix0r385lf56pyw653h3f2inkl774n9fh1wkb2m4jv4kcsgrp"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -87,7 +87,7 @@ client.")
 (define-public fcitx5
   (package
     (name "fcitx5")
-    (version "5.0.21")
+    (version "5.0.23")
     (source
      (origin
        (method url-fetch)
@@ -95,7 +95,7 @@ client.")
              "https://download.fcitx-im.org/fcitx5/fcitx5/fcitx5-"
              version "_dict.tar.xz"))
        (sha256
-        (base32 "10hchay93ld3fs2p17gmq50gsv96q908hzjinn0nh0qcnpz8sx60"))))
+        (base32 "1w26v0a8qizv8flpkmg04b42kwym6ca1a1chng7j2j1xizjhiw0p"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
@@ -172,14 +172,14 @@ client.")
 (define-public libime
   (package
     (name "libime")
-    (version "1.0.16")
+    (version "1.0.17")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.fcitx-im.org/fcitx5/libime/libime-"
                            version "_dict.tar.xz"))
        (sha256
-        (base32 "1ydja6bpb9q7j2dj87yni1jlw9nj7256g3dqvz1hl4dl8zill0rz"))))
+        (base32 "00d191nghqkcxky5i2j5v8105ckhfh0bdjbkk8swyndjp35bn54f"))))
     (build-system cmake-build-system)
     (inputs
      (list fcitx5 boost))
@@ -194,7 +194,7 @@ editors.")
 (define-public fcitx5-gtk
   (package
     (name "fcitx5-gtk")
-    (version "5.0.21")
+    (version "5.0.23")
     (source
      (origin
        (method url-fetch)
@@ -202,7 +202,7 @@ editors.")
                            "/fcitx5-gtk/fcitx5-gtk-"
                            version ".tar.xz"))
        (sha256
-        (base32 "04909s99nng835qaycsbhwkmml4prhvpg3r3b39ranqyjy4m4dqj"))))
+        (base32 "0s08j8y7bxn9hjz9xkza2fal24r9az2p7js7v86nbjmvy7klq4md"))))
     (build-system cmake-build-system)
     (arguments
      (list
@@ -312,7 +312,7 @@ IM module for GTK+3 applications.
 (define-public fcitx5-qt
   (package
     (name "fcitx5-qt")
-    (version "5.0.16")
+    (version "5.0.17")
     (source
      (origin
        (method url-fetch)
@@ -320,7 +320,7 @@ IM module for GTK+3 applications.
                            "/fcitx5-qt/fcitx5-qt-"
                            version ".tar.xz"))
        (sha256
-        (base32 "1wsal20629iwcjdqs8mj4ksg62al2aw05da11ak35fjbbw2w2fjq"))))
+        (base32 "1x4iks052jn6dcwd1lv1i9cpwh3l3qnnd3phryfsg4kn4yhyfs22"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
@@ -347,7 +347,7 @@ for Qt based application.")
 (define-public fcitx5-anthy
   (package
     (name "fcitx5-anthy")
-    (version "5.0.13")
+    (version "5.0.14")
     (source
      (origin
        (method url-fetch)
@@ -355,7 +355,7 @@ for Qt based application.")
                            "/fcitx5-anthy/fcitx5-anthy-"
                            version ".tar.xz"))
        (sha256
-        (base32 "1qj8kylskjyxcvrc0mg46s3cn8rrfblgp6kkkw26x5js4di74shh"))))
+        (base32 "1dx7ajygdy244lwyv3fv14b4wdg3csppxhk8p0g2zwjfvxq4v1qa"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f)) ;; no tests
@@ -371,7 +371,7 @@ the Anthy input method.")
 (define-public fcitx5-chinese-addons
   (package
     (name "fcitx5-chinese-addons")
-    (version "5.0.16")
+    (version "5.0.17")
     (source
      (origin
        (method url-fetch)
@@ -379,7 +379,7 @@ the Anthy input method.")
                            "/fcitx5-chinese-addons/fcitx5-chinese-addons-"
                            version "_dict.tar.xz"))
        (sha256
-        (base32 "06s7d3n4h5b0msw0b48pmy3xcz7268b7r00p3wfr83wb1m9rv0xw"))))
+        (base32 "0vilq49q02hrim0dg4z3rm6p3ma8v4smh0r5q5rrj6bkyf1apivx"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
@@ -435,7 +435,7 @@ including input methods previous bundled inside Fcitx 4:
 (define-public fcitx5-configtool
   (package
     (name "fcitx5-configtool")
-    (version "5.0.16")
+    (version "5.0.17")
     (source
      (origin
        (method url-fetch)
@@ -443,7 +443,7 @@ including input methods previous bundled inside Fcitx 4:
              "https://download.fcitx-im.org/fcitx5"
              "/fcitx5-configtool/fcitx5-configtool-" version ".tar.xz"))
        (sha256
-        (base32 "06n8yhmkammr04nhv0zaw14da3i0dg02wszbr15812shcmdcwazf"))))
+        (base32 "1mc6axvkv2i396v7hyqllpiv5rdnf8vvqg9bkb66ljni4dnikdpq"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
@@ -545,7 +545,7 @@ for Fcitx 5 with following color variants:
 (define-public fcitx5-rime
   (package
     (name "fcitx5-rime")
-    (version "5.0.15")
+    (version "5.0.16")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.fcitx-im.org/fcitx5"
@@ -553,7 +553,7 @@ for Fcitx 5 with following color variants:
                                   ".tar.xz"))
               (sha256
                (base32
-                "0qq2khc1816sbc3lw2djhpadbhlcp8g7j8wjzb2rzw9yl6n10lkh"))))
+                "0d3qikdcm55p7qjfgiidx1a0zij3sv4s6j7vxxmxwyynjl5xjxjh"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ;no tests
diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
index fcb650bf40..f8959f208d 100644
--- a/gnu/packages/file-systems.scm
+++ b/gnu/packages/file-systems.scm
@@ -260,6 +260,45 @@ unmaintained---to use the @code{inotify} API instead of the deprecated
 @code{dnotify} to monitor file changes.")
     (license license:gpl2+)))
 
+(define-public avfs
+  (package
+    (name "avfs")
+    (version "1.1.5")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/avf/avfs/" version
+                                  "/avfs-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "1kvjaaj2dlps98alpc8rhnzhk4vriw46f3y7b2h0jq2d21j3p7xd"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags '("--enable-library" "--enable-fuse")))
+    (native-inputs (list pkg-config))
+    (inputs (list xz fuse))
+    (synopsis "Virtual file system that allows browsing of compressed files")
+    (description
+     "AVFS is a FUSE-based filesystem that allows browsing of compressed
+files.  It provides the @command{mountavfs} command that starts a small
+@command{avfsd} daemon.  When a specially formatted path under @file{~/.avfs}
+is accessed, the daemon provides listings and content access on the fly.  The
+canonical form of virtual file name is:
+
+@example
+[basepath]#handler[options][:parameters][/internalpath]
+@end example
+
+Example file names:
+@itemize
+@item @file{~/.avfs/home/user/archive.tar.gz#ugz#utar/path/file}
+@item @file{~/.avfs/#http:localhost|some|path}
+@end itemize
+
+@code{emacs-dired-hacks} has @code{dired-avfs} module which enables seamless
+integration with @code{avfs}.")
+    (home-page "http://avf.sourceforge.net/")
+    (license license:gpl2+)))
+
 (define-public davfs2
   (package
     (name "davfs2")
@@ -435,6 +474,80 @@ significantly increases the risk of irreversible data loss!")
     (license (list license:gpl2         ; fsattr/src/e4attr.* → sbin/fsattr
                    license:gpl3+))))    ; the rest
 
+(define-public gocryptfs
+  (package
+    (name "gocryptfs")
+    (version "2.3.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rfjakob/gocryptfs")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1m0xk5imkx81i1l4wv1j1xh9ckp0gqssq4v46pkkcq2xlv2dvxlr"))))
+    (build-system go-build-system)
+    (arguments
+     (list
+      #:import-path "github.com/rfjakob/gocryptfs"
+      #:build-flags
+      #~(list
+         "-ldflags" (string-append
+                     "-X main.GitVersion=" #$version
+                     " -X main.GitVersionFuse=" #$(package-version
+                                                   go-github-com-hanwen-go-fuse-v2)
+                     " -X main.BuildDate=" "[reproducible]"))
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; after 'check phase, should maybe unmount leftover mounts as in
+          ;; https://github.com/rfjakob/gocryptfs/blob/a55b3cc15a6d9bce116a90f33df4bc99d9dd6a10/test.bash#L28
+          (replace 'build
+            (lambda arguments
+              (for-each
+               (lambda (directory)
+                 (apply (assoc-ref %standard-phases 'build)
+                        (append arguments (list #:import-path directory))))
+               (list
+                "github.com/rfjakob/gocryptfs"
+                "github.com/rfjakob/gocryptfs/gocryptfs-xray"
+                "github.com/rfjakob/gocryptfs/contrib/statfs"
+                "github.com/rfjakob/gocryptfs/contrib/findholes"
+                "github.com/rfjakob/gocryptfs/contrib/atomicrename")))))))
+    (native-inputs (list
+                    go-github-com-hanwen-go-fuse-v2
+                    go-github-com-aperturerobotics-jacobsa-crypto
+                    go-github-com-jacobsa-oglematchers
+                    go-github-com-jacobsa-oglemock
+                    go-github-com-jacobsa-ogletest
+                    go-github-com-jacobsa-reqtrace
+                    go-github-com-pkg-xattr
+                    go-github-com-rfjakob-eme
+                    go-github-com-sabhiram-go-gitignore
+                    go-github-com-spf13-pflag
+                    go-golang-org-x-crypto
+                    go-golang-org-x-net
+                    go-golang-org-x-sys
+                    go-golang-org-x-term
+                    openssl
+                    pkg-config))
+    (home-page "https://github.com/rfjakob/gocryptfs")
+    (synopsis "Encrypted overlay filesystem")
+    (description
+     "Gocryptfs is an encrypted overlay filesystem written in Go.  It
+features a file-based encryption that is implemented as a mountable
+FUSE filesystem.
+
+Gocryptfs was inspired by EncFS and strives to fix its security issues
+while providing good performance.  Gocryptfs is as fast as EncFS in the
+default mode and significantly faster than paranoia mode in EncFS,
+which provides a security level comparable to Gocryptfs.
+
+On CPUs without AES-NI, gocryptfs uses OpenSSL through a thin wrapper
+called stupidgcm.  This provides a 4x speedup compared to Go's builtin
+AES-GCM implementation.")
+    (license license:expat)))
+
 (define-public gphotofs
   (package
     (name "gphotofs")
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index c2989a4fb1..4c82faca87 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -622,7 +622,7 @@ other machines/servers.  Electrum does not download the Bitcoin blockchain.")
 (define-public electron-cash
   (package
     (name "electron-cash")
-    (version "4.2.12")
+    (version "4.2.14")
     (source
      (origin
        (method git-fetch)
@@ -631,7 +631,7 @@ other machines/servers.  Electrum does not download the Bitcoin blockchain.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1bfnfpdyi3q5zq0zj07dq82aj3cihnr7j82gy4ch97182lsl6nms"))))
+        (base32 "086rqqxxh1dmw1qiwmry6sraai3xg44sb85wdw8zkj30si9780kk"))))
     (build-system python-build-system)
     (arguments
      (list
@@ -652,11 +652,6 @@ other machines/servers.  Electrum does not download the Bitcoin blockchain.")
               (substitute* "electroncash/secp256k1.py"
                 (("libsecp256k1.so.0")
                  (search-input-file inputs "lib/libsecp256k1.so.0")))))
-          (add-after 'unpack 'relax-requirements
-            (lambda _
-              (substitute* "contrib/requirements/requirements.txt"
-                (("qdarkstyle==2\\.6\\.8")
-                 "qdarkstyle"))))
           (add-after 'install 'wrap-qt
             (lambda* (#:key outputs inputs #:allow-other-keys)
               (let ((out (assoc-ref outputs "out")))
@@ -703,7 +698,7 @@ blockchain.")
   ;; the system's dynamically linked library.
   (package
     (name "monero")
-    (version "0.18.2.0")
+    (version "0.18.2.2")
     (source
      (origin
        (method git-fetch)
@@ -721,7 +716,7 @@ blockchain.")
             delete-file-recursively
             '("external/miniupnp" "external/rapidjson"))))
        (sha256
-        (base32 "0k41mkz0lp8qavgy3d9813pkmyy8rnhd0fl7wvzdhr7fznqn9sca"))))
+        (base32 "0hi6grf2xnnra60g3dzspahi0rwyiad6hc07n3pq3aknmz5xx8d4"))))
     (build-system cmake-build-system)
     (native-inputs
      (list doxygen
@@ -808,7 +803,7 @@ the Monero command line client and daemon.")
 (define-public monero-gui
   (package
     (name "monero-gui")
-    (version "0.18.2.0")
+    (version "0.18.2.2")
     (source
      (origin
        (method git-fetch)
@@ -824,7 +819,7 @@ the Monero command line client and daemon.")
            ;; See the 'extract-monero-sources' phase.
            (delete-file-recursively "monero")))
        (sha256
-        (base32 "0ka20p4f6fbhkhrm1jbssnjh5sjl419fy418jl8hcg34jriywvck"))))
+        (base32 "07gfvrxm3n0844ximm4rd3f3n0m125shpawdzg8blfjjbfr1k1ij"))))
     (build-system qt-build-system)
     (native-inputs
      `(,@(package-native-inputs monero)
@@ -1807,7 +1802,12 @@ following three utilities are included with the library:
              ;; exist.
              (substitute* "src/Makefile.test.include"
                (("test/utilprocess_tests.cpp")
-                ""))))
+                ""))
+             ;; Disable PaymentServer failing test because it's using
+             ;; an expired SSL certificate.
+             (substitute* "src/qt/test/test_main.cpp"
+               (("if \\(QTest::qExec\\(&test2\\) != 0\\)")
+                "if (QTest::qExec(&test2) == 0)"))))
          (add-before 'check 'set-home
            (lambda _
              ;; Tests write to $HOME
@@ -2266,7 +2266,7 @@ mining.")
 (define-public p2pool
   (package
     (name "p2pool")
-    (version "3.1")
+    (version "3.2")
     (source
      (origin
        (method git-fetch)
@@ -2275,7 +2275,7 @@ mining.")
              (commit (string-append "v" version))
              (recursive? #t)))
        (file-name (git-file-name name version))
-       (sha256 (base32 "0fvm864p4pxjsb03g88jkaj3wj94dkxrbwjwa1jk6s11skzn0z68"))
+       (sha256 (base32 "0jwddazvp9rv88dd2b67rn2y23grycnl539abl5ax6b8a89wm7i8"))
        (modules '((guix build utils)))
        (snippet
         #~(for-each delete-file-recursively
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index 89f2dc4ad3..7830c47219 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -52,6 +52,7 @@
 ;;; Copyright © 2022 Jose G Perez Taveras <josegpt27@gmail.com>
 ;;; Copyright © 2022 Hilton Chain <hako@ultrarare.space>
 ;;; Copyright © 2022 Nguyễn Gia Phong <mcsinyx@disroot.org>
+;;; Copyright © 2023 Nicolas Graves <ngraves@ngraves.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -115,6 +116,30 @@
 titling.")
     (license license:silofl1.1)))
 
+(define-public font-chivo
+  (let ((commit "dc61c468d79781eb5183426e88e844af16cdc3e5")
+        (revision "0"))
+    (package
+      (name "font-chivo")
+      (version (git-version "20221010" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Omnibus-Type/Chivo")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0gdsnflnzwy8ajrk93dxwjashxisln58qcqa6dh4smnk7k0a34qs"))))
+      (build-system font-build-system)
+      (home-page "https://fonts.google.com/specimen/Chivo")
+      (synopsis "The Chivo family of fonts")
+      (description "Google Chivo Fonts is a grotesque family of fonts, ideal for
+highlights and headlines.  In october 2022, the family is upgraded to a
+variable font ranging from Thin to Black, including matching italics.  The
+glyphset has also been extended, supporting now a wider number of languages.")
+      (license license:silofl1.1))))
+
 (define-public font-ibm-plex
   (package
     (name "font-ibm-plex")
@@ -235,37 +260,41 @@ Cyrillic, Canadian Syllabics and most Latin based languages are supported.")
     (license license:cc0)))
 
 (define-public font-abattis-cantarell
-  (package
-    (name "font-abattis-cantarell")
-    (version "0.303")
-    (source
-     (origin
-       (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
-         "1d1ay0fdqchk0wa5yqxis2c98imvzsbbd2kjv0x8sk4fm419847b"))))
-    (build-system meson-build-system)
-    (arguments
-     (list #:configure-flags #~(list "-Dbuildstatics=true")))
-    (native-inputs
-     (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
+  ;; Use the latest commit, as the last released version, 0.303, has problems
+  ;; with the newer statmake.  The dependency has been removed in the latest
+  ;; code base.
+  (let ((commit "e049149faf0c15b0711e8d790e2333be923f0486")
+        (revision "0"))
+    (package
+      (name "font-abattis-cantarell")
+      (version (git-version "0.303" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.gnome.org/GNOME/cantarell-fonts")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "032csq99bkmmgh9mmmbrgg4fzxgkcsvxv4wy595qms72mmlgmcc7"))))
+      (build-system meson-build-system)
+      (arguments
+       (list #:configure-flags #~(list "-Dbuildstatics=true")))
+      (native-inputs
+       (list gettext-minimal
+             psautohint
+             python
+             python-cffsubr
+             python-fontmath
+             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.
 This package contains both the non-variable as well as the variable versions
 of the font.")
-    (license license:silofl1.1)))
+      (license license:silofl1.1))))
 
 (define-public font-lato
   (package
@@ -2072,7 +2101,7 @@ for Inria, a public research institute in computer science and mathematics.")
 (define-public font-sil-gentium
   (package
     (name "font-sil-gentium")
-    (version "5.000")
+    (version "6.200")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2080,7 +2109,7 @@ for Inria, a public research institute in computer science and mathematics.")
                     version ".zip"))
               (sha256
                (base32
-                "0m7189870hha217n1vgpmf89mwggrxkh679ffi1lxpnjggqi2n9k"))))
+                "0wxhsxv7xqsfbrywax0lcbmyfbrvrcm5g4c7a2v4j4cng4xi08cv"))))
     ;; Note: The zip file provides TTF files only, but the developer release,
     ;; which contains additional files, has a 'SOURCES.txt' file that says
     ;; that "the primary source files for the fonts are the fonts themselves".
@@ -2098,7 +2127,7 @@ italics shapes.  This package provides only TrueType files (TTF).")
 (define-public font-sil-andika
   (package
     (name "font-sil-andika")
-    (version "5.000")
+    (version "6.200")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2106,7 +2135,7 @@ italics shapes.  This package provides only TrueType files (TTF).")
                     version ".zip"))
               (sha256
                (base32
-                "01zm7p32gxfwmv7h3cfj2vx59846w2y6rxqy67grn2dyjh8pljv0"))))
+                "0z7qvjlidn3m2k40mwnm3azf3wd8pi1yvy2q30p5vkyyzhipb6nc"))))
     ;; As for Gentium (see above), the TTF files are considered source.
     (build-system font-build-system)
     (synopsis "Sans serif font designed especially for literacy use")
@@ -2121,7 +2150,7 @@ confused with one another.  This package provides only TrueType files (TTF).")
 (define-public font-sil-charis
   (package
     (name "font-sil-charis")
-    (version "5.000")
+    (version "6.200")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2129,7 +2158,7 @@ confused with one another.  This package provides only TrueType files (TTF).")
                     version ".zip"))
               (sha256
                (base32
-                "1zcvw37f1a7gkml3yfm6hxh93844llm7xj4w52600qq3ndrm8gjy"))))
+                "1pksr5wc9grdj75md4phr1a0gpjxk7xlmhv2nybsd2hbfrssl2ab"))))
     ;; As for Gentium (see above), the TTF files are considered source.
     (build-system font-build-system)
     (synopsis "Serif font for the Cyrillic and Latin alphabets")
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index 9d0d23f9c8..7ff56892e7 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -12,7 +12,7 @@
 ;;; Copyright © 2019, 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
-;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;; Copyright © 2022 Felipe Balbi <balbi@kernel.org>
 ;;;
@@ -34,6 +34,7 @@
 (define-module (gnu packages fontutils)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
@@ -158,14 +159,13 @@ them as it goes.")
 (define-public python-afdko
   (package
     (name "python-afdko")
-    (version "3.9.1")
+    (version "3.9.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "afdko" version))
        (sha256
-        (base32 "0k1204vykgx32saa495s1lgmz1dixcp8bjiv486imx77killvm02"))
-       (patches (search-patches "python-afdko-suppress-copyright-test.patch"))
+        (base32 "1d3b1590gxlindh1sjhwvxnryn5zil98hgdwbgsr76fd657r3f99"))
        (modules '((guix build utils)))
        (snippet
         #~(begin
@@ -191,27 +191,13 @@ them as it goes.")
               (substitute* "CMakeLists.txt"
                 (("CMAKE_CXX_STANDARD 11")
                  "CMAKE_CXX_STANDARD 17"))))
-          (add-after 'unpack 'use-system-libxml2
-            (lambda _
-              ;; XXX: These horrifying substitutions revert this upstream
-              ;; PR: <https://github.com/adobe-type-tools/afdko/pull/1527>.
-              ;; Hopefully it's only temporary..!
-              (substitute* (find-files "." "^CMakeLists.txt$")
-                (("\\(\\(NOT \\$\\{LibXml2_FOUND\\}\\) OR \
-\"\\$\\{CMAKE_SYSTEM\\}\" MATCHES \"Linux\"\\)")
-                 "(NOT ${LibXml2_FOUND})")
-                (("\\(\\(\\$\\{LibXml2_FOUND\\}\\) AND \
-\\(NOT \"\\$\\{CMAKE_SYSTEM\\}\" MATCHES \"Linux\"\\)\\)")
-                 "(${LibXml2_FOUND})"))
-                (substitute* "cmake/ExternalLibXML2.cmake"
-                  (("set\\(LIBXML2_STATIC_INCLUDE_DIR")
-                   "set(LIBXML2_INCLUDE_DIR)"))))
           (add-after 'unpack 'patch-problematic-requirements
             (lambda _
               (substitute* "requirements.txt"
                 ;; Remove lxml because the version requested here is different
                 ;; than the one propagated by the python-fonttools package.
-                (("^lxml==.*") ""))))
+                (("^lxml==.*") "")
+                (("<=4.38.0") ">=4.38.0"))))
           (add-after 'unpack 'patch-setup.py
             (lambda _
               ;; There is no use for Python-provided CMake nor Ninja binaries.
@@ -251,7 +237,14 @@ them as it goes.")
                         (number->string (parallel-job-count))
                         ;; This test is known to fail on multiple architectures.
                         ;; https://github.com/adobe-type-tools/afdko/issues/1163
-                        "-k not test_type1mm_inputs"))))
+                        "-k"
+                        (string-append
+                         "not test_type1mm_inputs "
+                         ;; These tests fail for unknown reasons (see:
+                         ;; https://github.com/adobe-type-tools/afdko/issues/1635).
+                         "and not test_rvrn_vf "
+                         "and not test_cjk_vf "
+                         "and not test_sparse_cjk_vf")))))
           (add-after 'check 'wrap
             (assoc-ref %standard-phases 'wrap))
           (add-before 'wrap 'wrap-PATH
@@ -276,7 +269,8 @@ them as it goes.")
            python-setuptools-scm
            python-wheel))
     (inputs
-     (list java-antlr4-runtime-cpp
+     (list bash-minimal
+           java-antlr4-runtime-cpp
            libxml2
            `(,util-linux "lib")))
     (propagated-inputs
@@ -463,23 +457,15 @@ converts any cubic curves to quadratic.  The most useful function is probably
 (define-public python-ufo2ft
   (package
     (name "python-ufo2ft")
-    (version "2.28.0")
+    (version "2.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ufo2ft" version))
        (sha256
-        (base32 "068hm62s1iphyg66w96vgiif6ahpcsaf8fr44rk6jdf71f6fyqd5"))))
-    (build-system python-build-system)
-    (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-setuptools-scm))
+        (base32 "1rg2997af8blvswlwif0kpz2vxrlh555gzqslz6yv9y7i7v8lphl"))))
+    (build-system pyproject-build-system)
+    (native-inputs (list python-pytest python-setuptools-scm))
     (propagated-inputs
      (list python-booleanoperations
            python-cffsubr
@@ -501,13 +487,13 @@ to generate OpenType font binaries from Unified Font Objects (UFOs).")
 (define-public python-fontmath
   (package
     (name "python-fontmath")
-    (version "0.9.2")
+    (version "0.9.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "fontMath" version ".zip"))
        (sha256
-        (base32 "014407hpvqdx123g06i664qrfq86bf9l621x7jllpgqw3rqir2sc"))))
+        (base32 "070v1jz5f18g15if459ppwswq4w5hzffwp1gvdc5j47bgz5qflva"))))
     (build-system python-build-system)
     (propagated-inputs (list python-fonttools))
     (native-inputs
@@ -574,13 +560,13 @@ implementing the pen protocol for manipulating glyphs.")
   (hidden-package
    (package
      (name "python-fontparts-bootstrap")
-     (version "0.10.8")
+     (version "0.11.0")
      (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "fontParts" version ".zip"))
         (sha256
-         (base32 "0i5ww6yl9m74wnjd7gyvjkdh7m56haql4gv7lasmppdipay2209g"))))
+         (base32 "0j4h8hszky639gmfy1avmw670y80ya49kca8yc635h5ihl0c3v8x"))))
      (build-system python-build-system)
      (propagated-inputs
       (list python-booleanoperations
@@ -773,9 +759,12 @@ suite of the @code{psautohint} package.")
        (uri (pypi-uri "psautohint" version))
        (sha256
         (base32 "0zzz7hy1kkkjfrrm9ly2di3xv2x1ywdqhbyqy21k670jysldw3nm"))))
-    (build-system python-build-system)
+    (build-system pyproject-build-system)
     (arguments
      (list
+      ;; The CJKSparseVar.subset.hinted.otf test fails with slightly different
+      ;; output caused by the newer fonttools version used in Guix.
+      #:test-flags #~(list "-k" "not CJKSparseVar.subset.hinted.otf")
       #:phases
       #~(modify-phases %standard-phases
           (add-after 'unpack 'copy-font-data
@@ -785,12 +774,8 @@ suite of the @code{psautohint} package.")
                #$(this-package-native-input "psautohint-font-data")
                "tests/integration/data")
               (for-each make-file-writable
-                        (find-files "tests/integration/data"))))
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke "pytest" "-vv")))))))
-    (propagated-inputs (list python-fonttools))
+                        (find-files "tests/integration/data")))))))
+    (inputs (list python-fonttools))
     (native-inputs
      (list psautohint-font-data
            python-fs
@@ -1573,7 +1558,7 @@ generate bitmaps.")
 (define-public python-statmake
   (package
     (name "python-statmake")
-    (version "0.5.1")
+    (version "0.6.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1582,7 +1567,7 @@ generate bitmaps.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0qavzspxhwnaayj5mxq6ncjjziggabxj157ls04h2rdrpq167706"))))
+                "1k6fkzyhsfkgi599sb017wzf4jzbnp5wjg1kla1b33vgjpa7n5nw"))))
     (build-system pyproject-build-system)
     (arguments
      (list
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 5074ed0807..3ce304a905 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -27,7 +27,7 @@
 ;;; Copyright © 2021 Robby Zambito <contact@robbyzambito.me>
 ;;; Copyright © 2021, 2022 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021, 2022 John Kehayias <john.kehayias@protonmail.com>
-;;; Copyright © 2021, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; 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>
@@ -225,73 +225,75 @@ application-centers for distributions.")
        (sha256
         (base32 "1sd8syldyq6bphfdm129s3gq554vfv7vh1vcwzk48gjryf101awk"))
        (patches
-        (search-patches
-         "farstream-gupnp.patch"        ;for test 'transmitter/rawudp'
-         "farstream-make.patch"))))
+        (search-patches "farstream-gupnp.patch" ;for test 'transmitter/rawudp'
+                        "farstream-make.patch"))))
     (build-system glib-or-gtk-build-system)
     (outputs '("out" "doc"))
     (arguments
-     `(#:configure-flags
-       (list
-        "--enable-gtk-doc"
-        "--enable-glib-asserts"
-        (string-append "--with-html-dir="
-                       (assoc-ref %outputs "doc")
-                       "/share/gtk-doc/html"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'copy-common
-           (lambda _
-             (delete-file "autogen.sh")
-             (copy-recursively
-              (assoc-ref %build-inputs "common")
-              "common")
-             #t))
-         (add-after 'unpack 'disable-timeout-tests
-           (lambda _
-             (substitute* "tests/check/Makefile.am"
-               ;; This test timeouts despite changing
-               ;; the value of 'CK_DEFAULT_TIMEOUT' to 600,
-               ;; as per %common-gstreamer-phases.
-               ;; Reported to upstream:
-               ;; https://gitlab.freedesktop.org/farstream/farstream/-/issues/20
-               (("[ \t]*transmitter/nice.*$") ""))))
-         (add-after 'unpack 'patch-docbook-xml
-           (lambda* (#:key inputs #:allow-other-keys)
-             (with-directory-excursion "docs"
-               (substitute* '("libs/farstream-libs-docs.sgml"
-                              "plugins/farstream-plugins-docs.sgml")
-                 (("http://www.oasis-open.org/docbook/xml/4.1.2/")
-                  (string-append (assoc-ref inputs "docbook-xml")
-                                 "/xml/dtd/docbook/"))))
-             #t)))))
+     (list
+      #:configure-flags
+      #~(list "--enable-gtk-doc"
+              "--enable-glib-asserts"
+              (string-append "--with-html-dir=" #$output
+                             "/share/gtk-doc/html"))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'copy-common
+            (lambda _
+              (delete-file "autogen.sh")
+              (copy-recursively
+               #$(origin
+                   (method git-fetch)
+                   (uri
+                    (git-reference
+                     (url "https://gitlab.freedesktop.org/gstreamer/common.git")
+                     (commit "52adcdb89a9eb527df38c569539d95c1c7aeda6e")))
+                   (file-name (git-file-name "common" "latest.52adcdb"))
+                   (sha256
+                    (base32
+                     "1zlm1q1lgcb76gi82rial5bwy2j9sz1x6x48ijhiz89cml7xxd1r")))
+               "common")))
+          (add-after 'unpack 'disable-problematic-tests
+            (lambda _
+              (substitute* "tests/check/Makefile.am"
+                ;; This test fails since updating gstreamer to version 1.22.1
+                ;; (see:
+                ;; https://gitlab.freedesktop.org/farstream/farstream/-/issues/25).
+                (("^\trtp/recvcodecs.*") "")
+                ;; This test timeouts despite changing the value of
+                ;; 'CK_DEFAULT_TIMEOUT' to 600 (see:
+                ;; https://gitlab.freedesktop.org/farstream/farstream/-/issues/20).
+                (("^\ttransmitter/nice.*") ""))))
+          (add-after 'unpack 'patch-docbook-xml
+            (lambda* (#:key native-inputs inputs #:allow-other-keys)
+              (with-directory-excursion "docs"
+                (substitute* '("libs/farstream-libs-docs.sgml"
+                               "plugins/farstream-plugins-docs.sgml")
+                  (("http://www.oasis-open.org/docbook/xml/4.1.2/")
+                   (search-input-directory (or native-inputs inputs)
+                                           "xml/dtd/docbook/")))))))))
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("common"
-        ,(origin
-           (method git-fetch)
-           (uri
-            (git-reference
-             (url "https://gitlab.freedesktop.org/gstreamer/common.git")
-             (commit "88e512ca7197a45c4114f7fa993108f23245bf50")))
-           (file-name
-            (git-file-name "common" "latest.88e512c"))
-           (sha256
-            (base32 "1nk94pnskjyngqcfb9p32g4yvf4nzpjszisw24r9azl0pawqpsn6"))))
-       ("docbook-xml" ,docbook-xml-4.1.2)
-       ("docbook-xsl" ,docbook-xsl)
-       ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc/stable)
-       ("libtool" ,libtool)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-wrapper)
-       ("xsltproc" ,libxslt)))
+     (list autoconf
+           automake
+           docbook-xml-4.1.2
+           docbook-xsl
+           gobject-introspection
+           gtk-doc/stable
+           libtool
+           libxslt
+           perl
+           pkg-config
+           python-wrapper))
     (inputs
-     (list glib gtk+ gupnp-igd libnice))
+     (list glib
+           gtk+
+           gupnp-igd
+           libnice))
     (propagated-inputs
-     (list gstreamer gst-plugins-bad gst-plugins-base gst-plugins-good))
+     (list gstreamer
+           gst-plugins-bad
+           gst-plugins-base
+           gst-plugins-good))
     (synopsis "The Farstream VVoIP framework")
     (description "Farstream is a collection of GStreamer modules and libraries
 for videoconferencing.")
@@ -474,112 +476,82 @@ display servers.  It supports many different languages and emoji.")
     (name "xdg-utils")
     (version "1.1.3")
     (source
-      (origin
-        (method url-fetch)
-          (uri (string-append
-                 "https://portland.freedesktop.org/download/xdg-utils-"
-                 version ".tar.gz"))
-          (sha256
-            (base32
-             "1nai806smz3zcb2l5iny4x7li0fak0rzmjg6vlyhdqm8z25b166p"))))
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://portland.freedesktop.org/download/xdg-utils-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1nai806smz3zcb2l5iny4x7li0fak0rzmjg6vlyhdqm8z25b166p"))))
     (build-system gnu-build-system)
     (native-inputs
-     (list docbook-xsl docbook-xml-4.1.2 libxslt w3m xmlto))
+     (list docbook-xsl docbook-xml-4.1.2 libxslt w3m-for-tests xmlto))
     (inputs
-     `(("awk" ,gawk)
-       ;; TODO(staging): Make this unconditional, to avoid canonical packages,
-       ;; see <https://lists.gnu.org/archive/html/guix-devel/2020-02/msg00148.html>.
-       ,@(if (%current-target-system)
-             `(("bash-minimal" ,bash-minimal)) ; for 'wrap-program'
-             '())
-       ("coreutils" ,coreutils)
-       ,@(if (%current-target-system)
-             `(("file" ,file))
-             '())
-       ("grep" ,grep)
-       ("inetutils" ,inetutils) ; xdg-screensaver uses `hostname'
-       ("perl-file-mimeinfo" ,perl-file-mimeinfo) ; for mimeopen fallback
-       ("sed" ,sed)
-       ("xprop" ,xprop) ; for Xfce detecting
-       ("xset" ,xset))) ; for xdg-screensaver
+     (list bash-minimal                 ;for 'wrap-program'
+           coreutils
+           file
+           gawk
+           grep
+           inetutils                    ;xdg-screensaver uses `hostname'
+           perl-file-mimeinfo           ;for mimeopen fallback
+           sed
+           xprop                        ;for Xfce detecting
+           xset))                       ;for xdg-screensaver
     (arguments
-     `(#:tests? #f   ; no check target
-       #:modules ((srfi srfi-26)
+     (list
+      #:tests? #f                       ;no check target
+      #:modules `((srfi srfi-26)
                   ,@%gnu-build-system-modules)
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-hardcoded-paths
-           ;; TODO(staging): make unconditional
-           (,@(if (%current-target-system)
-                 '(lambda* (#:key inputs #:allow-other-keys))
-                 '(lambda _))
+      #:phases
+      #~(modify-phases %standard-phases
+        (add-after 'unpack 'patch-hardcoded-paths
+          (lambda* (#:key inputs #:allow-other-keys)
             (substitute* "scripts/xdg-mime.in"
               (("/usr/bin/file")
-               (,@(if (%current-target-system)
-                      '(search-input-file inputs "bin/file")
-                      '(which "file")))))
+               (search-input-file inputs "bin/file")))
             (substitute* "scripts/xdg-open.in"
               (("/usr/bin/printf")
-               (,@(if (%current-target-system)
-                      '(search-input-file inputs "bin/printf")
-                      '(which "printf")))))
-            #t))
-         (add-before 'build 'locate-catalog-files
-           ;; TODO(staging): Make unconditional for simplicity.
-           (lambda* (#:key inputs ,@(if (%current-target-system)
-                                        '(native-inputs)
-                                        '()) #:allow-other-keys)
-             ;; TODO(staging): Make unconditional for simplicity and
-             ;; to avoid depending on input labels.
-             (let ,(if (%current-target-system)
-                       `((native-inputs (or native-inputs inputs))
-                         (xmldoc (search-input-directory native-inputs
-                                                         "xml/dtd/docbook"))
-                         (xsldoc
-                          (search-input-directory
-                           native-inputs
-                           (string-append "xml/xsl/docbook-xsl-"
-                                          ,(package-version docbook-xsl)))))
-                       `((xmldoc
-                          (string-append (assoc-ref inputs "docbook-xml")
-                                         "/xml/dtd/docbook"))
-                         (xsldoc
-                          (string-append (assoc-ref inputs "docbook-xsl")
-                                         "/xml/xsl/docbook-xsl-"
-                                         ,(package-version docbook-xsl)))))
-               (for-each (lambda (file)
-                           (substitute* file
-                             (("http://.*/docbookx\\.dtd")
-                              (string-append xmldoc "/docbookx.dtd"))))
-                         (find-files "scripts/desc" "\\.xml$"))
-               (substitute* "scripts/Makefile"
-                 ;; Apparently `xmlto' does not bother to looks up the stylesheets
-                 ;; specified in the XML, unlike the above substitition. Instead it
-                 ;; uses a hard-coded URL. Work around it here, but if this is
-                 ;; common perhaps we should hardcode this path in xmlto itself.
-                 (("\\$\\(XMLTO\\) man")
-                  (string-append "$(XMLTO) -x " xsldoc
-                                 "/manpages/docbook.xsl man")))
-               (setenv "STYLESHEET"
-                       (string-append xsldoc "/html/docbook.xsl"))
-               ;; TODO(staging): Might as well remove the #t while we are at
-               ;; it.
-               #t)))
-         (add-after 'install 'wrap-executables
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (with-directory-excursion (string-append out "/bin")
-                 (let ((path-ext
-                        (map (cute string-append <> "/bin")
-                             (cons out
-                                   (map (cute assoc-ref inputs <>)
-                                        '("awk" "coreutils" "grep" "inetutils"
-                                          "perl-file-mimeinfo" "sed" "xprop"
-                                          "xset"))))))
-                   (for-each (cute wrap-program <>
-                                   `("PATH" ":" prefix ,path-ext))
-                             (find-files "."))))
-               #t))))))
+               (search-input-file inputs "bin/printf")))))
+        (add-before 'build 'locate-catalog-files
+          (lambda* (#:key native-inputs inputs #:allow-other-keys)
+            (let* ((native (or native-inputs inputs))
+                   (xmldoc (search-input-directory native
+                                                   "xml/dtd/docbook"))
+                   (xsldoc (search-input-directory
+                            native
+                            (string-append "xml/xsl/docbook-xsl-"
+                                           #$(package-version
+                                              (this-package-native-input
+                                               "docbook-xsl"))))))
+              (for-each (lambda (file)
+                          (substitute* file
+                            (("http://.*/docbookx\\.dtd")
+                             (string-append xmldoc "/docbookx.dtd"))))
+                        (find-files "scripts/desc" "\\.xml$"))
+              (substitute* "scripts/Makefile"
+                ;; Apparently `xmlto' does not bother to looks up the stylesheets
+                ;; specified in the XML, unlike the above substitition. Instead it
+                ;; uses a hard-coded URL. Work around it here, but if this is
+                ;; common perhaps we should hardcode this path in xmlto itself.
+                (("\\$\\(XMLTO\\) man")
+                 (string-append "$(XMLTO) -x " xsldoc
+                                "/manpages/docbook.xsl man")))
+              (setenv "STYLESHEET"
+                      (string-append xsldoc "/html/docbook.xsl")))))
+        (add-after 'install 'wrap-executables
+          (lambda* (#:key inputs outputs #:allow-other-keys)
+            (let* ((dependencies '("awk" "grep" "hostname" "ls" "mimeopen"
+                                   "sed" "xprop" "xset"))
+                   (pkgs (map (lambda (cmd)
+                                (search-input-file inputs
+                                                   (string-append "bin/" cmd)))
+                              dependencies))
+                   (bindirs (map dirname pkgs)))
+              (with-directory-excursion (string-append #$output "/bin")
+                (for-each (cute wrap-program <>
+                                `("PATH" ":" prefix ,bindirs))
+                          (find-files ".")))))))))
     (home-page "https://www.freedesktop.org/wiki/Software/xdg-utils/")
     (synopsis "Freedesktop.org scripts for desktop integration")
     (description "The xdg-utils package is a set of simple scripts that
@@ -1804,7 +1776,7 @@ which speak the Qualcomm MSM Interface (QMI) protocol.")
 (define-public modem-manager
   (package
     (name "modem-manager")
-    (version "1.18.10")
+    (version "1.18.12")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1812,7 +1784,7 @@ which speak the Qualcomm MSM Interface (QMI) protocol.")
                     "ModemManager-" version ".tar.xz"))
               (sha256
                (base32
-                "1sv53lvz9nfbq6jzprl5xhai0vylc01kglcdrgz2vszf5615y98n"))))
+                "0c74n5jl1qvq2qlbwzfkgxny8smjcgkid1nhdnl6qnlmbn9f8r5l"))))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -1963,32 +1935,32 @@ different sorts of messages in different formats.")
     (license license:lgpl2.1+)))
 
 (define-public telepathy-idle
-  (package
-    (name "telepathy-idle")
-    (version "0.2.2")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/TelepathyIM/telepathy-idle")
-             (commit (string-append "telepathy-idle-" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "1pfw4g2cicw3ykxhsy743r0fc1yqbdrqxh2c5ha6am19dajcr95l"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     (list autoconf automake libtool pkg-config))
-    (inputs
-     (list libxslt python-2 python2-dbus))
-    (propagated-inputs
-     (list telepathy-glib))
-    (home-page "https://telepathy.freedesktop.org/")
-    (synopsis "Telepathy IRC connection manager")
-    (description
-     "Idle is an IRC connection manager for the Telepathy framework.  This
+  ;; Use the latest commit, as the latest release does not support Python 3.
+  (let ((commit "b516eab0f2b92e078e0f5cab4224214d215b2ea5")
+        (revision "0"))
+    (package
+      (name "telepathy-idle")
+      (version (git-version "0.2.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/TelepathyIM/telepathy-idle")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "02wb61h2k3hhis5y2xi5rhc6pmikd13x722hk620sqb9b3m5pn3s"))))
+      (build-system gnu-build-system)
+      (native-inputs (list autoconf automake libtool pkg-config))
+      (inputs (list libxslt python-wrapper python-dbus))
+      (propagated-inputs (list telepathy-glib))
+      (home-page "https://telepathy.freedesktop.org/")
+      (synopsis "Telepathy IRC connection manager")
+      (description
+       "Idle is an IRC connection manager for the Telepathy framework.  This
 package enables usage of IRC channels and private messages in Telepathy instant
 messaging clients such as Empathy, GNOME Shell or KDE Telepathy.")
-    (license (list license:lgpl2.1 license:lgpl2.1+))))
+      (license (list license:lgpl2.1 license:lgpl2.1+)))))
 
 (define-public telepathy-mission-control
   (package
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 5825b8d936..0fba4f5ce9 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -75,6 +75,7 @@
 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2022 Hendursaga <hendursaga@aol.com>
 ;;; Copyright © 2022 Parnikkapore <poomklao@yahoo.com>
+;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -3636,7 +3637,7 @@ for common mesh file formats, and collision detection.")
   (package
     (inherit irrlicht)
     (name "irrlicht-for-minetest")
-    (version "1.9.0mt8")
+    (version "1.9.0mt10")
     (source
      (origin
        (method git-fetch)
@@ -3646,7 +3647,7 @@ for common mesh file formats, and collision detection.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1646pj40dqkzbbc2lxzbmq2pjyrkgggbi2lah6pa5mv420p402kg"))))
+         "0y5vchz91khs8dmrkpgc7sqmvzx2yjj6svivvm80r4yppv7s03rw"))))
     (build-system cmake-build-system)
     (arguments
      ;; No check target.
@@ -5799,7 +5800,7 @@ programmers may also add their own favorite language.")
 (define-public bambam
   (package
     (name "bambam")
-    (version "1.0.0")
+    (version "1.2.1")
     (source
       (origin
         (method git-fetch)
@@ -5808,7 +5809,7 @@ programmers may also add their own favorite language.")
               (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
-         (base32 "18cwd1wpyyx8y61cags9bkdhx9x858xicc4y1c9c2s0xjmgzhl3i"))))
+         (base32 "148cqahklqd4m88j5z1xf3fh4vha41f31wian11hkas106mbsya9"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f                      ; no tests
@@ -6014,7 +6015,7 @@ for Un*x systems with X11.")
 (define-public freeciv
   (package
    (name "freeciv")
-   (version "3.0.6")
+   (version "3.0.7")
    (source
     (origin
      (method url-fetch)
@@ -6026,7 +6027,7 @@ for Un*x systems with X11.")
                   (version-major+minor version) "/" version
                   "/freeciv-" version ".tar.xz")))
      (sha256
-      (base32 "0hp4mkbcf5sipqkfjynls4m1qlh6kn0mp3jlqjrjwylmgcah3rs0"))))
+      (base32 "1i6sm2ich9bazbg8wjzn8z1c5hgmg541lgw8f899fgfhgvqhdrpn"))))
    (build-system gnu-build-system)
    (inputs
     (list curl cyrus-sasl gtk+ sdl-mixer zlib))
@@ -6920,7 +6921,7 @@ at their peak of economic growth and military prowess.
 (define-public open-adventure
   (package
     (name "open-adventure")
-    (version "1.12")
+    (version "1.15")
     (source
      (origin
        (method git-fetch)
@@ -6929,7 +6930,7 @@ at their peak of economic growth and military prowess.
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "07mg7cp12g27dw8sya17jqz6qp93q7c8zadsvym3w602z87g40in"))))
+        (base32 "0gair1dfqgzjzvsasisv2szh3wgy8pfgmpxpisybn6svn294yzhf"))))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -7611,7 +7612,7 @@ Strife, Chex Quest, and fan-created games like Harmony, Hacx and Freedoom.")
        ("sdl-mixer" ,sdl2-mixer)
        ("zlib" ,zlib)
        ("libpng" ,libpng)
-       ("curl" ,curl-minimal)
+       ("curl" ,curl)
        ("alsa-lib" ,alsa-lib)))
     (home-page "https://odamex.net/")
     (synopsis "Multiplayer Doom port")
@@ -8256,7 +8257,7 @@ your score gets higher, you level up and the blocks fall faster.")
 (define-public endless-sky
   (package
     (name "endless-sky")
-    (version "0.9.16.1")
+    (version "0.10.0")
     (source
      (origin
        (method git-fetch)
@@ -8265,10 +8266,13 @@ your score gets higher, you level up and the blocks fall faster.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0cb2g1cb0mk6x9gq2x7n10rxlfhsq8wnssk068j6h80al3hhybly"))))
-    (build-system scons-build-system)
+        (base32 "1zbizmigxdwpi3m7sxv9hhf3aa18kbhsfrp48zy3iw2v64pw9l3r"))))
+    (build-system cmake-build-system)
     (arguments
-     (list #:scons-flags #~(list (string-append "PREFIX=" #$output))
+     (list #:configure-flags #~(list "-DES_USE_VCPKG=0"
+                                     "-DES_USE_SYSTEM_LIBRARIES=1")
+           #:make-flags #~(list (string-append "PREFIX=" #$output))
+           #:build-type "Release"
            #:phases
            #~(modify-phases %standard-phases
                (add-after 'unpack 'fix-paths
@@ -8277,11 +8281,8 @@ your score gets higher, you level up and the blocks fall faster.")
                    (substitute* "source/Files.cpp"
                      (("/usr/local") #$output))
                    ;; Install game binary into %out/bin.
-                   (substitute* "SConstruct"
-                     (("games\"") "bin\""))))
-               (add-before 'build 'use-gcc-ar
-                 ;; Use gcc-ar to support LTO.
-                 (lambda _ (setenv "AR" "gcc-ar"))))))
+                   (substitute* "CMakeLists.txt"
+                     (("games\\)") "bin)")))))))
     (inputs
      (list glew
            libjpeg-turbo
@@ -9094,7 +9095,7 @@ levels to unlock.")
 (define simgear
   (package
     (name "simgear")
-    (version "2020.3.17")
+    (version "2020.3.18")
     (source
      (origin
        (method url-fetch)
@@ -9102,7 +9103,7 @@ levels to unlock.")
                            (version-major+minor version) "/"
                            "simgear-" version ".tar.bz2"))
        (sha256
-        (base32 "0z1pkxs4fw8xkiainxgcpayhmn0b4c0sc2j6q88x66zzvk89qpjc"))
+        (base32 "1jin6rbz4s83x4k91lbdw5gb0vrc8frbmwpc55wl0wmiaqjwzhbc"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -9147,7 +9148,7 @@ and also provides the base for the FlightGear Flight Simulator.")
                            (version-major+minor version) "/"
                            "flightgear-" version ".tar.bz2"))
        (sha256
-        (base32 "0m0qbyf9i84avkfmjm1a5bijl1nqs7wnpw7rfz53ls52mkgdww36"))
+        (base32 "0dyyi1v97w3mdwsv9kdd194inz1461wqv3zy3wyai0n17wdf7a1r"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -9219,7 +9220,7 @@ and also provides the base for the FlightGear Flight Simulator.")
                                "FlightGear-" version "-data.txz"))
            (sha256
             (base32
-             "1s6qahfia3llghfqgx990brg7gbb7z7accsq528kcyp6k8mvlpia"))))))
+             "0f2jn2br27ahf5gggx70zcp80wrylahw7nbqdcx7ml9qphg6rjak"))))))
     (home-page "https://www.flightgear.org/")
     (synopsis "Flight simulator")
     (description "The goal of the FlightGear project is to create a
@@ -11014,7 +11015,7 @@ disassembly of the DOS version, extended with new features.")
 (define-public fheroes2
   (package
     (name "fheroes2")
-    (version "1.0.0")
+    (version "1.0.2")
     (source
      (origin
        (method git-fetch)
@@ -11023,7 +11024,7 @@ disassembly of the DOS version, extended with new features.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0bvp9xhzlh4d6q5jlvz4nciald75g9v0vahzax47q9xgajnbibzk"))))
+        (base32 "18hl84lapmqc810rnh2wkd4p2mnfcl4gbmg5sizakqcfpahgsl33"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ; no tests
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 5670574c0d..62edd829b7 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -13,7 +13,7 @@
 ;;; Copyright © 2019, 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Christopher Baines <mail@cbaines.net>
-;;; Copyright © 2020, 2021, 2022 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2020, 2021, 2022, 2023 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2021, 2023 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Clément Lassieur <clement@lassieur.org>
@@ -44,6 +44,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
   #:use-module (guix build-system meson)
+  #:use-module (guix build-system pyproject)
   #:use-module (guix build-system python)
   #:use-module (guix build-system qt)
   #:use-module (guix gexp)
@@ -291,7 +292,7 @@ OpenStreetMap written in C using eXpat, Cairo and GLib.")
 (define-public geos
   (package
     (name "geos")
-    (version "3.11.1")
+    (version "3.11.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://download.osgeo.org/geos/geos-"
@@ -299,7 +300,7 @@ OpenStreetMap written in C using eXpat, Cairo and GLib.")
                                   ".tar.bz2"))
               (sha256
                (base32
-                "1qhbirv1rbznv99ha0pa0zybvcsn0dsz2xfc65vr8bgrm77v63kd"))))
+                "1k744nwfa5sj4amzsdjxgac83wh6xfb9xi7z5bka7ic1jik7gw5i"))))
     (build-system cmake-build-system)
     (arguments `(#:phases
                  (modify-phases %standard-phases
@@ -596,7 +597,7 @@ fully fledged Spatial SQL capabilities.")
 (define-public proj
   (package
     (name "proj")
-    (version "9.1.1")
+    (version "9.2.0")
     (source
      (origin
        (method url-fetch)
@@ -604,7 +605,7 @@ fully fledged Spatial SQL capabilities.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "0fbd1vj4cj19kwh03vdn0a4hr0xaacvi876yyyw5xfsj1q0x8g00"))))
+         "03nm1sgvh237my7ss6kayn6887cbnayvjxrrxsrfcakkmbsida6y"))))
     (build-system cmake-build-system)
     (native-inputs (list googletest pkg-config))
     (propagated-inputs (list curl libtiff sqlite)) ;required by proj.pc
@@ -698,14 +699,14 @@ projections.")
 (define-public python-pyproj
   (package
     (name "python-pyproj")
-    (version "3.4.0")
+    (version "3.5.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "pyproj" version))
         (sha256
           (base32
-            "0czbfl5dd7jckbwvinfwiwdb99sxj796gfn3a9zqbsdc4xcl8257"))))
+            "1xhvr0n5gb7v6x0wd7cqmc0zrky2fag7bq2shx6l2qqq3icx2ncq"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -852,30 +853,24 @@ require a spatial database such as PostGIS.")
        (file-name (git-file-name name version))
        (sha256
         (base32 "1n8qjn184p5a2s3j6x6iyc1i7p3l3xnbqqxm6ajwgwv6j5fw1d5a"))))
-    (build-system python-build-system)
+    (build-system pyproject-build-system)
     (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
-             (when tests?
-               (add-installed-pythonpath inputs outputs)
-               ; TODO: Disable network tests
-               (invoke "pytest" "tests"
-                       "-k"
-                       (string-append
-                         ;; The following tests require network access.
-                         "not test_geocode_to_gdf"
-                         " and not test_stats"
-                         " and not test_osm_xml"
-                         " and not test_elevation"
-                         " and not test_routing"
-                         " and not test_plots"
-                         " and not test_find_nearest"
-                         " and not test_api_endpoints"
-                         " and not test_graph_save_load"
-                         " and not test_graph_from_functions"
-                         " and not test_geometries"))))))))
+     (list
+      #:test-flags
+      '(list "-k"
+             (string-append
+               ;; The following tests require network access.
+               "not test_geocode_to_gdf"
+               " and not test_stats"
+               " and not test_osm_xml"
+               " and not test_elevation"
+               " and not test_routing"
+               " and not test_plots"
+               " and not test_find_nearest"
+               " and not test_api_endpoints"
+               " and not test_graph_save_load"
+               " and not test_graph_from_functions"
+               " and not test_geometries"))))
     (propagated-inputs
       (list python-folium
             python-geopandas
@@ -1181,8 +1176,17 @@ utilities for data translation and processing.")
                (invoke "python" "-m" "pytest" "--pyargs" "cartopy"
                        ;; These tests require online data.
                        "-m" "not natural_earth and not network"
-                       ;; This one too but it's not marked as such.
-                       "-k" "not test_gridliner_labels_bbox_style")))))))
+                       "-k"
+                       (string-append
+                         ;; This one too but it's not marked as such.
+                         "not test_gridliner_labels_bbox_style"
+                         ;; Those tests fail with proj 9.2.0
+                         ;; https://github.com/SciTools/cartopy/issues/2145
+                         " and not test_epsg"
+                         " and not test_default"
+                         " and not test_eccentric_globe"
+                         " and not test_ellipsoid_transform"
+                         " and not test_eccentric_globe"))))))))
     (propagated-inputs
      (list python-matplotlib
            python-numpy
@@ -1644,14 +1648,14 @@ persisted.
 (define-public python-rtree
   (package
     (name "python-rtree")
-    (version "1.0.0")
+    (version "1.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Rtree" version))
        (sha256
-        (base32 "10lnhf67c9pb0yisxdqmb52dy6lj1za1h9d4p69v0ihk2a138j6h"))))
-    (build-system python-build-system)
+        (base32 "0aalh07fyf6vpr0a6zswnqvvrjhyic1zg6w4bl368fihkilj2892"))))
+    (build-system pyproject-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1661,11 +1665,7 @@ persisted.
                (substitute* "rtree/finder.py"
                  (("find_library\\(\"spatialindex_c\"\\)")
                   (string-append  "\"" libspatialindex
-                                  "/lib/libspatialindex_c.so\""))))))
-         (replace 'check
-           (lambda* (#:key outputs tests? #:allow-other-keys)
-             (when tests?
-                 (invoke "pytest")))))))
+                                  "/lib/libspatialindex_c.so\"")))))))))
     (native-inputs
      (list python-numpy python-pytest python-wheel))
     (inputs
@@ -2462,14 +2462,14 @@ growing set of geoscientific methods.")
 (define-public qgis
   (package
     (name "qgis")
-    (version "3.26.2")
+    (version "3.30.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://qgis.org/downloads/qgis-"
                            version ".tar.bz2"))
        (sha256
-        (base32 "1hsq3wchsf7db7134fgg9xzzap35q1s4r6649d0krbw80xw5asca"))))
+        (base32 "0mdgqyqr3nswp5qfpjrpr35lxizcrz73a1gs3ddxsd1xr9amzb5s"))))
     (build-system cmake-build-system)
     (arguments
      `(#:modules ((guix build cmake-build-system)
@@ -2511,20 +2511,56 @@ growing set of geoscientific methods.")
                (("\\$\\(git rev-parse --show-toplevel\\)")
                 (getcwd)))))
          (replace 'check
-           (lambda* (#:key inputs tests? #:allow-other-keys)
+           (lambda* (#:key inputs outputs tests? parallel-tests?
+                     #:allow-other-keys)
              (when tests?
              (setenv "HOME" "/tmp")
              (system "Xvfb :1 &")
              (setenv "DISPLAY" ":1")
              (setenv "TRAVIS" "true")
              (setenv "CTEST_OUTPUT_ON_FAILURE" "1")
+             (let* ((out (assoc-ref outputs "out"))
+                    (grass-version ,(package-version grass))
+                    (grass-majorminor (string-join
+                                       (list-head
+                                        (string-split grass-version #\.) 2)
+                                       ""))
+                    (grass (string-append (assoc-ref inputs "grass")
+                                          "/grass" grass-majorminor)))
+               (setenv "GISBASE" grass))
              (invoke "ctest"
+                     "-j" (if parallel-tests?
+                              (number->string (parallel-job-count))
+                              "1")
                      "-E" (string-join
                            '(;; Disable tests that require network access
+                             "PyQgsExternalStorageAwsS3"
+                             "PyQgsExternalStorageWebDav"
                              "qgis_filedownloader"
+                             "test_core_networkaccessmanager"
+                             "test_core_tiledownloadmanager"
+                             "test_gui_filedownloader"
+                             "test_provider_wcsprovider"
+                             ;; Disable tests that need OGR built with
+                             ;; libspatialite support
+                             "PyQgsAttributeTableModel"
+                             "PyQgsOGRProviderSqlite"
+                             "PyQgsWFSProvider"
+                             "PyQgsOapifProvider"
+                             ;; Disable tests that need Python compiled
+                             ;; with loadable SQLite extensions.
+                             "PyQgsFieldFormattersTest"
+                             "PyQgsSpatialiteProvider"
+                             "PyQgsLayerDependencies"
+                             "PyQgsDBManagerGpkg"
+                             "PyQgsDBManagerSpatialite"
+                             ;; Disable tests that need poppler (with Cairo)
+                             "PyQgsLayoutExporter"
+                             "PyQgsPalLabelingLayout"
+                             ;; Disable tests that need Orfeo ToolBox
+                             "ProcessingOtbAlgorithmsTest"
                              ;; TODO: Find why the following tests fail
                              "ProcessingQgisAlgorithmsTestPt1"
-                             "ProcessingQgisAlgorithmsTestPt2"
                              "ProcessingQgisAlgorithmsTestPt3"
                              "ProcessingQgisAlgorithmsTestPt4"
                              "ProcessingGdalAlgorithmsRasterTest"
@@ -2533,68 +2569,42 @@ growing set of geoscientific methods.")
                              "ProcessingGrass7AlgorithmsRasterTestPt1"
                              "ProcessingGrass7AlgorithmsRasterTestPt2"
                              "ProcessingGrass7AlgorithmsVectorTest"
-                             "ProcessingOtbAlgorithmsTest"
                              "test_core_authmanager"
                              "test_core_compositionconverter"
-                             "test_core_coordinatereferencesystem"
+                             "test_core_expression"
                              "test_core_gdalutils"
-                             "test_core_labelingengine"
-                             "test_core_layout"
-                             "test_core_layouthtml"
-                             "test_core_layoutlabel"
-                             "test_core_layoutmultiframe"
                              "test_core_layoutpicture"
-                             "test_core_legendrenderer"
-                             "test_core_networkaccessmanager"
-                             "test_core_rasterfilewriter"
-                             "test_core_tiledownloadmanager"
-                             "test_gui_dualview"
-                             "test_gui_htmlwidgetwrapper"
-                             "test_gui_filedownloader"
+                             "test_core_pointcloudlayerexporter"
+                             "test_core_projectstorage"
+                             "test_core_coordinatereferencesystem"
                              "test_gui_queryresultwidget"
+                             "test_provider_copcprovider"
+                             "test_analysis_processingalgspt1"
                              "test_analysis_processingalgspt2"
                              "test_analysis_processing"
-                             "test_provider_wcsprovider"
-                             "qgis_grassprovidertest7"
-                             "test_app_gpsinformationwidget"
+                             "test_app_gpsintegration"
                              "PyQgsAnnotation"
-                             "PyQgsAttributeTableModel"
                              "PyQgsAuthenticationSystem"
-                             "PyQgsExternalStorageWebDAV"
-                             "PyQgsFieldFormattersTest"
+                             "PyQgsDatumTransform"
                              "PyQgsFileUtils"
                              "PyQgsGeometryTest"
                              "PyQgsGoogleMapsGeocoder"
+                             "PyQgsGroupLayer"
                              "PyQgsHashLineSymbolLayer"
-                             "PyQgsLayoutExporter"
                              "PyQgsLayoutHtml"
                              "PyQgsLineSymbolLayers"
                              "PyQgsMapLayer"
-                             "PyQgsNetworkContentFetcherRegistry"
                              "PyQgsOGRProviderGpkg"
-                             "PyQgsOGRProviderSqlite"
-                             "PyQgsPalLabelingCanvas"
-                             "PyQgsPalLabelingLayout"
-                             "PyQgsPalLabelingPlacement"
-                             "PyQgsProcessExecutable"
+                             "PyQgsProcessExecutablePt1"
+                             "PyQgsProcessExecutablePt2"
                              "PyQgsProviderConnectionGpkg"
                              "PyQgsProviderConnectionSpatialite"
                              "PyQgsOGRProvider"
-                             "PyQgsSpatialiteProvider"
                              "PyQgsVectorFileWriter"
                              "PyQgsVectorLayerEditBuffer"
-                             "PyQgsVectorLayerEditBufferGroup"
-                             "PyQgsVectorLayerProfileGenerator"
                              "PyQgsVirtualLayerProvider"
-                             "PyQgsWFSProvider"
-                             "PyQgsWFSProviderGUI"
-                             "PyQgsOapifProvider"
-                             "PyQgsLayerDependencies"
-                             "PyQgsDBManagerGpkg"
-                             "PyQgsDBManagerSpatialite"
                              "PyQgsAuxiliaryStorage"
                              "PyQgsSelectiveMasking"
-                             "qgis_shellcheck"
                              "qgis_sipify"
                              "qgis_sip_include"
                              "qgis_sip_uptodate")
@@ -2663,6 +2673,7 @@ growing set of geoscientific methods.")
            qtdeclarative-5
            qtkeychain
            qtlocation
+           qtmultimedia-5
            qtserialport
            qtsvg-5
            qwt
diff --git a/gnu/packages/ghostscript.scm b/gnu/packages/ghostscript.scm
index 3c85f61d88..1813cc367e 100644
--- a/gnu/packages/ghostscript.scm
+++ b/gnu/packages/ghostscript.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2013, 2015, 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
-;;; Copyright © 2017, 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2018, 2019, 2021, 2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2020, 2022 Marius Bakke <mbakke@fastmail.com>
@@ -285,7 +285,10 @@ output file formats and printers.")
    (source (package-source ghostscript))
    (build-system gnu-build-system)
    (native-inputs
-    (list libtool automake autoconf))
+    (append (if (target-riscv64?)
+              (list config)
+              '())
+            (list libtool automake autoconf)))
    (arguments
     `(#:phases
       (modify-phases %standard-phases
@@ -303,7 +306,17 @@ output file formats and printers.")
             (substitute* "autogen.sh"
               (("^.*\\$srcdir/configure.*") "")
               (("^ + && echo Now type.*$")  ""))
-            (invoke "bash" "autogen.sh"))))))
+            (invoke "bash" "autogen.sh")))
+        ,@(if (target-riscv64?)
+            `((add-after 'unpack 'update-config-scripts
+                (lambda* (#:key native-inputs inputs #:allow-other-keys)
+                  (for-each (lambda (file)
+                              (install-file
+                               (search-input-file
+                                (or native-inputs inputs)
+                                (string-append "/bin/" file)) "ijs"))
+                            '("config.guess" "config.sub")))))
+            '()))))
    (synopsis "IJS driver framework for inkjet and other raster devices")
    (description
     "IJS is a protocol for transmission of raster page images.  This package
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index b03ee7b4bd..3a63d70c7a 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -110,7 +110,7 @@ as ASCII text.")
 (define-public freeglut
   (package
     (name "freeglut")
-    (version "3.2.2")
+    (version "3.4.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -118,7 +118,7 @@ as ASCII text.")
                     "/download/v" version "/freeglut-" version ".tar.gz"))
               (sha256
                (base32
-                "0l3s57zw51fy3mn5qfdm4z775kfhflgxppanaxmskfzh5l44m565"))))
+                "1v7ayg3a03mv8b6lsr1qm21lbr8xg8dh3gdfxnbhl64vbn8wn2rw"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f                      ;no test target
@@ -606,14 +606,14 @@ glxdemo, glxgears, glxheads, and glxinfo.")
 (define-public glew
   (package
     (name "glew")
-    (version "2.1.0")
+    (version "2.2.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/glew/glew/" version
                                   "/glew-" version ".tgz"))
               (sha256
                (base32
-                "159wk5dc0ykjbxvag5i1m2mhp23zkk6ra04l26y3jc3nwvkr3ph4"))
+                "1qak8f7g1iswgswrgkzc7idk7jmqgwrs58fhg2ai007v7j4q5z6l"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -623,12 +623,15 @@ glxdemo, glxgears, glxheads, and glxinfo.")
                   #t))))
     (build-system gnu-build-system)
     (arguments
-     '(#:phases (modify-phases %standard-phases (delete 'configure))
-       #:make-flags (list (string-append "GLEW_PREFIX="
-                                         (assoc-ref %outputs "out"))
-                          (string-append "GLEW_DEST="
-                                         (assoc-ref %outputs "out")))
-       #:tests? #f))                              ;no 'check' target
+     (list #:make-flags #~(list (string-append "GLEW_PREFIX=" #$output)
+                                (string-append "GLEW_DEST=" #$output))
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)
+               (add-after 'install 'delete-static
+                 (lambda _
+                   (delete-file (string-append #$output "/lib/libGLEW.a")))))
+           #:tests? #f))                ;no 'check' target
     (inputs
      (list libxi libxmu libx11 mesa))
 
diff --git a/gnu/packages/gnome-xyz.scm b/gnu/packages/gnome-xyz.scm
index 19838c3dd5..4611315e00 100644
--- a/gnu/packages/gnome-xyz.scm
+++ b/gnu/packages/gnome-xyz.scm
@@ -320,6 +320,54 @@ design.  It is mostly flat using a colorful palette with some shadows,
 highlights, and gradients for some depth.")
     (license license:gpl3+)))
 
+(define-public bibata-cursor-theme
+  (package
+    (name "bibata-cursor-theme")
+    (version "2.0.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ful1e5/Bibata_Cursor")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1bhspswgxizc4sr2bihfjic8wm4khd6waw9qgw0yssfy0fm3nafc"))))
+    (build-system trivial-build-system)
+    (native-inputs (list python-attrs python-clickgen))
+    (arguments
+     (list
+      #:modules '((guix build utils))
+      #:builder
+      #~(begin
+          (use-modules (guix build utils))
+          (let ((themes-dir (string-append #$output "/share/icons")))
+            (mkdir-p themes-dir)
+            (let loop
+                ((themes '(("Bibata-Modern-Amber" . "Yellowish and rounded")
+                           ("Bibata-Modern-Classic" . "Black and rounded")
+                           ("Bibata-Modern-Ice" . "White and rounded")
+                           ("Bibata-Original-Amber" . "Yellowish and sharp")
+                           ("Bibata-Original-Classic" . "Black and sharp")
+                           ("Bibata-Original-Ice" . "White and sharp"))))
+              (define theme
+                (car themes))
+              (invoke (search-input-file %build-inputs "/bin/ctgen")
+                      (string-append #$source "/build.toml")
+                      "-p" "x11"
+                      "-d" (string-append #$source "/bitmaps/" (car theme))
+                      "-n" (car theme)
+                      "-c" (string-append (cdr theme) " edge Bibata cursors")
+                      "-o" themes-dir)
+              (unless (null? (cdr themes))
+                (loop (cdr themes))))))))
+    (home-page "https://github.com/ful1e5/Bibata_Cursor")
+    (synopsis "Open-source, compact, and material-designed cursor set")
+    (description
+     "Bibata is an open-source, compact, and material designed
+cursor set.  This project aims at improving the cursor experience.")
+    (license license:gpl3)))
+
 (define-public gnome-plots
   (package
     (name "gnome-plots")
@@ -1690,7 +1738,7 @@ It contains:
  sound themes.
 @end itemize")
     (license (list license:lgpl2.1 license:lgpl3 license:cc-by-sa4.0))))
-  
+
 (define-public nordic-theme
   (let ((commit "07d764c5ebd5706e73d2e573f1a983e37b318915")
 	(revision "0"))
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 1c85faea17..9adc5af49a 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -2666,13 +2666,13 @@ forgotten when the session ends.")
 (define-public evince
   (package
     (name "evince")
-    (version "42.3")
+    (version "44.1")
     (source (origin
               (method url-fetch)
-              (uri "mirror://gnome/sources/evince/42/evince-42.3.tar.xz")
+              (uri "mirror://gnome/sources/evince/44/evince-44.1.tar.xz")
               (sha256
                (base32
-                "0pk42icnf4kdcaqaj17mcf4sxi82h1fdg2ds2zdrcv4lbj2czbj9"))))
+                "0523lzk7xpfr6gir8nx80fmp1lhajm837hilmgn8zczz2nxx7bqm"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -2683,8 +2683,10 @@ forgotten when the session ends.")
          (add-after 'unpack 'skip-gtk-update-icon-cache
            ;; Don't create 'icon-theme.cache'.
            (lambda _
-             (substitute* "meson_post_install.py"
-               (("gtk-update-icon-cache") "true")))))))
+             (substitute* "meson.build"
+               (("(glib_compile_schemas|gtk_update_icon_cache|\
+update_desktop_database): true" _ tool)
+                (string-append tool ": false"))))))))
     (inputs
      (list libarchive
            libgxps
@@ -4387,7 +4389,7 @@ engineering.")
 (define-public drawing
   (package
     (name "drawing")
-    (version "1.0.1")
+    (version "1.0.2")
     (source
      (origin
        (method git-fetch)
@@ -4396,7 +4398,7 @@ engineering.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "12xb522i7dxshw2ig12ald750fynlxan1lwz6gsxfa9p4ap2qypn"))))
+        (base32 "1yazs3jj8i8n64ki54rvh11q0yn46da105hdsjb7b80dpxspvlch"))))
     (build-system meson-build-system)
     (arguments
      (list
@@ -5332,19 +5334,19 @@ and other secrets.  It communicates with the \"Secret Service\" using DBus.")
 (define-public gi-docgen
   (package
     (name "gi-docgen")
-    (version "2022.1")
+    (version "2023.1")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "gi-docgen" version))
               (sha256
                (base32
-                "1v2wspm2ld27lq1n5v5pzrmkhchfa7p7ahp8rmjm4zcdyagqf7gr"))))
+                "18vzbw1k531qxi9qcwlxl97xk9dg16has7khg6a5d0pqrflyvbc8"))))
     (build-system python-build-system)
     (propagated-inputs (list python-jinja2
                              python-markdown
                              python-markupsafe
                              python-pygments
-                             python-toml
+                             python-tomli
                              python-typogrify))
     (home-page "https://gitlab.gnome.org/GNOME/gi-docgen")
     (synopsis "Documentation tool for GObject-based libraries")
@@ -8374,6 +8376,14 @@ users.")
                                                          "/sbin/dhclient")))
       #:phases
       #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-modprobe-path
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "src/libnm-platform/nm-platform-utils.c"
+                ;; The modprobe command location is not configurable (see:
+                ;; https://gitlab.freedesktop.org/NetworkManager/
+                ;; NetworkManager/-/issues/1257).
+                (("/sbin/modprobe")
+                 (search-input-file inputs "bin/modprobe")))))
           (add-after 'unpack 'patch-dlopen-call-to-libjansson.so
             (lambda* (#:key inputs #:allow-other-keys)
               (substitute* "src/libnm-glib-aux/nm-json-aux.c"
@@ -8453,6 +8463,7 @@ users.")
            isc-dhcp
            iwd                          ;wpa_supplicant alternative
            jansson
+           kmod
            libgcrypt
            libgudev
            libndp
@@ -8485,7 +8496,7 @@ services.")
 (define-public network-manager-openvpn
   (package
     (name "network-manager-openvpn")
-    (version "1.10.0")
+    (version "1.10.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -8494,7 +8505,7 @@ services.")
                     "/NetworkManager-openvpn-" version ".tar.xz"))
               (sha256
                (base32
-                "00fiyjbp42pdv5h2vdkzxd2rw32ikcinjgxrzdxak61kgw8d8iap"))))
+                "08bd0xnvbpsammfr9vlhdbyjw061pf72mb0jy8ivj892g2lg5w32"))))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -13125,7 +13136,7 @@ profiler via Sysprof, debugging support, and more.")
 (define-public komikku
   (package
     (name "komikku")
-    (version "1.14.0")
+    (version "1.15.0")
     (source
      (origin
        (method git-fetch)
@@ -13135,7 +13146,7 @@ profiler via Sysprof, debugging support, and more.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1pknm3xz2hai8y6ynlyz7y1k1kaay7mkpm1svx66ggjhz8jzcrj5"))))
+         "0yd4274qxpv0wg1lm6daip2nd135qq07pfl5wrm2rqlzs5mvqs3n"))))
     (build-system meson-build-system)
     (arguments
      (list
@@ -13178,6 +13189,7 @@ profiler via Sysprof, debugging support, and more.")
            python-lxml
            python-magic
            python-natsort
+           python-piexif
            python-pillow
            python-pure-protobuf
            python-pycairo
diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm
index 4d662d75fb..f080d72ccd 100644
--- a/gnu/packages/gnunet.scm
+++ b/gnu/packages/gnunet.scm
@@ -13,6 +13,7 @@
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2023 Adam Faiz <adam.faiz@disroot.org>
+;;; Copyright © 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,6 +32,7 @@
 
 (define-module (gnu packages gnunet)
   #:use-module (gnu packages)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages file)
   #:use-module (gnu packages aidc)
   #:use-module (gnu packages autotools)
@@ -259,82 +261,93 @@ supports HTTP, HTTPS and GnuTLS.")
 
 (define-public gnunet
   (package
-   (name "gnunet")
-   (version "0.19.3")
-   (source
-    (origin
-      (method url-fetch)
-      (uri (string-append "mirror://gnu/gnunet/gnunet-" version
-                          ".tar.gz"))
-      (sha256
-       (base32
-        "09bspbjl6cll8wcrl1vnb56jwp30pcrg1yyj6xy3i0fl2bzdbdw2"))
-      (modules '((guix build utils)))
-      (snippet
-       #~(begin
-           ;; This is fixed in the upstream repository but the fix
-           ;; has not been released.
-           (substitute* "src/gns/test_proxy.sh"
-             (("test_gnunet_proxy.conf") "test_gns_proxy.conf"))))))
-   (build-system gnu-build-system)
-   (inputs
-    (list bluez
-          glpk
-          curl
-          gnutls/dane
-          gstreamer
-          jansson
-          libextractor
-          libidn2
-          libgcrypt
-          libjpeg-turbo
-          libltdl
-          libmicrohttpd
-          libogg
-          libsodium
-          libunistring
-          miniupnpc
-          opus
-          pulseaudio
-          sqlite
-          zbar
-          zlib))
-   (native-inputs
-    (list curl
-          openssl
-          pkg-config
-          python
-          python-sphinx
-          python-sphinx-rtd-theme
-          xxd
-          (@ (gnu packages base) which)))
-   (arguments
-    '(#:parallel-tests? #f ; Parallel tests aren't supported.
+    (name "gnunet")
+    (version "0.19.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://gnu/gnunet/gnunet-" version
+                           ".tar.gz"))
+       (sha256
+        (base32
+         "16q0mkkr9b33wlm307ignfgvv0kilzr42155m5dpz66m13s3v9h0"))
+       (modules '((guix build utils)))
+       (snippet
+        #~(begin
+            ;; This is fixed in the upstream repository but the fix
+            ;; has not been released.
+            (substitute* "src/gns/test_proxy.sh"
+              (("test_gnunet_proxy.conf") "test_gns_proxy.conf"))))))
+    (build-system gnu-build-system)
+    (inputs
+     (list bluez
+           glpk
+           curl
+           gnutls/dane
+           gstreamer
+           jansson
+           libextractor
+           libidn2
+           libgcrypt
+           libjpeg-turbo
+           libltdl
+           libmicrohttpd
+           libogg
+           libsodium
+           libunistring
+           miniupnpc
+           opus
+           pulseaudio
+           sqlite
+           zbar
+           zlib))
+    (native-inputs
+     (list curl
+           openssl
+           pkg-config
+           python
+           python-sphinx
+           python-sphinx-rtd-theme
+           xxd
+           which))
+    (arguments
+     (list
+      #:parallel-tests? #f              ;parallel tests aren't supported
       #:phases
-      (modify-phases %standard-phases
-        (add-before 'check 'set-env-var-for-tests
-          (lambda _
-            (setenv "LANG" "en_US.UTF-8")))
-        ;; Swap 'check and 'install phases and add installed binaries to $PATH.
-        (add-before 'check 'set-path-for-check
-          (lambda* (#:key outputs #:allow-other-keys)
-           (let ((out (assoc-ref outputs "out")))
-             (setenv "GNUNET_PREFIX" (string-append out "/lib"))
-             (setenv "PATH" (string-append (getenv "PATH") ":" out "/bin")))
-           #t))
-        (delete 'check)
-        (add-after 'install 'check
-          (assoc-ref %standard-phases 'check)))))
-   (synopsis "Secure, decentralized, peer-to-peer networking framework")
-   (description
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'disable-problematic-tests
+            (lambda _
+              (substitute* "src/cadet/Makefile.in"
+                ;; The speed_reliable tests appear to be unreliable (see:
+                ;; https://bugs.gnunet.org/view.php?id=7787).
+                (("test_cadet_[0-9]+_speed_reliable\\$\\(EXEEXT)")
+                 ""))
+              (substitute* "src/core/Makefile.in"
+                ;; The 'test_core_api' test fails non-deterministically (see:
+                ;; https://bugs.gnunet.org/view.php?id=7784).
+                (("test_core_api\\$\\(EXEEXT) ") ""))))
+          (add-before 'check 'set-env-var-for-tests
+            (lambda _
+              (setenv "LANG" "en_US.UTF-8")))
+          ;; Swap 'check and 'install phases and add installed binaries to $PATH.
+          (add-before 'check 'set-path-for-check
+            (lambda _
+              (setenv "GNUNET_PREFIX" (string-append #$output "/lib"))
+              (setenv "PATH" (string-append (getenv "PATH") ":"
+                                            #$output "/bin"))))
+          (delete 'check)
+          (add-after 'install 'check
+            (assoc-ref %standard-phases 'check)))))
+    (synopsis "Secure, decentralized, peer-to-peer networking framework")
+    (description
      "GNUnet is a framework for secure peer-to-peer networking.  The
 high-level goal is to provide a strong foundation of free software for a
 global, distributed network that provides security and privacy.  GNUnet in
 that sense aims to replace the current internet protocol stack.  Along with
 an application for secure publication of files, it has grown to include all
 kinds of basic applications for the foundation of a GNU internet.")
-   (license license:agpl3+)
-   (home-page "https://gnunet.org/en/")))
+    (license license:agpl3+)
+    (home-page "https://www.gnunet.org/en/")))
 
 (define-public guile-gnunet                       ;GSoC 2015!
   (let ((commit "d12167ab3c8d7d6caffd9c606e389ef043760602")
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 45f474bee6..9b6744088f 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -13,12 +13,13 @@
 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2019, 2020 Adrian Malacoda <malacoda@monarch-pass.net>
-;;; Copyright © 2020, 2021, 2022 Jonathan Brielmaier <jonathan.brielmaier@web.de>
+;;; Copyright © 2020-2023 Jonathan Brielmaier <jonathan.brielmaier@web.de>
 ;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Baptiste Strazzul <bstrazzull@hotmail.fr>
+;;; Copyright © 2022 SeerLite <seerlite@disroot.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -517,9 +518,9 @@ variable defined below.  It requires guile-json to be installed."
 ;; XXXX: Workaround 'snippet' limitations.
 (define computed-origin-method (@@ (guix packages) computed-origin-method))
 
-(define %icecat-base-version "102.9.0")
+(define %icecat-base-version "102.10.0")
 (define %icecat-version (string-append %icecat-base-version "-guix0-preview1"))
-(define %icecat-build-id "20230314000000") ;must be of the form YYYYMMDDhhmmss
+(define %icecat-build-id "20230411000000") ;must be of the form YYYYMMDDhhmmss
 
 ;; 'icecat-source' is a "computed" origin that generates an IceCat tarball
 ;; from the corresponding upstream Firefox ESR tarball, using the 'makeicecat'
@@ -539,12 +540,12 @@ variable defined below.  It requires guile-json to be installed."
                   "firefox-" upstream-firefox-version ".source.tar.xz"))
             (sha256
              (base32
-              "1l8xlbba8sa9dg132k96ch8mz97i5lyhpvkxi8d85jh97xi79c1i"))))
+              "1y7v19xxl6jchywd0zxy5vr4pj23pi6di4lhlivxpki2pkgm8scc"))))
 
          ;; The upstream-icecat-base-version may be older than the
          ;; %icecat-base-version.
-         (upstream-icecat-base-version "102.9.0")
-         (gnuzilla-commit "f55ede39713d1533734f37e39927cbb78abe1604")
+         (upstream-icecat-base-version "102.10.0")
+         (gnuzilla-commit "15c6c2229a053cdcc064eda89cee07f18efac35d")
          (gnuzilla-source
           (origin
             (method git-fetch)
@@ -556,7 +557,7 @@ variable defined below.  It requires guile-json to be installed."
                                       (string-take gnuzilla-commit 8)))
             (sha256
              (base32
-              "0z15h3lxfn9pmj5bj62qim3h320dcd2v69xrg1phb7lh5gq0bylf"))))
+              "0v3wak2fd9bmq1j8k8k5xw0i4xbqy7fbasycr4swaqmsaf22sdv4"))))
 
          ;; 'search-patch' returns either a valid file name or #f, so wrap it
          ;; in 'assume-valid-file-name' to avoid 'local-file' warnings.
@@ -602,9 +603,6 @@ variable defined below.  It requires guile-json to be installed."
                                (package-transitive-propagated-inputs
                                 python-jsonschema))))
 
-                ;; Needed by the 'makeicecat' script.
-                (setenv "RENAME_CMD" "rename")
-
                 ;; We copy the gnuzilla source directory because it is
                 ;; read-only in 'gnuzilla-source', and the makeicecat script
                 ;; uses "cp -a" to copy parts of it and assumes that the
@@ -726,7 +724,9 @@ variable defined below.  It requires guile-json to be installed."
            libxcomposite
            libxt
            libffi
-           ffmpeg
+           ;; Support for FFmpeg 6 was only added in version 112 (see:
+           ;; https://bugzilla.mozilla.org/show_bug.cgi?id=1819374).
+           ffmpeg-5
            libvpx
            icu4c
            pixman
@@ -984,7 +984,7 @@ variable defined below.  It requires guile-json to be installed."
               ;; complain that it's not able to change Cargo.lock.
               ;; https://bugzilla.mozilla.org/show_bug.cgi?id=1726373
               (substitute* "build/RunCbindgen.py"
-                           (("\"--frozen\",") ""))))
+                (("\"--frozen\",") ""))))
           (delete 'bootstrap)
           (replace 'configure
             ;; configure does not work followed by both "SHELL=..." and
@@ -1074,6 +1074,7 @@ variable defined below.  It requires guile-json to be installed."
                                         "eudev"
                                         "pulseaudio"
                                         ;; For the integration of native notifications
+                                        ;; (same reason as icedove)
                                         "libnotify"))))
                 (wrap-program (car (find-files lib "^icecat$"))
                   `("XDG_DATA_DIRS" prefix (,gtk-share))
@@ -1137,8 +1138,178 @@ standards of the IceCat project.")
     "ru" "sco" "si" "sk" "sl" "son" "sq" "sr" "sv-SE" "szl" "ta" "te" "th" "tl"
     "tr" "trs" "uk" "ur" "uz" "vi" "xh" "zh-CN" "zh-TW"))
 
-(define %icedove-build-id "20230314000000") ;must be of the form YYYYMMDDhhmmss
-(define %icedove-version "102.9.0")
+(define icecat-102.9.0-source
+  (let* ((base-version "102.9.0")
+         (version "102.9.0-guix0-preview1")
+         (major-version (first  (string-split base-version #\.)))
+         (minor-version (second (string-split base-version #\.)))
+         (sub-version   (third  (string-split base-version #\.)))
+
+         (upstream-firefox-version (string-append base-version "esr"))
+         (upstream-firefox-source
+          (origin
+            (method url-fetch)
+            (uri (string-append
+                  "https://ftp.mozilla.org/pub/firefox/releases/"
+                  upstream-firefox-version "/source/"
+                  "firefox-" upstream-firefox-version ".source.tar.xz"))
+            (sha256
+             (base32
+              "1l8xlbba8sa9dg132k96ch8mz97i5lyhpvkxi8d85jh97xi79c1i"))))
+
+         ;; The upstream-icecat-base-version may be older than the
+         ;; base-version.
+         (upstream-icecat-base-version base-version)
+         (gnuzilla-commit "f55ede39713d1533734f37e39927cbb78abe1604")
+         (gnuzilla-source
+          (origin
+            (method git-fetch)
+            (uri (git-reference
+                  (url "git://git.savannah.gnu.org/gnuzilla.git")
+                  (commit gnuzilla-commit)))
+            (file-name (git-file-name "gnuzilla"
+                                      ;;upstream-icecat-base-version
+                                      (string-take gnuzilla-commit 8)))
+            (sha256
+             (base32
+              "0z15h3lxfn9pmj5bj62qim3h320dcd2v69xrg1phb7lh5gq0bylf"))))
+
+         ;; 'search-patch' returns either a valid file name or #f, so wrap it
+         ;; in 'assume-valid-file-name' to avoid 'local-file' warnings.
+         (makeicecat-patch
+          (local-file (assume-valid-file-name
+                       (search-patch "icecat-makeicecat.patch")))))
+
+    (origin
+      (method computed-origin-method)
+      (file-name (string-append "icecat-" version ".tar.xz"))
+      (sha256 #f)
+      (uri
+       (delay
+        (with-imported-modules '((guix build utils))
+          #~(begin
+              (use-modules (guix build utils))
+              (let ((firefox-dir
+                     (string-append "firefox-" #$base-version))
+                    (icecat-dir
+                     (string-append "icecat-" #$version)))
+
+                (set-path-environment-variable
+                 "PATH" '("bin")
+                 (list #+python
+                       #+(canonical-package bash)
+                       #+(canonical-package coreutils)
+                       #+(canonical-package findutils)
+                       #+(canonical-package patch)
+                       #+(canonical-package xz)
+                       #+(canonical-package sed)
+                       #+(canonical-package grep)
+                       #+(canonical-package bzip2)
+                       #+(canonical-package gzip)
+                       #+(canonical-package tar)))
+
+                (set-path-environment-variable
+                 "PYTHONPATH"
+                 (list #+(format #f "lib/python~a/site-packages"
+                                 (version-major+minor
+                                  (package-version python))))
+                 '#+(cons python-jsonschema
+                          (map second
+                               (package-transitive-propagated-inputs
+                                python-jsonschema))))
+
+                ;; Needed by the 'makeicecat' script.
+                (setenv "RENAME_CMD" "rename")
+
+                ;; We copy the gnuzilla source directory because it is
+                ;; read-only in 'gnuzilla-source', and the makeicecat script
+                ;; uses "cp -a" to copy parts of it and assumes that the
+                ;; copies will be writable.
+                (copy-recursively #+gnuzilla-source "/tmp/gnuzilla"
+                                  #:log (%make-void-port "w"))
+
+                (with-directory-excursion "/tmp/gnuzilla"
+                  (make-file-writable "makeicecat")
+                  (invoke "patch" "--force" "--no-backup-if-mismatch"
+                          "-p1" "--input" #+makeicecat-patch)
+                  (patch-shebang "makeicecat")
+                  (substitute* "makeicecat"
+                    (("^readonly FFMAJOR=(.*)" all ffmajor)
+                     (unless (string=? #$major-version
+                                       (string-trim-both ffmajor))
+                       ;; The makeicecat script cannot be expected to work
+                       ;; properly on a different version of Firefox, even if
+                       ;; no errors occur during execution.
+                       (error "makeicecat major version mismatch"))
+                     (string-append "readonly FFMAJOR=" #$major-version "\n"))
+                    (("^readonly FFMINOR=.*")
+                     (string-append "readonly FFMINOR=" #$minor-version "\n"))
+                    (("^readonly FFSUB=.*")
+                     (string-append "readonly FFSUB=" #$sub-version "\n"))
+                    (("^readonly DATADIR=.*")
+                     "readonly DATADIR=/tmp/gnuzilla/data\n")
+                    (("^readonly SOURCEDIR=.*")
+                     (string-append "readonly SOURCEDIR=" icecat-dir "\n"))
+                    (("/bin/sed")
+                     #+(file-append (canonical-package sed) "/bin/sed"))))
+
+                (format #t "Unpacking upstream firefox tarball...~%")
+                (force-output)
+                (invoke "tar" "xf" #+upstream-firefox-source)
+                (rename-file firefox-dir icecat-dir)
+
+                (with-directory-excursion icecat-dir
+                  (format #t "Populating l10n directory...~%")
+                  (force-output)
+                  (mkdir "l10n")
+                  (with-directory-excursion "l10n"
+                    (for-each
+                     (lambda (locale-dir)
+                       (let ((locale
+                              (string-drop (basename locale-dir)
+                                           (+ 32  ; length of hash
+                                              (string-length "-mozilla-locale-")))))
+                         (format #t "  ~a~%" locale)
+                         (force-output)
+                         (copy-recursively locale-dir locale
+                                           #:log (%make-void-port "w"))
+                         (for-each make-file-writable (find-files locale))
+                         (with-directory-excursion locale
+                           (when (file-exists? ".hgtags")
+                             (delete-file ".hgtags"))
+                           (mkdir-p "browser/chrome/browser/preferences")
+                           (call-with-output-file
+                               "browser/chrome/browser/preferences/advanced-scripts.dtd"
+                             (lambda (port) #f)))))
+                     '#+all-mozilla-locales)
+                    (copy-recursively #+mozilla-compare-locales
+                                      "compare-locales"
+                                      #:log (%make-void-port "w"))
+                    (delete-file "compare-locales/.gitignore")
+                    (delete-file "compare-locales/.hgignore")
+                    (delete-file "compare-locales/.hgtags")))
+
+                (format #t "Running makeicecat script...~%")
+                (force-output)
+                (invoke "bash" "/tmp/gnuzilla/makeicecat")
+
+                (format #t "Packing IceCat source tarball...~%")
+                (force-output)
+                (setenv "XZ_DEFAULTS" (string-join (%xz-parallel-args)))
+                (invoke "tar" "cfa" #$output
+                        ;; Avoid non-determinism in the archive.  We set the
+                        ;; mtime of files in the archive to early 1980 because
+                        ;; the build process fails if the mtime of source
+                        ;; files is pre-1980, due to the creation of zip
+                        ;; archives.
+                        "--mtime=@315619200" ; 1980-01-02 UTC
+                        "--owner=root:0"
+                        "--group=root:0"
+                        "--sort=name"
+                        icecat-dir)))))))))
+
+(define %icedove-build-id "20230411000000") ;must be of the form YYYYMMDDhhmmss
+(define %icedove-version "102.10.0")
 
 ;; Provides the "comm" folder which is inserted into the icecat source.
 ;; Avoids the duplication of Icecat's source tarball.
@@ -1147,11 +1318,11 @@ standards of the IceCat project.")
     (method hg-fetch)
     (uri (hg-reference
           (url "https://hg.mozilla.org/releases/comm-esr102")
-          (changeset "db735c436e680abf21cc67f9a29b42fdf30d416d")))
+          (changeset "d8df3bebc4b529388b62b9cb4df152f13910fbe3")))
     (file-name (string-append "thunderbird-" %icedove-version "-checkout"))
     (sha256
      (base32
-      "114vvwlrmjilczwsg9nfcg08560vijlydw1pdrbkvxjbfgsxny71"))))
+      "1m46nxnq4jpp4p6qqw68pphhccxlz4zzbyyb8iq26zvp42x7ic8f"))))
 
 (define (comm-source->locales+changeset source)
   "Given SOURCE, a checkout of the Thunderbird 'comm' component, return the
@@ -1212,7 +1383,7 @@ list of languages supported as well as the currently used changeset."
                ;; Extract the base Icecat tarball, renaming its top-level
                ;; directory.
                (invoke "tar" "--transform" (string-append "s,[^/]*," #$name ",")
-                       "-xf" #$icecat-source)
+                       "-xf" #$icecat-102.9.0-source)
                (chdir #$name)
 
                ;; Merge the Thunderdbird localization data.
@@ -1502,17 +1673,21 @@ ca495991b7852b855"))
                      (pulseaudio #$(this-package-input "pulseaudio"))
                      (pulseaudio-lib (string-append pulseaudio "/lib"))
                      (eudev #$(this-package-input "eudev"))
-                     (eudev-lib (string-append eudev "/lib")))
+                     (eudev-lib (string-append eudev "/lib"))
+                     ;; For the integration of native notifications (same reason as icecat)
+                     (libnotify #$(this-package-input "libnotify"))
+                     (libnotify-lib (string-append libnotify "/lib")))
                 (wrap-program (car (find-files lib "^icedove$"))
                   `("XDG_DATA_DIRS" prefix (,gtk-share))
-                  `("LD_LIBRARY_PATH" prefix (,pulseaudio-lib ,eudev-lib)))))))))
+                  `("LD_LIBRARY_PATH" prefix (,pulseaudio-lib ,eudev-lib ,libnotify-lib)))))))))
     (inputs
      (list alsa-lib
            bzip2
            cairo
            cups
            dbus-glib
-           ffmpeg
+           ;; Support for FFmpeg 6 was only added in version 112 (see:
+           ;; https://bugzilla.mozilla.org/show_bug.cgi?id=1819374).
            freetype
            gdk-pixbuf
            glib
@@ -1525,6 +1700,7 @@ ca495991b7852b855"))
            libffi
            libgnome
            libjpeg-turbo
+           libnotify
            libpng-apng
            libvpx
            libxcomposite
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index c75fdb4a31..24dae34e20 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -244,7 +244,7 @@
     (native-inputs
      (list pkg-config which net-base perl))
 
-    (home-page "https://golang.org/")
+    (home-page "https://go.dev/")
     (synopsis "Compiler and libraries for Go, a statically-typed language")
     (description "Go, also commonly referred to as golang, is an imperative
 programming language designed primarily for systems programming.  Go is a
@@ -631,7 +631,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
   (package
     (inherit go-1.16)
     (name "go")
-    (version "1.17.11")
+    (version "1.17.13")
     (source
      (origin
        (method git-fetch)
@@ -641,7 +641,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "11wy6092qm7v0n10cjkyp49sbchqazi3vnij8k2sq7k7jaj63z5p"))))
+         "05m8gr050kagvn22lfnjrgms03l5iphd1m4v6z7yqlhn9gdp912d"))))
     (outputs '("out" "tests")) ; 'tests' contains distribution tests.
     (arguments
      `(#:modules ((ice-9 match)
@@ -700,7 +700,8 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                (substitute* "src/time/zoneinfo_unix.go"
                  (("/usr/share/zoneinfo/") tzdata-path)))))
          ;; Keep this synchronized with the package inputs.
-         ,@(if (target-arm?)
+         ;; Also keep syncthonized with later versions of go.
+         ,@(if (or (target-arm?) (target-ppc64le?))
              '((add-after 'unpack 'patch-gcc:lib
                  (lambda* (#:key inputs #:allow-other-keys)
                    (let* ((gcclib (string-append (assoc-ref inputs "gcc:lib") "/lib")))
@@ -722,6 +723,13 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                          "ldflags = append(ldflags, \"-r\")\n"
                          "ldflags = append(ldflags, \"" gcclib "\")\n")))))))
              '())
+         ;; Backported from later versions of go to workaround 64k page sizes.
+         ,@(if (target-ppc64le?)
+             '((add-after 'unpack 'adjust-test-suite
+                 (lambda _
+                   (substitute* "misc/cgo/testshared/shared_test.go"
+                     (("100000") "256000")))))
+             '())
          (add-after 'patch-source 'disable-failing-tests
            (lambda _
              ;; Disable failing tests: these tests attempt to access
@@ -833,7 +841,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                   (install-file file (string-append out "/share/doc/go")))
                 '("AUTHORS" "CONTRIBUTORS" "CONTRIBUTING.md" "PATENTS"
                   "README.md" "SECURITY.md"))))))))
-    (inputs (if (not (target-arm?))
+    (inputs (if (not (or (target-arm?) (target-ppc64le?)))
               (alist-delete "gcc:lib" (package-inputs go-1.16))
               (package-inputs go-1.16)))))
 
@@ -851,13 +859,40 @@ in the style of communicating sequential processes (@dfn{CSP}).")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0ph3ajfq5q8j3nd91pfb25pm21aiphc58zf7fwis0h3a6nqbdyq9"))))))
+         "0ph3ajfq5q8j3nd91pfb25pm21aiphc58zf7fwis0h3a6nqbdyq9"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments go-1.17)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (delete 'adjust-test-suite)
+           ,@(if (or (target-arm?) (target-ppc64le?))
+               '((replace 'patch-gcc:lib
+                   (lambda* (#:key inputs #:allow-other-keys)
+                     (let* ((gcclib (string-append (assoc-ref inputs "gcc:lib") "/lib")))
+                       ;; Add libgcc to runpath
+                       (substitute* "src/cmd/link/internal/ld/lib.go"
+                         (("!rpath.set") "true"))
+                       (substitute* "src/cmd/go/internal/work/gccgo.go"
+                         (("cgoldflags := \\[\\]string\\{\\}")
+                          (string-append "cgoldflags := []string{"
+                                         "\"-Wl,-rpath=" gcclib "\""
+                                         "}"))
+                         (("\"-lgcc_s\", ")
+                          (string-append
+                           "\"-Wl,-rpath=" gcclib "\", \"-lgcc_s\", ")))
+                       (substitute* "src/cmd/go/internal/work/gc.go"
+                         (("ldflags, err := setextld\\(ldflags, compiler\\)")
+                          (string-append
+                           "ldflags, err := setextld(ldflags, compiler)\n"
+                           "ldflags = append(ldflags, \"-r\")\n"
+                           "ldflags = append(ldflags, \"" gcclib "\")\n")))))))
+               '())))))))
 
 (define-public go-1.19
   (package
     (inherit go-1.18)
     (name "go")
-    (version "1.19.5")
+    (version "1.19.7")
     (source
      (origin
        (method git-fetch)
@@ -867,11 +902,22 @@ in the style of communicating sequential processes (@dfn{CSP}).")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0ah4l01h8qj0vj9668bdgr5m69fq16dz1fjlj332vhysxc6bkc27"))))
+         "0rrpfhv6vdwqs0jnld0iqsky5wlirir05czf34kvsf2db21nzdi9"))))
     (arguments
      (substitute-keyword-arguments (package-arguments go-1.18)
        ((#:phases phases)
         #~(modify-phases #$phases
+            ;; These are recurring test failures, depending on having a new
+            ;; enough version of gccgo.  gccgo-12.2 fails with go-1.19.7.
+            ;; https://github.com/golang/go/issues/22224
+            ;; https://github.com/golang/go/issues/25324
+            (add-after 'unpack 'skip-TestGoPathShlibGccgo-tests
+              (lambda _
+                (substitute* "misc/cgo/testshared/shared_test.go"
+                  (("TestGoPathShlibGccgo.*" all)
+                   (string-append all "\n        t.Skip(\"golang.org/issue/22224\")\n"))
+                  (("TestTwoGopathShlibsGccgo.*" all)
+                   (string-append all "\n        t.Skip(\"golang.org/issue/22224\")\n")))))
             (replace 'install-doc-files
               (lambda _
                 (for-each (lambda (file)
@@ -884,7 +930,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
   (package
     (inherit go-1.19)
     (name "go")
-    (version "1.20")
+    (version "1.20.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -893,7 +939,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0a7wjzv14kaqg5l7ambv5zj4rj7sgah9yhcg6k6da6ygm6bs4dv3"))))
+                "0ir0x17i9067i48ffskwlmbx1j4kfhch46zl8cwl88y23aw59qa2"))))
     (native-inputs
      ;; Go 1.20 and later requires Go 1.17 as the bootstrap toolchain.
      ;; See 'src/cmd/dist/notgo117.go' in the source code distribution,
@@ -1158,6 +1204,183 @@ form that bypasses network filtering, allowing the application to work on
 networks where it would otherwise be blocked or heavily throttled.")
     (license license:expat)))
 
+(define-public go-github-com-hanwen-go-fuse-v2
+  (let ((commit "915cf5413cdef5370ae3f953f8eb4cd9ac176d5c")
+        (revision "0"))
+    (package
+      (name "go-github-com-hanwen-go-fuse-v2")
+      (version (git-version "2.2.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/hanwen/go-fuse")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1ik0yvs9m40vxccpb0rpxc22fyqmcgyysc7w0yl9kn3jyr6qa1d5"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/hanwen/go-fuse/v2"))
+      (native-inputs (list
+                      go-golang-org-x-sys
+                      go-golang-org-x-sync
+                      go-github-com-kylelemons-godebug))
+      (home-page "https://github.com/hanwen/go-fuse")
+      (synopsis "Go bindings for FUSE filesystems")
+      (description
+       "This is a repository containing Go bindings for writing FUSE file systems.")
+      (license license:bsd-3))))
+
+(define-public go-github-com-aperturerobotics-jacobsa-crypto
+  (let ((commit "b1eb679742a8deed015a4406384eea6bd985d08a")
+        (revision "0"))
+    (package
+      (name "go-github-com-aperturerobotics-jacobsa-crypto")
+      (version (git-version "1.0.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/aperturerobotics/jacobsa-crypto")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "16dxigj8m6q18xqsy72iq287rh4fw0y0b9yqlw0qkclb8379n1z2"))))
+      (build-system go-build-system)
+      (arguments
+       (list #:import-path "github.com/aperturerobotics/jacobsa-crypto"
+             ;; Source-only package.
+             #:tests? #f
+             #:phases
+             #~(modify-phases %standard-phases
+                 ;; Source-only package.
+                 (delete 'build))))
+      (home-page "https://github.com/aperturerobotics/jacobsa-crypto")
+      (synopsis "Cryptography missing from the Go standard library")
+      (description
+       "This repository contains Go packages related to cryptographic standards that are
+not included in the Go standard library.")
+      (license license:asl2.0))))
+
+(define-public go-github-com-jacobsa-oglematchers
+  (let ((commit "141901ea67cd4769c6800aa7bfdfc558fa22bda5")
+        (revision "0"))
+    (package
+      (name "go-github-com-jacobsa-oglematchers")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/jacobsa/oglematchers")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "09ff5x6vbhd9zl1z4yzyk573ifh16rry38q1rx986kbz4hqkmniq"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/jacobsa/oglematchers"
+         ;; break loop with with go-github-com-jacobsa-ogletest
+         #:tests? #f))
+      (home-page "https://github.com/jacobsa/oglematchers")
+      (synopsis "Matchers for Go testing framework")
+      (description
+       "Package oglematchers provides a set of matchers useful in a testing or mocking
+framework.  These matchers are inspired by and mostly compatible with Google
+Test for C++ and Google JS Test.")
+      (license license:asl2.0))))
+
+(define-public go-github-com-jacobsa-oglemock
+  (let ((commit "e94d794d06ffc6de42cb19d0dab3c219efdd6dcf")
+        (revision "0"))
+    (package
+      (name "go-github-com-jacobsa-oglemock")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/jacobsa/oglemock")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "14yxf8ykwdwkcccksl6741xgzcf8qykyi58kp4maxpgscqhdl8rq"))))
+      (build-system go-build-system)
+      (arguments
+       (list
+        #:import-path "github.com/jacobsa/oglemock"
+        ;; break loop with with go-github-com-jacobsa-ogletest
+        #:tests? #f))
+      (native-inputs (list
+                      go-github-com-jacobsa-oglematchers))
+      (home-page "https://github.com/jacobsa/oglemock")
+      (synopsis "Mocking framework for unit tests")
+      (description
+       "Package oglemock provides a mocking framework for unit tests.")
+      (license license:asl2.0))))
+
+(define-public go-github-com-jacobsa-ogletest
+  (let ((commit "80d50a735a1108a2aeb7abc4a988d183f20c5292")
+        (revision "0"))
+    (package
+      (name "go-github-com-jacobsa-ogletest")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/jacobsa/ogletest")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1lbwbxzr75g65q07ry5k4kglxqs3ym7xkvqznzm55rm3qk76v83r"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/jacobsa/ogletest"
+         ;; These tests should be made working
+         #:tests? #f))
+      (native-inputs (list
+                      go-github-com-jacobsa-oglematchers
+                      go-github-com-jacobsa-oglemock
+                      go-github-com-jacobsa-reqtrace
+                      go-golang-org-x-net))
+      (home-page "https://github.com/jacobsa/ogletest")
+      (synopsis "Expressive unit tests")
+      (description
+       "Package ogletest provides a framework for writing expressive unit tests.  It
+integrates with the builtin testing package, so it works with the gotest
+command.  Unlike the testing package which offers only basic capabilities for
+signalling failures, it offers ways to express expectations and get nice failure
+messages automatically.")
+      (license license:asl2.0))))
+
+(define-public go-github-com-jacobsa-reqtrace
+  (let ((commit "245c9e0234cb2ad542483a336324e982f1a22934")
+        (revision "0"))
+    (package
+      (name "go-github-com-jacobsa-reqtrace")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/jacobsa/reqtrace")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0zfyijig10896v42rvxka1n4wn6lijqz40y2281187l7mq8vv5jn"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/jacobsa/reqtrace"))
+      (inputs (list
+               go-golang-org-x-net))
+      (home-page "https://github.com/jacobsa/reqtrace")
+      (synopsis "Simple request tracing framework")
+      (description
+       "Package reqtrace contains a very simple request tracing framework.")
+      (license license:asl2.0))))
+
 (define-public go-github-com-kataras-golog
   (package
     (name "go-github-com-kataras-golog")
@@ -1229,6 +1452,59 @@ terminals.")
 aid data snapshotting.")
     (license license:isc)))
 
+(define-public go-github-com-pkg-xattr
+  (package
+    (name "go-github-com-pkg-xattr")
+    (version "0.4.9")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/pkg/xattr")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0qg4zh0d8m4adaiicsd0cpw0w6g8sk01f4jz7jyxgirh1wfcsqyz"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/pkg/xattr"))
+    (native-inputs (list go-golang-org-x-sys))
+    (home-page "https://github.com/pkg/xattr")
+    (synopsis "Support for extended file system attributes")
+    (description
+     "Package xattr provides support for extended attributes on Linux, Darwin and
+FreeBSD.  Extended attributes are name:value pairs permanently associated with
+files or directories.  They are similar to the environment strings associated with
+a process.  An attribute may be defined or undefined.  If defined, its value may
+be empty or non-empty.  You can find more details here:
+@@url{https://en.wikipedia.org/wiki/Extended_file_attributes,
+https://en.wikipedia.org/wiki/Extended_file_attributes}
+.")
+    (license license:bsd-2)))
+
+(define-public go-github-com-rfjakob-eme
+  (package
+    (name "go-github-com-rfjakob-eme")
+    (version "1.1.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rfjakob/eme")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1yrbhvy0337mf12fp8p4sy8ry8r3w2qfdf8val5hj07p2lri0cqk"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/rfjakob/eme"))
+    (home-page "https://github.com/rfjakob/eme")
+    (synopsis "EME for Go")
+    (description
+     "EME (ECB-Mix-ECB or, clearer, Encrypt-Mix-Encrypt) is a wide-block encryption
+mode developed by Halevi and Rogaway.")
+    (license license:expat)))
+
 (define-public go-github-com-shadowsocks-go-shadowsocks2
   (package
     (name "go-github-com-shadowsocks-go-shadowsocks2")
@@ -3118,11 +3394,11 @@ the official package.")
     (license license:bsd-3)))
 
 (define-public go-golang-org-x-net
-  (let ((commit "ba9fcec4b297b415637633c5a6e8fa592e4a16c3")
-        (revision "4"))
+  (let ((commit "8e0e7d8d38f2b6d21d742845570dde2902d06a1d")
+        (revision "0"))
     (package
       (name "go-golang-org-x-net")
-      (version (git-version "0.0.0" revision commit))
+      (version (git-version "0.5.0" revision commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -3131,15 +3407,17 @@ the official package.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1hbqvy6r0s5h0dpdqw8fynl3cq0acin3iyqki9xvl5r8h33yb9bx"))))
+                  "1fidlcn3vcz42v2lc0rpmqh3bz08bcklj6jvnmz2vvgc481ci5hy"))))
       (build-system go-build-system)
       (arguments
-       `(#:import-path "golang.org/x/net"
-         ; Source-only package
-         #:tests? #f
-         #:phases
-         (modify-phases %standard-phases
-           (delete 'build))))
+       (list
+        #:import-path "golang.org/x/net"
+        ;; Source-only package
+        #:tests? #f
+        #:phases
+        #~(modify-phases %standard-phases
+            ;; Source-only package
+            (delete 'build))))
       (synopsis "Go supplemental networking libraries")
       (description "This package provides supplemental Go networking libraries.")
       (home-page "https://go.googlesource.com/net")
@@ -3218,11 +3496,11 @@ packages.")
       (license license:bsd-3))))
 
 (define-public go-golang-org-x-sys
-  (let ((commit "ed5796bab16455f104b6a384d51b7f9990cb9806")
-        (revision "8"))
+  (let ((commit "b60007cc4e6f966b1c542e343d026d06723e5653")
+        (revision "0"))
     (package
       (name "go-golang-org-x-sys")
-      (version (git-version "0.0.0" revision commit))
+      (version (git-version "0.4.0" revision commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -3231,15 +3509,17 @@ packages.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "081vs5bg91mwg5bdmlcvy2qyrvg766aicj47smcwfk4bbh0nc0qa"))))
+                  "0fr2d6fnpbqx6n89sg9lsinqkdaw49y068kqj2g0cxlhbh69hzii"))))
       (build-system go-build-system)
       (arguments
-       `(#:import-path "golang.org/x/sys"
-         ;; Source-only package
-         #:tests? #f
-         #:phases
-         (modify-phases %standard-phases
-           (delete 'build))))
+       (list
+        #:import-path "golang.org/x/sys"
+        ;; Source-only package
+        #:tests? #f
+        #:phases
+        #~(modify-phases %standard-phases
+            ;; Source-only package
+            (delete 'build))))
       (synopsis "Go support for low-level system interaction")
       (description "This package provides supplemental libraries offering Go
 support for low-level interaction with the operating system.")
@@ -9300,7 +9580,7 @@ configuration languages, but other uses may be possible too.")
 (define-public go-filippo-io-age
   (package
     (name "go-filippo-io-age")
-    (version "1.0.0")
+    (version "1.1.1")
     (source
      (origin
        (method git-fetch)
@@ -9309,7 +9589,7 @@ configuration languages, but other uses may be possible too.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "19fz68n262kvg2ssw4r6nik30zk6g6cy7rdi0fm05czwigqrdz1i"))))
+        (base32 "1k1dv1jkr72qpk5g363mhrg9hnf5c9qgv4l16l13m4yh08jp271d"))))
     (build-system go-build-system)
     (arguments `(#:import-path "filippo.io/age"))
     (inputs
@@ -11304,6 +11584,69 @@ kubernetes-sigs/yaml is a permanent fork of
 @url{https://github.com/ghodss/yaml,ghodss/yaml}.")
     (license (list license:expat license:bsd-3))))
 
+(define-public go-github-com-mitchellh-colorstring
+  (package
+    (name "go-github-com-mitchellh-colorstring")
+    (version "0.0.0-20190213212951-d06e56a500db")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mitchellh/colorstring")
+                    (commit (go-version->git-ref version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1d2mi5ziszfzdgaz8dg4b6sxa63nw1jnsvffacqxky6yz9m623kn"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/mitchellh/colorstring"))
+    (home-page "https://github.com/mitchellh/colorstring")
+    (synopsis "Functions to colorize strings for terminal output")
+    (description
+     "Colorstring provides functions for colorizing strings for terminal output.")
+    (license license:expat)))
+
+(define-public go-github-com-schollz-progressbar-v3
+  (package
+    (name "go-github-com-schollz-progressbar-v3")
+    (version "3.13.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/schollz/progressbar")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1hjahr5r52i7w6iyvl3rpzr46iignhfdh4694fl7m2b4gkaw9gd6"))))
+    (build-system go-build-system)
+    (arguments
+     (list #:import-path "github.com/schollz/progressbar/v3"
+           #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 (lambda* (#:key tests? import-path #:allow-other-keys)
+                   (when tests?
+                     ;; The full test suite requires Internet access, so only
+                     ;; run the short tests.
+                     (invoke "go" "test" "-test.short" import-path)))))))
+    (propagated-inputs
+     (list go-golang-org-x-term
+           go-github-com-stretchr-testify
+           go-github-com-mitchellh-colorstring
+           go-github-com-mattn-go-runewidth
+           go-github-com-mattn-go-isatty
+           go-github-com-davecgh-go-spew))
+    (home-page "https://github.com/schollz/progressbar")
+    (synopsis "Simple command-line interface (CLI) progress bar")
+    (description
+     "This package provides a very simple thread-safe progress bar.  The
+@code{progressbar} implements an @code{io.Writer} so it can automatically
+detect the number of bytes written to a stream, so you can use it as a
+@code{progressbar} for an @code{io.Reader}.  When @code{progressbar}'s length
+is undetermined, a customizable spinner is shown.")
+    (license license:expat)))
+
 (define-public go-git-sr-ht-emersion-go-scfg
   (package
     (name "go-git-sr-ht-emersion-go-scfg")
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index e2ae894801..e650ef55ae 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -474,100 +474,95 @@ typically encountered in feature film production.")
 (define-public blender
   (package
     (name "blender")
-    (version "3.3.1")
+    (version "3.3.5")                   ;3.3.x is the current LTS version
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.blender.org/source/"
                                   "blender-" version ".tar.xz"))
               (sha256
                (base32
-                "1jlc26axbhh97d2j6kfg9brgiq8j412mgmw7p41ah34apzq4inia"))))
+                "1pwl4lbc00g0bj97rd8l9fnrv3w1gny9ci6mrma3pp2acgs56502"))))
     (build-system cmake-build-system)
     (arguments
+     (list
+      ;; Test files are very large and not included in the release tarball.
+      #:tests? #f
+      #:configure-flags
       (let ((python-version (version-major+minor (package-version python))))
-       `(;; Test files are very large and not included in the release tarball.
-         #:tests? #f
-         #:configure-flags
-         (list "-DWITH_CODEC_FFMPEG=ON"
-               "-DWITH_CODEC_SNDFILE=ON"
-               "-DWITH_CYCLES=ON"
-               "-DWITH_DOC_MANPAGE=ON"
-               "-DWITH_FFTW3=ON"
-               "-DWITH_IMAGE_OPENJPEG=ON"
-               "-DWITH_INPUT_NDOF=ON"
-               "-DWITH_INSTALL_PORTABLE=OFF"
-               "-DWITH_JACK=ON"
-               "-DWITH_MOD_OCEANSIM=ON"
-               "-DWITH_OPENVDB=ON"
-               "-DWITH_OPENSUBDIV=ON"
-               "-DWITH_PYTHON_INSTALL=OFF"
-               (string-append "-DPYTHON_LIBRARY=python" ,python-version)
-               (string-append "-DPYTHON_LIBPATH=" (assoc-ref %build-inputs "python")
-                              "/lib")
-               (string-append "-DPYTHON_INCLUDE_DIR=" (assoc-ref %build-inputs "python")
-                              "/include/python" ,python-version)
-               (string-append "-DPYTHON_VERSION=" ,python-version)
-               (string-append "-DPYTHON_NUMPY_INCLUDE_DIRS="
-                              (assoc-ref %build-inputs "python-numpy")
-                              "/lib/python" ,python-version "/site-packages/numpy/core/include/")
-               (string-append "-DPYTHON_NUMPY_PATH="
-                              (assoc-ref %build-inputs "python-numpy")
-                              "/lib/python" ,python-version "/site-packages/"))
-         #:phases
-         (modify-phases %standard-phases
-           ;; XXX This file doesn't exist in the Git sources but will probably
-           ;; exist in the eventual 2.80 source tarball.
-           (add-after 'unpack 'fix-broken-import
-             (lambda _
-               (substitute* "release/scripts/addons/io_scene_fbx/json2fbx.py"
-                 (("import encode_bin") "from . import encode_bin"))
-               #t))
-           (add-after 'set-paths 'add-ilmbase-include-path
-             (lambda* (#:key inputs #:allow-other-keys)
-               ;; OpenEXR propagates ilmbase, but its include files do not
-               ;; appear in the C_INCLUDE_PATH, so we need to add
-               ;; "$ilmbase/include/OpenEXR/" to the C_INCLUDE_PATH to satisfy
-               ;; the dependency on "half.h" and "Iex.h".
-               (let ((headers (string-append
-                               (assoc-ref inputs "ilmbase")
-                               "/include/OpenEXR")))
-                 (setenv "C_INCLUDE_PATH"
-                         (string-append headers ":"
-                                        (or (getenv "C_INCLUDE_PATH") "")))
-                 (setenv "CPLUS_INCLUDE_PATH"
-                         (string-append headers ":"
-                                        (or (getenv "CPLUS_INCLUDE_PATH") ""))))))))))
+        #~(list "-DWITH_CODEC_FFMPEG=ON"
+                "-DWITH_CODEC_SNDFILE=ON"
+                "-DWITH_CYCLES=ON"
+                "-DWITH_DOC_MANPAGE=ON"
+                "-DWITH_FFTW3=ON"
+                "-DWITH_IMAGE_OPENJPEG=ON"
+                "-DWITH_INPUT_NDOF=ON"
+                "-DWITH_INSTALL_PORTABLE=OFF"
+                "-DWITH_JACK=ON"
+                "-DWITH_MOD_OCEANSIM=ON"
+                "-DWITH_OPENVDB=ON"
+                "-DWITH_OPENSUBDIV=ON"
+                "-DWITH_PYTHON_INSTALL=OFF"
+                (string-append "-DPYTHON_LIBRARY=python" #$python-version)
+                (string-append "-DPYTHON_LIBPATH="
+                               (assoc-ref %build-inputs "python")
+                               "/lib")
+                (string-append "-DPYTHON_INCLUDE_DIR="
+                               (assoc-ref %build-inputs "python")
+                               "/include/python" #$python-version)
+                (string-append "-DPYTHON_VERSION=" #$python-version)
+                (string-append "-DPYTHON_NUMPY_INCLUDE_DIRS="
+                               (assoc-ref %build-inputs "python-numpy")
+                               "/lib/python" #$python-version
+                               "/site-packages/numpy/core/include/")
+                (string-append "-DPYTHON_NUMPY_PATH="
+                               (assoc-ref %build-inputs "python-numpy")
+                               "/lib/python" #$python-version
+                               "/site-packages/")
+                ;; OpenEXR propagates ilmbase, but its include files do not
+                ;; appear in the C_INCLUDE_PATH, so we need to add
+                ;; "$ilmbase/include/OpenEXR/" to the C_INCLUDE_PATH to
+                ;; satisfy the dependency on "half.h" and "Iex.h".
+                (string-append "-DCMAKE_CXX_FLAGS=-I"
+                               (search-input-directory %build-inputs
+                                                       "include/OpenEXR"))))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-broken-import
+            (lambda _
+              (substitute* "release/scripts/addons/io_scene_fbx/json2fbx.py"
+                (("import encode_bin")
+                 "from . import encode_bin")))))))
     (inputs
-     `(("boost" ,boost)
-       ("jemalloc" ,jemalloc)
-       ("libx11" ,libx11)
-       ("libxi" ,libxi)
-       ("libxrender" ,libxrender)
-       ("opencolorio" ,opencolorio)
-       ("openimageio" ,openimageio)
-       ("openexr" ,openexr-2)
-       ("opensubdiv" ,opensubdiv)
-       ("ilmbase" ,ilmbase)
-       ("openjpeg" ,openjpeg)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("ffmpeg" ,ffmpeg)
-       ("fftw" ,fftw)
-       ("gmp" ,gmp) ;; needed for boolean operations on meshes
-       ("jack" ,jack-1)
-       ("libsndfile" ,libsndfile)
-       ("freetype" ,freetype)
-       ("glew" ,glew)
-       ("openal" ,openal)
-       ("pugixml" ,pugixml)
-       ("python" ,python)
-       ("python-numpy" ,python-numpy)
-       ("openvdb" ,openvdb)
-       ("tbb" ,tbb)
-       ("zlib" ,zlib)
-       ("zstd" ,zstd "lib")
-       ("embree" ,embree)))
+     (list boost
+           embree
+           ffmpeg-5
+           fftw
+           freetype
+           glew
+           gmp                        ;needed for boolean operations on meshes
+           ilmbase
+           jack-1
+           jemalloc
+           libjpeg-turbo
+           libpng
+           libsndfile
+           libtiff
+           libx11
+           libxi
+           libxrender
+           openal
+           opencolorio
+           openexr-2
+           openimageio
+           openjpeg
+           opensubdiv
+           openvdb
+           pugixml
+           python
+           python-numpy
+           tbb
+           zlib
+           `(,zstd "lib")))
     (home-page "https://blender.org/")
     (synopsis "3D graphics creation suite")
     (description
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index 90335c6bb2..8971c11479 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -44,6 +44,7 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages cdrom)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages compression)
@@ -400,7 +401,7 @@ arrays of data.")
 (define-public gstreamer-docs
   (package
     (name "gstreamer-docs")
-    (version "1.20.3")
+    (version "1.22.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -408,7 +409,7 @@ arrays of data.")
                     "/gstreamer-docs-" version ".tar.xz"))
               (sha256
                (base32
-                "1gziccq5f4fy23q6dm8nwbmzh68gn9rfbqw0xcn4r8yn82545z3k"))))
+                "1fljaydlinzw9jf5nkhwf7ihfzd5250k2cv220mi8dxxf7rgn18y"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -460,7 +461,7 @@ the GStreamer multimedia framework.")
 (define-public gstreamer
   (package
     (name "gstreamer")
-    (version "1.20.3")
+    (version "1.22.2")
     (source
      (origin
        (method url-fetch)
@@ -469,10 +470,11 @@ the GStreamer multimedia framework.")
              version ".tar.xz"))
        (sha256
         (base32
-         "0aisl8nazcfi4b5j6fz8zwpp0k9csb022zniz65b2pxxpdjayzb0"))))
+         "08cfz2vkf494rsg0bn75px26fxs3syvxnsc9lj5n074j0cvfgbxj"))))
     (build-system meson-build-system)
     (arguments
-     (list #:phases
+     (list #:disallowed-references (list python)
+           #:phases
            #~(modify-phases %standard-phases
                #$@%common-gstreamer-phases
                #$@(if (string-prefix? "i686" (or (%current-target-system)
@@ -488,12 +490,22 @@ test_stress_cleanup_unschedule.*")
                               (("tcase_add_test \\(tc_chain, \
 test_stress_reschedule.*")
                                "")))))
-                      '()))))
+                      '())
+               (add-after 'patch-shebangs 'do-not-capture-python
+                 (lambda _
+                   ;; The patch-source-shebangs phase causes the following build
+                   ;; script to reference Python in its shebang, which is
+                   ;; unnecessary.
+                   (substitute* (string-append
+                                 #$output "/libexec/gstreamer-1.0/"
+                                 "gst-plugins-doc-cache-generator")
+                     (((which "python3"))
+                      "/usr/bin/env python3")))))))
     (propagated-inputs
      ;; In gstreamer-1.0.pc:
      ;;   Requires: glib-2.0, gobject-2.0
      ;;   Requires.private: gmodule-no-export-2.0 libunwind libdw
-     (list elfutils ; libdw
+     (list elfutils                     ;libdw
            glib libunwind))
     (native-inputs
      (list bash-completion
@@ -503,7 +515,7 @@ test_stress_reschedule.*")
            gobject-introspection
            perl
            pkg-config
-           python-wrapper))
+           python))
     (inputs
      (list gmp libcap
            ;; For tests.
@@ -530,7 +542,7 @@ This package provides the core library and elements.")
 (define-public gst-plugins-base
   (package
     (name "gst-plugins-base")
-    (version "1.20.3")
+    (version "1.22.2")
     (source
      (origin
       (method url-fetch)
@@ -538,7 +550,7 @@ This package provides the core library and elements.")
                           name "-" version ".tar.xz"))
       (sha256
        (base32
-        "17rw8wj1x1bg153m9z76pdvgz5k93m3riyalfpzq00x7h7fv6c3y"))))
+        "0jcxcx4mgfjvfb3ixibwhx8j330mq3ap469w7hapm6z79q614rgb"))))
     (build-system meson-build-system)
     (propagated-inputs
      (list glib                     ;required by gstreamer-sdp-1.0.pc
@@ -629,7 +641,7 @@ for the GStreamer multimedia library.")
 (define-public gst-plugins-good
   (package
     (name "gst-plugins-good")
-    (version "1.20.3")
+    (version "1.22.2")
     (source
      (origin
        (method url-fetch)
@@ -638,7 +650,7 @@ for the GStreamer multimedia library.")
          "https://gstreamer.freedesktop.org/src/" name "/"
          name "-" version ".tar.xz"))
        (sha256
-        (base32 "1dv8b2md1xk6d45ir1wzbvqhxbvm6mxv881rjl0brnjwpw3c5wzq"))))
+        (base32 "1p8cpkk4dynglw0xswqyf57xl5fnxmb3xld71kv35cpj4nacb33w"))))
     (build-system meson-build-system)
     (arguments
      (list
@@ -656,6 +668,11 @@ for the GStreamer multimedia library.")
                  (string-append prefix "\"" libsoup "\"\n")))))
           (add-after 'unpack 'skip-failing-tests
             (lambda _
+              (substitute* "tests/check/elements/flvmux.c"
+                ;; This test randomly times out (see:
+                ;; https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/786).
+                ((".*tcase_add_test.*test_video_caps_late.*")
+                 ""))
               (substitute* "tests/check/meson.build"
                 ;; Reported as shaky upstream, see
                 ;; <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/785>
@@ -743,14 +760,14 @@ model to base your own plug-in on, here it is.")
 (define-public gst-plugins-bad
   (package
     (name "gst-plugins-bad")
-    (version "1.20.3")
+    (version "1.22.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://gstreamer.freedesktop.org/src/"
                                   name "/" name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0kys6m5hg5bc30wfg8qa3s7dmkdz3kj1j8lhvn3267fxalxw24bs"))
+                "03rd09wsrf9xjianpnnvamb4n3lndhd4x31srqsqab20wcfaz3rx"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -764,16 +781,6 @@ model to base your own plug-in on, here it is.")
       #:phases
       #~(modify-phases %standard-phases
           #$@%common-gstreamer-phases
-          #$@(if (string-prefix? "arm" (or (%current-target-system)
-                                           (%current-system)))
-                 ;; Disable test that fails on ARMv7.
-                 ;; https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/1188
-                 `((add-after 'unpack 'disable-asfmux-test
-                     (lambda _
-                       (substitute* "tests/check/meson.build"
-                         (("\\[\\['elements/asfmux\\.c'\\]\\],")
-                          "")))))
-                 '())
           (add-after 'unpack 'adjust-tests
             (lambda* (#:key native-inputs inputs #:allow-other-keys)
               (let ((gst-plugins-good (assoc-ref (or native-inputs inputs)
@@ -785,18 +792,11 @@ model to base your own plug-in on, here it is.")
                    (string-append "'GST_PLUGIN_SYSTEM_PATH_1_0', '"
                                   gst-plugins-good "/lib/gstreamer-1.0'"))
 
-                  ;; https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1136
-                  ((".*elements/msdkh264enc\\.c.*") "")
-                  ((".*elements/svthevcenc\\.c.*") "")
-
                   ;; The 'elements_shm.test_shm_live' test sometimes times out
                   ;; (see:
                   ;; https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/790).
                   ((".*'elements/shm\\.c'.*") "")
 
-                  ;; FIXME: Why is this failing.
-                  ((".*elements/dash_mpd\\.c.*") "")
-
                   ;; This test is flaky on at least some architectures.
                   ;; https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1244
                   #$@(if (member (%current-system)
@@ -805,9 +805,6 @@ model to base your own plug-in on, here it is.")
                             "'elements/camerabin.c'], true, ],"))
                          '())
 
-                  ;; These tests are flaky and occasionally time out:
-                  ;; https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/932
-                  ((".*elements/curlhttpsrc\\.c.*") "")
                   ;; https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1412
                   ((".*elements/dtls\\.c.*") ""))
                 (substitute* "tests/check/elements/zxing.c"
@@ -946,7 +943,7 @@ par compared to the rest.")
 (define-public gst-plugins-ugly
   (package
     (name "gst-plugins-ugly")
-    (version "1.20.3")
+    (version "1.22.2")
     (source
      (origin
        (method url-fetch)
@@ -954,7 +951,7 @@ par compared to the rest.")
         (string-append "https://gstreamer.freedesktop.org/src/"
                        name "/" name "-" version ".tar.xz"))
        (sha256
-        (base32 "1zdfsq0zm1d3wj3w3z44bf3v28clr8yd6qzmkjs09hq9k9w21alc"))))
+        (base32 "1486x08bwasq6l7kc75nph5az61siq9mbgkgpw4kf1mxn16z8c4g"))))
     (build-system meson-build-system)
     (arguments
      (list #:glib-or-gtk? #t         ; To wrap binaries and/or compile schemas
@@ -1003,7 +1000,7 @@ think twice about shipping them.")
 (define-public gst-libav
   (package
     (name "gst-libav")
-    (version "1.20.3")
+    (version "1.22.2")
     (source
      (origin
        (method url-fetch)
@@ -1012,14 +1009,11 @@ think twice about shipping them.")
          "https://gstreamer.freedesktop.org/src/" name "/"
          name "-" version ".tar.xz"))
        (sha256
-        (base32 "1zkxybdzdkn07wwmj0rrgxyvbry472dggjv2chdsmpzwc02x3v9z"))))
+        (base32 "1zfg7giwampmjxkqr5pqy66vck42b0akmwby661brwz8iy3zkapw"))))
     (build-system meson-build-system)
-    (native-inputs
-     (list perl pkg-config python-wrapper ruby))
-    (inputs
-     (list ffmpeg))
-    (propagated-inputs
-     (list gstreamer gst-plugins-base))
+    (native-inputs (list perl pkg-config python-wrapper ruby))
+    (inputs (list ffmpeg))
+    (propagated-inputs (list gstreamer gst-plugins-base))
     (synopsis "GStreamer plugins and helper libraries")
     (description "Gst-Libav contains a GStreamer plugin for using the encoders,
 decoders, muxers, and demuxers provided by FFmpeg.")
@@ -1029,7 +1023,7 @@ decoders, muxers, and demuxers provided by FFmpeg.")
 (define-public gst-editing-services
   (package
     (name "gst-editing-services")
-    (version "1.20.3")
+    (version "1.22.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1037,7 +1031,7 @@ decoders, muxers, and demuxers provided by FFmpeg.")
                     "gst-editing-services-" version ".tar.xz"))
               (sha256
                (base32
-                "18msiadg6wi1636ylp02yfiwphxlz39gh3vbxchl9qpvd7g9dn2z"))))
+                "1gyfw11ns2la1cm6gvvvv5qj3q5gcvcypc3wk8kdwmrqzij18fs5"))))
     (build-system meson-build-system)
     (arguments
      (list
@@ -1097,7 +1091,7 @@ binary, but none of the actual plugins.")))
 (define-public python-gst
   (package
     (name "python-gst")
-    (version "1.20.3")
+    (version "1.22.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1105,7 +1099,7 @@ binary, but none of the actual plugins.")))
                     "gst-python-" version ".tar.xz"))
               (sha256
                (base32
-                "1p6g05k88nbbv5x9madsvphxcdkfl1z0lmp39p6bhmg9x8h82d6v"))))
+                "1bak46bj92gyz613m99mnl0yw0qhbhq5dfxifnvldgp45kcb7wmy"))))
     (build-system meson-build-system)
     (arguments
      (list
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index 378e1d1e3d..1d547d6ac7 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -2905,3 +2905,38 @@ Unix desktop environment under X11 as well as Wayland.")
     (synopsis "WebP GdkPixbuf loader library")
     (description "Webp-pixbuf-loader is a WebP format loader of GdkPixbuf.")
     (license license:lgpl2.0+)))
+
+(define-public libpanel
+  (package
+    (name "libpanel")
+    (version "1.0.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.gnome.org/GNOME/libpanel")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "10lkysbwg9w0lm1hj7lw4g7y9j8b88kmq07nfgx0r6f319znj12v"))))
+    (build-system meson-build-system)
+    (arguments
+     (list #:configure-flags #~(list "-Ddocs=disabled")  ;fontconfig issue
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'disable-gtk-update-icon-cache
+                          (lambda _
+                            (substitute* "meson.build"
+                              (("gtk_update_icon_cache: true")
+                               "gtk_update_icon_cache: false")))))))
+    (native-inputs (list `(,glib-next "bin")
+                         gobject-introspection
+                         pkg-config
+                         vala))
+    (inputs (list glib-next gtk libadwaita))
+    (home-page "https://gitlab.gnome.org/GNOME/libpanel")
+    (synopsis "Dock and panel library for GTK 4")
+    (description "Libpanel provides a library to create IDE-like applications
+using GTK and @code{libadwaita}.  It has widgets for panels, docks, columns
+and grids of pages.  Primarily, its design and implementation focus around the
+GNOME Builder and Drafting projects.")
+    (license license:lgpl3)))
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 315c9a7554..fd8fb25da1 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -310,6 +310,43 @@ more.")
 currently does not do much, but it might in the future.")
     (license license:gpl3+)))
 
+(define-public guile-openai
+  (let ((commit "252f2d5660bb546015d18c60be96d3cf60c4dcfa")
+        (revision "1"))
+    (package
+      (name "guile-openai")
+      (version (git-version "0.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://gitlab.com/flatwhatson/guile-openai")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1qv0kr30d1x7ap1b0h03gl5pzp20xw4qd6b3l5v4iz4ka8qna9gi"))))
+      (build-system guile-build-system)
+      (arguments
+       (list
+        #:scheme-file-regexp
+        #~(lambda (file info)
+            (let ((name (basename file)))
+              (and (string-suffix? ".scm" name)
+                   (not (string=? (basename file) "guix.scm")))))))
+      (inputs (list guile-3.0-latest))
+      (propagated-inputs
+       (list guile-colorized
+             guile-gnutls
+             guile-json-4
+             guile-picture-language))
+      (home-page "https://gitlab.com/flatwhatson/guile-openai")
+      (synopsis "Guile implementation of the OpenAI API")
+      (description
+       "Guile OpenAI is an implementation of the OpenAI API in Guile Scheme,
+providing a convenient interface for interactive programming with their AI
+models.")
+      (license license:agpl3+))))
+
 ;; There are no releases yet of this package.
 (define-public guile-pipe
   (let ((commit "0746ec38d19d844dff0c6f62f209b2b6c8d8872e")
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 517cc0d13e..e3367ece14 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -300,8 +300,6 @@ without requiring the source code to be rewritten.")
             (variable "GUILE_LOAD_COMPILED_PATH")
             (files '("lib/guile/2.2/site-ccache")))))))
 
-(define-deprecated guile-2.2/bug-fix guile-2.2)
-
 (define-public guile-2.2.4
   (package
     (inherit guile-2.2)
@@ -645,12 +643,6 @@ specification.  These are the main features:
     ;; Version 1.2.0 switched to GPLv3+ (from LGPLv3+).
     (license license:gpl3+)))
 
-;; Deprecate the 'guile-json' alias to force the use 'guile-json-1' or
-;; 'guile-json-3'.  In the future, we may reuse 'guile-json' as an alias for
-;; 'guile-json-3'.
-(define-deprecated guile-json guile-json-1)
-(export guile-json)
-
 (define-public guile2.0-json
   (package-for-guile-2.0 guile-json-1))
 
diff --git a/gnu/packages/hardware.scm b/gnu/packages/hardware.scm
index c00a6e2d91..299d7b96a1 100644
--- a/gnu/packages/hardware.scm
+++ b/gnu/packages/hardware.scm
@@ -15,6 +15,7 @@
 ;;; Copyright © 2022 Marcel Kupiec <formbi@protonmail.com>
 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2023 Spencer Skylar Chan <schan12@umd.edu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -482,31 +483,15 @@ RGB animations.")
 (define-public ddcutil
   (package
     (name "ddcutil")
-    (version "1.3.2")
+    (version "1.4.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.ddcutil.com/tarballs/"
                            "ddcutil-" version ".tar.gz"))
        (sha256
-        (base32 "0hm0cm4m4hk1jjy7kddg613mynvwlii3kp8al0j9v3c6mcx3p4mx"))))
+        (base32 "14svdjpw9xn1czl4vff4jg2i9bp83lxcbzxj7hxn63z3gzacaj4k"))))
     (build-system gnu-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'install 'install-udev-rules
-            (lambda* (#:key outputs #:allow-other-keys)
-              ;; Move the udev rules to their expected location in Guix
-              ;; System, so they can be more easily used.
-              (let ((rules.d (string-append #$output "/lib/udev/rules.d")))
-                (mkdir-p (dirname rules.d))
-                (rename-file (string-append #$output "/share/ddcutil/data")
-                             rules.d)
-                ;; Patch a reference to the ddcutil command.
-                (substitute* (string-append rules.d "/45-ddcutil-usb.rules")
-                  (("/usr/bin/ddcutil")
-                   (search-input-file outputs "bin/ddcutil")))))))))
     (native-inputs
      (list pkg-config))
     (inputs
diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm
index 84e284d142..df07d95a27 100644
--- a/gnu/packages/haskell-apps.scm
+++ b/gnu/packages/haskell-apps.scm
@@ -294,13 +294,13 @@ to @code{cabal repl}).")
 (define-public git-annex
   (package
     (name "git-annex")
-    (version "10.20230227")
+    (version "10.20230321")
     (source
      (origin
        (method url-fetch)
        (uri (hackage-uri "git-annex" version))
        (sha256
-        (base32 "03cnx63gcrza9sshk9fvwq8c2p7cb7hj8h81g5dc1x56syigdpgi"))))
+        (base32 "1lbv0jzfr6knjcqd2ik4k2dw7brsnjmn33qwijpgivnsbf1q0ibz"))))
     (build-system haskell-build-system)
     (properties '((upstream-name . "git-annex")))
     (arguments
diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index eaebb32744..a411bfc40a 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -8315,6 +8315,9 @@ provided for those who need a drop-in replacement for Markdown.pl.")
     (name "pandoc")
     (arguments
      (list
+       ;; Create entirely self-contained binary by embedding the data files
+       ;; in the binary itself. Required for python-pypandoc.
+       #:configure-flags #~(list "-fembed_data_files")
        #:phases
        #~(modify-phases %standard-phases
            (add-after 'register 'remove-libraries
diff --git a/gnu/packages/high-availability.scm b/gnu/packages/high-availability.scm
index 108ea553ef..35bb28786b 100644
--- a/gnu/packages/high-availability.scm
+++ b/gnu/packages/high-availability.scm
@@ -1,4 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2020, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2022 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -34,8 +36,10 @@
   #:use-module (gnu packages glib)
   #:use-module (gnu packages hardware)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages lua)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages nss)
+  #:use-module (gnu packages pcre)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages rsync)
@@ -45,13 +49,60 @@
   #:use-module (gnu packages xml)
   #:use-module (gnu packages)
   #:use-module (guix build-system gnu)
-  #:use-module (guix gexp)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module ((guix licenses)
                 #:prefix license:))
 
+(define-public haproxy
+  (package
+    (name "haproxy")
+    (version "2.7.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.haproxy.org/download/"
+                           (version-major+minor version)
+                           "/src/haproxy-" version ".tar.gz"))
+       (sha256
+        (base32 "0kxpvrn6iaxhw2f2hrxblns6pnxmrds3vvs9h6nwbkrzvdykagqk"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list
+      #:tests? #f  ; there are only regression tests, using varnishtest
+      #:make-flags
+      #~(list "LUA_LIB_NAME=lua"
+              "TARGET=linux-glibc"
+              "USE_LUA=1"
+              "USE_OPENSSL=1"
+              "USE_PCRE2=1"
+              "USE_PCRE2_JIT=1"
+              "USE_PROMEX=1"
+              "USE_ZLIB=1"
+              (string-append "CC=" #$(cc-for-target))
+              (string-append "DOCDIR=" #$output "/share/" #$name)
+              (string-append "LUA_INC=" #$(this-package-input "lua") "/include")
+              (string-append "LUA_LIB=" #$(this-package-input "lua") "/lib")
+              (string-append "PREFIX=" #$output))
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'configure))))
+    (inputs
+     (list lua openssl pcre2 zlib))
+    (home-page "https://www.haproxy.org/")
+    (synopsis "Reliable, high performance TCP/HTTP load balancer")
+    (description "HAProxy offers @acronym{HA, high availability}, load
+balancing, and proxying for TCP and HTTP-based applications.  It is particularly
+suited to Web sites crawling under very high loads while needing persistence or
+Layer 7 processing.  Supporting tens of thousands of connections is clearly
+realistic with today's hardware.")
+    (license (list license:gpl2+
+                   license:lgpl2.1
+                   license:lgpl2.1+))))
+
 (define-public libqb
   (package
     (name "libqb")
diff --git a/gnu/packages/ibus.scm b/gnu/packages/ibus.scm
index de15587cb0..b815ffd602 100644
--- a/gnu/packages/ibus.scm
+++ b/gnu/packages/ibus.scm
@@ -10,7 +10,7 @@
 ;;; 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>
+;;; Copyright © 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2023 Luis Felipe López Acevedo <luis.felipe.la@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -91,7 +91,7 @@
     (outputs '("out" "doc"))
     (arguments
      (list
-      #:configure-flags #~(list "--enable-python-library"
+      #:configure-flags #~(list "--disable-gtk2"
                                 "--enable-gtk-doc"
                                 "--enable-memconf"
                                 (string-append
@@ -186,10 +186,8 @@
                (string-append #$output:doc "/share/gtk-doc"))))
           (add-after 'wrap-program 'wrap-with-additional-paths
             (lambda* (#:key outputs #:allow-other-keys)
-              ;; Make sure 'ibus-setup' runs with the correct PYTHONPATH and
-              ;; GI_TYPELIB_PATH.
+              ;; Make sure 'ibus-setup' runs with the correct GI_TYPELIB_PATH.
               (wrap-program (search-input-file outputs "bin/ibus-setup")
-                `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
                 `("GI_TYPELIB_PATH" ":" prefix
                   (,(getenv "GI_TYPELIB_PATH")
                    ,(string-append #$output "/lib/girepository-1.0")))))))))
@@ -198,7 +196,6 @@
            dbus
            dconf
            glib
-           gtk+-2
            gtk+
            iso-codes
            json-glib
@@ -206,9 +203,6 @@
            libx11
            libxkbcommon
            libxtst
-           python-pygobject
-           python
-           python-dbus
            setxkbmap
            ucd
            unicode-cldr-common
@@ -244,11 +238,29 @@ may also simplify input method development.")
 
 (define-public ibus
   (package/inherit ibus-minimal
-    (arguments (substitute-keyword-arguments (package-arguments ibus-minimal)
-                 ((#:configure-flags flags)
-                  #~(cons* "--enable-gtk4" #$flags))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments ibus-minimal)
+       ((#:configure-flags flags)
+        #~(cons* "--enable-gtk4"
+                 "--enable-python-library"
+                 #$flags))
+       ((#:phases phases '%standard-phases)
+        #~(modify-phases #$phases
+            (replace 'wrap-with-additional-paths
+              (lambda* (#:key outputs #:allow-other-keys)
+                ;; Make sure 'ibus-setup' runs with the correct
+                ;; GUIX_PYTHONPATH and GI_TYPELIB_PATH.
+                (wrap-program (search-input-file outputs "bin/ibus-setup")
+                  `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
+                  `("GI_TYPELIB_PATH" ":" prefix
+                    (,(getenv "GI_TYPELIB_PATH")
+                     ,(string-append #$output "/lib/girepository-1.0"))))))))))
     (inputs (modify-inputs (package-inputs ibus-minimal)
-              (prepend gtk pango)))
+              (prepend gtk
+                       pango
+                       python
+                       python-dbus
+                       python-pygobject)))
     (properties (alist-delete 'hidden? (package-properties ibus-minimal)))))
 
 (define-public ibus-libpinyin
diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm
index 85484bb03c..42bd34bd63 100644
--- a/gnu/packages/image-processing.scm
+++ b/gnu/packages/image-processing.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2017, 2019, 2022 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2014, 2021-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2021-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -352,36 +352,59 @@ many popular formats.")
     (properties `((release-monitoring-url . "https://vtk.org/download/")))
     (build-system cmake-build-system)
     (arguments
-     '(#:build-type "Release"           ;Build without '-g' to save space.
-       #:configure-flags '(;"-DBUILD_TESTING:BOOL=TRUE"
-                           ;    ; not honored
-                           "-DVTK_USE_EXTERNAL=OFF" ;; default
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_doubleconversion=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_eigen=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_expat=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_freetype=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_gl2ps=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_glew=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_hdf5=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_jpeg=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_jsoncpp=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_libharu=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_libproj=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_libxml2=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_lz4=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_netcdf=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_ogg=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_png=ON"
-                           ;"-DVTK_MODULE_USE_EXTERNAL_VTK_pugixml=ON"    ; breaks IO/CityGML
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_sqlite=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_theora=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_tiff=ON"
-                           "-DVTK_MODULE_USE_EXTERNAL_VTK_zlib=ON"
-                           "-DVTK_MODULE_ENABLE_VTK_RenderingExternal=YES" ; For F3D
-                           "-DVTK_WRAP_PYTHON=ON"
-                           "-DVTK_PYTHON_VERSION:STRING=3"
-                           )
-       #:tests? #f))        ;XXX: test data not included
+     (list #:build-type "Release"           ;Build without '-g' to save space.
+           #:configure-flags
+           #~'( ;;"-DBUILD_TESTING:BOOL=TRUE"  ;not honored
+               "-DVTK_USE_EXTERNAL=OFF"           ;default
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_doubleconversion=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_eigen=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_expat=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_freetype=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_gl2ps=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_glew=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_hdf5=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_jpeg=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_jsoncpp=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_libharu=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_libproj=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_libxml2=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_lz4=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_netcdf=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_ogg=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_png=ON"
+               ;;"-DVTK_MODULE_USE_EXTERNAL_VTK_pugixml=ON" ;breaks IO/CityGML
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_sqlite=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_theora=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_tiff=ON"
+               "-DVTK_MODULE_USE_EXTERNAL_VTK_zlib=ON"
+               "-DVTK_MODULE_ENABLE_VTK_RenderingExternal=YES" ;for F3D
+               "-DVTK_WRAP_PYTHON=ON"
+               "-DVTK_PYTHON_VERSION:STRING=3"
+
+               "-DVTK_SMP_ENABLE_OPENNMP=ON"
+               "-DVTK_SMP_ENABLE_TBB=ON"
+               "-DVTK_USE_MPI=ON"
+               )
+
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'clear-reference-to-compiler
+                 (lambda _
+                   (define (choose . files)
+                     (let loop ((files files))
+                       (if (null? files)
+                           #f
+                           (if (file-exists? (car files))
+                               (car files)
+                               (loop (cdr files))))))
+
+                   ;; Do not retain a reference to GCC.
+                   (substitute* (choose
+                                 "Common/Core/vtkConfigureDeprecated.h.in" ;v9.x
+                                 "Common/Core/vtkConfigure.h.in") ;v7.x
+                     (("@CMAKE_CXX_COMPILER@") "c++")))))
+
+           #:tests? #f))                          ;XXX: test data not included
     (inputs
      (list double-conversion
            eigen
@@ -402,17 +425,20 @@ many popular formats.")
            mesa
            netcdf
            libpng
+           libtiff
+           openmpi
            proj
            python
            ;("pugixml" ,pugixml)
            sqlite
-           libtiff
            xorgproto
            zlib))
     (propagated-inputs
      ;; VTK's 'VTK-vtk-module-find-packages.cmake' calls
-     ;; 'find_package(THEORA)', which in turns looks for libogg.
-     (list libogg))
+     ;; 'find_package(THEORA)', which in turns looks for libogg.  Likewise for
+     ;; TBB.
+     (list libogg
+           tbb))
     (home-page "https://vtk.org/")
     (synopsis "Libraries for 3D computer graphics")
     (description
@@ -446,7 +472,7 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
        ((#:configure-flags flags)
         ;; Otherwise, the build would fail with: "error: invalid conversion
         ;; from ‘const char*’ to ‘char*’ [-fpermissive]".
-        `(cons "-DCMAKE_CXX_FLAGS=-fpermissive" ,flags))
+        #~(cons "-DCMAKE_CXX_FLAGS=-fpermissive" #$flags))
        ((#:phases phases)
         #~(modify-phases #$phases
             (add-after 'unpack 'remove-kernel-version
@@ -460,21 +486,18 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
 (define-public opencv
   (package
     (name "opencv")
-    (version "4.5.4")
+    (version "4.7.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                     (url "https://github.com/opencv/opencv")
-                     (commit version)))
+                    (url "https://github.com/opencv/opencv")
+                    (commit version)))
               (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0gf2xs3r4s51m20mpf0wdidpk0xzp3m2w6jx72fwldhn0pshlmcj"))
               (modules '((guix build utils)))
               (snippet
                '(begin
-                  ;; Remove external libraries. We have almost all available
-                  ;; in Guix:
+                  ;; Remove external libraries.  Almost all of them are
+                  ;; available in Guix.
                   (with-directory-excursion "3rdparty"
                     (for-each delete-file-recursively
                               '("carotene"
@@ -498,20 +521,18 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
                                 "tbb"
                                 "zlib")))
 
-                  ;; Milky icon set is non-free:
-                  (delete-file-recursively "modules/highgui/src/files_Qt/Milky")
-
-                  ;; Some jars found:
-                  (for-each delete-file
-                            '("modules/java/test/pure_test/lib/junit-4.11.jar"
-                              "samples/java/sbt/sbt/sbt-launch.jar"))))))
+                  ;; Delete any bundled .jar files.
+                  (for-each delete-file (find-files "." "\\.jar$"))))
+              (sha256
+               (base32
+                "0l45v41nns2jmn9nr9fb0yvhqzfjpxjxn75i1c02rsfy3r3lv22v"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
-       (list "-DWITH_ADE=OFF" ;we don't have a package for ade yet
+       (list "-DWITH_ADE=OFF"           ;we don't have a package for ade yet
              "-DWITH_IPP=OFF"
              "-DWITH_ITT=OFF"
-             "-DWITH_CAROTENE=OFF" ; only visible on arm/aarch64
+             "-DWITH_CAROTENE=OFF"      ; only visible on arm/aarch64
              "-DENABLE_PRECOMPILED_HEADERS=OFF"
              "-DOPENCV_GENERATE_PKGCONFIG=ON"
 
@@ -569,22 +590,20 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
              ;; This test fails with "unknown file: Failure"
              ;; But I couldn't figure out which file was missing:
              (substitute* "../opencv-contrib/modules/face/test/test_face_align.cpp"
-               (("(TEST\\(CV_Face_FacemarkKazemi, )(can_detect_landmarks\\).*)"
-                 all pre post)
-                (string-append pre "DISABLED_" post)))
+               (("\\bcan_detect_landmarks\\b" all)
+                (string-append "DISABLED_" all)))
 
-             ;; This test fails with a comparison between the expected 396 and
+             ;; This all fails with a comparison between the expected 396 and
              ;; the actual 440 in file size.
              (substitute* "modules/imgcodecs/test/test_exr.impl.hpp"
-               (("(TEST\\(Imgcodecs_EXR, )(readWrite_32FC1\\).*)" all pre post)
-                (string-append pre "DISABLED_" post)))
+               (("\\breadWrite_32FC1\\b" all)
+                (string-append "DISABLED_" all)))
 
              ;; These fail with protobuf parse errors that come from
-             ;; opencv-extra/testdata.
+             ;; opencv-extra/alldata.
              (substitute* "modules/dnn/test/test_layers.cpp"
-               (("(TEST_P\\(Test_Caffe_layers, )\
-(Accum\\).*|DataAugmentation\\).*|Resample\\).*|Correlation\\).*)" all pre post)
-                (string-append pre "DISABLED_" post)))))
+               (("\\b(Accum|DataAugmentation|Resample|Correlation|Interp)\\b" all)
+                (string-append "DISABLED_" all)))))
          (add-after 'unpack 'unpack-submodule-sources
            (lambda* (#:key inputs #:allow-other-keys)
              (mkdir "../opencv-extra")
@@ -596,7 +615,8 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
          (add-after 'build 'do-not-install-3rdparty-file
            (lambda _
              (substitute* "cmake_install.cmake"
-               (("file\\(INSTALL .*source/3rdparty/include/opencl/LICENSE.txt.*") "\n"))))
+               (("file\\(INSTALL .*3rdparty/include/opencl/LICENSE.txt.*")
+                ""))))
          (add-before 'check 'start-xserver
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((xorg-server (assoc-ref inputs "xorg-server"))
@@ -608,7 +628,7 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
                (zero? (system (format #f "~a/bin/Xvfb ~a &" xorg-server disp)))))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
-       ("xorg-server" ,xorg-server-for-tests) ; For running the tests
+       ("xorg-server" ,xorg-server-for-tests) ;For running the tests
        ("opencv-extra"
         ,(origin
            (method git-fetch)
@@ -617,23 +637,24 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
                  (commit version)))
            (file-name (git-file-name "opencv_extra" version))
            (sha256
-            (base32 "1fg2hxdvphdvagc2fkmhqk7qql9mp7pj2bmp8kmd7vicpr72qk82"))))
+            (base32
+             "0bdg5kwwdimnl2zp4ry5cmfxr9xb7zk2ml59853d90llsqjis47a"))))
        ("opencv-contrib"
         ,(origin
            (method git-fetch)
-           (uri (git-reference
-                 (url "https://github.com/opencv/opencv_contrib")
-                 (commit version)))
+           (uri (git-reference (url "https://github.com/opencv/opencv_contrib")
+                               (commit version)))
            (file-name (git-file-name "opencv_contrib" version))
            (sha256
-            (base32 "0ga0l4ranp1834gxgp487ll1amvmssa02l2nk5ja5w0rx4d8hh26"))))))
+            (base32
+             "0hbfn835kxh3hwmwvzgdglm2np1ri3z7nfnf60gf4x6ikp89mv4r"))))))
     (inputs
      (list ffmpeg-4
            gtk+
            gtkglext
            hdf5
            ilmbase
-           imath ;should be propagated by openexr
+           imath                        ;should be propagated by openexr
            jasper
            libgphoto2
            libjpeg-turbo
@@ -669,7 +690,10 @@ things like:
 @item structure from motion
 @item augmented reality
 @item machine learning
-@end itemize\n")
+@end itemize\n
+
+This package includes the Python bindings for OpenCV, which are also known as
+the OpenCV-Python library.")
     (home-page "https://opencv.org/")
     (license license:bsd-3)))
 
diff --git a/gnu/packages/image-viewers.scm b/gnu/packages/image-viewers.scm
index 0758cf5b27..d0b7e93a84 100644
--- a/gnu/packages/image-viewers.scm
+++ b/gnu/packages/image-viewers.scm
@@ -24,7 +24,7 @@
 ;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 dissent <disseminatedissent@protonmail.com>
 ;;; Copyright © 2022 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2022 Tomasz Jeneralczyk <tj@schwi.pl>
 ;;; Copyright © 2022 Cairn <cairn@pm.me>
 ;;;
@@ -67,6 +67,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages djvu)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gawk)
@@ -101,6 +102,7 @@
   #:use-module (gnu packages upnp)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages video)
+  #:use-module (gnu packages vim)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
@@ -144,7 +146,7 @@
                         '("bash" "catimg" "chafa" "coreutils" "curl"
                           "dmenu" "fzf" "gawk" "grep" "jp2a" "jq"
                           "libnotify" "mpv" "ncurses" "python-ueberzug"
-                          "sed" "util-linux" "youtube-dl")))
+                          "sed" "util-linux" "yt-dlp")))
                 `("YTFZF_SYSTEM_ADDON_DIR" ":" =
                   ,(list (string-append #$output "/share/ytfzf/addons")))))))))
     (inputs
@@ -166,7 +168,7 @@
            python-ueberzug
            sed
            util-linux
-           youtube-dl))
+           yt-dlp))
     (synopsis "Watch PeerTube or YouTube videos from the terminal")
     (description "@code{ytfzf} is a POSIX script that helps you find PeerTube or
 YouTube videos without requiring API and opens/downloads them using mpv/ytdl.")
@@ -231,7 +233,7 @@ actions.")
 (define-public geeqie
   (package
     (name "geeqie")
-    (version "1.6")
+    (version "2.0.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -239,43 +241,31 @@ actions.")
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "1i9yd8lddp6b9s9vjjjzbpqj4bvwidxc6kiba6vdrk7dda5akyky"))
-              (file-name (git-file-name name version))
-              (patches (search-patches "geeqie-clutter.patch"))))
-    (build-system gnu-build-system)
-    (arguments
-     ;; Enable support for a "map" pane using GPS data.
-     `(#:configure-flags '("CFLAGS=-O2 -g -fcommon"
-                           "--enable-map"
-                           "--enable-gtk3")
-       #:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'correctly-locate-aux-scripts
-                    ;; The git checkout has symlinks under the auxdir
-                    ;; directory pointing to /usr/share/automake-1.16/depcomp
-                    ;; and /usr/share/automake-1.16/install-sh, which causes
-                    ;; the configure phase to fail (see:
-                    ;; https://github.com/BestImageViewer/geeqie/issues/936).
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((automake (assoc-ref inputs "automake")))
-                        (delete-file "auxdir/depcomp")
-                        (symlink (car (find-files automake "depcomp"))
-                                 "auxdir/depcomp")
-                        (delete-file "auxdir/install-sh")
-                        (symlink (car (find-files automake "install-sh"))
-                                 "auxdir/install-sh")))))))
+                "199s0f3khnycr5vhk2ww3xnnasz7dzwxdl89pxjadq6rpgprfqyh"))
+              (file-name (git-file-name name version))))
+    (build-system meson-build-system)
     (inputs
-     (list clutter
-           libchamplain
-           lcms
+     (list djvulibre
            exiv2
+           ffmpegthumbnailer
+           gtk+
+           gspell
+           lcms
+           libarchive
+           libchamplain
+           libheif
+           libjpeg-turbo
            libpng
-           gtk+))
+           libraw
+           libtiff
+           poppler
+           libwebp))
     (native-inputs
-     (list autoconf
-           automake
-           `(,glib "bin") ; glib-gettextize
+     (list `(,glib "bin") ; glib-gettextize
            intltool
-           pkg-config))
+           pkg-config
+           xxd
+           yelp-tools))
     (home-page "https://www.geeqie.org/")
     (synopsis "Lightweight GTK+ based image viewer")
     (description
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 949dbfe902..754c99a823 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -35,6 +35,7 @@
 ;;; Copyright © 2022 Jai Vetrivelan <jaivetrivelan@gmail.com>
 ;;; Copyright © 2022 ( <paren@disroot.org>
 ;;; Copyright © 2022-2023 Bruno Victal <mirai@makinata.eu>
+;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -458,7 +459,7 @@ lossless JPEG manipulations such as rotation, scaling or cropping:
            (lambda _
              ;; The Makefile uses optimization level 1, so the same
              ;; level is used here for consistency.
-             (invoke "gcc" "-shared" "-fPIC" "-O"
+             (invoke ,(cc-for-target) "-shared" "-fPIC" "-O"
                      ;; Common files.
                      "adapthuff.o" "image.o" "strcodec.o" "strPredQuant.o"
                      "strTransform.o" "perfTimerANSI.o"
@@ -469,7 +470,7 @@ lossless JPEG manipulations such as rotation, scaling or cropping:
                      "encode.o" "segenc.o" "strenc.o" "strFwdTransform.o"
                      "strPredQuantEnc.o"
                      "-o" "libjpegxr.so")
-             (invoke "gcc" "-shared" "-fPIC" "-O"
+             (invoke ,(cc-for-target) "-shared" "-fPIC" "-O"
                      ;; Glue files.
                      "JXRGlue.o" "JXRMeta.o" "JXRGluePFC.o" "JXRGlueJxr.o"
                      ;; Test files.
@@ -1290,7 +1291,7 @@ language bindings to VIGRA.")
 (define-public libwebp
   (package
     (name "libwebp")
-    (version "1.2.2")
+    (version "1.2.4")
     (source
      (origin
        ;; No tarballs are provided for >0.6.1.
@@ -1301,7 +1302,7 @@ language bindings to VIGRA.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1khqkm5j9aiii9jfsbxzzyz3x33sifzcx537cyjyb3a2g2rl969k"))))
+         "1jndbc99dd19a6d7h4ds51xyak7gfddkbi41nxdm8n23w7ks35r8"))))
     (build-system gnu-build-system)
     (inputs
      (list freeglut
@@ -1726,9 +1727,6 @@ and decompress to 32-bit and big-endian pixel buffers (RGBX, XBGR, etc.).")
                    license:ijg          ;the libjpeg library and associated tools
                    license:zlib))))     ;the libjpeg-turbo SIMD extensions
 
-(define-deprecated libjpeg libjpeg-turbo)
-(export libjpeg)
-
 (define-public niftilib
   (package
     (name "niftilib")
@@ -2199,7 +2197,8 @@ This package can be used to create @code{favicon.ico} files for web sites.")
                  (string-append #$gdk-pixbuf "/bin/gdk-pixbuf-thumbnailer")))))
           (add-after 'install 'install-readme
             (lambda _
-              (let ((doc (string-append #$output "/share/doc/libavif-" #$version)))
+              (let ((doc (string-append #$output "/share/doc/libavif-"
+                                        #$(package-version this-package))))
                 (install-file "../source/README.md" doc))))
           (add-after 'install 'split
             (lambda _
diff --git a/gnu/packages/jami.scm b/gnu/packages/jami.scm
index acf57c2772..db120f223e 100644
--- a/gnu/packages/jami.scm
+++ b/gnu/packages/jami.scm
@@ -68,7 +68,7 @@
   #:use-module (guix packages)
   #:use-module (guix utils))
 
-(define %jami-version "20230206.0")
+(define %jami-version "20230323.0")
 
 (define %jami-sources
   ;; Return an origin object of the tarball release sources archive of the
@@ -85,7 +85,7 @@
      '(delete-file-recursively "daemon/contrib/tarballs"))
     (sha256
      (base32
-      "1fx7c6q8j0x3q8cgzzd4kpsw3npqggsi1n493cv1jg7v5d01d3jz"))
+      "0vjsjr37cb87j9hqbmipyxn4877k1wn3l0vzca3l3ldgknglz7v2"))
     (patches (search-patches "jami-disable-integration-tests.patch"
                              "jami-libjami-headers-search.patch"))))
 
@@ -107,8 +107,8 @@
                   patches))))
 
 (define-public pjproject-jami
-  (let ((commit "20e00fcdd16459444bae2bae9c0611b63cf87297")
-        (revision "2"))
+  (let ((commit "e4b83585a0bdf1523e808a4fc1946ec82ac733d0")
+        (revision "3"))
     (package
       (inherit pjproject)
       (name "pjproject-jami")
@@ -127,7 +127,7 @@
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1g8nkb5ln5y208k2hhmlcddv2dzf6plfrsvi4x8sa7iwgb4prgb8"))))
+                  "0gky5idyyqxhqk959lzys5l7x1i925db773lfdpvxxmkmfizdq21"))))
       (arguments
        (substitute-keyword-arguments (package-arguments pjproject)
          ((#:phases phases '%standard-phases)
@@ -179,6 +179,7 @@
     "--enable-muxer=h264"
     "--enable-muxer=hevc"
     "--enable-muxer=matroska"
+    "--enable-muxer=wav"
     "--enable-muxer=webm"
     "--enable-muxer=ogg"
     "--enable-muxer=pcm_s16be"
@@ -257,40 +258,30 @@
     "--enable-encoder=libopus"
     "--enable-decoder=libopus"
 
-    ;; Decoders for ringtones and audio streaming.
+    ;; Encoders/decoders for ringtones and audio streaming.
     "--enable-decoder=flac"
     "--enable-decoder=vorbis"
     "--enable-decoder=aac"
     "--enable-decoder=ac3"
     "--enable-decoder=eac3"
     "--enable-decoder=mp3"
-    "--enable-decoder=pcm_u24be"
     "--enable-decoder=pcm_u24le"
-    "--enable-decoder=pcm_u32be"
     "--enable-decoder=pcm_u32le"
     "--enable-decoder=pcm_u8"
     "--enable-decoder=pcm_f16le"
-    "--enable-decoder=pcm_f24le"
-    "--enable-decoder=pcm_f32be"
     "--enable-decoder=pcm_f32le"
-    "--enable-decoder=pcm_f64be"
     "--enable-decoder=pcm_f64le"
-    "--enable-decoder=pcm_s16be"
-    "--enable-decoder=pcm_s16be_planar"
     "--enable-decoder=pcm_s16le"
-    "--enable-decoder=pcm_s16le_planar"
-    "--enable-decoder=pcm_s24be"
     "--enable-decoder=pcm_s24le"
-    "--enable-decoder=pcm_s24le_planar"
-    "--enable-decoder=pcm_s32be"
     "--enable-decoder=pcm_s32le"
-    "--enable-decoder=pcm_s32le_planar"
-    "--enable-decoder=pcm_s64be"
     "--enable-decoder=pcm_s64le"
-    "--enable-decoder=pcm_s8"
-    "--enable-decoder=pcm_s8_planar"
-    "--enable-decoder=pcm_u16be"
     "--enable-decoder=pcm_u16le"
+    "--enable-encoder=pcm_u8"
+    "--enable-encoder=pcm_f32le"
+    "--enable-encoder=pcm_f64le"
+    "--enable-encoder=pcm_s16le"
+    "--enable-encoder=pcm_s32le"
+    "--enable-encoder=pcm_s64le"
 
     ;; Encoders/decoders for images.
     "--enable-encoder=gif"
@@ -349,21 +340,10 @@
 
 (define-public ffmpeg-jami
   (package
-    (inherit ffmpeg-5)
+    (inherit ffmpeg)
     (name "ffmpeg-jami")
-    ;; XXX: Use a slightly older version, otherwise the
-    ;; 'libopusdec-enable-FEC' patch doesn't apply.
-    (version "5.0.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://ffmpeg.org/releases/ffmpeg-"
-                                  version ".tar.xz"))
-              (sha256
-               (base32
-                "0yq0jcdc4qm5znrzylj3dsicrkk2n3n8bv28vr0a506fb7iglbpg"))))
-    (outputs '("out" "debug"))
     (arguments
-     (substitute-keyword-arguments (package-arguments ffmpeg-5)
+     (substitute-keyword-arguments (package-arguments ffmpeg)
        ((#:configure-flags _ '())
         #~(cons* "--disable-static"
                  "--enable-shared"
@@ -382,19 +362,7 @@
                              "rtp_ext_abs_send_time"
                              "libopusdec-enable-FEC"
                              "libopusenc-reload-packet-loss-at-encode"
-                             "screen-sharing-x11-fix"))))
-            (add-after 'apply-patches 'disable-problematic-tests
-              (lambda _
-                ;; The "rtp_ext_abs_send_time" patch causes the 'lavf-mov_rtphint'
-                ;; test to fail (see:
-                ;; https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/685).
-                (substitute* "tests/fate/lavf-container.mak"
-                  (("mov mov_rtphint ismv")
-                   "mov ismv")
-                  (("fate-lavf-mov_rtphint:.*") ""))))))))
-    (inputs (modify-inputs (package-inputs ffmpeg-5)
-              (replace "libvpx" libvpx-next)
-              (replace "libx264" libx264-next)))))
+                             "screen-sharing-x11-fix"))))))))))
 
 (define-public libjami
   (package
@@ -570,8 +538,8 @@ P2P-DHT.")
 
 (define-public jami-docs
   ;; There aren't any tags, so use the latest commit.
-  (let ((revision "0")
-        (commit "b00574bcc46538c4b405b5edb3b43bf5404ff511"))
+  (let ((revision "1")
+        (commit "ff466ebadb9b99a1672a814126793de670c3099b"))
     (package
       (name "jami-docs")
       (version (git-version "0.0.0" revision commit))
@@ -583,7 +551,7 @@ P2P-DHT.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0iayi6yrb6djk0l2dwdxzlsga9c18ra8adplh8dad3zjdi75wnsq"))))
+                  "1n8a9dk8mi617rk3ycz5jrzbwv9ybfynlci5faz1klckx0aqdf6q"))))
       (build-system copy-build-system)
       (arguments
        (list
diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm
index 76b6523f24..f9c0a260f0 100644
--- a/gnu/packages/kde.scm
+++ b/gnu/packages/kde.scm
@@ -14,7 +14,7 @@
 ;;; Copyright © 2020, 2021, 2022, 2023 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 Alexandros Theodotou <alex@zrythm.org>
 ;;; Copyright © 2021 la snesne <lasnesne@lagunposprasihopre.org>
-;;; Copyright © 2021, 2022 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021, 2022, 2023 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2022 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2022 Petr Hodina <phodina@protonmail.com>
 ;;;
@@ -221,7 +221,7 @@ browser for easy news reading.")
 (define-public kdenlive
   (package
     (name "kdenlive")
-    (version "22.08.3")
+    (version "22.12.3")
     (source
      (origin
        (method git-fetch)
@@ -230,7 +230,7 @@ browser for easy news reading.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1016mwgrf4dwb945pc2kqm2j8vq86r01s19miq0h4wdgbfxa496c"))))
+        (base32 "0n7ca6c4nqr9z8ix70qjxw0rivh3hgqd187k4k8vp812yb49qrin"))))
     (build-system qt-build-system)
     (arguments
      ;; XXX: there is a single test that spawns other tests and
@@ -412,9 +412,6 @@ software (Git, Subversion, Mercurial, CVS and Bazaar).")
 for some KDevelop language plugins (Ruby, PHP, CSS...).")
     (license license:lgpl2.0+)))
 
-;; kdevplatform was merged into kdevelop as of 5.2.x
-(define-deprecated kdevplatform kdevelop)
-
 (define-public kdiagram
   (package
     (name "kdiagram")
diff --git a/gnu/packages/kerberos.scm b/gnu/packages/kerberos.scm
index 9f258009c6..c553f8180a 100644
--- a/gnu/packages/kerberos.scm
+++ b/gnu/packages/kerberos.scm
@@ -31,16 +31,20 @@
 
 (define-module (gnu packages kerberos)
   #:use-module (gnu packages)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages dbm)
+  #:use-module (gnu packages flex)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages libidn)
   #:use-module (gnu packages hurd)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages openldap)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages readline)
@@ -169,7 +173,7 @@ After installation, the system administrator should generate keys using
 (define-public heimdal
   (package
     (name "heimdal")
-    (version "7.7.0")
+    (version "7.8.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -177,14 +181,16 @@ After installation, the system administrator should generate keys using
                     "heimdal-" version "/" "heimdal-" version ".tar.gz"))
               (sha256
                (base32
-                "06vx3cb01s4lv3lpv0qzbbj97cln1np1wjphkkmmbk1lsqa36bgh"))
+                "0f4dblav859p5hn7b2jdj1akw6d8p32as6bj6zym19kghh3s51zx"))
+              (patches
+               (search-patches "heimdal-CVE-2022-45142.patch"))
               (modules '((guix build utils)))
               (snippet
                '(begin
                   (substitute* "configure"
                     (("User=.*$") "User=Guix\n")
                     (("Host=.*$") "Host=GNU")
-                    (("Date=.*$") "Date=2019\n"))))))
+                    (("Date=.*$") "Date=2022\n"))))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -249,15 +255,19 @@ After installation, the system administrator should generate keys using
                           (format #t "#!~a~%exit 1~%" (which "sh")))))))
        ;; Tests fail when run in parallel.
        #:parallel-tests? #f))
-    (native-inputs (list e2fsprogs ;for 'compile_et'
+    (native-inputs (list bison
+                         e2fsprogs      ;for 'compile_et'
+                         flex
                          texinfo
-                         unzip ;for tests
-                         perl))
+                         unzip          ;for tests
+                         pkg-config
+                         python))
     (inputs (list readline
                   bash-minimal
                   bdb
-                  e2fsprogs ;for libcom_err
-                  mit-krb5
+                  e2fsprogs             ;for libcom_err
+                  libcap-ng
+                  openldap
                   sqlite))
     (home-page "http://www.h5l.org/")
     (synopsis "Kerberos 5 network authentication")
diff --git a/gnu/packages/language.scm b/gnu/packages/language.scm
index f7e3ea6cd6..208fab4f5b 100644
--- a/gnu/packages/language.scm
+++ b/gnu/packages/language.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2018 Nikita <nikita@n0.is>
 ;;; Copyright © 2019 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2020, 2022 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2022 Milran <milranmike@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -28,6 +28,7 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages emacs)
   #:use-module (gnu packages freedesktop)
@@ -58,6 +59,7 @@
   #:use-module (gnu packages xorg)
   #:use-module (guix packages)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
@@ -928,3 +930,104 @@ and manipulation.")
     (description
      "libskk is a library to deal with Japanese kana-to-kanji conversion method.")
     (license license:gpl3+)))
+
+(define-public mecab
+  (package
+    (name "mecab")
+    (version "0.996")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/taku910/mecab")
+                     ;; latest commit
+                     (commit "046fa78b2ed56fbd4fac312040f6d62fc1bc31e3")))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1hdv7rgn8j0ym9gsbigydwrbxa8cx2fb0qngg1ya15vvbw0lk4aa"))
+              (patches
+                (search-patches
+                  "mecab-variable-param.patch"))))
+    (build-system gnu-build-system)
+    (native-search-paths
+      (list (search-path-specification
+              (variable "MECAB_DICDIR")
+              (separator #f)
+              (files '("lib/mecab/dic")))))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda _
+             (chdir "mecab")))
+         (add-before 'build 'add-mecab-dicdir-variable
+           (lambda _
+             (substitute* "mecabrc.in"
+               (("dicdir = .*")
+                "dicdir = $MECAB_DICDIR"))
+             (substitute* "mecab-config.in"
+               (("echo @libdir@/mecab/dic")
+                "if [ -z \"$MECAB_DICDIR\" ]; then
+  echo @libdir@/mecab/dic
+else
+  echo \"$MECAB_DICDIR\"
+fi")))))))
+    (inputs (list libiconv))
+    (home-page "https://taku910.github.io/mecab")
+    (synopsis "Morphological analysis engine for texts")
+    (description "Mecab is a morphological analysis engine developped as a
+collaboration between the Kyoto university and Nippon Telegraph and Telephone
+Corporation.  The engine is independent of any language, dictionary or corpus.")
+    (license (list license:gpl2+ license:lgpl2.1+ license:bsd-3))))
+
+(define-public mecab-ipadic
+  (package
+    (name "mecab-ipadic")
+    (version "2.7.0")
+    (source (package-source mecab))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list (string-append "--with-dicdir=" (assoc-ref %outputs "out")
+                            "/lib/mecab/dic")
+             "--with-charset=utf8")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda _
+             (chdir "mecab-ipadic")))
+         (add-before 'configure 'set-mecab-dir
+           (lambda* (#:key outputs #:allow-other-keys)
+             (setenv "MECAB_DICDIR" (string-append (assoc-ref outputs "out")
+                                                   "/lib/mecab/dic")))))))
+    (native-inputs (list mecab)); for mecab-config
+    (home-page "https://taku910.github.io/mecab")
+    (synopsis "Dictionary data for MeCab")
+    (description "This package contains dictionnary data derived from
+ipadic for use with MeCab.")
+    (license (license:non-copyleft "mecab-ipadic/COPYING"))))
+
+(define-public mecab-unidic
+  (package
+    (name "mecab-unidic")
+    (version "3.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://clrd.ninjal.ac.jp/unidic_archive/cwj/"
+                                  version "/unidic-cwj-" version ".zip"))
+              (sha256
+               (base32
+                "1z132p2q3bgchiw529j2d7dari21kn0fhkgrj3vcl0ncg2m521il"))))
+    (build-system copy-build-system)
+    (arguments
+     `(#:install-plan
+       '(("." "lib/mecab/dic"
+          #:include-regexp ("\\.bin$" "\\.def$" "\\.dic$" "dicrc")))))
+    (native-inputs (list unzip))
+    (home-page "https://clrd.ninjal.ac.jp/unidic/en/")
+    (synopsis "Dictionary data for MeCab")
+    (description "UniDic for morphological analysis is a dictionary for
+analysis with the morphological analyser MeCab, where the short units exported
+from the database are used as entries (heading terms).")
+    ;; triple-licensed (at the user’s choice)
+    (license (list license:gpl2+ license:lgpl2.1 license:bsd-3))))
diff --git a/gnu/packages/less.scm b/gnu/packages/less.scm
index 99bcb043b9..1ac15c369e 100644
--- a/gnu/packages/less.scm
+++ b/gnu/packages/less.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020, 2021, 2022 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2022 Hartmut Goebel <h.goebel@crazy-compilers.com>
+;;; Copyright © 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -36,7 +37,7 @@
 (define-public less
   (package
     (name "less")
-    (version "590")
+    (version "608")
     (source
      (origin
        (method url-fetch)
@@ -46,7 +47,7 @@
                                  version ".tar.gz")))
        (patches (search-patches "less-hurd-path-max.patch"))
        (sha256
-        (base32 "044fl3izmsi8n1vqzsqdp65q0qyyn5kmsg4sk7id0mxzx15zbbba"))))
+        (base32 "02f2d9d6hyf03va28ip620gjc6rf4aikmdyk47h7frqj18pbx6m6"))))
     (build-system gnu-build-system)
     (inputs (list ncurses))
     (home-page "https://www.gnu.org/software/less/")
diff --git a/gnu/packages/libcanberra.scm b/gnu/packages/libcanberra.scm
index 86e77b0f22..c0ec47a445 100644
--- a/gnu/packages/libcanberra.scm
+++ b/gnu/packages/libcanberra.scm
@@ -104,12 +104,6 @@ GNOME.  It comes with several backends (ALSA, PulseAudio, OSS, GStreamer,
 null) and is designed to be portable.")
     (license lgpl2.1+)))
 
-(define-public libcanberra/gtk+-2
-  (package/inherit libcanberra
-    (name "libcanberra-gtk2")
-    (inputs `(,@(alist-delete "gtk+" (package-inputs libcanberra))
-              ("gtk+" ,gtk+-2)))))
-
 (define-public sound-theme-freedesktop
   (package
     (name "sound-theme-freedesktop")
diff --git a/gnu/packages/license.scm b/gnu/packages/license.scm
index 3146f38c1c..ca8375d19d 100644
--- a/gnu/packages/license.scm
+++ b/gnu/packages/license.scm
@@ -30,6 +30,7 @@
   #:use-module (gnu packages python-xyz)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
+  #:use-module (guix build-system pyproject)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix licenses)
@@ -169,23 +170,22 @@ belonging to various licenses.")
 (define-public reuse
   (package
     (name "reuse")
-    (version "1.0.0")
+    (version "1.1.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "reuse" version))
        (sha256
-        (base32 "1m78q5x19xvhywi1xl0prrag89ihvqiq14lba27rrxl75nz24c6v"))))
-    (build-system python-build-system)
+        (base32 "0ij2mpdnawjabnsy291157wzci9050dfclwib95phg7pnmd6xsw0"))))
+    (build-system pyproject-build-system)
     (native-inputs
-     (list python-pytest python-setuptools-scm))
+     (list python-poetry-core python-pytest))
     (inputs
      (list python-binaryornot
            python-boolean.py
            python-debian
            python-jinja2
-           python-license-expression
-           python-requests))
+           python-license-expression))
     (home-page "https://reuse.software/")
     (synopsis "Provide and verify copyright and licensing information")
     (description
diff --git a/gnu/packages/linphone.scm b/gnu/packages/linphone.scm
index 4666216975..acc3fb1bd6 100644
--- a/gnu/packages/linphone.scm
+++ b/gnu/packages/linphone.scm
@@ -912,9 +912,6 @@ and video calls or instant messaging capabilities to an application.")
     (home-page "https://linphone.org/technical-corner/linphone")
     (license license:gpl3+)))
 
-(define-public linphoneqt
-  (deprecated-package "linphoneqt" linphone-desktop))
-
 (define-public msopenh264
   (let ((commit "88697cc95140017760d6da408cb0efdc5e86e40a")
         (revision "0"))
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index fb29730bf3..267e1ee1cb 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -54,13 +54,14 @@
 ;;; Copyright © 2021 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2021 Ivan Gankevich <i.gankevich@spbu.ru>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
-;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021, 2023 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Josselin Poiret <josselin.poiret@protonmail.ch>
 ;;; Copyright © 2021 Olivier Dion <olivier.dion@polymtl.ca>
 ;;; Copyright © 2021 Solene Rapenne <solene@perso.pw>
 ;;; Copyright © 2021, 2022 Petr Hodina <phodina@protonmail.com>
+;;; Copyright © 2021 Ryan Sundberg <ryan@arctype.co>
 ;;; Copyright © 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com>
 ;;; Copyright © 2022 Rene Saavedra <nanuui@protonmail.com>
 ;;; Copyright © 2022 muradm <mail@muradm.net>
@@ -70,6 +71,7 @@
 ;;; Copyright © 2022 Stefan <stefan-guix@vodafonemail.de>
 ;;; Copyright © 2022, 2023 Demis Balbach <db@minikn.xyz>
 ;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
+;;; Copyright © 2023 Yovan Naumovski <yovan@gorski.stream>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -482,7 +484,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
 ;; The current "stable" kernels. That is, the most recently released major
 ;; versions that are still supported upstream.
 
-(define-public linux-libre-6.2-version "6.2.7")
+(define-public linux-libre-6.2-version "6.2.10")
 (define-public linux-libre-6.2-gnu-revision "gnu")
 (define deblob-scripts-6.2
   (linux-libre-deblob-scripts
@@ -492,12 +494,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "0ir5vvbdh6dly5ld8mfp7285g8k88w5bb32hj4wmgyqsbfqc6rf2")))
 (define-public linux-libre-6.2-pristine-source
   (let ((version linux-libre-6.2-version)
-        (hash (base32 "138dpmj8qr5fcji99kmi3sj34ah21bgqgzsz2lbhn37v059100s3")))
+        (hash (base32 "1zm4xvxdy6sqqwcich46mr4dh3kpmp40bawwahrg4lr7rp1n5iap")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-6.2)))
 
-(define-public linux-libre-6.1-version "6.1.20")
+(define-public linux-libre-6.1-version "6.1.23")
 (define-public linux-libre-6.1-gnu-revision "gnu")
 (define deblob-scripts-6.1
   (linux-libre-deblob-scripts
@@ -507,7 +509,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "0cchdhjra74zanyk14brv2l2dvxpg8dn58rn477lgfb44mcnhq33")))
 (define-public linux-libre-6.1-pristine-source
   (let ((version linux-libre-6.1-version)
-        (hash (base32 "1w1iy1i3bpzrs5rhvqbn2awxv5qqgng9n7jd5js66g0sq3l2sckn")))
+        (hash (base32 "1szblfmm8gx0am017y30ywc60b1gqarplgmcs5zy7bshhwp3fn3l")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-6.1)))
@@ -515,7 +517,7 @@ 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.103")
+(define-public linux-libre-5.15-version "5.15.106")
 (define-public linux-libre-5.15-gnu-revision "gnu")
 (define deblob-scripts-5.15
   (linux-libre-deblob-scripts
@@ -525,12 +527,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "03hwhwbcicwyx5i30d6m715kwgrxz4h21xhk55wnawlk8zhx3r35")))
 (define-public linux-libre-5.15-pristine-source
   (let ((version linux-libre-5.15-version)
-        (hash (base32 "01fpipy8skmp4dyxgk8fk9k6hc0w0gvk7mm8f8pm7jhwcf0vlxh8")))
+        (hash (base32 "1r4g7ipcmj7k9dpwd5p2kd0f3iidnzl6z9g2cq4mfcw0h97r7rl4")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.15)))
 
-(define-public linux-libre-5.10-version "5.10.175")
+(define-public linux-libre-5.10-version "5.10.177")
 (define-public linux-libre-5.10-gnu-revision "gnu1")
 (define deblob-scripts-5.10
   (linux-libre-deblob-scripts
@@ -540,12 +542,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "1g4vabfswxzf9ahxc06k2ffksf84kcr2csx4m5kx680w0jqqnk80")))
 (define-public linux-libre-5.10-pristine-source
   (let ((version linux-libre-5.10-version)
-        (hash (base32 "1kkv63v5lc0ahkl8sjmwhqxahmwmbxcbf4mfcmkf6d7j50p5cxz2")))
+        (hash (base32 "0waml6svj07b7f8yb1kzrflqlf61x4kcqbgsr372s484m3z628lz")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.10)))
 
-(define-public linux-libre-5.4-version "5.4.237")
+(define-public linux-libre-5.4-version "5.4.240")
 (define-public linux-libre-5.4-gnu-revision "gnu1")
 (define deblob-scripts-5.4
   (linux-libre-deblob-scripts
@@ -555,12 +557,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "1d6as1yk9svysh07hdybs8glvn8s9f8gwlbjl7f9m920pdam2r60")))
 (define-public linux-libre-5.4-pristine-source
   (let ((version linux-libre-5.4-version)
-        (hash (base32 "09smq8jsbpqfh135snljack2wj41anx8f8i0lmjcqcq5zzhgw25p")))
+        (hash (base32 "0ihf0rqhx7dav3k3igk29962sscb1xyniy2gx8chyllprr0z126w")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.4)))
 
-(define-public linux-libre-4.19-version "4.19.278")
+(define-public linux-libre-4.19-version "4.19.280")
 (define-public linux-libre-4.19-gnu-revision "gnu1")
 (define deblob-scripts-4.19
   (linux-libre-deblob-scripts
@@ -570,12 +572,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "1q0fgpbdwc21wj9wnjjb49dp84ch6ymd5na3iaabadwjs2nmb6bd")))
 (define-public linux-libre-4.19-pristine-source
   (let ((version linux-libre-4.19-version)
-        (hash (base32 "0miyadgnd52cgw3bgpmx66kr1pgxh14b2f52fasy57b6wysv0lnv")))
+        (hash (base32 "1xmg9p3ky75n5q894f522s8nwcmbd5c15nmjr0n96m6xzag3kd7w")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.19)))
 
-(define-public linux-libre-4.14-version "4.14.310")
+(define-public linux-libre-4.14-version "4.14.312")
 (define-public linux-libre-4.14-gnu-revision "gnu1")
 (define deblob-scripts-4.14
   (linux-libre-deblob-scripts
@@ -585,7 +587,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "1ccggm19nl7pdcxmsm08fkqy8phz8rqfmww5ypizibdmnrmpn2v9")))
 (define-public linux-libre-4.14-pristine-source
   (let ((version linux-libre-4.14-version)
-        (hash (base32 "0r91f3jj3y0cca4sfs0xa12lbrc62q2yzgval5ainwr74bk7dwlb")))
+        (hash (base32 "03bwrnm7z8jxxn681dd5jffrj76l14ngkcccfgbg1p4a0471q436")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.14)))
@@ -1143,11 +1145,11 @@ Linux kernel.  It has been modified to remove all non-free binary blobs.")
 ;; Linux-Libre.
 ;; Reference: https://jxself.org/linux-libre/
 
-(define-public linux-libre-lts-version         linux-libre-5.15-version)
-(define-public linux-libre-lts-gnu-revision    linux-libre-5.15-gnu-revision)
-(define-public linux-libre-lts-pristine-source linux-libre-5.15-pristine-source)
-(define-public linux-libre-lts-source          linux-libre-5.15-source)
-(define-public linux-libre-lts                 linux-libre-5.15)
+(define-public linux-libre-lts-version         linux-libre-6.1-version)
+(define-public linux-libre-lts-gnu-revision    linux-libre-6.1-gnu-revision)
+(define-public linux-libre-lts-pristine-source linux-libre-6.1-pristine-source)
+(define-public linux-libre-lts-source          linux-libre-6.1-source)
+(define-public linux-libre-lts                 linux-libre-6.1)
 
 
 ;;;
@@ -1504,7 +1506,7 @@ and the notification, WiFi, and Bluetooth LED.")
 (define-public tuxedo-keyboard
   (package
     (name "tuxedo-keyboard")
-    (version "3.1.4")
+    (version "3.2.1")
     (source
      (origin
        (method git-fetch)
@@ -1513,7 +1515,7 @@ and the notification, WiFi, and Bluetooth LED.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "00yq3bk4ss60q8zgykid6gzsi3n6grdnkk6dkdr8n42gwaprpbw7"))))
+        (base32 "13fncirqcci46zxmsrawsxpazip5k46i849dwkhkqlg0mg4vxxw5"))))
     (build-system linux-module-build-system)
     (arguments
      (list #:tests? #f))                ; no test suite
@@ -2615,7 +2617,7 @@ Zerofree requires the file system to be unmounted or mounted read-only.")
 (define-public strace
   (package
     (name "strace")
-    (version "5.18")
+    (version "6.2")
     (home-page "https://strace.io")
     (source (origin
              (method url-fetch)
@@ -2623,7 +2625,7 @@ Zerofree requires the file system to be unmounted or mounted read-only.")
                                  "/strace-" version ".tar.xz"))
              (sha256
               (base32
-               "11qi7pdm0ldycsg9qhsa50icm219mmvy16yw1ih3s9f9kakkwab0"))
+               "1s3pj6a6xx1p1w98ik03d8hc4xssl4ha4aa0039nhqj196j3hz8c"))
              (patches (search-patches "strace-readlink-tests.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -4643,64 +4645,60 @@ compliance.")
 (define-public wireless-regdb
   (package
     (name "wireless-regdb")
-    (version "2020.11.20")
+    (version "2023.02.13")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "mirror://kernel.org/software/network/wireless-regdb/"
                     "wireless-regdb-" version ".tar.xz"))
               (sha256
-               (base32
-                "0liagyi6ppf5w474qk9j4jz5gbvvn8mc8al1dq4b1xrgv28485ml"))
+               (base32 "0wrf1c7mbsklwdn7jpwzlpjxwj0vgr61qyh88lx7bi2dd6lfi0gy"))
 
               ;; We're building 'regulatory.bin' by ourselves.
               (snippet '(begin
-                          (delete-file "regulatory.bin")
-                          #t))))
+                          (delete-file "regulatory.bin")))))
     (build-system gnu-build-system)
     (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'gzip-determinism
-           (lambda _
-             (substitute* "Makefile"
-               (("gzip") "gzip --no-name"))
-             #t))
-         (add-after 'unpack 'omit-signature
-           (lambda _
-             (substitute* "Makefile"
-               ;; Signing requires a REGDB_PUBCERT and REGDB_PRIVKEY which we
-               ;; don't provide (see below).  Disable it.
-               ((" regulatory\\.db\\.p7s") "")
-               ;; regulatory.db is built as a dependency of regulatory.db.p7s,
-               ;; but ‘make install’ depends only on the latter while installing
-               ;; both (and failing).  Depend on it explicitly.
-               (("^install: " all) (string-append all "regulatory.db ")))
-             #t))
-         (delete 'configure))  ; no configure script
-
-       ;; The 'all' target of the makefile depends on $(REGDB_CHANGED), which
-       ;; is computed and can be equal to 'maintainer-clean'; when that
-       ;; happens, we can end up deleting the 'regulatory.bin' file that we
-       ;; just built.  Thus, build things sequentially.
-       #:parallel-build? #f
-
-       #:tests? #f                      ; no tests
-       #:make-flags
-       (let ((out (assoc-ref %outputs "out")))
-         (list (string-append "PREFIX=" out)
-               (string-append "FIRMWARE_PATH=$(PREFIX)/lib/firmware")
-
-               ;; Leave this empty so that db2bin.py doesn't try to sign
-               ;; ‘regulatory.bin’.  This allows us to avoid managing a key
-               ;; pair for the whole distribution.
-               (string-append "REGDB_PRIVKEY=")
-               ;; Don't generate a public key for the same reason.  These are
-               ;; used as Makefile targets and can't be the empty string.
-               (string-append "REGDB_PUBCERT=/dev/null")
-               (string-append "REGDB_PUBKEY=/dev/null")))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'gzip-determinism
+            (lambda _
+              (substitute* "Makefile"
+                (("gzip") "gzip --no-name"))))
+          (add-after 'unpack 'omit-signature
+            (lambda _
+              (substitute* "Makefile"
+                ;; Signing requires a REGDB_PUBCERT and REGDB_PRIVKEY which we
+                ;; don't provide (see below).  Disable it.
+                ((" regulatory\\.db\\.p7s") "")
+                ;; regulatory.db is built as a dependency of regulatory.db.p7s,
+                ;; but ‘make install’ depends only on the latter while
+                ;; installing both (and failing).  Depend on it explicitly.
+                (("^install: " all) (string-append all "regulatory.db ")))))
+          (delete 'configure))  ; no configure script
+
+      ;; The 'all' target of the makefile depends on $(REGDB_CHANGED), which
+      ;; is computed and can be equal to 'maintainer-clean'; when that
+      ;; happens, we can end up deleting the 'regulatory.bin' file that we
+      ;; just built.  Thus, build things sequentially.
+      #:parallel-build? #f
+
+      #:tests? #f                      ; no tests
+      #:make-flags
+      #~(list (string-append "PREFIX=" #$output)
+              (string-append "FIRMWARE_PATH=$(PREFIX)/lib/firmware")
+
+              ;; Leave this empty so that db2bin.py doesn't try to sign
+              ;; ‘regulatory.bin’.  This allows us to avoid managing a key
+              ;; pair for the whole distribution.
+              (string-append "REGDB_PRIVKEY=")
+              ;; Don't generate a public key for the same reason.  These are
+              ;; used as Makefile targets and can't be the empty string.
+              (string-append "REGDB_PUBCERT=/dev/null")
+              (string-append "REGDB_PUBKEY=/dev/null"))))
     (native-inputs
-     `(("python" ,python-wrapper)))
+     (list python-wrapper))
     (home-page
      "https://wireless.wiki.kernel.org/en/developers/regulatory/wireless-regdb")
     (synopsis "Wireless regulatory database")
@@ -5705,7 +5703,7 @@ Bluetooth audio output devices like headphones or loudspeakers.")
 (define-public bluez
   (package
     (name "bluez")
-    (version "5.65")
+    (version "5.66")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -5713,7 +5711,7 @@ Bluetooth audio output devices like headphones or loudspeakers.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "1m4n7nczjlbhb20bp2hwb2b85036xma5pqljmpk7ddalhgaa8r95"))))
+                "0x5mn9x6g626izxnw236933wvq83qagsh9qc9ac9550cb55sdzir"))))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -7126,7 +7124,7 @@ of flash storage.")
 (define-public libseccomp
   (package
     (name "libseccomp")
-    (version "2.5.3")
+    (version "2.5.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/seccomp/libseccomp/"
@@ -7134,7 +7132,7 @@ of flash storage.")
                                   "/libseccomp-" version ".tar.gz"))
               (sha256
                (base32
-                "0xhan73zn4p0n7s8vx6s47wjmidvk4x8r90vfbljairn6f3mq1jr"))))
+                "1nyb3lspc5bsirpsx89vah3n54pmwlgxrwsfaxl01kq50i004afq"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")
@@ -9449,6 +9447,44 @@ that was first added to Linux 3.15.  Much of what BCC uses requires Linux 4.1
 and above.")
     (license license:asl2.0)))
 
+(define-public bpftool
+  (package
+    (name "bpftool")
+    (version (package-version linux-libre))
+    (source (package-source linux-libre))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ;This package has no tests.
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure)
+                  (replace 'build
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (invoke "make" "-C" "tools/bpf/bpftool"
+                              ,(string-append "CC=" (cc-for-target)))))
+                  (replace 'install
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let* ((out (assoc-ref outputs "out")))
+                        (mkdir-p (string-append out "/sbin"))
+                        (mkdir-p (string-append out
+                                  "/share/bash-completion/completions"))
+                        (invoke "make"
+                                (string-append "prefix=" out)
+                                (string-append
+                                 "bash_compdir=" out
+                                 "/share/bash-completion/completions")
+                                "-C" "tools/bpf/bpftool"
+                                "install")))))))
+    (inputs (list elfutils                        ;provides libelf
+                  readline libcap zlib))
+    (native-inputs (list bison python-3))
+    ;; This tool does not have a proper web page.
+    (home-page
+     "https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/tree/tools/bpf/bpftool")
+    (synopsis "Tool for inspection and manipulation of eBPF programs and maps")
+    (description "@command{bpftool} allows for inspection and simple
+modification of BPF objects on the system.")
+    (license (package-license linux-libre))))
+
 (define-public bpftrace
   (package
     (name "bpftrace")
diff --git a/gnu/packages/lisp-check.scm b/gnu/packages/lisp-check.scm
index 172f5b3873..1b4d80de00 100644
--- a/gnu/packages/lisp-check.scm
+++ b/gnu/packages/lisp-check.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019, 2020 Katherine Cox-Buday <cox.katherine.e@gmail.com>
 ;;; Copyright © 2019, 2020, 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
-;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
+;;; Copyright © 2021, 2023 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2021 Charles Jackson <charles.b.jackson@protonmail.com>
 ;;; Copyright © 2022 jgart <jgart@dismail.de>
 ;;; Copyright © 2022 André A. Gomes <andremegafone@gmail.com>
@@ -378,6 +378,40 @@ easy to use so that you can quickly start testing.")
 (define-public ecl-clunit2
   (sbcl-package->ecl-package sbcl-clunit2))
 
+(define-public sbcl-confidence
+  (let ((commit "5cbc74715348e12e689afb2d459dcb216c640a44")
+        (revision "0"))
+    (package
+      (name "sbcl-confidence")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/melusina-org/cl-confidence")
+               (commit commit)))
+         (file-name (git-file-name "cl-confidence" version))
+         (sha256
+          (base32 "0zc135rvq2valrw15bh8k6i53v7kk5l7x0kccb1bf7pglc8zgivs"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:asd-systems '("org.melusina.confidence"
+                         "org.melusina.confidence/testsuite")))
+      (inputs (list sbcl-alexandria))
+      (home-page "https://github.com/melusina-org/cl-confidence")
+      (synopsis "Interactive test framework for Common Lisp")
+      (description
+       "Confidence is a test framework for Common Lisp that focuses on
+simplicity.  It avoids bureaucracy and makes it easy to work interactively,
+without a complicated setup, and with explicit functions and decisions.")
+      (license license:expat))))
+
+(define-public ecl-confidence
+  (sbcl-package->ecl-package sbcl-confidence))
+
+(define-public cl-confidence
+  (sbcl-package->cl-source-package sbcl-confidence))
+
 (define-public sbcl-eos
   (let ((commit "b4413bccc4d142cbe1bf49516c3a0a22c9d99243")
         (revision "2"))
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index 46172ffd6d..1d13356b2d 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -80,6 +80,7 @@
   #:use-module (gnu packages file)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages game-development)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
@@ -118,6 +119,7 @@
   #:use-module (gnu packages web)
   #:use-module (gnu packages webkit)
   #:use-module (gnu packages xdisorg)
+  #:use-module (gnu packages xiph)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (ice-9 match)
@@ -191,6 +193,54 @@ portable between implementations.")
 (define-public ecl-alexandria
   (sbcl-package->ecl-package sbcl-alexandria))
 
+(define-public sbcl-reader
+  (package
+   (name "sbcl-reader")
+   (version "0.10.0")
+   (source
+    (origin
+     (method git-fetch)
+     (uri (git-reference
+           (url "https://github.com/digikar99/reader")
+           (commit (string-append "v" version))))
+     (sha256
+      (base32 "0pbv6w0d8d4qmfkdsz2rk21bp1las9r7pyvpmd95qjz7kpxrirl7"))
+     (file-name (git-file-name "cl-reader" version))))
+   (build-system asdf-build-system/sbcl)
+   (arguments
+    (list
+     #:phases
+     #~(modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "reader.lisp"
+               (("echo")
+                (search-input-file inputs "/bin/echo"))))))))
+   (inputs
+     (list coreutils ; Needed for call to echo.
+           sbcl-alexandria
+           sbcl-fiveam ; Tests are written directly in the source files.
+           sbcl-hash-set
+           sbcl-iterate
+           sbcl-split-sequence
+           sbcl-trivial-types))
+   (synopsis "Reader macros for common objects and data structures")
+   (description "This package provides a utility library intended
+at providing configurable reader macros for common tasks such as
+accessors, hash-tables, sets, uiop:run-program, arrays and a few others.")
+   (home-page "https://github.com/digikar99/reader/")
+   (license license:expat)))
+
+(define-public cl-reader
+  (sbcl-package->cl-source-package sbcl-reader))
+
+(define-public ecl-reader
+  (package
+    (inherit (sbcl-package->ecl-package sbcl-reader))
+    (arguments
+     ;; TODO: Tests fail on call to coreutils echo for ecl.
+     `(#:tests? #f))))
+
 (define-public sbcl-stdutils
   (let ((commit "4a4e5a4036b815318282da5dee2a22825369137b")
         (revision "0"))
@@ -258,6 +308,37 @@ text.")
 (define-public ecl-langutils
   (sbcl-package->ecl-package sbcl-langutils))
 
+(define-public sbcl-hash-set
+  (let ((commit "6feb20de457f14e24a83815be1097aa02cca5986")
+        (revision "0"))
+    (package
+      (name "sbcl-hash-set")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/samebchase/hash-set")
+               (commit commit)))
+         (file-name (git-file-name "cl-hash-set" version))
+         (sha256
+          (base32 "0a966y9yfarhmki4wwzg371ziaygnp13yc6r13w9zz327fkhz8na"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs (list sbcl-fiveam))
+      (inputs (list sbcl-alexandria))
+      (home-page "https://github.com/samebchase/hash-set/")
+      (synopsis "Implementation of a hash-set")
+      (description "This package provides an implementation of the
+hash-set data structure.  It has constant time lookup, insertion and
+deletion.")
+      (license license:unlicense))))
+
+(define-public cl-hash-set
+  (sbcl-package->cl-source-package sbcl-hash-set))
+
+(define-public ecl-hash-set
+  (sbcl-package->ecl-package sbcl-hash-set))
+
 (define-public sbcl-duologue
   (let ((commit "ea1ada244a81da65f85b548823c9a6d7c9c145e1")
         (revision "0"))
@@ -634,6 +715,42 @@ accesses and changes.")
 (define-public ecl-file-notify
   (sbcl-package->ecl-package sbcl-file-notify))
 
+(define-public sbcl-file-select
+  (let ((commit "ef25f6d7c78ed9e0b62119979af8c4b5b0f8c774")
+        (revision "1"))
+    (package
+      (name "sbcl-file-select")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/file-select")
+               (commit commit)))
+         (file-name (git-file-name "file-select" version))
+         (sha256
+          (base32 "1qh32ymljw5c98zzbvjfq6jzwlzs4qxi8gh4gw8pixir6y1inxaa"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-cffi
+             sbcl-documentation-utils
+             sbcl-float-features))
+      (home-page "https://shinmera.github.io/file-select/")
+      (synopsis "Invoke the native file selection dialogs to open or save files")
+      (description
+       "This library allows you to open native file dialogs to open and save
+files.  This is useful if you have an application that's primarily text based
+and would like a more convenient file selection utility, or if you are working
+with a UI toolkit that does not offer a way to access the native file dialogs
+directly.")
+      (license license:zlib))))
+
+(define-public cl-file-select
+  (sbcl-package->cl-source-package sbcl-file-select))
+
+(define-public ecl-file-select
+  (sbcl-package->ecl-package sbcl-file-select))
+
 (define-public sbcl-bodge-queue
   (let ((commit "948c9a501dcd412689952d09eb7453ec2722336a")
         (revision "0"))
@@ -1813,6 +1930,54 @@ reading and writing.")
 (define-public cl-zip
   (sbcl-package->cl-source-package sbcl-zip))
 
+(define-public sbcl-zippy
+  (let ((commit "ed9bca591ded2ff27a9ac95d9a60827773a0e707")
+        (revision "1"))
+    (package
+      (name "sbcl-zippy")
+      (version (git-version "1.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/zippy/")
+               (commit commit)))
+         (sha256
+          (base32 "16cvyyf2nzd9r3fcy4w6d5wh8n3x833wldmrxmnzd3k2xrkhzfl9"))
+         (file-name (git-file-name "zippy" version))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-documentation-utils
+             sbcl-file-attributes
+             sbcl-pathname-utils
+             sbcl-alexandria
+             sbcl-nibbles
+             sbcl-babel
+             sbcl-3bz
+             sbcl-salza2))
+      (synopsis "Fast zip archive library")
+      (description "Zippy is a library for the PKWARE Zip archive format.  It
+can read and write zip files.  It features:
+
+@itemize
+@item archive inspection without extraction;
+@item Zip64 support;
+@item split archive support;
+@item PKWARE decryption;
+@item fast deflate decompression thanks to 3bz;
+@item operates on streams and vectors;
+@item can compress stream->stream;
+@item extensible for other encryption and compression mechanisms.
+@end itemize\n")
+      (home-page "https://shinmera.github.io/zippy/")
+      (license license:zlib))))
+
+(define-public ecl-zippy
+  (sbcl-package->ecl-package sbcl-zippy))
+
+(define-public cl-zippy
+  (sbcl-package->cl-source-package sbcl-zippy))
+
 (define-public sbcl-cl-vectors
   (package
     (name "sbcl-cl-vectors")
@@ -2035,8 +2200,8 @@ antialiased TrueType font rendering using CLX and XRender extension.")
   (sbcl-package->ecl-package sbcl-clx-truetype))
 
 (define-public sbcl-slynk
-  (let ((commit "4513c382f07a2a2cedb3c046231b69eae2f5e6f0")
-        (revision "6"))
+  (let ((commit "82b20a9a83209b4dbfbfb62a1536896aed5f85f7")
+        (revision "7"))
     (package
       (name "sbcl-slynk")
       (version (git-version "1.0.43" revision commit))
@@ -2048,7 +2213,7 @@ antialiased TrueType font rendering using CLX and XRender extension.")
            (url "https://github.com/joaotavora/sly")
            (commit commit)))
          (sha256
-          (base32 "10bzxhi5d7h18hqclxqy2z857d0sfbsnyxvrhmfkdi0h75zz7m4n"))
+          (base32 "0dvr36qvb490gml0znay0slw63czp7azvajnv7srh8s0j8pqpcaj"))
          (file-name (git-file-name "cl-slynk" version))))
       (build-system asdf-build-system/sbcl)
       (outputs '("out" "image"))
@@ -2347,6 +2512,43 @@ consistent across multiple Common Lisp implementations.")
 (define-public ecl-trivial-features
   (sbcl-package->ecl-package sbcl-trivial-features))
 
+(define-public sbcl-harmony
+  (let ((commit "0b57483cc0341936c201b620f82a8542c606991f")
+        (revision "0"))
+    (package
+      (name "sbcl-harmony")
+      (version (git-version "2.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shirakumo/harmony")
+               (commit commit)))
+         (file-name (git-file-name "cl-harmony" version))
+         (sha256
+          (base32 "0pqmfi3yi3gi7b7dyayrb621hp60rn7hasq0cl0fis3vg0fp5dja"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-atomics
+             sbcl-bordeaux-threads
+             sbcl-cl-mixed
+             sbcl-stealth-mixin
+             sbcl-trivial-features))
+      (home-page "https://shirakumo.github.io/harmony/")
+      (synopsis "Common Lisp sound server and sound processing library")
+      (description
+       "HARMONY is a library that provides you with audio processing tools as
+well as an audio server to play back music, sfx, and so forth.  It is most
+suited for use in a game engine, but may feasibly also be used for more
+advanced things such as a DAW")
+      (license license:zlib))))
+
+(define-public ecl-harmony
+  (sbcl-package->ecl-package sbcl-harmony))
+
+(define-public cl-harmony
+  (sbcl-package->cl-source-package sbcl-harmony))
+
 (define-public sbcl-hu.dwim.asdf
   (let ((commit "67cdf84390e530af4303cc4bc815fdf2a5e48f59"))
     (package
@@ -3740,6 +3942,35 @@ This library is no longer supported by its author.")
 (define-public ecl-cl-colors
   (sbcl-package->ecl-package sbcl-cl-colors))
 
+(define-public sbcl-format-colors
+  (let ((commit "fecb1d8c6e7a07ff9f10a7a4eb4c3bd629d4969f")
+        (revision "0"))
+    (package
+      (name "sbcl-format-colors")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/vindarel/format-colors")
+               (commit commit)))
+         (sha256
+          (base32 "084ydjhic2dq0gb7wfm6plnjq3l7485hb3yhxl03mm64a6sr3fxv"))
+         (file-name (git-file-name "cl-format-colors" version))))
+      (build-system asdf-build-system/sbcl)
+      (inputs (list sbcl-cl-ansi-text))
+      (synopsis "Custom format functions for colorful output")
+      (description "This package provides simple format directives to
+      print in colors.")
+      (home-page "https://github.com/vindarel/format-colors")
+      (license license:llgpl))))
+
+(define-public cl-format-colors
+  (sbcl-package->cl-source-package sbcl-format-colors))
+
+(define-public ecl-format-colors
+  (sbcl-package->ecl-package sbcl-format-colors))
+
 (define-public sbcl-cl-ansi-text
   (let ((commit "8b129d83c7511b54cdd9d4123825a2d06349b25c"))
     (package
@@ -4474,32 +4705,29 @@ JavaScript.
   (sbcl-package->ecl-package sbcl-parenscript))
 
 (define-public sbcl-cl-json
-  (let ((commit "6dfebb9540bfc3cc33582d0c03c9ec27cb913e79"))
-    (package
-      (name "sbcl-cl-json")
-      (version (git-version "0.5" "1" commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/hankhero/cl-json")
-               (commit commit)))
-         (file-name (git-file-name "cl-json" version))
-         (sha256
-          (base32
-           "0fx3m3x3s5ji950yzpazz4s0img3l6b3d6l3jrfjv0lr702496lh"))))
-      (build-system asdf-build-system/sbcl)
-      (native-inputs
-       (list sbcl-fiveam))
-      (home-page "https://github.com/hankhero/cl-json")
-      (synopsis "JSON encoder and decoder for Common-Lisp")
-      (description
-       "@command{cl-json} provides an encoder of Lisp objects to JSON format
-and a corresponding decoder of JSON data to Lisp objects.  Both the encoder
-and the decoder are highly customizable; at the same time, the default
-settings ensure a very simple mode of operation, similar to that provided by
-@command{yason} or @command{st-json}.")
-      (license license:expat))))
+  (package
+    (name "sbcl-cl-json")
+    (version "0.6.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+              (url "https://github.com/sharplispers/cl-json")
+              (commit (string-append "v" version))))
+        (file-name (git-file-name "cl-json" version))
+        (sha256
+         (base32 "12vakz47d1i7pywgb9cm2364fzykidc9m7l7b6n9lx0gn2qx9ar5"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-fiveam))
+    (home-page "https://github.com/sharplispers/cl-json")
+    (synopsis "JSON encoder and decoder for Common-Lisp")
+    (description "@command{cl-json} provides an encoder of Lisp objects
+to JSON format and a corresponding decoder of JSON data to Lisp
+objects.  Both the encoder and the decoder are highly customizable; at the
+same time, the default settings ensure a very simple mode of operation,
+similar to that provided by @command{yason} or @command{st-json}.")
+    (license license:expat)))
 
 (define-public cl-json
   (sbcl-package->cl-source-package sbcl-cl-json))
@@ -4608,6 +4836,36 @@ avoid consing) is too computationally expensive.")
 (define-public ecl-ucons
   (sbcl-package->ecl-package sbcl-ucons))
 
+(define-public sbcl-clobber
+  (let ((commit "212721c24a8bb792714314ba52dfe818641f2e98")
+        (revision "0"))
+    (package
+      (name "sbcl-clobber")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/robert-strandh/Clobber")
+               (commit commit)))
+         (file-name (git-file-name "cl-clobber" version))
+         (sha256
+          (base32 "0pqzfn2wqbzzwlwc3l84iv3i3wa9zfgnh14mq67h9qkib8wjzx3n"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://github.com/robert-strandh/Clobber")
+      (synopsis "Common Lisp Library for transaction-oriented databases")
+      (description
+       "CLOBBER is an alternative to so-called @emph{object prevalence}, and in
+particular to @code{cl-prevalence}.  Clobber is both simpler, more flexible, and
+more robust than systems based on object prevalence.")
+      (license license:bsd-2))))
+
+(define-public cl-clobber
+  (sbcl-package->cl-source-package sbcl-clobber))
+
+(define-public ecl-clobber
+  (sbcl-package->ecl-package sbcl-clobber))
+
 (define-public sbcl-closer-mop
   (let ((commit "7b86f2add029208ebc74ec6a41c2ccfd3c382dbc")
         (revision "3"))
@@ -4945,6 +5203,36 @@ trivially.")
 (define-public ecl-xml-emitter
   (sbcl-package->ecl-package sbcl-xml-emitter))
 
+(define-public sbcl-kdlcl
+  (let ((commit "dd4a48a3473c3c8fb34d4a37f87d6a1776c5875c")
+        (revision "0"))
+    (package
+      (name "sbcl-kdlcl")
+      (version (git-version "1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/chee/kdlcl")
+               (commit commit)))
+         (file-name (git-file-name "cl-kdlcl" version))
+         (sha256
+          (base32 "0bqqxkd6s420ld2hmhvbbvpzss0m2kimmxaqhz7j1ksmq86bvvmj"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments `(#:asd-systems '("kdl")))
+      (inputs (list sbcl-esrap sbcl-parse-number))
+      (home-page "https://github.com/chee/kdlcl/")
+      (synopsis "KDL reader/printer for Common Lisp")
+      (description "This package provides a KDL reader/writer for
+      Common Lisp.")
+      (license license:expat-0))))
+
+(define-public cl-kdlcl
+  (sbcl-package->cl-source-package sbcl-kdlcl))
+
+(define-public ecl-kdlcl
+  (sbcl-package->ecl-package sbcl-kdlcl))
+
 (define-public sbcl-cl-mustache
   (package
     (name "sbcl-cl-mustache")
@@ -5421,6 +5709,60 @@ Development into CL+SSL was done by David Lichteblau.")
        (substitute-keyword-arguments (package-arguments pkg)
          ((#:tests? _ #f) #f))))))
 
+(define-public sbcl-kons-9
+  (let ((commit "fe0b3228ca28c316457d35f9e7c67edc83b2a4cc")
+        (revision "0"))
+    (package
+      (name "sbcl-kons-9")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/kaveh808/kons-9")
+               (commit commit)))
+         (file-name (git-file-name "cl-kons-9" version))
+         (sha256
+          (base32 "1kdwva4qj1s5vmbv6gbmpnk56ahaf8n2kvij5xjlfyk7nriy4bbi"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:asd-systems '("kons-9")
+         #:asd-test-systems '("kons-9/testsuite")))
+      (native-inputs
+       (list sbcl-alexandria sbcl-confidence))
+      (inputs
+       (list sbcl-closer-mop
+             sbcl-cffi
+             sbcl-cl-glfw3
+             sbcl-cl-opengl
+             sbcl-cl-vectors
+             sbcl-clobber
+             sbcl-origin
+             sbcl-trivial-backtrace
+             sbcl-trivial-main-thread
+             sbcl-zpb-ttf))
+      (home-page "https://github.com/kaveh808/kons-9")
+      (synopsis "Common Lisp 3D graphics system")
+      (description
+       "This package provides KONS-9 which can be considered as a traditional user
+interface driven 3D application for general artists, or as a REPL-based
+development environment for technical artists and software developers.  These two
+approaches can be seamlessly combined into a flexible and powerful workflow,
+where non-technical users can immediately benefit from software tools and
+extensions developed by technical users.")
+      (license (list license:expat
+                     ;; lib/JMC-font-libs/font-master
+                     ;; lib/JMC-font-libs/font-zpb-ttf-master
+                     license:lgpl2.1)))))
+
+(define-public cl-kons-9
+  (sbcl-package->cl-source-package sbcl-kons-9))
+
+;; TODO: (Sharlatan-20221110T230620+0000): ECL is not supported yet.
+;; https://github.com/kaveh808/kons-9/issues/176
+;; (define-public ecl-kons-9
+;;   (sbcl-package->ecl-package sbcl-kons-9))
+
 (define-public sbcl-kmrcl
   (let ((version "1.111")
         (commit "4a27407aad9deb607ffb8847630cde3d041ea25a")
@@ -5599,6 +5941,40 @@ the format used by the popular compression tool bzip2.")
 (define-public ecl-chipz
   (sbcl-package->ecl-package sbcl-chipz))
 
+(define-public sbcl-cl-tls
+  (let ((commit "2ab4fc3ae7e79e451126a9bb6bc38ca2cd2cb4ba")
+        (revision "0"))
+    (package
+      (name "sbcl-cl-tls")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/shrdlu68/cl-tls")
+               (commit commit)))
+         (file-name (git-file-name "cl-tls" version))
+         (sha256
+          (base32 "1j6gwv21ibkk6xd1xxm54wgwp09dzqg60b8z72hivpnq8gwm0ba7"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria
+             sbcl-babel
+             sbcl-cl-base64
+             sbcl-fast-io
+             sbcl-ironclad))
+      (home-page "https://github.com/shrdlu68/cl-tls")
+      (synopsis "Implementation of Transport Layer Security Protocols")
+      (description "This package provides prototype Common Lisp
+implementations of TLS, RFC5246, ASN.1, x{501,509}, and PKCS{1,3,5,8}.")
+      (license license:bsd-3))))
+
+(define-public cl-tls
+  (sbcl-package->cl-source-package sbcl-cl-tls))
+
+(define-public ecl-cl-tls
+  (sbcl-package->ecl-package sbcl-cl-tls))
+
 (define-public sbcl-dns-client
   (let ((commit "9f252e9c2bb61c57a6cd367e21ad366b0d3e87e0")
         (revision "0"))
@@ -5634,6 +6010,49 @@ DNS records.")
 (define-public cl-dns-client
   (sbcl-package->cl-source-package sbcl-dns-client))
 
+(define-public sbcl-lisp-pay
+  (let ((commit "c4de776f0a284709931ff3674160ced3b41bd000")
+        (revision "0"))
+    (package
+      (name "sbcl-lisp-pay")
+      (version (git-version "0.0.5" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/K1D77A/lisp-pay")
+               (commit commit)))
+         (file-name (git-file-name "cl-lisp-pay" version))
+         (sha256
+          (base32 "09r6qy4fipriqa0d6g9qm6dq992lr58vh24g5j0adm19i5fnjavh"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria
+             sbcl-babel
+             sbcl-cl-base64
+             sbcl-cl-str
+             sbcl-cl-tls
+             sbcl-closer-mop
+             sbcl-dexador
+             sbcl-hu.dwim.defclass-star
+             sbcl-hunchentoot
+             sbcl-ironclad
+             sbcl-jonathan
+             sbcl-lack
+             sbcl-ningle
+             sbcl-shasht))
+      (home-page "https://github.com/K1D77A/lisp-pay/")
+      (synopsis "Wrappers over multiple Payment Processor APIs")
+      (description "This library provides payment API wrappers over
+BTCPay, Paypal, and Stripe.")
+      (license license:expat))))
+
+(define-public cl-lisp-pay
+  (sbcl-package->cl-source-package sbcl-lisp-pay))
+
+(define-public ecl-lisp-pay
+  (sbcl-package->ecl-package sbcl-lisp-pay))
+
 (define-public sbcl-drakma
   (package
     (name "sbcl-drakma")
@@ -5724,6 +6143,46 @@ connections (keep-alive), and SSL.")
      ;; Tests fail on ECL with 'Socket error in "socket": EINVAL'.
      '(#:tests? #f))))
 
+(define-public sbcl-lunamech-matrix-api
+  (let ((commit "aa54a820149584c237b03d500ad83397fe25dc92")
+        (revision "0"))
+    (package
+      (name "sbcl-lunamech-matrix-api")
+      (version (git-version "0.0.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/K1D77A/lunamech-matrix-api")
+               (commit commit)))
+         (file-name (git-file-name "cl-lunamech-matrix-api" version))
+         (sha256
+          (base32 "0a664qq4m5gk4iv5ck63gmsl3218jhjsalawklj56wn2pw0cf8a0"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-cl-json
+             sbcl-cl-str
+             sbcl-closer-mop
+             sbcl-dexador
+             sbcl-do-urlencode
+             sbcl-drakma
+             sbcl-jonathan
+             sbcl-plump
+             sbcl-quri
+             sbcl-reader
+             sbcl-shasht))
+      (home-page "https://github.com/K1D77A/lunamech-matrix-api/")
+      (synopsis "Implementation of the Matrix API")
+      (description "This package provides an implementation of the Matrix
+API for Common Lisp.")
+      (license license:expat))))
+
+(define-public cl-lunamech-matrix-api
+  (sbcl-package->cl-source-package sbcl-lunamech-matrix-api))
+
+(define-public ecl-lunamech-matrix-api
+  (sbcl-package->ecl-package sbcl-lunamech-matrix-api))
+
 (define-public sbcl-trivial-types
   (package
     (name "sbcl-trivial-types")
@@ -6304,6 +6763,36 @@ reset to 0 and you're able to read it again.")
 (define-public ecl-circular-streams
   (sbcl-package->ecl-package sbcl-circular-streams))
 
+(define-public sbcl-trivial-rfc-1123
+  (let ((commit "9ef59c3fdec08b0e3c9ed02d39533887b6d1b8e3")
+        (revision "0"))
+    (package
+      (name "sbcl-trivial-rfc-1123")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/stacksmith/trivial-rfc-1123")
+               (commit commit)))
+         (file-name (git-file-name "cl-trivial-rfc-1123" version))
+         (sha256
+          (base32 "1w4ywpj10fnp7cya62dzlxlg8nyk4lppn2pnmfixsndwr4ib1h6x"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments `(#:asd-systems '("trivial-rfc-1123")))
+      (inputs (list sbcl-cl-ppcre))
+      (home-page "https://github.com/stacksmith/trivial-rfc-1123")
+      (synopsis "Parse and print RFC-1123 timestamps")
+      (description
+       "This package parses and prints dates in RFC-1123 format.")
+      (license license:bsd-3))))
+
+(define-public cl-trivial-rfc-1123
+  (sbcl-package->cl-source-package sbcl-trivial-rfc-1123))
+
+(define-public ecl-trivial-rfc-1123
+  (sbcl-package->ecl-package sbcl-trivial-rfc-1123))
+
 (define-public sbcl-lack
   (let ((commit "abff8efeb0c3a848e6bb0022f2b8b7fa3a1bc88b")
         (revision "1"))
@@ -6354,6 +6843,36 @@ performance and simplicity in mind.")
 (define-public ecl-lack
   (sbcl-package->ecl-package sbcl-lack))
 
+(define-public sbcl-cl-isaac
+  (let ((commit "9cd88f39733be753facbf361cb0e08b9e42ff8d5")
+        (revision "0"))
+    (package
+      (name "sbcl-cl-isaac")
+      (version (git-version "1.0.7" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/thephoeron/cl-isaac")
+               (commit commit)))
+         (file-name (git-file-name "cl-isaac" version))
+         (sha256
+          (base32 "0ig1mf8iridfr7vci9gy499194h0hda0xki5s6g0y04g85ibnpw9"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs (list sbcl-prove))
+      (home-page "https://github.com/thephoeron/cl-isaac/")
+      (synopsis "Fast cryptographic random number generators")
+      (description "This is an optimized Common Lisp library of Bob Jenkins'
+ISAAC-32 and ISAAC-64 algorithms, which are fast cryptographic random number
+generators: Indirection, Shift, Accumulate, Add, and Count.")
+      (license license:bsd-0))))
+
+(define-public cl-isaac
+  (sbcl-package->cl-source-package sbcl-cl-isaac))
+
+(define-public ecl-cl-isaac
+  (sbcl-package->ecl-package sbcl-cl-isaac))
+
 (define-public sbcl-local-time
   (let ((commit "40169fe26d9639f3d9560ec0255789bf00b30036")
         (revision "3"))
@@ -6528,6 +7047,90 @@ mostly Common Lisp implementation.")
 (define-public ecl-cl-fastcgi
   (sbcl-package->ecl-package sbcl-cl-fastcgi))
 
+(define-public sbcl-cl-fast-ecs
+  (package
+    (name "sbcl-cl-fast-ecs")
+    (version "0.1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.com/lockie/cl-fast-ecs")
+             (commit version)))
+       (file-name (git-file-name "cl-fast-ecs" version))
+       (sha256
+        (base32 "06cnhm8zpyqyjr17mji5wvj4gh2glpdw8gqy1vwrq3vgphfmg560"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs
+     (list sbcl-parachute))
+    (inputs
+     (list sbcl-alexandria sbcl-trivial-garbage))
+    (home-page "https://lockie.gitlab.io/cl-fast-ecs/")
+    (synopsis "Blazingly fast Entity-Component-System microframework")
+    (description
+     "CL-FAST-ECS is a Common Lisp library providing an implementation of the
+@acronym{ECS, Entity-Component-System} pattern, primarily focused on speed and
+interactive development.
+
+ECS is an architectural data-oriented design pattern that allows for the
+effective processing of a large number of in-game objects while keeping the code
+and data separated.  This provides flexibility in the way that game objects are
+built at runtime.")
+    (license license:expat)))
+
+(define-public cl-fast-ecs
+  (sbcl-package->cl-source-package sbcl-cl-fast-ecs))
+
+(define-public ecl-cl-fast-ecs
+  (sbcl-package->ecl-package sbcl-cl-fast-ecs))
+
+(define-public sbcl-cl-flac
+  (let ((commit "d094d33d3cc2cf263263b917798d338eded3c532")
+        (revision "0"))
+    (package
+      (name "sbcl-cl-flac")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shirakumo/cl-flac")
+               (commit commit)))
+         (file-name (git-file-name "cl-flac" version))
+         (sha256
+          (base32 "1dgr5xqf175hzq3sxpbixxia2k2g3rz0pn6msch4dnvk7a1naqlc"))
+         (modules '((guix build utils)))
+         (snippet
+          ;; Delete bundled libraries.
+          `(begin
+             (delete-file-recursively "static")))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "low-level.lisp"
+                 (("libflac.so")
+                  (search-input-file inputs "/lib/libFLAC.so"))))))))
+      (inputs
+       (list flac
+             sbcl-cffi
+             sbcl-documentation-utils
+             sbcl-trivial-features
+             sbcl-trivial-garbage))
+      (home-page "https://shirakumo.github.io/cl-flac")
+      (synopsis "CFFI bindings to libflac for Common Lisp")
+      (description "This package provides CFFI bindings to the @code{libflac}
+audio library for Common Lisp.")
+      (license license:zlib))))
+
+(define-public ecl-cl-flac
+  (sbcl-package->ecl-package sbcl-cl-flac))
+
+(define-public cl-flac
+  (sbcl-package->cl-source-package sbcl-cl-flac))
+
 (define-public sbcl-clack
   (let ((commit "6fd0279424f7ba5fd4f92d69a1970846b0b11222")
         (revision "2"))
@@ -6608,8 +7211,8 @@ theory accurate to internal-time-units-per-second.")
   (sbcl-package->ecl-package sbcl-cl-log))
 
 (define-public sbcl-log4cl
-  (let ((commit "75c4184fe3dbd7dec2ca590e5f0176de8ead7911")
-        (revision "1"))
+  (let ((commit "fe3da517147d023029782ced7cd989ba24f1e62d")
+        (revision "2"))
     (package
       (name "sbcl-log4cl")
       (version (git-version "1.1.4" revision commit))
@@ -6621,7 +7224,7 @@ theory accurate to internal-time-units-per-second.")
                (commit commit)))
          (file-name (git-file-name "cl-log4cl" version))
          (sha256
-          (base32 "0mjkw4w3ksxvn87jqdnailqy2h6sziwmp4gf73jym45x9l5zahi5"))))
+          (base32 "0n119sy35k9yl4n18az1sw9a7saa5jh3v44863b305by1p5xdy7k"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
        (list sbcl-stefil))
@@ -8677,7 +9280,7 @@ system.")
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://github.com/glv2/bst")
+               (url "https://codeberg.org/glv/bst")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
@@ -8689,7 +9292,7 @@ system.")
       (description
        "BST is a Common Lisp library for working with binary search trees that
 can contain any kind of values.")
-      (home-page "https://github.com/glv2/bst")
+      (home-page "https://codeberg.org/glv/bst")
       (license license:gpl3))))
 
 (define-public cl-bst
@@ -8735,7 +9338,7 @@ octet streams analogous to string streams.")
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/glv2/cl-octet-streams")
+             (url "https://codeberg.org/glv/cl-octet-streams")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
@@ -8750,7 +9353,7 @@ octet streams analogous to string streams.")
      "CL-octet-streams is a library implementing in-memory octet
 streams for Common Lisp.  It was inspired by the trivial-octet-streams and
 cl-plumbing libraries.")
-    (home-page "https://github.com/glv2/cl-octet-streams")
+    (home-page "https://codeberg.org/glv/cl-octet-streams")
     (license license:gpl3+)))
 
 (define-public cl-octet-streams
@@ -8769,7 +9372,7 @@ cl-plumbing libraries.")
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://github.com/glv2/cl-lzlib")
+               (url "https://codeberg.org/glv/cl-lzlib")
                (commit commit)))
          (file-name (git-file-name "cl-lzlib" version))
          (sha256
@@ -8794,7 +9397,7 @@ cl-plumbing libraries.")
       (description
        "This Common Lisp library provides functions for lzip (LZMA)
 compression/decompression using bindings to the lzlib C library.")
-      (home-page "https://github.com/glv2/cl-lzlib")
+      (home-page "https://codeberg.org/glv/cl-lzlib")
       (license license:gpl3+))))
 
 (define-public cl-lzlib
@@ -9297,7 +9900,7 @@ Clojure, as well as several expansions on the idea.")
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://github.com/glv2/simple-parallel-tasks")
+               (url "https://codeberg.org/glv/simple-parallel-tasks")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
@@ -9310,7 +9913,7 @@ Clojure, as well as several expansions on the idea.")
       (synopsis "Common Lisp library to evaluate some forms in parallel")
       (description "This is a simple Common Lisp library to evaluate some
 forms in parallel.")
-      (home-page "https://github.com/glv2/simple-parallel-tasks")
+      (home-page "https://codeberg.org/glv/simple-parallel-tasks")
       (license license:gpl3))))
 
 (define-public cl-simple-parallel-tasks
@@ -9489,6 +10092,80 @@ results.")
 (define-public ecl-trivial-indent
   (sbcl-package->ecl-package sbcl-trivial-indent))
 
+(define-public sbcl-data-format-validation
+  (let ((commit "95d44766e829582598f9dcdc5c23719c462d5bfb")
+        (revision "1"))
+    (package
+      (name "sbcl-data-format-validation")
+      (version (git-version "0.2.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/willijar/cl-data-format-validation/")
+           (commit commit)))
+         (file-name (git-file-name "data-format-validation" version))
+         (sha256
+          (base32
+           "0zmk47xmicyqvp1impn8kgh5373ysmx3gfpqcvbi9r31qsir2nqa"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-cl-ppcre))
+      (synopsis "Validation and conversion between user and internal data")
+      (description
+       "@code{data-format-validation} is a library for Common Lisp providing a
+consistent regular interface for converting (and validating) external data (in
+the form of strings usually) into internal data types and for formatting
+internal data back into external presentable strings, all according to a
+conversion or type specification.")
+      (home-page "http://www.jarw.org.uk/lisp/cl-data-format-validation.html")
+      (license license:gpl3))))
+
+(define-public sbcl-cl-docutils
+  (let ((commit "756b5ad42360e84d8225fa69815bdd1623ceaa40")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-docutils")
+      (version (git-version "0.1.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/willijar/cl-docutils/")
+           (commit commit)))
+         (file-name (git-file-name "cl-docutils" version))
+         (sha256
+          (base32
+           "132bxlj0jlhiabi29mygmkcbbgyb5s1yz1xdfhm3pgrf9f8605gg"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       '(#:asd-systems '("docutils")))
+      (inputs
+       (list sbcl-cl-ppcre
+             sbcl-data-format-validation
+             sbcl-trivial-gray-streams))
+      (synopsis "Document utilities and Restructured text parser")
+      (description
+       "@code{cl-docutils} is a Common Lisp implementation of the Docutils text
+processing system for processing plaintext into presentational formats such as
+HTML and LaTeX.  It is based upon the Python Docutils reference implementation
+but uses Common Lisp idioms making it easier to extend and more flexible.  As
+with the reference implementation it includes a parser for the reStructured
+text plaintext markup syntax which is suitable for marking up documentation
+and for use as user markup for collaborative web sites.  It is successfully
+used to support a higher education peer-review assessment and online tutorial
+system.")
+      (home-page "http://www.jarw.org.uk/lisp/cl-docutils.html")
+      (license license:gpl3))))
+
+(define-public cl-docutils
+  (sbcl-package->cl-source-package sbcl-cl-docutils))
+
+(define-public ecl-cl-docutils
+  (sbcl-package->ecl-package sbcl-cl-docutils))
+
 (define-public sbcl-documentation-utils
   (let ((commit "98630dd5f7e36ae057fa09da3523f42ccb5d1f55")
         (revision "0"))
@@ -9561,6 +10238,55 @@ for more information.")
 (define-public ecl-documentation-utils-extensions
   (sbcl-package->ecl-package sbcl-documentation-utils-extensions))
 
+(define-public sbcl-staple
+  (let ((commit "0ee8e25fe6fe8fa83b2a6c93d4febd468c3eaa4e")
+        (revision "1"))
+    (package
+      (name "sbcl-staple")
+      (version (git-version "2.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/staple/")
+               (commit commit)))
+         (sha256
+          (base32 "0qf0if7py3n4rszg25lcavpsqikfz6k5dvcmh5q67y8x5r12i5m7"))
+         (file-name (git-file-name "staple" version))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       '(#:asd-systems '("staple-package-recording"
+                         "staple-code-parser"
+                         "staple"
+                         "staple-markdown"
+                         "staple-markless"
+                         "staple-restructured-text")))
+      (inputs
+       (list sbcl-3bmd
+             sbcl-babel
+             sbcl-cl-docutils
+             sbcl-cl-markless
+             sbcl-cl-ppcre
+             sbcl-clip
+             sbcl-concrete-syntax-tree
+             sbcl-definitions
+             sbcl-documentation-utils
+             sbcl-eclector
+             sbcl-language-codes
+             sbcl-pathname-utils))
+      (synopsis "Generate documentation about Lisp projects through an HTML template")
+      (description "Staple is a documentation system.  It provides you with a
+way to generate standalone documentation accumulated from various sources such
+as readmes, documentation files, and docstrings.")
+      (home-page "https://Shinmera.github.io/staple/")
+      (license license:zlib))))
+
+(define-public cl-staple
+  (sbcl-package->cl-source-package sbcl-staple))
+
+(define-public ecl-staple
+  (sbcl-package->ecl-package sbcl-staple))
+
 (define-public sbcl-form-fiddle
   (let ((commit "e0c23599dbb8cff3e83e012f3d86d0764188ad18")
         (revision "0"))
@@ -10854,7 +11580,7 @@ defined in RFC4648.")
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://github.com/glv2/cl-z85")
+               (url "https://codeberg.org/glv/cl-z85")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
@@ -10867,7 +11593,7 @@ defined in RFC4648.")
        "This package provides functions to encode or decode byte vectors or
 byte streams using the Z85 format, which is a base-85 encoding used by
 ZeroMQ.")
-      (home-page "https://github.com/glv2/cl-z85")
+      (home-page "https://codeberg.org/glv/cl-z85")
       (license license:gpl3+))))
 
 (define-public cl-z85
@@ -11502,7 +12228,7 @@ them as PNG files.")
 (define-public sbcl-history-tree
   (package
     (name "sbcl-history-tree")
-    (version "0.1.0")
+    (version "0.1.1")
     (source
      (origin
        (method git-fetch)
@@ -11511,16 +12237,21 @@ them as PNG files.")
              (commit version)))
        (file-name (git-file-name "cl-history-tree" version))
        (sha256
-        (base32 "0z4mfgswfbpkh496qqk130yk6d0q0q5imqybw9n58aq4ygfhibhz"))))
+        (base32 "16fynij438zs4g29m7c0vmkfb0sbaz8gj7zjnxpbgjckbim93qwl"))
+       (modules '((guix build utils)))
+       (snippet
+        `(begin
+           (delete-file-recursively "nasdf")
+           #t))))
     (build-system asdf-build-system/sbcl)
     (inputs
      (list
       sbcl-alexandria
       sbcl-custom-hash-table
       sbcl-local-time
-      sbcl-hu.dwim.defclass-star
+      sbcl-nclasses
       sbcl-trivial-package-local-nicknames))
-    (native-inputs (list sbcl-lisp-unit2))
+    (native-inputs (list sbcl-nasdf sbcl-lisp-unit2))
     (home-page "https://github.com/atlas-engineer/history-tree")
     (synopsis "Store the history of a browser's visited paths")
     (description
@@ -13539,8 +14270,8 @@ files.")
   (sbcl-package->cl-source-package sbcl-cl-mpg123))
 
 (define-public sbcl-cl-out123
-  (let ((commit "6b58d3f8c2a28ad09059ac4c60fb3c781b9b421b")
-        (revision "1"))
+  (let ((commit "41771bfd419e7349ad569f8e6fcd8a26d6f9e5b7")
+        (revision "2"))
     (package
       (name "sbcl-cl-out123")
       (version (git-version "1.0.0" revision commit))
@@ -13552,39 +14283,29 @@ files.")
                (commit commit)))
          (file-name (git-file-name "cl-out123" version))
          (sha256
-          (base32 "0mdwgfax6sq68wvdgjjp78i40ah7wqkpqnvaq8a1c509k7ghdgv1"))
+          (base32 "0ahgc5l5lbpl3ini4pn5crh8b7dlr386pxczl0d4h6djhccxzs4w"))
          (modules '((guix build utils)))
          (snippet
           '(begin
              ;; Remove bundled pre-compiled libraries.
-             (delete-file-recursively "static")
-             #t))))
+             (delete-file-recursively "static")))))
       (build-system asdf-build-system/sbcl)
       (arguments
-       `(#:phases
+       `(#:tests? #f ; No tests
+         #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'fix-paths
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "low-level.lisp"
-                 (("libout123.so" all)
-                  (string-append (assoc-ref inputs "libout123")
-                                 "/lib/" all)))))
-           ;; NOTE: (Sharlatan-20210129T134529+0000): ECL package `ext' has no
-           ;; exported macro `without-interrupts' it's moved to `mp' package
-           ;; https://github.com/Shirakumo/cl-out123/issues/2
-           ;; https://gitlab.com/embeddable-common-lisp/ecl/-/blob/develop/src/lsp/mp.lsp
-           (add-after 'unpack 'fix-ecl-package-name
-             (lambda _
-               (substitute* "wrapper.lisp"
-                 (("ext:without-interrupts.*") "mp:without-interrupts\n"))
-               #t)))))
+                 (("libout123.so")
+                  (search-input-file inputs "/lib/libout123.so"))))))))
       (inputs
-       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
-         ("cffi" ,sbcl-cffi)
-         ("documentation-utils" ,sbcl-documentation-utils)
-         ("libout123" ,mpg123)
-         ("trivial-features" ,sbcl-trivial-features)
-         ("trivial-garbage" ,sbcl-trivial-garbage)))
+       (list mpg123
+             sbcl-bordeaux-threads
+             sbcl-cffi
+             sbcl-documentation-utils
+             sbcl-trivial-features
+             sbcl-trivial-garbage))
       (home-page "https://shirakumo.github.io/cl-out123/")
       (synopsis "Common Lisp bindings to libout123")
       (description
@@ -15784,7 +16505,7 @@ scale statistical machine learning package")
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://github.com/glv2/utm-ups")
+               (url "https://codeberg.org/glv/utm-ups")
                (commit commit)))
          (file-name (git-file-name "utm-ups" version))
          (sha256
@@ -15798,7 +16519,7 @@ scale statistical machine learning package")
        "This a Common Lisp library to convert geographic coordinates between
 latitude/longitude and UTM (Universal Transverse Mercator) or UPS (Universal
 Polar Stereographic).")
-      (home-page "https://github.com/glv2/utm-ups")
+      (home-page "https://codeberg.org/glv/utm-ups")
       (license license:gpl3+))))
 
 (define-public cl-utm-ups
@@ -15817,7 +16538,7 @@ Polar Stereographic).")
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://github.com/glv2/mgrs")
+               (url "https://codeberg.org/glv/mgrs")
                (commit commit)))
          (file-name (git-file-name "cl-mgrs" version))
          (sha256
@@ -15832,7 +16553,7 @@ Polar Stereographic).")
       (description
        "This a Common Lisp library to convert geographic coordinates between
 latitude/longitude and MGRS.")
-      (home-page "https://github.com/glv2/mgrs")
+      (home-page "https://codeberg.org/glv/mgrs")
       (license license:gpl3+))))
 
 (define-public cl-mgrs
@@ -15851,7 +16572,7 @@ latitude/longitude and MGRS.")
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://github.com/glv2/maidenhead")
+               (url "https://codeberg.org/glv/maidenhead")
                (commit commit)))
          (file-name (git-file-name "cl-maidenhead" version))
          (sha256
@@ -15864,7 +16585,7 @@ latitude/longitude and MGRS.")
       (description
        "This a Common Lisp library to convert geographic coordinates between
 latitude/longitude and Maidenhead locator system.")
-      (home-page "https://github.com/glv2/maidenhead")
+      (home-page "https://codeberg.org/glv/maidenhead")
       (license license:gpl3+))))
 
 (define-public cl-maidenhead
@@ -15883,7 +16604,7 @@ latitude/longitude and Maidenhead locator system.")
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://github.com/glv2/olc")
+               (url "https://codeberg.org/glv/olc")
                (commit commit)))
          (file-name (git-file-name "cl-olc" version))
          (sha256
@@ -15896,7 +16617,7 @@ latitude/longitude and Maidenhead locator system.")
       (description
        "This a Common Lisp library to convert geographic coordinates between
 latitude/longitude and Open Location Code.")
-      (home-page "https://github.com/glv2/olc")
+      (home-page "https://codeberg.org/glv/olc")
       (license license:gpl3+))))
 
 (define-public cl-olc
@@ -16463,7 +17184,7 @@ Service (S3) and CloudFront service from Common Lisp.")
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/glv2/simple-neural-network")
+             (url "https://codeberg.org/glv/simple-neural-network")
              (commit (string-append "v" version))))
        (file-name (git-file-name "simple-neural-network" version))
        (sha256
@@ -16487,7 +17208,7 @@ Service (S3) and CloudFront service from Common Lisp.")
      "@code{simple-neural-network} is a Common Lisp library for creating,
 training and using basic neural networks.  The networks created by this
 library are feedforward neural networks trained using backpropagation.")
-    (home-page "https://github.com/glv2/simple-neural-network")
+    (home-page "https://codeberg.org/glv/simple-neural-network")
     (license license:gpl3+)))
 
 (define-public cl-simple-neural-network
@@ -16506,7 +17227,7 @@ library are feedforward neural networks trained using backpropagation.")
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://github.com/glv2/cl-zstd")
+               (url "https://codeberg.org/glv/cl-zstd")
                (commit commit)))
          (file-name (git-file-name "cl-zstd" version))
          (sha256
@@ -16530,7 +17251,7 @@ library are feedforward neural networks trained using backpropagation.")
       (description
        "This Common Lisp library provides functions for Zstandard
 compression/decompression using bindings to the libzstd C library.")
-      (home-page "https://github.com/glv2/cl-zstd")
+      (home-page "https://codeberg.org/glv/cl-zstd")
       (license license:gpl3+))))
 
 (define-public cl-zstd
@@ -16645,6 +17366,55 @@ bringing dynamism to class definition.")
 (define-public cl-markdown
   (sbcl-package->cl-source-package sbcl-cl-markdown))
 
+(define-public sbcl-cl-markless
+  (let ((commit "a0e145c03103bd3bf7e275d5ac0e19e8381eb844")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-markless")
+      (version (git-version "1.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shirakumo/cl-markless")
+               (commit commit)))
+         (file-name (git-file-name "cl-markless" version))
+         (sha256
+          (base32 "154ax1yk0b1035yij29c5pgfn7ifghrxy821mk68wyljg8afgvh5"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       (list sbcl-parachute))
+      (inputs
+       (list sbcl-3bmd
+             sbcl-babel
+             sbcl-command-line-arguments
+             sbcl-documentation-utils
+             sbcl-plump
+             sbcl-trivial-gray-streams
+             sbcl-trivial-indent
+             sbcl-trivial-mimes
+             sbcl-zip))
+      (arguments
+       '(#:asd-systems '("cl-markless"
+                         "cl-markless-plump"
+                         "cl-markless-epub"
+                         "cl-markless-markdown"
+                         "cl-markless-standalone")))
+      (home-page "https://shirakumo.github.io/cl-markless/")
+      (synopsis "Parser implementation for Markless")
+      (description "This is an implementation of the \"Markless
+standard\" (@url{https://github.com/shirakumo/markless}) at version 1.0.  It
+handles the parsing of plaintext from a stream into an abstract syntax tree
+composed out of strings and component objects.  From there the AST can be
+easily compiled into a target markup language like HTML.")
+      (license license:zlib))))
+
+(define-public ecl-cl-markless
+  (sbcl-package->ecl-package sbcl-cl-markless))
+
+(define-public cl-markless
+  (sbcl-package->cl-source-package sbcl-cl-markless))
+
 (define-public sbcl-magicffi
   (let ((commit "d88f2f280c31f639e4e05be75215d8a8dce6aef2"))
     (package
@@ -16921,19 +17691,20 @@ source files.")
   (sbcl-package->cl-source-package sbcl-cl-indentify))
 
 (define-public sbcl-concrete-syntax-tree
-  (let ((commit "4f01430c34f163356f3a2cfbf0a8a6963ff0e5ac"))
+  (let ((commit "37291727196a3bc88a7be67c1427c52078d4b82c")
+        (revision "0"))
     (package
       (name "sbcl-concrete-syntax-tree")
-      (version (git-version "0.0.0" "2" commit))
+      (version (git-version "0.2.0" revision commit))
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
                (url "https://github.com/s-expressionists/Concrete-Syntax-Tree")
                (commit commit)))
-         (file-name (git-file-name name commit))
+         (file-name (git-file-name "cl-concrete-syntax-tree" commit))
          (sha256
-          (base32 "169ibaz1vv7pphib28443zzk3hf1mrcarhzfm8hnbdbk529cnxyi"))))
+          (base32 "15q9jyqsh2z921li9my8c840cj2ci7k217x5frfiyk0kymkx4rgv"))))
       (build-system asdf-build-system/sbcl)
       (inputs
        (list sbcl-acclimation))
@@ -16968,24 +17739,24 @@ the origin.")
 (define-public sbcl-eclector
   (package
     (name "sbcl-eclector")
-    (version "0.5.0")
+    (version "0.9.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/s-expressionists/Eclector")
              (commit version)))
-       (file-name (git-file-name name version))
+       (file-name (git-file-name "cl-eclector" version))
        (sha256
-        (base32 "0bwkla0jdp5bg0q1zca5wg22b0nbdmglgax345nrhsf8bdrh47wm"))))
+        (base32 "10whwpz08fkdcz59sz1b6rn5r1pdns5wnsb1g26gppiv3rrg3cvh"))))
     (build-system asdf-build-system/sbcl)
-    (inputs
-     `(("acclimation" ,sbcl-acclimation)
-       ("alexandria" ,sbcl-alexandria)
-       ("closer-mop" ,sbcl-closer-mop)
-       ("concrete-syntax-tree" ,sbcl-concrete-syntax-tree)))
     (native-inputs
      (list sbcl-fiveam))
+    (inputs
+     (list sbcl-acclimation
+           sbcl-alexandria
+           sbcl-closer-mop
+           sbcl-concrete-syntax-tree))
     (arguments
      '(#:asd-systems '("eclector"
                        "eclector-concrete-syntax-tree")))
@@ -17010,8 +17781,8 @@ the concrete syntax tree library.")
   (sbcl-package->cl-source-package sbcl-eclector))
 
 (define-public sbcl-trucler
-  (let ((commit "167199797eb3e2e9d9d3e1fe6e11948c663ce7e2")
-        (revision "0"))
+  (let ((commit "d40ff965520cbccf4980b7e7e3122912a11f24ad")
+        (revision "1"))
     (package
       (name "sbcl-trucler")
       (version (git-version "0.0.0" revision commit))
@@ -17023,7 +17794,7 @@ the concrete syntax tree library.")
                (commit commit)))
          (file-name (git-file-name "cl-trucler" commit))
          (sha256
-          (base32 "0ra1phwy0vn4xrm5i1dvq9205m6s9fl0sr0rpiz3xjykxyl9mzms"))))
+          (base32 "0a0zi7q88j31n0b17yfxb66xjvvridgqr4vr6z3pgnm9wha990a6"))))
       (build-system asdf-build-system/sbcl)
       (inputs
        (list sbcl-acclimation))
@@ -17419,6 +18190,49 @@ adaptations.")
 (define-public cl-radiance
   (sbcl-package->cl-source-package sbcl-radiance))
 
+(define-public sbcl-radiance-contribs
+  (let ((commit "710b3e1f9971e48368d52eea0b407f2e8f510981")
+        (revision "1"))
+    (package
+      (name "sbcl-radiance-contribs")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shirakumo/radiance-contribs")
+               (commit commit)))
+         (file-name (git-file-name "radiance-contribs" version))
+         (sha256
+          (base32 "08ivnd7a6vfciqna680qpx6zj6vw9xcbrzq29iz3x7x9sp1pqgq3"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       ;; TODO: Include more contribs.
+       `(#:asd-systems '("r-clip"
+                         "i-log4cl"
+                         "i-sqlite"
+                         "r-data-model"
+                         "r-simple-rate"
+                         "r-welcome")))
+      (inputs
+       (list sbcl-radiance
+             sbcl-cffi
+             sbcl-clip
+             sbcl-cl-sqlite
+             sbcl-log4cl))
+      (home-page "https://shirakumo.github.io/radiance/")
+      (synopsis "Standard implementations and drivers for the radiance interfaces")
+      (description
+       "This is a collection of useful helper modules and standard
+implementations for Radiance interfaces.")
+      (license license:zlib))))
+
+(define-public ecl-radiance-contribs
+  (sbcl-package->ecl-package sbcl-radiance-contribs))
+
+(define-public cl-radiance-contribs
+  (sbcl-package->cl-source-package sbcl-radiance-contribs))
+
 (define-public sbcl-daemon
   (let ((commit "d5652f4332c3cee21e9bf83b9237129605004597")
         (revision "1"))
@@ -17480,6 +18294,84 @@ attributes not supported by the Common Lisp standard functions.")
 (define-public cl-file-attributes
   (sbcl-package->cl-source-package sbcl-file-attributes))
 
+(define-public sbcl-filesystem-utils
+  (let ((commit "4455bb6c43f4433dd68a34ddad9ed5aa9b649243"))
+    (package
+      (name "sbcl-filesystem-utils")
+      (version (git-version "1.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/filesystem-utils/")
+               (commit commit)))
+         (file-name (git-file-name "filesystem-utils" version))
+         (sha256
+          (base32 "0rww9r26zh44qwmj0b4sl95jngdn2h0239x5gjzak3gpdc3i3nbr"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-documentation-utils
+             sbcl-pathname-utils
+             sbcl-trivial-features))
+      (home-page "https://shinmera.github.io/filesystem-utils/")
+      (synopsis "Collection of utilities for filesystem interaction")
+      (description
+       "This is an extension library to @code{pathname-utils}, to allow
+dealing with common problems with filesystems, such as listing files, probing
+file types, determining default directories, etc.")
+      (license license:zlib))))
+
+(define-public ecl-filesystem-utils
+  (sbcl-package->ecl-package sbcl-filesystem-utils))
+
+(define-public cl-filesystem-utils
+  (sbcl-package->cl-source-package sbcl-filesystem-utils))
+
+(define-public sbcl-depot
+  (let ((commit "73822d9f480cbad00971b45ee80117297a67fb53")
+        (revision "1"))
+    (package
+      (name "sbcl-depot")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/depot/")
+               (commit commit)))
+         (sha256
+          (base32 "1v42pirdwbxy8l8i9a2jmbpri8a62vh0r4vm25xwaak0y4gr71va"))
+         (file-name (git-file-name "depot" version))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-atomics
+             sbcl-babel
+             sbcl-documentation-utils
+             sbcl-trivial-features
+             sbcl-trivial-gray-streams
+             sbcl-zippy))
+      ;; TODO: Some 6 tests fail, why?  See https://github.com/Shinmera/depot/issues/2.
+      (arguments
+       '(#:asd-systems '("depot"
+                         "depot-in-memory"
+                         "depot-virtual"
+                         "depot-zip")))
+      (synopsis "Protocol for transparent collections of files")
+      (description "This is a system presenting a protocol for \"file
+systems\": things that present a collection of \"files,\" which are things
+that have several attributes, and a central data payload.  Most notably this
+includes the OS filesystem, but can also be used to address other
+filesystem-like things like archives, object stores, etc. in the same
+manner.")
+      (home-page "https://shinmera.github.io/depot/")
+      (license license:zlib))))
+
+(define-public ecl-depot
+  (sbcl-package->ecl-package sbcl-depot))
+
+(define-public cl-depot
+  (sbcl-package->cl-source-package sbcl-depot))
+
 (define-public sbcl-cl-difflib
   (let ((commit "98eb335c693f1881584b83ca7be4a0fe05355c4e")
         (revision "0"))
@@ -18254,8 +19146,8 @@ compiled foreign library collection.")
   (sbcl-package->ecl-package sbcl-bodge-blobs-support))
 
 (define-public sbcl-cl-conspack
-  (let ((commit "fc8473bc6f929696b03b43820596b7c976c4678e")
-        (revision "1"))
+  (let ((commit "6e529d7b3a7223ef1bb5c7b9f18384ba67b50b09")
+        (revision "2"))
     (package
      (name "sbcl-cl-conspack")
      (version (git-version "0.0.0" revision commit))
@@ -18267,28 +19159,19 @@ compiled foreign library collection.")
              (commit commit)))
        (file-name (git-file-name "cl-conspack" version))
        (sha256
-        (base32 "0b7qzvsrpvnw12hqhjmz0b02sigj0kdjy55j4k7xzmj8684cs8bx"))))
+        (base32 "0y5wp5c89ph44k2xjppy1c1jf2ac3q9yrk22da2rkwnbxn0h1a8d"))))
      (build-system asdf-build-system/sbcl)
-     ;; FIXME: (Sharlatan-20210331T220652+0100): Test are disabled because of:
-     ;;
-     ;; Error while trying to load definition for system cl-conspack-test
-     ;; from pathname .../cl-conspack/cl-conspack-test.asd:
-     ;; Error opening .../checkl/formalize-tmpGHU3ALSV.fasl": Permission denied
-     ;;
-     ;; It looks like the issues is in CheckL itself as other packages keep
-     ;; failing test where it's in use.
      (arguments
-      '(#:tests? #f
-        #:asd-test-systems '("cl-conspack-test")))
+      '(#:asd-test-systems '("cl-conspack-test")))
      (native-inputs
-      (list sbcl-checkl))
+      (list sbcl-fiveam))
      (inputs
-      `(("alexandria" ,sbcl-alexandria)
-        ("closer-mop" ,sbcl-closer-mop)
-        ("fast-io" ,sbcl-fast-io)
-        ("ieee-floats" ,sbcl-ieee-floats)
-        ("trivial-garbage" ,sbcl-trivial-garbage)
-        ("trivial-utf-8" ,sbcl-trivial-utf-8)))
+       (list sbcl-alexandria
+             sbcl-closer-mop
+             sbcl-fast-io
+             sbcl-ieee-floats
+             sbcl-trivial-garbage
+             sbcl-trivial-utf-8))
      (home-page "https://github.com/conspack/cl-conspack")
      (synopsis "CONSPACK implementation for Common Lisp")
      (description
@@ -18736,6 +19619,86 @@ encodings.")
 (define-public cl-mime
   (sbcl-package->cl-source-package sbcl-cl-mime))
 
+(define-public sbcl-cl-mixed
+  (let ((commit "4aaff134d3902d93a2a8605c10de4bcfc62d7afa")
+        (revision "0"))
+    (package
+      (name "sbcl-cl-mixed")
+      (version (git-version "2.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shirakumo/cl-mixed")
+               (commit commit)))
+         (file-name (git-file-name "cl-mixed" version))
+         (sha256
+          (base32 "1mrj95lxb1gbxxm89x8gy1ifw2ic1p5wwpapkxcd2jr8abw7zny0"))
+         (modules '((guix build utils)))
+         (snippet
+          ;; Delete bundled libraries.
+          `(begin
+             (delete-file-recursively "static")))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       '(#:asd-systems '("cl-mixed"
+                         "cl-mixed-examples"
+                         "cl-mixed-flac"
+                         "cl-mixed-vorbis"
+                         "cl-mixed-alsa"
+                         "cl-mixed-jack"
+                         "cl-mixed-mpg123"
+                         "cl-mixed-mpt"
+                         "cl-mixed-out123"
+                         "cl-mixed-pulse"
+                         "cl-mixed-sdl2"
+                         "cl-mixed-wav")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "low-level.lisp"
+                 (("libmixed.so.2")
+                  (search-input-file inputs "/lib/libmixed.so.2"))))))))
+      (inputs
+       (list libmixed
+             sbcl-alexandria
+             sbcl-cffi
+             sbcl-cl-flac
+             sbcl-cl-mpg123
+             sbcl-cl-out123
+             sbcl-cl-vorbis
+             sbcl-documentation-utils
+             sbcl-sdl2
+             sbcl-static-vectors
+             sbcl-trivial-features))
+      (home-page "https://shirakumo.github.io/cl-mixed/")
+      (synopsis "Extended audio library for Common Lisp")
+      (description
+       "This package provides CFFI binding to @code{libmixed} audio library for
+Common Lisp with support of other audio formats available on GNU/Linux systems:
+
+@itemize
+
+@item @acronym{Alsa, Advanced Linux Sound Architecture}
+@item @acronym{Jack, JackAudio toolkit}
+@item @acronym{Openmpt, Libopenmpt playback drain for tracker files}
+@item @acronym{PulseAudio, PulseAudio based playback drain}
+@item Flac (via CL-FLAC)
+@item Mpg123 (via CL-MPG123)
+@item Ogg/vorbis (via CL-VORBIS)
+@item Out123 (via CL-OUT123)
+@item WAV
+
+@end itemize")
+      (license license:zlib))))
+
+(define-public ecl-cl-mixed
+  (sbcl-package->ecl-package sbcl-cl-mixed))
+
+(define-public cl-mixed
+  (sbcl-package->cl-source-package sbcl-cl-mixed))
+
 (define-public sbcl-lispbuilder-sdl
   (let ((commit "589b3c6d552bbec4b520f61388117d6c7b3de5ab"))
     (package
@@ -20818,8 +21781,8 @@ tested (as shown in the examples).")
   (sbcl-package->cl-source-package sbcl-sdl2-ttf))
 
 (define-public sbcl-cl-gamepad
-  (let ((commit "647f6ee8f40048286d743d79845c3753fba9d8f1")
-        (revision "2"))
+  (let ((commit "d5b99fbaa2e39294d23061699e8f1e761eda7205")
+        (revision "3"))
     (package
       (name "sbcl-cl-gamepad")
       (version (git-version "3.0.0" revision commit))
@@ -20831,10 +21794,11 @@ tested (as shown in the examples).")
                (commit commit)))
          (file-name (git-file-name "cl-gamepad" version))
          (sha256
-          (base32 "0w9lcahgqacc39932jp2ghid9sl4wg4vyaza8vdnghmixdl49cin"))))
+          (base32 "0y6kg9wq92p07i1chm1v7j7p77iqc5c985pdvmmivcip8zmd4hm4"))))
       (build-system asdf-build-system/sbcl)
       (arguments
-       `(#:phases
+       `(#:tests? #f ; No tests
+         #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'patch-evdev-lib-path
              (lambda* (#:key inputs #:allow-other-keys)
@@ -20890,8 +21854,7 @@ joysticks, and other such HID devices.")
                          ;; ...
                          ;; "trial-glop"
                          "trial-gltf"
-                         ;; TODO: It requires a long packaging journey.
-                         ;; "trial-harmony"
+                         "trial-harmony"
                          "trial-jpeg"
                          "trial-notify"
                          "trial-png"
@@ -20937,6 +21900,7 @@ joysticks, and other such HID devices.")
              sbcl-form-fiddle
              sbcl-glop
              sbcl-glsl-toolkit
+             sbcl-harmony
              sbcl-ieee-floats
              sbcl-jzon
              sbcl-lambda-fiddle
@@ -22511,10 +23475,20 @@ higher-level lispier interface.")
          (uri (git-reference
                (url "https://github.com/eudoxia0/trivial-open-browser")
                (commit commit)))
-         (file-name (git-file-name "trivial-open-browser" version))
+         (file-name (git-file-name "cl-trivial-open-browser" version))
          (sha256
           (base32 "0ixay1piq420i6adx642qhw45l6ik7rvgk52lyz27dvx5f8yqsdb"))))
       (build-system asdf-build-system/sbcl)
+      (inputs (list xdg-utils))
+      (arguments
+       (list
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'fix-paths
+              (lambda* (#:key inputs #:allow-other-keys)
+                (substitute* "src/trivial-open-browser.lisp"
+                  (("xdg-open")
+                   (search-input-file inputs "/bin/xdg-open"))))))))
       (home-page "https://github.com/eudoxia0/trivial-open-browser")
       (synopsis "Open a browser window from Common Lisp")
       (description
@@ -23556,6 +24530,98 @@ Vernacular builds on Overlord and is inspired by Racket.")
 (define-public cl-vernacular
   (sbcl-package->cl-source-package sbcl-vernacular))
 
+(define-public sbcl-cl-collider
+  (let ((commit "a46908896982868955b29bfb3a5337a0af489b0b")
+        (revision "0"))
+    (package
+     (name "sbcl-cl-collider")
+     (version (git-version "2018.7.15" revision commit))
+     (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/byulparan/cl-collider")
+               (commit commit)))
+         (file-name (git-file-name "cl-collider" version))
+         (sha256
+          (base32 "10wvjbwvbgr0b57hpfxycg90yjmb29pirygr1sxrdaqxll328sz1"))))
+     (build-system asdf-build-system/sbcl)
+     (arguments
+       (list #:phases
+             #~(modify-phases %standard-phases
+                 (add-after 'unpack 'patch-executables-and-paths
+                   (lambda* (#:key inputs #:allow-other-keys)
+                     (substitute* "server.lisp"
+                       (("/usr/local/lib/SuperCollider/plugins")
+                        (search-input-directory
+                         inputs "/lib/SuperCollider/plugins"))
+                       (("/usr/local/share/SuperCollider/Extensions")
+                        (search-input-directory
+                         inputs "/share/SuperCollider/Extensions"))
+                       (("which scsynth")
+                        (string-append
+                         "which "
+                         (search-input-file inputs "/bin/scsynth")))
+                       (("jack_connect")
+                        (search-input-file inputs "/bin/jack_connect"))))))))
+     (inputs
+       (list jack-1
+             supercollider
+             sbcl-alexandria
+             sbcl-bordeaux-threads
+             sbcl-cffi
+             sbcl-cl-ppcre
+             sbcl-flexi-streams
+             sbcl-ieee-floats ; sc-osc dependencies.
+             sbcl-named-readtables
+             sbcl-osc
+             sbcl-pileup
+             sbcl-simple-inferiors ; For ecl.
+             sbcl-split-sequence
+             sbcl-usocket))
+     (synopsis "SuperCollider client for CommonLisp")
+     (description "This package provides a SuperCollider client for
+Common Lisp.")
+     (home-page "https://github.com/byulparan/cl-collider/")
+     (license license:public-domain))))
+
+(define-public cl-collider
+  (sbcl-package->cl-source-package sbcl-cl-collider))
+
+(define-public ecl-cl-collider
+  (sbcl-package->ecl-package sbcl-cl-collider))
+
+(define-public sbcl-osc
+  (let ((commit "9f0a9d3da310a3a0f654f48af0203816f3f371ad")
+        (revision "0"))
+    (package
+     (name "sbcl-osc")
+     (version (git-version "0.7" revision commit))
+     (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/zzkt/osc")
+               (commit commit)))
+         (file-name (git-file-name "cl-osc" version))
+         (sha256
+          (base32 "0gh29zcl9pmy3xlmwzpf9www2z06ah6b4jk06sj2cvxbc15nblqa"))))
+     (build-system asdf-build-system/sbcl)
+     (inputs (list sbcl-usocket))
+     (synopsis "Implementation of the Open Sound Control protocol")
+     (description "This package provides a common lisp implementation
+of the Open Sound Control Protocol aka OSC.  The code should be close
+to the ansi standard, and does not rely on any external code/ffi/etc+
+to do the basic encoding and decoding of packets.")
+     (home-page "https://github.com/zzkt/osc/")
+     (license (list license:gpl3 license:llgpl)))))
+
+(define-public cl-osc
+  (sbcl-package->cl-source-package sbcl-osc))
+
+(define-public ecl-osc
+  (sbcl-package->ecl-package sbcl-osc))
+
 (define-public sbcl-cmn
   (package
     (name "sbcl-cmn")
@@ -24749,7 +25815,7 @@ implementation for Common Lisp.")
 (define-public sbcl-jzon
   (package
     (name "sbcl-jzon")
-    (version "1.0.0")
+    (version "1.1.0")
     (source
      (origin
        (method git-fetch)
@@ -24758,7 +25824,7 @@ implementation for Common Lisp.")
              (commit (string-append "v" version))))
        (file-name (git-file-name "cl-jzon" version))
        (sha256
-        (base32 "03k0czc58wlnxavkmr7gbrza6zq40ih4da8yjbxg9ba8m0bzzdw4"))))
+        (base32 "0rbardn1dfizpyyy1c127zzk1fnq4pslz75xa7ldpfjsi5jc5fmr"))))
     (build-system asdf-build-system/sbcl)
     (arguments
      '(#:asd-systems '("com.inuoe.jzon")
@@ -24792,13 +25858,7 @@ implementation for Common Lisp.")
   (sbcl-package->cl-source-package sbcl-jzon))
 
 (define-public ecl-jzon
-  (let ((pkg (sbcl-package->ecl-package sbcl-jzon)))
-    (package
-      (inherit pkg)
-      (arguments
-       (substitute-keyword-arguments (package-arguments pkg)
-         ;; FIXME: Tests fail on ECL:  https://github.com/Zulu-Inuoe/jzon/issues/36
-         ((#:tests? _ #f) #f))))))
+  (sbcl-package->ecl-package sbcl-jzon))
 
 (define-public sbcl-simple-routes
   (let ((commit "6f88c38945a4de73e85786d3499c39cacb400598")
@@ -26184,6 +27244,41 @@ functionality similar to what was originally found in @code{sdl2kit}.
 (define-public ecl-glkit
   (sbcl-package->ecl-package sbcl-glkit))
 
+(define-public sbcl-cl-fond
+  (let ((commit "dac975cbc73f231b400d5b8d8539b16330239a4a")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-fond")
+      (version (git-version "1.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shirakumo/cl-fond")
+               (commit commit)))
+         (file-name (git-file-name "cl-fond" version))
+         (sha256
+          (base32 "03ygcw1azb44bhdsqcq99xi4ci0by76ap5jf5l2d1vfxq04v8grq"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria
+             sbcl-cffi
+             sbcl-cl-opengl
+             sbcl-documentation-utils
+             sbcl-trivial-features
+             sbcl-trivial-garbage))
+      (home-page "https://shirakumo.github.io/cl-fond/")
+      (synopsis "Bindings to libfond, a simple text rendering engine for OpenGL")
+      (description "This is a Common Lisp bindings library to libfond, a
+simple OpenGL text rendering engine.")
+      (license license:zlib))))
+
+(define-public cl-fond
+  (sbcl-package->cl-source-package sbcl-cl-fond))
+
+(define-public ecl-cl-fond
+  (sbcl-package->ecl-package sbcl-cl-fond))
+
 (define-public sbcl-doplus
   (package
     (name "sbcl-doplus")
@@ -27443,6 +28538,35 @@ roman numeral given in the key.")
           `(modify-phases ,phases
              (delete 'build-binary))))))))
 
+(define-public sbcl-music-spelling
+  (let ((commit "a2d492af440ad30a21042140cf8ffce4b73fbd42")
+        (revision "0"))
+    (package
+      (name "sbcl-music-spelling")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/ntrocado/music-spelling")
+               (commit commit)))
+         (file-name (git-file-name "cl-music-spelling" version))
+         (sha256
+          (base32 "0fgahb0jjr4sp2739d55gylmx8alsghnx3spyaqfqci4cxfrys52"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs (list sbcl-alexandria))
+      (home-page "https://github.com/ntrocado/music-spelling/")
+      (synopsis "Automatically spell musical pitches and rhythms")
+      (description "This package implements an algorithm for the spelling
+of enharmonics and dealing with ties and dots in rhythm notation.")
+      (license license:asl2.0))))
+
+(define-public cl-music-spelling
+  (sbcl-package->cl-source-package sbcl-music-spelling))
+
+(define-public ecl-music-spelling
+  (sbcl-package->ecl-package sbcl-music-spelling))
+
 (define-public sbcl-closure-template
   ;; There are no releases since 2015.
   (let ((commit "f1983aa525045691e128027d2a2d74831c873d6e")
@@ -27576,6 +28700,57 @@ generation as well as numerous distributions.")
 (define-public ecl-cl-variates
   (sbcl-package->ecl-package sbcl-cl-variates))
 
+(define-public sbcl-cl-vorbis
+  (let ((commit "c5835cd7091aea9e2e389ad359d244542d637758")
+        (revision "0"))
+    (package
+      (name "sbcl-cl-vorbis")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shirakumo/cl-vorbis")
+               (commit commit)))
+         (file-name (git-file-name "cl-vorbis" version))
+         (sha256
+          (base32 "0713pl5c2khfpf8m3h1l2y0ilack7akf580h70jq6qcrnq3h4b40"))
+         (modules '((guix build utils)))
+         (snippet
+          ;; Delete bundled libraries, GlibC and Vorbis sources.
+          `(begin
+             (delete-file-recursively "static")
+             (for-each delete-file '("glibc-2.13.h"
+                                     "stb_vorbis.c"
+                                     "stb_vorbis_patch.c"))))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "low-level.lisp"
+                 (("libvorbis-lin-amd64.so")
+                  (search-input-file inputs "/lib/libvorbis.so"))))))))
+      (inputs
+       (list libvorbis
+             sbcl-cffi
+             sbcl-documentation-utils
+             sbcl-static-vectors
+             sbcl-trivial-features
+             sbcl-trivial-garbage))
+      (home-page "https://shirakumo.github.io/cl-vorbis/")
+      (synopsis "OGG/Vorbis decoding using stb_vorbis for Common Lisp")
+      (description "This package provides CFFI bindings for the
+@code{stb_vorbis} audio library to Common Lisp.")
+      (license license:zlib))))
+
+(define-public ecl-cl-vorbis
+  (sbcl-package->ecl-package sbcl-cl-vorbis))
+
+(define-public cl-vorbis
+  (sbcl-package->cl-source-package sbcl-cl-vorbis))
+
 (define-public sbcl-cephes
   (let ((commit "d87146fa38c8425ffb5fe425eee5eb3e818bacd4")
         (revision "0"))
@@ -27864,6 +29039,227 @@ environment for Common Lisp.")
 ;; (define-public ecl-lisp-stat
 ;;   (sbcl-package->ecl-package sbcl-lisp-stat))
 
+(define-public sbcl-cl-modio
+  (let ((commit "2fd288af27b574f448357fa6de4b42acf44e2f11")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-modio")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/cl-modio/")
+               (commit commit)))
+         (sha256
+          (base32 "0hz87v81pi8kr2c7az30czpdf7v757lkzlsmdcc59p94pipca7m9"))
+         (file-name (git-file-name "cl-modio" version))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria
+             sbcl-zippy
+             sbcl-jzon
+             sbcl-cl-ppcre
+             sbcl-drakma
+             sbcl-documentation-utils
+             sbcl-language-codes))
+      (synopsis "Client library for the mod.io API")
+      (description "This is a client library to interact with the
+\"mod.io\" (@url{https://mod.io}) platform to manage \"mods\" or extensions
+for games and other applications.  It covers the full v1 API and includes
+convenience methods to make interacting with the API as well as syncing mods
+and so on easy.")
+      (home-page "https://shinmera.github.io/cl-modio/")
+      (license license:zlib))))
+
+(define-public cl-modio
+  (sbcl-package->cl-source-package sbcl-cl-modio))
+
+(define-public ecl-cl-modio
+  (sbcl-package->ecl-package sbcl-cl-modio))
+
+(define-public sbcl-cl-steamworks
+  (let ((commit "9d6a4de653a8cc256ae35e0298912b518aa92ba3")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-steamworks")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/cl-steamworks/")
+               (commit commit)))
+         (sha256
+          (base32 "1fzj3rlqw1kwdlmh0ga0y71p2n1adflcamzx4yp9kga552c1db5j"))
+         (file-name (git-file-name "cl-steamworks" version))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-alexandria
+             sbcl-babel
+             sbcl-cffi
+             sbcl-documentation-utils
+             sbcl-float-features
+             sbcl-trivial-features
+             sbcl-trivial-garbage
+             sbcl-trivial-gray-streams))
+      (synopsis "Wrapper for the Valve SteamWorks API")
+      (description "This is a wrapper library to allow you to interface with
+the Valve SteamWorks API.")
+      (home-page "https://shinmera.github.io/cl-steamworks/")
+      (license license:zlib))))
+
+(define-public cl-steamworks
+  (sbcl-package->cl-source-package sbcl-cl-steamworks))
+
+(define-public ecl-cl-steamworks
+  (sbcl-package->ecl-package sbcl-cl-steamworks))
+
+(define-public sbcl-forge
+  (let ((commit "012324e251d91436f4a610e2fe2eb50674c3c3ce")
+        (revision "1"))
+    (package
+      (name "sbcl-forge")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/forge/")
+               (commit commit)))
+         (sha256
+          (base32 "006vi2ihrn28pzrwa8b7axmv98bdaxzx7lacnh9pbacbjg3b7hb0"))
+         (file-name (git-file-name "forge" version))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       '(#:asd-systems '("forge-support"
+                         "forge-communication"
+                         "forge")))
+      (inputs
+       (list sbcl-alexandria
+             sbcl-bordeaux-threads
+             sbcl-cffi
+             sbcl-cl-ppcre
+             sbcl-closer-mop
+             sbcl-documentation-utils
+             sbcl-ironclad
+             sbcl-pathname-utils
+             sbcl-promise
+             sbcl-usocket
+             sbcl-verbose))
+      (synopsis "General, modular build system")
+      (description "Forge is a generic build system.  Refer to documentation
+for the specific kind of project you're building to get the full picture.")
+      (home-page "https://github.com/shinmera/forge")
+      (license license:zlib))))
+
+(define-public forge
+  (sbcl-package->cl-source-package sbcl-forge))
+
+(define-public sbcl-maiden
+  (let ((commit "164e8df1b513fcbf097315b51242d337c183a5ef")
+        (revision "1"))
+    (package
+      (name "sbcl-maiden")
+      (version (git-version "3.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shirakumo/maiden/")
+               (commit commit)))
+         (sha256
+          (base32 "1m16qi019cmfpfs6538hc4qsplpb8nl9ly1qlckgfxgjag0z3wdr"))
+         (file-name (git-file-name "maiden" version))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       '(#:asd-systems '("maiden"
+                         "maiden-commands"
+                         "maiden-networking"
+                         "maiden-client-entities"
+                         "maiden-irc"
+                         "maiden-silly")))
+      (inputs
+       (list sbcl-alexandria
+             sbcl-babel
+             sbcl-bordeaux-threads
+             sbcl-cl-base64
+             sbcl-cl+ssl
+             sbcl-closer-mop
+             sbcl-deeds
+             sbcl-documentation-utils
+             sbcl-drakma
+             sbcl-form-fiddle
+             sbcl-jsown
+             sbcl-lambda-fiddle
+             sbcl-lquery
+             sbcl-pathname-utils
+             sbcl-trivial-garbage
+             sbcl-trivial-indent
+             sbcl-ubiquitous
+             sbcl-usocket
+             sbcl-uuid
+             sbcl-verbose))
+      (synopsis "Modern and extensible chat bot framework")
+      (description "Maiden is a collection of systems to help you build
+applications and libraries that interact with chat servers.  It can help you
+build a chat bot, or a general chat client.  It also offers a variety of parts
+that should make it much easier to write a client for a new chat protocol.")
+      (home-page "http://shirakumo.github.io/maiden/")
+      (license license:zlib))))
+
+(define-public maiden
+  (sbcl-package->cl-source-package sbcl-maiden))
+
+(define-public sbcl-speechless
+  (let ((commit "50e9b03bdfc8a3bc0836a650d92de47b51c39834")
+        (revision "1"))
+    (package
+      (name "sbcl-speechless")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shirakumo/speechless/")
+               (commit commit)))
+         (sha256
+          (base32 "1k0kc2l98jyv04l48xnj38qwpddan80c7m41srjld64jkna0fhas"))
+         (file-name (git-file-name "speechless" version))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       (list sbcl-cl-markless
+             sbcl-documentation-utils))
+      (synopsis "Dialogue system language implementation")
+      (description "This is a system implementing an advanced dialogue system
+that is capable of complex dialogue flow including choice trees and
+conditional branching.  Speechless was first developed for the
+\"Kandria\" (@url{https://kandria.com}) game, and has since been separated and
+made public in the hopes that it may find use elsewhere or inspire other
+developers to build similar systems.
+
+Speechless is based on the
+\"Markless\" (@url{https://shirakumo.github.io/markless}) document standard
+for its syntax and makes use of Markless' ability to be extended to add
+additional constructs useful for dialogue systems.
+
+Speechless can compile dialogue from its base textual form into an efficient
+instruction set, which is then executed when the game is run.  Execution of the
+dialogue is completely engine-agnostic, and only requires some simple
+integration with a client protocol to run.
+
+Thanks to Markless' extensibility, Speechless can also be further extended to
+include additional syntax and constructs that may be useful for your
+particular game.")
+      (home-page "http://shirakumo.github.io/speechless/")
+      (license license:zlib))))
+
+(define-public speechless
+  (sbcl-package->cl-source-package sbcl-speechless))
+
+(define-public ecl-speechless
+  (sbcl-package->ecl-package sbcl-speechless))
+
 ;;;
 ;;; Avoid adding new packages to the end of this file. To reduce the chances
 ;;; of a merge conflict, place them above by existing packages with similar
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 67ba04c3ff..4af6626024 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -481,13 +481,6 @@ an interpreter, a compiler, a debugger, and much more.")
                   (srfi srfi-1))
        #:phases
        (modify-phases %standard-phases
-         ,@(if (target-arm32?)
-             ;; TODO: Move to snippet in staging.
-             `((add-after 'unpack 'dont-force-armv5
-                 (lambda _
-                   (substitute* "src/runtime/Config.arm-linux"
-                     (("-march=armv5") "")))))
-             '())
          (delete 'configure)
          (add-after 'unpack 'fix-build-id
            ;; One of the build scripts makes a build id using the current date.
@@ -988,7 +981,7 @@ the HTML documentation of TXR.")
 (define-public txr
   (package
     (name "txr")
-    (version "284")
+    (version "285")
     (source
      (origin
        (method git-fetch)
@@ -997,64 +990,63 @@ the HTML documentation of TXR.")
              (commit (string-append "txr-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1v6dq1q98v3jdx7g67k15njkpp49iwf30n29rrhwng3b3njqm75g"))))
+        (base32 "1ypsgakhak0znmg3wzblfcwd4s4nanzm61dz66gwi48rfnq35znl"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags
-       (list ,(string-append "cc=" (cc-for-target))
-             (string-append "--prefix=" (assoc-ref %outputs "out")))
-       #:test-target "tests"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-license-installation
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "Makefile"
-               (("INSTALL(,.*LICENSE,.*)\\$\\(datadir\\)" _ match)
-                (string-append "INSTALL" match
-                               (assoc-ref outputs "out")
-                               "/share/doc/" ,name "-" ,version)))))
-         (delete 'install-license-files)
-         (add-after 'unpack 'inhibit-doc-syms-generation
-           (lambda _
-             (substitute* "genman.txr"
-               ;; Exit from genman.txr before it tries to write to
-               ;; stdlib/doc-syms.tl, which is anyway kept up to date with
-               ;; each release (and is already compiled to stdlib/doc-syms.tlo
-               ;; when genman.txr is run).
-               (("^@\\(output \"stdlib/doc-syms\\.tl\"\\).*" line)
-                (string-append "@(do (exit))\n" line)))))
-         (add-after 'unpack 'fix-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "stream.c"
-               (("/bin/sh")
-                (string-append (assoc-ref inputs "bash") "/bin/bash")))))
-         (add-after 'unpack 'fix-tests
-           (lambda _
-             (substitute* (list "tests/017/realpath.tl"
-                                "tests/017/realpath.expected")
-               (("/usr/bin") "/"))))
-         (replace 'configure
-           ;; ./configure is a hand-written script that can't handle standard
-           ;; autotools arguments like CONFIG_SHELL.
-           (lambda* (#:key configure-flags #:allow-other-keys)
-             (setenv "txr_shell" (which "bash"))
-             (apply invoke "./configure" configure-flags)))
-         (add-after 'build 'build-doc
-           (lambda _
-             (setenv "GS_GENERATE_UUIDS" "0")
-             (invoke "make" "txr-manpage.html" "txr-manpage.pdf")))
-         (add-after 'install 'install-doc
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((doc (string-append (assoc-ref outputs "out")
-                                       "/share/doc/" ,name "-" ,version)))
-               (for-each (lambda (f) (install-file f doc))
-                         '("txr-manpage.html" "txr-manpage.pdf")))))
-         (add-after 'install 'install-vim-files
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out    (assoc-ref outputs "out"))
-                    (syntax (string-append out "/share/vim/vimfiles/syntax")))
-               (install-file "tl.vim" syntax)
-               (install-file "txr.vim" syntax)))))))
+     (list #:configure-flags
+           #~(list (string-append "cc=" #$(cc-for-target))
+                   (string-append "--prefix=" #$output))
+           #:test-target "tests"
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'fix-license-installation
+                 (lambda _
+                   (substitute* "Makefile"
+                     (("INSTALL(,.*LICENSE,.*)\\$\\(datadir\\)" _ match)
+                      (string-append "INSTALL" match #$output
+                                     "/share/doc/" #$name "-" #$version)))))
+               (delete 'install-license-files)
+               (add-after 'unpack 'inhibit-doc-syms-generation
+                 (lambda _
+                   (substitute* "genman.txr"
+                     ;; Exit from genman.txr before it tries to write to
+                     ;; stdlib/doc-syms.tl, which is anyway kept up to date
+                     ;; with each release (and is already compiled to
+                     ;; stdlib/doc-syms.tlo when genman.txr is run).
+                     (("^@\\(output \"stdlib/doc-syms\\.tl\"\\).*" line)
+                      (string-append "@(do (exit))\n" line)))))
+               (add-after 'unpack 'fix-paths
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (substitute* "stream.c"
+                     (("/bin/sh")
+                      (search-input-file inputs "/bin/bash")))))
+               (add-after 'unpack 'fix-tests
+                 (lambda _
+                   (substitute* (list "tests/017/realpath.tl"
+                                      "tests/017/realpath.expected")
+                     (("/usr/bin") "/"))))
+               (replace 'configure
+                 ;; ./configure is a hand-written script that can't handle
+                 ;; standard autotools arguments like CONFIG_SHELL.
+                 (lambda* (#:key configure-flags #:allow-other-keys)
+                   (setenv "txr_shell" (which "bash"))
+                   (apply invoke "./configure" configure-flags)))
+               (add-after 'build 'build-doc
+                 (lambda _
+                   (setenv "GS_GENERATE_UUIDS" "0")
+                   (invoke "make" "txr-manpage.html" "txr-manpage.pdf")))
+               (add-after 'install 'install-doc
+                 (lambda _
+                   (let ((doc (string-append #$output "/share/doc/"
+                                             #$name "-" #$version)))
+                     (for-each (lambda (f) (install-file f doc))
+                               '("txr-manpage.html" "txr-manpage.pdf")))))
+               (add-after 'install 'install-vim-files
+                 (lambda _
+                   (let ((syntax (string-append #$output
+                                                "/share/vim/vimfiles/syntax")))
+                     (install-file "tl.vim" syntax)
+                     (install-file "txr.vim" syntax)))))))
     (native-inputs
      ;; Required to build the documentation.
      (list ghostscript
@@ -1073,7 +1065,7 @@ extraction language referred to as the TXR Pattern Language (sometimes just
 used for everything from \"one liner\" data transformation tasks at the
 command line, to data scanning and extracting scripts, to full application
 development in a wide-range of areas.")
-    (home-page "https://nongnu.org/txr/")
+    (home-page "https://www.nongnu.org/txr/")
     (license license:bsd-2)))
 
 (define picolisp32
@@ -1236,7 +1228,7 @@ including a built-in database engine and a GUI system.")
 (define-public janet
   (package
     (name "janet")
-    (version "1.26.0")
+    (version "1.27.0")
     (source
      (origin
        (method git-fetch)
@@ -1245,7 +1237,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 "1ghxchyxhcjs0vfzisafc27v05im4kya1jg827l4q2h92ras17x3"))))
+        (base32 "0fd5z9xviwfv635wxil20qjjigb275p3ns9cvxhfx27ca8kkphsj"))))
     (build-system gnu-build-system)
     (arguments
      (list #:make-flags
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 4c19f1e3ed..720de1f071 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -2303,7 +2303,7 @@ LLVM."))))
             (add-after 'unpack 'patch-paths
               (lambda* (#:key inputs #:allow-other-keys)
                 (substitute* "lib/Interpreter/CIFactory.cpp"
-                  (("\bsed\b")
+                  (("\\bsed\\b")
                    (which "sed"))
                   ;; This ensures that the default C++ library used by Cling is
                   ;; that of the compiler that was used to build it, rather
diff --git a/gnu/packages/lua.scm b/gnu/packages/lua.scm
index d50890bf1e..63a4bd5455 100644
--- a/gnu/packages/lua.scm
+++ b/gnu/packages/lua.scm
@@ -18,6 +18,7 @@
 ;;; Copyright © 2022 Brandon Lucas <br@ndon.dk>
 ;;; Copyright © 2022 Luis Henrique Gomes Higino <luishenriquegh2701@gmail.com>
 ;;; Copyright © 2022 Leo Nikkilä <hello@lnikki.la>
+;;; Copyright © 2023 Yovan Naumovski <yovan@gorski.stream>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1189,7 +1190,7 @@ enabled.")
 (define-public fennel
   (package
     (name "fennel")
-    (version "1.2.0")
+    (version "1.3.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1198,7 +1199,7 @@ enabled.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0klqxhgc9s6rm2xbn2fyzw9nzdas65g84js7s69by0gv2jzalyad"))))
+                "1g22y0bpw1ads6bmsr946fw1m5xxvlvb1hdym3f3k3fziislwwhd"))))
     (build-system gnu-build-system)
     (arguments
      (list #:make-flags #~(list (string-append "PREFIX="
@@ -1228,7 +1229,7 @@ system.")
 (define-public fnlfmt
   (package
     (name "fnlfmt")
-    (version "0.2.2")
+    (version "0.3.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1237,7 +1238,7 @@ system.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1rv0amqhy5ypi3pvxfaadn3k1cy4mjlc49wdzl2psz3i11w9gr36"))
+                "06gzw7f20yw4192kymr4karxw3ia3apjnjqpm6vxph87c67d1fa3"))
               (modules '((guix build utils)))
               (snippet
                #~(begin
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index 004568a77b..70319238d9 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -16,7 +16,7 @@
 ;;; Copyright © 2020 Konrad Hinsen <konrad.hinsen@fastmail.net>
 ;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com>
 ;;; Copyright © 2020, 2021, 2022, 2023 Vinicius Monego <monego@posteo.net>
-;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -297,36 +297,19 @@ training, HMM clustering, HMM mixtures.")
 (define-public guile-aiscm
   (package
     (name "guile-aiscm")
-    (version "0.24.2")
+    (version "0.25.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/wedesoft/aiscm")
-                    (commit "2e16e38391bf1638f1dd9a1cf4b25a25f6626078")))
+                    (commit "v0.25.2")))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1gwqpzl6irpaszkpxaf5wliwq19280632hlgxs3ikjkfg8mkqql0"))))
+                "1sagpxwrqxkn5b9zqzd07c9r7swmw45q672pa8fy6s71iw6a0x77"))))
     (build-system gnu-build-system)
     (arguments
      (list
-      #:configure-flags
-      #~(list (string-append "OPENCV_CFLAGS=-I" #$(this-package-input "opencv")
-                             "/include/opencv4")
-              (let ((modules
-                     (list "aruco" "barcode" "bgsegm" "bioinspired"
-                           "calib3d" "ccalib" "core" "datasets" "dnn"
-                           "dnn_objdetect" "dnn_superres" "dpm" "face"
-                           "features2d" "flann" "freetype" "fuzzy" "hdf"
-                           "hfs" "highgui" "img_hash" "imgcodecs" "imgproc"
-                           "intensity_transform" "line_descriptor" "mcc"
-                           "ml" "objdetect" "optflow" "phase_unwrapping"
-                           "photo" "plot" "quality" "rapid" "reg" "rgbd"
-                           "saliency" "shape" "stereo" "stitching"
-                           "structured_light" "superres" "surface_matching"
-                           "text" "tracking" "video" "videoio" "videostab"
-                           "wechat_qrcode" "ximgproc" "xobjdetect" "xphoto")))
-                (format #false "OPENCV_LIBS=~{-lopencv_~a~^ ~}" modules)))
       #:make-flags
       #~(list (string-append "GUILE_CACHE=" #$output "/lib/guile/3.0/site-ccache")
               (string-append "GUILE_EXT=" #$output "/lib/guile/3.0/extensions")
@@ -395,13 +378,12 @@ training, HMM clustering, HMM mixtures.")
            libxv
            mesa
            mjpegtools
-           opencv
            pandoc
            pulseaudio
            tensorflow))
     (native-inputs
-     (list clang-11
-           llvm-11
+     (list clang-13
+           llvm-13
            pkg-config
            protobuf-c-for-aiscm
            autoconf
@@ -418,6 +400,70 @@ Performance is achieved by using the LLVM JIT compiler.")
 (define-public guile-aiscm-next
   (deprecated-package "guile-aiscm-next" guile-aiscm))
 
+(define-public llama-cpp
+  (let ((commit "3cd8dde0d1357b7f11bdd25c45d5bf5e97e284a0")
+        (revision "0"))
+    (package
+      (name "llama-cpp")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/ggerganov/llama.cpp")
+               (commit (string-append "master-" (string-take commit 7)))))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0i7c92cxqs31xklrn688978kk29agivgxjgvsb45wzm65gc6hm5c"))))
+      (build-system cmake-build-system)
+      (arguments
+       (list
+        #:modules '((ice-9 textual-ports)
+                    (guix build utils)
+                    ((guix build python-build-system) #:prefix python:)
+                    (guix build cmake-build-system))
+        #:imported-modules `(,@%cmake-build-system-modules
+                             (guix build python-build-system))
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-before 'install 'install-python-scripts
+              (lambda _
+                (let ((bin (string-append #$output "/bin/")))
+                  (define (make-script script)
+                    (let ((suffix (if (string-suffix? ".py" script) "" ".py")))
+                      (call-with-input-file
+                          (string-append "../source/" script suffix)
+                        (lambda (input)
+                          (call-with-output-file (string-append bin script)
+                            (lambda (output)
+                              (format output "#!~a/bin/python3\n~a"
+                                      #$(this-package-input "python")
+                                      (get-string-all input))))))
+                      (chmod (string-append bin script) #o555)))
+                  (mkdir-p bin)
+                  (make-script "convert-pth-to-ggml")
+                  (make-script "convert-gptq-to-ggml")
+                  (make-script "quantize.py")
+                  (substitute* (string-append bin "quantize.py")
+                    (("os\\.getcwd\\(\\), quantize_script_binary")
+                     (string-append "\"" bin "\", quantize_script_binary"))))))
+            (add-after 'install-python-scripts 'wrap-python-scripts
+              (assoc-ref python:%standard-phases 'wrap))
+            (replace 'install
+              (lambda _
+                (let ((bin (string-append #$output "/bin/")))
+                  (install-file "bin/quantize" bin)
+                  (copy-file "bin/main" (string-append bin "llama"))))))))
+      (inputs (list python))
+      (propagated-inputs
+       (list python-numpy python-pytorch python-sentencepiece))
+      (home-page "https://github.com/ggerganov/llama.cpp")
+      (synopsis "Port of Facebook's LLaMA model in C/C++")
+      (description "This package provides a port to Facebook's LLaMA collection
+of foundation language models.  It requires models parameters to be downloaded
+independently to be able to run a LLaMA model.")
+      (license license:expat))))
+
 (define-public mcl
   (package
     (name "mcl")
@@ -601,6 +647,53 @@ optimizing, and searching weighted finite-state transducers (FSTs).")
        '("--enable-shared" "--enable-far" "--enable-ngram-fsts"
          "--enable-lookahead-fsts" "--with-pic" "--disable-bin")))))
 
+(define-public sentencepiece
+  (package
+    (name "sentencepiece")
+    (version "0.1.97")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/google/sentencepiece")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1kzfkp2pk0vabyw3wmkh16h11chzq63mzc20ddhsag5fp6s91ajg"))))
+    (build-system cmake-build-system)
+    (arguments (list #:tests? #f))      ;no tests
+    (native-inputs (list gperftools))
+    (home-page "https://github.com/google/sentencepiece")
+    (synopsis "Unsupervised tokenizer for Neural Network-based text generation")
+    (description
+     "SentencePiece is an unsupervised text tokenizer and detokenizer mainly
+for Neural Network-based text generation systems where the vocabulary size is
+predetermined prior to the neural model training.  SentencePiece implements
+subword units---e.g., byte-pair-encoding (BPE) and unigram language
+model---with the extension of direct training from raw sentences.
+SentencePiece allows us to make a purely end-to-end system that does not
+depend on language-specific pre- or post-processing.")
+    (license license:asl2.0)))
+
+(define-public python-sentencepiece
+  (package
+    (name "python-sentencepiece")
+    (version "0.1.97")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "sentencepiece" version))
+       (sha256
+        (base32 "0v0z9ryl66432zajp099bcbnwkkldzlpjvgnjv9bq2vi19g300f9"))))
+    (build-system python-build-system)
+    (native-inputs (list pkg-config))
+    (propagated-inputs (list sentencepiece))
+    (home-page "https://github.com/google/sentencepiece")
+    (synopsis "SentencePiece python wrapper")
+    (description "This package provides a Python wrapper for the SentencePiece
+unsupervised text tokenizer.")
+    (license license:asl2.0)))
+
 (define-public shogun
   (package
     (name "shogun")
@@ -3858,3 +3951,31 @@ fi"
 is therefore designed to be easy to learn and use, highly flexible and
 easily extensible.")
     (license license:cecill)))
+
+(define-public python-brian2tools
+  (package
+    (name "python-brian2tools")
+    (version "0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "brian2tools" version))
+              (sha256
+               (base32
+                "0fn028mfy3qlzjkadd0wr5d7rcplijd5jphln414xifvvsb9jcc2"))))
+    (build-system python-build-system)
+    ;; Both pypi tarball and git repo lack test files.
+    (arguments (list #:tests? #f))
+    (propagated-inputs (list python-brian2
+                             python-libneuroml
+                             python-markdown-strings
+                             python-matplotlib
+                             python-pylems
+                             python-setuptools
+                             python-setuptools-scm))
+    (native-inputs (list python-pytest))
+    (home-page "https://github.com/brian-team/brian2tools")
+    (synopsis "Tools for the Brian 2 simulator")
+    (description "Visualization and NeuroML import/export tools for the
+Brian 2 simulator.")
+    (license license:cecill)))
+
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 6ef4c6fdab..353773de09 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -27,7 +27,7 @@
 ;;; Copyright © 2018, 2019, 2020, 2021, 2022 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com>
-;;; Copyright © 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018, 2019, 2020, 2021, 2022, 2023 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019–2022 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 Justus Winter <justus@sequoia-pgp.org>
@@ -408,6 +408,45 @@ software.  GNU Mailutils provides the following commands:
      ;; Libraries are under LGPLv3+, and programs under GPLv3+.
      (list license:gpl3+ license:lgpl3+))))
 
+(define-public mairix
+  (let ((commit "1cc06f4a73ba4b940008c1ffc398d2ac708cd6d6")
+        (revision "0"))
+    (package
+      (name "mairix")
+      (version (git-version "0.24" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/vandry/mairix")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "12bhmk5j77cl3vjda48cmdysq1c2yjzvfv6zm4hlky6d5g3l49d7"))))
+      (build-system gnu-build-system)
+      (arguments
+       (list
+        #:parallel-tests? #f
+        #:phases #~(modify-phases %standard-phases
+                     (replace 'configure
+                       (lambda* (#:key inputs #:allow-other-keys)
+                         (invoke "./configure"
+                                 (string-append "--prefix=" #$output)))))))
+      (native-inputs
+       (list bison flex))
+      (inputs
+       (list bzip2
+             openssl
+             perl
+             xz
+             zlib))
+      (home-page "https://github.com/vandry/mairix")
+      (synopsis "Program for indexing and searching email messages")
+      (description
+       "Mairix is a program for indexing and searching email messages stored in
+Maildir, MH, MMDF or mbox folders.")
+      (license license:gpl2))))
+
 (define-public go-gitlab.com-shackra-goimapnotify
   (package
     (name "go-gitlab.com-shackra-goimapnotify")
@@ -1168,16 +1207,15 @@ security functionality including PGP, S/MIME, SSH, and SSL.")
 (define-public mu
   (package
     (name "mu")
-    (version "1.8.13")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/djcb/mu")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0y4f5p7pwmaj8733rjzg29038dw33057qlsbsq2wapvp24wcjymr"))))
+    (version "1.10.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/djcb/mu/releases/download/v"
+                           version "/mu-" version ".tar.xz"))
+       (sha256
+        (base32
+         "0mj43lnxr11wg354q8svcqjc403b36igb7ia406yavw6xfk46w9f"))))
     (build-system meson-build-system)
     (native-inputs
      (list pkg-config
@@ -1195,6 +1233,14 @@ security functionality including PGP, S/MIME, SSH, and SSL.")
                            (guix build emacs-utils))
       #:phases
       #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-build-system
+            (lambda _
+              (substitute* "lib/meson.build"
+                (("dependencies: \\[ lib_mu_message_dep" m)
+                 (string-append m ", thread_dep")))
+              (substitute* "lib/utils/meson.build"
+                (("dependencies: \\[glib_dep" m)
+                 (string-append m ", thread_dep")))))
           (add-after 'unpack 'patch-bin-references
             (lambda _
               (substitute* '("guile/tests/test-mu-guile.cc"
diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm
index 7f0af61554..71fcf2f4bc 100644
--- a/gnu/packages/man.scm
+++ b/gnu/packages/man.scm
@@ -107,7 +107,7 @@ textfiles to roff for terminal display, and also to HTML for the web.")
 (define-public libpipeline
   (package
     (name "libpipeline")
-    (version "1.5.3")
+    (version "1.5.6")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -115,7 +115,7 @@ textfiles to roff for terminal display, and also to HTML for the web.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "1c5dl017xil2ssb6a5vg927bnsbc9vymfgi9ahvqbb8gypx0igsx"))))
+                "15xpx7kbzkn63ab8mkghv7jkzji8pdbsyxm7ygjji19rvkkvkyv0"))))
     (build-system gnu-build-system)
     (home-page "https://libpipeline.nongnu.org/")
     (synopsis "C library for manipulating pipelines of subprocesses")
diff --git a/gnu/packages/mastodon.scm b/gnu/packages/mastodon.scm
index ae121f1683..9c1d3cd26f 100644
--- a/gnu/packages/mastodon.scm
+++ b/gnu/packages/mastodon.scm
@@ -42,13 +42,13 @@
 (define-public toot
   (package
     (name "toot")
-    (version "0.35.0")
+    (version "0.36.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "toot" version))
         (sha256
-         (base32 "07vhirr3isi1bisqa5vgj13a4y9cj539c0djkd2dsa80g98g8xmi"))))
+         (base32 "1n79jwr3kpnc2xsr9isbgrj5as5i6zbkhxrdpdjfg87qbbjz7xca"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 551727909f..9ac365fbb4 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -59,6 +59,7 @@
 ;;; Copyright © 2022 Maximilian Heisinger <mail@maxheisinger.at>
 ;;; Copyright © 2022 Akira Kyle <akira@akirakyle.com>
 ;;; Copyright © 2022 Roman Scherer <roman.scherer@burningswell.com>
+;;; Copyright © 2023 Jake Leporte <jakeleporte@outlook.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -96,7 +97,6 @@
   #:use-module (guix build-system ocaml)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
-  #:use-module (guix build-system pyproject)
   #:use-module (guix build-system ruby)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages audio)
@@ -105,6 +105,7 @@
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages calendar)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
@@ -127,12 +128,12 @@
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gperf)
   #:use-module (gnu packages graphviz)
+  #:use-module (gnu packages groff)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages java)
   #:use-module (gnu packages less)
-  #:use-module (gnu packages libffi)
   #:use-module (gnu packages lisp)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
@@ -176,6 +177,7 @@
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages wxwidgets)
+  #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26))
@@ -459,6 +461,101 @@ semiconductors.")
     (license license:gpl3+)
     (home-page "https://www.gnu.org/software/dionysus/")))
 
+(define-public dozenal
+  ;; There is no recent release, so use the latest commit.
+  (let ((revision "1")
+        (commit "328bc03ad544179f2cccda36763358c4216f188e"))
+    (package
+      (name "dozenal")
+      (version (git-version "12010904-3" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://codeberg.org/dgoodmaniii/dozenal")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0knwfwjqdv854l5ny7csdpvp7r0md6a2k43a1l2lkyw9k3cglpph"))))
+      (build-system gnu-build-system)
+      (arguments
+       (list
+        ;; Some test scripts are included, but no makefile-driven
+        ;; tests, and they are all quite manual to run and check.
+        #:tests? #f
+        ;; Running with `make -j' causes the build to fail.  This is likely
+        ;; because this project uses the "recursive make" structure, where
+        ;; each subdirectory contains its own make file, which is called by
+        ;; the top-level makefile.
+        #:parallel-build? #f
+        #:make-flags
+        #~(list (string-append "prefix=" #$output))
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'chdir
+              (lambda _
+                (chdir "dozenal")))
+            (add-after 'chdir 'patch-lua-references
+              (lambda _
+                (let ((lua-name (strip-store-file-name
+                                 #$(this-package-input "lua"))))
+                  (substitute* '("dozcal/Makefile"
+                                 "dozlua/Makefile")
+                    (("lua52")
+                     (string-take lua-name
+                                  (string-rindex lua-name #\.)))))))
+            (delete 'configure)
+            (add-before 'install 'make-bin-dir
+              (lambda _
+                (mkdir-p (string-append #$output "/bin"))))
+            (add-after 'install 'install-html-docs
+              (lambda _
+                (invoke "make"
+                        (string-append "prefix=" #$output)
+                        "installhtml")))
+            (add-after 'install-html-docs 'split-outputs
+              (lambda* (#:key inputs outputs #:allow-other-keys)
+                (for-each
+                 (lambda (prog)
+                   (let ((orig (string-append #$output "/bin/" prog))
+                         (dst (string-append #$output:gui "/bin/" prog))
+                         (man-orig (string-append #$output
+                                                  "/share/man/man1/"
+                                                  prog ".1"))
+                         (man-dst (string-append #$output:gui
+                                                 "/share/man/man1/"
+                                                 prog ".1")))
+                     (mkdir-p (dirname dst))
+                     (rename-file orig dst)
+                     (mkdir-p (dirname man-dst))
+                     (rename-file man-orig man-dst)))
+                 '("xdozdc" "gdozdc"))
+                (wrap-program (string-append #$output:gui "/bin/" "gdozdc")
+                  `("PATH" = (,(string-append #$output "/bin")))
+                  `("PERL5LIB" = (,(getenv "PERL5LIB")))))))))
+      (outputs '("out" "gui"))
+      (native-inputs (list groff pkg-config))
+      (inputs (list bash-minimal        ;for wrap-program
+                    libhdate
+                    lua
+                    ncurses
+                    perl
+                    perl-tk
+                    perl-par
+                    xforms))
+      (synopsis "Suite of dozenal programs")
+      (description
+       "The dozenal suite is a set of programs designed to assist with working
+in the dozenal (also called \"duodecimal\" or \"base twelve\") system.  It
+includes number converters (dozenal-to-decimal and decimal-to-dozenal), an RPN
+calculator, a graphical calculator, a metric system converter (works with
+imperial, U.S. customary, SI metric, and the dozenal TGM), a pretty-printer
+for dozenal numbers, a date-and-time program, and a dozenal calendar programs,
+complete with events and to-dos.")
+      (home-page "https://codeberg.org/dgoodmaniii/dozenal")
+      (license license:gpl3+))))
+
 (define-public dsfmt
   (package
     (name "dsfmt")
@@ -1136,14 +1233,14 @@ in the terminal or with an external viewer.")
 (define-public gnuplot
   (package
     (name "gnuplot")
-    (version "5.4.4")
+    (version "5.4.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/gnuplot/gnuplot/"
                                   version "/gnuplot-"
                                   version ".tar.gz"))
        (sha256
-        (base32 "00h97y8njhvfjbdvc0njw0znxbrlfynd1iazn8w3anvzhsvh08rp"))))
+        (base32 "06bly8cpqjdf744jg7yrgba9rdcm3gl4zf63y3c69v80ha8jgz02"))))
     (build-system gnu-build-system)
     (native-inputs
      (list pkg-config texlive-tiny))
@@ -1290,7 +1387,7 @@ incompatible with HDF5.")
 (define-public hdf5-1.8
   (package
     (name "hdf5")
-    (version "1.8.22")
+    (version "1.8.23")
     (source
      (origin
       (method url-fetch)
@@ -1305,7 +1402,7 @@ incompatible with HDF5.")
                                    (string-append major minor)))
                                 "/src/hdf5-" version ".tar.bz2")))
       (sha256
-       (base32 "194ki2s5jrgl4czkvy5nc9nwjyapah0fj72l0gb0aysplp38i6v8"))
+       (base32 "0km65mr6dgk4ia2dqr1b9dzw9qg15j5z35ymbys9cnny51z1zb39"))
       (patches (search-patches "hdf5-config-date.patch"))))
     (build-system gnu-build-system)
     (inputs
@@ -1345,8 +1442,7 @@ incompatible with HDF5.")
              (substitute* "hl/fortran/src/Makefile.in"
                (("libhdf5hl_fortran_la_LDFLAGS =")
                 (string-append "libhdf5hl_fortran_la_LDFLAGS = -Wl,-rpath="
-                               (assoc-ref outputs "fortran") "/lib")))
-             #t))
+                               (assoc-ref outputs "fortran") "/lib")))))
          (add-after 'configure 'patch-settings
            (lambda _
              ;; libhdf5.settings contains the full path of the
@@ -1359,16 +1455,14 @@ incompatible with HDF5.")
               ;; Don't record the build-time kernel version to make the
               ;; settings file reproducible.
               (("Uname information:.*")
-               "Uname information: Linux\n"))
-             #t))
+               "Uname information: Linux\n"))))
          (add-after 'install 'patch-references
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((bin (string-append (assoc-ref outputs "out") "/bin"))
                    (zlib (assoc-ref inputs "zlib")))
                (substitute* (find-files bin "h5p?cc")
                  (("-lz" lib)
-                  (string-append "-L" zlib "/lib " lib)))
-               #t)))
+                  (string-append "-L" zlib "/lib " lib))))))
          (add-after 'install 'split
             (lambda* (#:key inputs outputs #:allow-other-keys)
               ;; Move all fortran-related files
@@ -1403,8 +1497,7 @@ incompatible with HDF5.")
                             (rename-file file
                                          (string-append fex "/" (basename file))))
                           (find-files ex ".*"))
-                (delete-file-recursively ex))
-              #t)))))
+                (delete-file-recursively ex)))))))
     (home-page "https://www.hdfgroup.org")
     (synopsis "Management suite for extremely large and complex data")
     (description "HDF5 is a suite that makes possible the management of
@@ -1415,7 +1508,7 @@ extremely large and complex data collections.")
 (define-public hdf5-1.10
   (package
     (inherit hdf5-1.8)
-    (version "1.10.7")
+    (version "1.10.9")
     (source
      (origin
        (method url-fetch)
@@ -1429,13 +1522,33 @@ extremely large and complex data collections.")
                                         (take (string-split version #\.) 2))
                                  "/src/hdf5-" version ".tar.bz2")))
        (sha256
-        (base32 "0pm5xxry55i0h7wmvc7svzdaa90rnk7h78rrjmnlkz2ygsn8y082"))
+        (base32 "14gih7kmjx4h3lc7pg4fwcl28hf1qqkf2x7rljpxqvzkjrqbxi00"))
        (patches (search-patches "hdf5-config-date.patch"))))))
 
 (define-public hdf5-1.12
   (package
     (inherit hdf5-1.8)
-    (version "1.12.1")
+    (version "1.12.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (list (string-append "https://support.hdfgroup.org/ftp/HDF5/releases/"
+                                 "hdf5-" (version-major+minor version)
+                                 "/hdf5-" version "/src/hdf5-"
+                                 version ".tar.bz2")
+                  (string-append "https://support.hdfgroup.org/ftp/HDF5/"
+                                 "current"
+                                 (apply string-append
+                                        (take (string-split version #\.) 2))
+                                 "/src/hdf5-" version ".tar.bz2")))
+       (sha256
+        (base32 "1zlawdzb0gsvcxif14fwr5ap2gk4b6j02wirr2hcx8hkcbivp20s"))
+       (patches (search-patches "hdf5-config-date.patch"))))))
+
+(define-public hdf5-1.14
+  (package
+    (inherit hdf5-1.8)
+    (version "1.14.0")
     (source
      (origin
        (method url-fetch)
@@ -1449,7 +1562,7 @@ extremely large and complex data collections.")
                                         (take (string-split version #\.) 2))
                                  "/src/hdf5-" version ".tar.bz2")))
        (sha256
-        (base32 "074g3z504xf77ff38igs30i1aqxpm508p7yw78ykva7dncrgbyda"))
+        (base32 "181bdh8hp7v9xqwcby3lknr92lxlicc2hqscba3f5nhf8lrr9rz4"))
        (patches (search-patches "hdf5-config-date.patch"))))))
 
 (define-public hdf5
@@ -2545,267 +2658,6 @@ Computational Engineering and Sciences} at The University of Texas at Austin.
 includes a complete LAPACK implementation.")
     (license license:bsd-3)))
 
-(define-public libpotassco
-  ;; No public release, update together with clasp
-  (let ((revision "1")
-        (commit "2f9fb7ca2c202f1b47643aa414054f2f4f9c1821"))
-    (package
-      (name "libpotassco")
-      (version (git-version "0.0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/potassco/libpotassco")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "1c32f9gqclf7qx07lpx8wd720vfhkjqhzc6nyy8mjmgwpmb3iyyn"))))
-      (arguments
-       `(#:configure-flags '("-DLIB_POTASSCO_BUILD_TESTS=on"
-                             "-DLIB_POTASSCO_INSTALL_LIB=on"
-                             "-DBUILD_SHARED_LIBS=on")
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'patch-cmake
-             (lambda _
-               (substitute* "CMakeLists.txt"
-                 ;; clasp expects lowercase potassco and include directory is
-                 ;; lowercase as well, so let's use that
-                 (("\"cmake/Potassco\"") "\"cmake/potassco\"")
-                 (("PotasscoConfig\\.cmake") "potassco-config.cmake")
-                 (("PotasscoConfigVersion\\.cmake")
-                  "potassco-config-version.cmake"))
-               (rename-file "cmake/PotasscoConfig.cmake.in"
-                            "cmake/potassco-config.cmake.in"))))))
-      (build-system cmake-build-system)
-      (home-page "https://potassco.org/")
-      (synopsis "Utility library for Potassco's projects")
-      (description "@code{libpotassco} is a utility library providing functions
-and datatypes for
-@itemize
-@item parsing, writing, and converting logic programs in aspif and smodels
-format,
-@item passing information between a grounder and a solver,
-@item and defining and parsing command-line options and for creating
-command-line applications.
-@end itemize
-Furthermore, it comes with the tool @command{lpconvert} that converts either
-between aspif and smodels format or to a human-readable text format.")
-      (license license:expat))))
-
-(define-public clasp
-  (package
-    (name "clasp")
-    (version "3.3.9")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/potassco/clasp")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "163ps9zq7xppqy9hj5qnw6z5lcjnm4xf5fwjsavpia5ynm3hngcw"))))
-    (build-system cmake-build-system)
-    (arguments
-     `(#:configure-flags '("-DCLASP_BUILD_TESTS=on"
-                           "-DCLASP_INSTALL_LIB=on"
-                           "-DCLASP_USE_LOCAL_LIB_POTASSCO=off"
-                           "-DBUILD_SHARED_LIBS=on")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-cmake
-           (lambda _
-             (substitute* "CMakeLists.txt"
-               ;; Use lowercase to be consistent with libpotassco
-               (("\"cmake/Clasp\"") "\"cmake/clasp\"")
-               (("ClaspConfig\\.cmake") "clasp-config.cmake")
-               (("ClaspConfigVersion\\.cmake")
-                "clasp-config-version.cmake"))
-             (substitute* "cmake/ClaspConfig.cmake.in"
-               (("find_package\\(Potassco") "find_package(potassco"))
-             (rename-file "cmake/ClaspConfig.cmake.in"
-                          "cmake/clasp-config.cmake.in"))))))
-    (inputs
-     (list libpotassco))
-    (home-page "https://potassco.org/")
-    (synopsis "Answer set solver")
-    (description "clasp is an answer set solver for (extended) normal and
-disjunctive logic programs.  The primary algorithm of clasp relies on
-conflict-driven nogood learning, a technique that proved very successful for
-satisfiability checking (SAT).")
-    (license license:expat)))
-
-(define-public clingo
-  (package
-    (name "clingo")
-    (version "5.6.2")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/potassco/clingo")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (modules '((guix build utils)))
-              (snippet
-               #~(begin
-                   (delete-file-recursively "clasp")
-                   ;; TODO: Unvendor other third-party stuff
-                   (delete-file-recursively "third_party/catch")))
-              (sha256
-               (base32
-                "19s59ndcm2yj0kxlikfxnx2bmp6b7n31wq1zvwc7hyk37rqarwys"))))
-    (build-system cmake-build-system)
-    (arguments
-     (list
-      #:configure-flags #~`("-DCLINGO_BUILD_TESTS=on"
-                            "-DCLINGO_INSTALL_LIB=on"
-                            "-DCLINGO_BUILD_STATIC=off"
-                            "-DCLINGO_BUILD_SHARED=on"
-                            "-DCLINGO_USE_LOCAL_CLASP=off"
-                            "-DCLINGO_USE_LOCAL_CATCH=off")
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'patch-cmake
-            (lambda _
-              (substitute* "CMakeLists.txt"
-                (("add_subdirectory\\(clasp\\)")
-                 "find_package(clasp REQUIRED)"))
-              (substitute* "libclingo/CMakeLists.txt"
-                (("\"cmake/Clingo\"") "\"cmake/clingo\"")
-                (("ClingoConfig\\.cmake") "clingo-config.cmake")
-                (("ClingoConfigVersion\\.cmake")
-                 "clingo-config-version.cmake"))
-              (substitute* "cmake/ClingoConfig.cmake.in"
-                (("find_package\\(Clasp") "find_package(clasp"))
-              (rename-file "cmake/ClingoConfig.cmake.in"
-                           "cmake/clingo-config.cmake.in")))
-          (add-after 'unpack 'skip-failing-tests
-            (lambda _
-              (with-directory-excursion "libclingo/tests"
-                (substitute* "CMakeLists.txt"
-                  (("COMMAND test_clingo" all)
-                   (string-append all
-                                  " -f "
-                                  "\"${CMAKE_CURRENT_SOURCE_DIR}/good.txt\"")))
-                (call-with-output-file "good.txt"
-                  (lambda (port)
-                    (for-each (lambda (test) (format port "~s~%" test))
-                              '("parse-ast-v2" "add-ast-v2" "build-ast-v2"
-                                "unpool-ast-v2" "parse_term"
-                                "propagator" "propgator-sequence-mining"
-                                "symbol" "visitor"))))))))))
-    (inputs (list catch2-3.1 clasp libpotassco))
-    (native-inputs (list pkg-config))
-    (home-page "https://potassco.org/")
-    (synopsis "Grounder and solver for logic programs")
-    (description "Clingo computes answer sets for a given logic program.")
-    (license license:expat)))
-
-(define-public python-clingo
-  (package
-    (inherit clingo)
-    (name "python-clingo")
-    (version (package-version clingo)) ; for #$version in arguments
-    (arguments
-     (substitute-keyword-arguments (package-arguments clingo)
-       ((#:configure-flags flags #~'())
-        #~(cons* "-DCLINGO_BUILD_WITH_PYTHON=pip"
-                 "-DCLINGO_USE_LIB=yes"
-                 #$flags))
-       ((#:imported-modules _ '())
-        `(,@%cmake-build-system-modules
-          (guix build python-build-system)))
-       ((#:modules _ '())
-        '((guix build cmake-build-system)
-          ((guix build python-build-system) #:prefix python:)
-          (guix build utils)))
-       ((#:phases phases #~%standard-phases)
-        #~(modify-phases #$phases
-            (add-after 'unpack 'fix-failing-tests
-              (lambda _
-                (substitute* "libpyclingo/clingo/tests/test_conf.py"
-                  (("ctl\\.solve\\(on_statistics=on_statistics\\)" all)
-                   (string-append
-                    all
-                    "; self.skipTest(\"You shall not fail.\")")))))
-            (add-after 'install 'install-distinfo
-              (lambda* (#:key inputs outputs #:allow-other-keys)
-                (with-directory-excursion (python:site-packages inputs outputs)
-                   (let ((dir (string-append "clingo-" #$version ".dist-info")))
-                     (mkdir-p dir)
-                     (call-with-output-file (string-append dir "/METADATA")
-                       (lambda (port)
-                         (format port "Metadata-Version: 1.1~%")
-                         (format port "Name: clingo~%")
-                         (format port "Version: ~a~%" #$version)))))))))))
-    (inputs (list clingo python-wrapper))
-    (propagated-inputs (list python-cffi))
-    (native-inputs (modify-inputs (package-native-inputs clingo)
-                     (prepend python-scikit-build)))
-    (synopsis "Python bindings for clingo")
-    (description "This package provides Python bindings to the clingo package,
-making it so that you can write @acronym{ASPs, Answer Set Programs} through
-Python code.")))
-
-(define-public python-clorm
-  (package
-   (name "python-clorm")
-   (version "1.4.1")
-   (source (origin
-            (method git-fetch)
-            (uri (git-reference
-                  (url "https://github.com/potassco/clorm")
-                  (commit (string-append "v" version))))
-            (file-name (git-file-name name version))
-            (sha256
-             (base32
-              "0jx99y71mrgdicn1da5dwz5nzgvvpabrikff783sg4shbv2cf0b5"))))
-   (build-system pyproject-build-system)
-   (arguments
-    (list #:phases
-          #~(modify-phases %standard-phases
-              (add-before 'check 'fix-breaking-tests
-                (lambda _
-                  ;; noclingo tests rely on this being set
-                  (setenv "CLORM_NOCLINGO" "1")
-                  (delete-file "tests/test_mypy_query.py")
-                  (substitute* "tests/test_clingo.py"
-                    (("self\\.assertTrue\\(os_called\\)" all)
-                     (string-append "# " all))))))))
-   (propagated-inputs (list python-clingo))
-   (native-inputs (list python-typing-extensions))
-   (home-page "https://potassco.org")
-   (synopsis "Object relational mapping to clingo")
-   (description "@acronym{Clorm, Clingo ORM} provides an @acronym{ORM,
-Object Relational Mapping} interface to the @acronym{ASP, answer set
-programming} solver clingo.  Its goal is to make integration of clingo
-into Python programs easier.")
-   (license license:expat)))
-
-(define-public python-telingo
-  (package
-    (name "python-telingo")
-    (version "2.1.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/potassco/telingo")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (patches (search-patches "python-telingo-fix-comparison.patch"))
-              (sha256
-               (base32
-                "0g3khxfdzc2hc7dkiyyqhb399h6h21m5wkp6wy8w71n0m32fiy53"))))
-    (build-system pyproject-build-system)
-    (propagated-inputs (list python-clingo))
-    (home-page "https://potassco.org/")
-    (synopsis "Solve dynamic temporal logic programs")
-    (description "This package provides a system to solve dynamic temporal
-logic programs based on clingo.")
-    (license license:expat)))
-
 (define-public scasp
   (let ((commit "89a427aa04ec6346425a40111c99b310901ffe51")
         (revision "1"))
@@ -2942,47 +2794,47 @@ can solve two kinds of problems:
 (define-public octave-cli
   (package
     (name "octave-cli")
-    (version "7.3.0")
+    (version "8.1.0")
     (source
      (origin
-      (method url-fetch)
-      (uri (string-append "mirror://gnu/octave/octave-"
-                          version ".tar.xz"))
-      (sha256
-       (base32
-        "1wap9p9imxxqpnm27rxcvpjahk1wg440lzlygjb6iyncxdmfw255"))))
+       (method url-fetch)
+       (uri (string-append "mirror://gnu/octave/octave-"
+                           version ".tar.xz"))
+       (sha256
+        (base32
+         "00lis18dsb13v9nvz0z4cs7v4y634jc0vb04lxfw9pshwriikglv"))))
     (build-system gnu-build-system)
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("arpack" ,arpack-ng)
-       ("bdb" ,bdb)
-       ("curl" ,curl)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
-       ("fltk" ,fltk)
-       ("fontconfig" ,fontconfig)
-       ("freetype" ,freetype)
-       ("gl2ps" ,gl2ps)
-       ("glpk" ,glpk)
-       ("glu" ,glu)
-       ("graphicsmagick" ,graphicsmagick)
-
-       ;; TODO: libjpeg-turbo is indirectly required through libtiff.  In
-       ;; the next rebuild cycle, add an absolute reference for -ljpeg in
-       ;; libtiff.la instead of having to provide it here.
-       ("libjpeg" ,libjpeg-turbo)
+     (list alsa-lib
+           arpack-ng
+           bdb
+           curl
+           fftw
+           fftwf
+           fltk
+           fontconfig
+           freetype
+           gl2ps
+           glpk
+           glu
+           graphicsmagick
 
-       ("hdf5" ,hdf5)
-       ("lapack" ,lapack)
-       ("libsndfile" ,libsndfile)
-       ("libxft" ,libxft)
-       ("mesa" ,mesa)
-       ("pcre" ,pcre)
-       ("portaudio" ,portaudio)
-       ("qhull" ,qhull)
-       ("readline" ,readline)
-       ("suitesparse" ,suitesparse)
-       ("zlib" ,zlib)))
+           ;; TODO: libjpeg-turbo is indirectly required through libtiff.  In
+           ;; the next rebuild cycle, add an absolute reference for -ljpeg in
+           ;; libtiff.la instead of having to provide it here.
+           libjpeg-turbo
+
+           hdf5
+           lapack
+           libsndfile
+           libxft
+           mesa
+           pcre
+           portaudio
+           qhull
+           readline
+           suitesparse
+           zlib))
     (native-inputs
      (list gfortran
            pkg-config
@@ -3022,8 +2874,7 @@ can solve two kinds of problems:
              (substitute* "libinterp/corefcn/help.h"
                (("\"makeinfo\"")
                 (string-append
-                 "\"" (assoc-ref inputs "texinfo") "/bin/makeinfo\"")))
-             #t)))))
+                 "\"" (assoc-ref inputs "texinfo") "/bin/makeinfo\""))))))))
     (home-page "https://www.gnu.org/software/octave/")
     (synopsis "High-level language for numerical computation (no GUI)")
     (description "GNU Octave is a high-level interpreted language that is
@@ -4942,10 +4793,6 @@ it also includes a BLAS compatibility layer which gives application developers
 access to BLIS implementations via traditional BLAS routine calls.")
     (license license:bsd-3)))
 
-(define-public blis-sandybridge (deprecated-package "blis-sandybridge" blis))
-(define-public blis-haswell (deprecated-package "blis-haswell" blis))
-(define-public blis-knl (deprecated-package "blis-knl" blis))
-
 (define ignorance blis)
 
 (define-public openlibm
@@ -5105,6 +4952,95 @@ packages.")
     ;;  GPUQREngine, RBio, SuiteSparse_GPURuntime, SuiteSparseQR, UMFPACK
     (license (list license:gpl2+ license:lgpl2.1+))))
 
+
+;; This outdated version is used to build the scilab package.
+(define-public suitesparse-3
+  (package
+    (inherit suitesparse)
+    (name "suitesparse")
+    (version "3.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/DrTimothyAldenDavis/SuiteSparse")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0wxk755nzps0c9la24zqknqkzjp6rcj5q9jhd973mff1pqja3clz"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f  ;no "check" target
+       #:make-flags
+       ,#~(list
+           (string-append "CC=gcc")
+           "AR=gcc -shared -o"
+           "RANLIB=touch"
+           "CFLAGS=-O3 -fPIC -I../Include"
+           "TBB=-ltbb"
+
+           ;; Disable metis@4 (nonfree) support.
+           "CHOLMOD_CONFIG=-DNPARTITION"
+           "METIS="
+           "METIS_PATH="
+
+           ;; The default is to link against netlib lapack.  Use OpenBLAS
+           ;; instead.
+           "BLAS=-lopenblas" "LAPACK=-lopenblas"
+
+           (string-append "INSTALL_LIB="
+                          (assoc-ref %outputs "out") "/lib")
+           (string-append "INSTALL_INCLUDE="
+                          (assoc-ref %outputs "out") "/include")
+           "library")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'correct-build-configuration
+           (lambda _
+             ;; Invert build order: CHOLMOD before KLU.
+             (substitute* "Makefile"
+               (("\t\\( cd CHOLMOD ; \\$\\(MAKE\\) \\)\n$")
+                "")
+               (("\\( cd KLU ; \\$\\(MAKE\\) \\)")
+                (string-append "( cd CHOLMOD ; $(MAKE) )\n\t"
+                               "( cd KLU ; $(MAKE) )")))
+             ;; Build shared libraries.
+             (substitute* (find-files "." "akefile$")
+               (("lib([a-z]+)\\.a" all libname)
+                (string-append "lib" libname ".so")))
+             ;; Delete broken KLU Demo step.
+             (substitute* "KLU/Makefile"
+               (("\\( cd Demo ; \\$\\(MAKE\\) \\)")
+                ""))))
+         (replace 'install
+           (lambda _
+             ;; Install libraries.
+             (for-each
+              (lambda (x)
+                (install-file
+                 x
+                 (string-append (assoc-ref %outputs "out") "/lib")))
+              (find-files "." "\\.so$"))
+             ;; Install header files.
+             (for-each
+              (lambda (x)
+                (install-file
+                 x
+                 (string-append (assoc-ref %outputs "out") "/include")))
+              (find-files "." "\\.h$"))))
+         ,@(if (target-riscv64?)
+               ;; GraphBLAS FTBFS on riscv64-linux
+               `((add-after 'unpack 'skip-graphblas
+                   (lambda _
+                     (substitute* "Makefile"
+                       ((".*cd GraphBLAS.*") "")
+                       (("metisinstall gbinstall moninstall")
+                        "moninstall")))))
+               '())
+         (delete 'configure))))         ;no configure script
+    (inputs
+     (list tbb openblas gmp mpfr))))
+
 (define-public atlas
   (package
     (name "atlas")
@@ -5966,6 +5902,14 @@ structured and unstructured grid problems.")))
         (base32
          "0vr8c1mz1k6mz0sgh6n3scl5c3a71iqmy5fnydrgq504icj4vym4"))))
     (build-system gnu-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'install 'install-matioConfig.h
+            (lambda _
+              (install-file "src/matioConfig.h"
+                            (string-append #$output "/include")))))))
     (inputs
      (list zlib hdf5-1.8))
     (home-page "http://matio.sourceforge.net/")
@@ -8463,3 +8407,109 @@ primal-dual interior-point method are made available.  Interfaces are
 provided for applications written in C++ and Python.  Parallel
 computation is supported via MPI.")
     (license license:bsd-2))))
+
+(define-public scilab
+  (package
+    (name "scilab")
+    (version "5.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "https://oos.eu-west-2.outscale.com/scilab-releases/"
+                       version "/scilab-" version "-src.tar.gz"))
+       (sha256
+        (base32 "1hx57aji5d78brwqcf8a34i1hasm3h4nw46xjg7cgxj09s8yz5kq"))))
+    (build-system gnu-build-system)
+    (native-inputs (list pkg-config gfortran))
+    (inputs (list libxml2
+                  `(,pcre "bin")
+                  `(,pcre "out")
+                  readline
+                  hdf5-1.8
+                  curl
+                  openblas
+                  lapack
+                  arpack-ng
+                  fftw
+                  gettext-minimal
+                  suitesparse-3
+                  tcl
+                  tk
+                  libx11
+                  matio))
+    (arguments
+     `(#:tests? #f
+       #:configure-flags
+       ,#~(list
+           "--enable-relocatable"
+           "--disable-static-system-lib"
+           ;; Disable all java code.
+           "--without-gui"
+           "--without-javasci"
+           "--disable-build-help"
+           "--with-external-scirenderer"
+           ;; Tcl and Tk library locations.
+           (string-append "--with-tcl-include="
+                          (string-drop-right
+                           (search-input-file %build-inputs "include/tcl.h")
+                           (string-length "/tcl.h")))
+           (string-append "--with-tcl-library="
+                          (string-drop-right
+                           (search-input-directory %build-inputs "lib/tcl8")
+                           (string-length "/tcl8")))
+           (string-append "--with-tk-include="
+                          (string-drop-right
+                           (search-input-file %build-inputs "include/tk.h")
+                           (string-length "/tk.h")))
+           (string-append "--with-tk-library="
+                          (string-drop-right
+                           (search-input-directory %build-inputs "lib/tk8.6")
+                           (string-length "/tk8.6")))
+           ;; There are some 2018-fortran errors that are ignored
+           ;; with this fortran compiler flag.
+           "FFLAGS=-fallow-argument-mismatch")
+       #:phases
+       ,#~(modify-phases %standard-phases
+            (add-before 'build 'pre-build
+              (lambda _
+                ;; Fix scilab script.
+                (substitute* "bin/scilab"
+                  (("\\/bin\\/ls")
+                   (which "ls")))
+                ;; Fix core.start.
+                (substitute* "modules/core/etc/core.start"
+                  (("'SCI/modules")
+                   "SCI+'/modules"))
+                ;; Fix fortran compilation error.
+                (substitute*
+                    "modules/differential_equations/src/fortran/twodq.f"
+                  (("node\\(10\\),node1\\(10\\),node2\\(10\\),coef")
+                   "node(9),node1(9),node2(9),coef"))
+                ;; Fix C compilation errors.
+                ;; remove &
+                (substitute* "modules/hdf5/src/c/h5_readDataFromFile_v1.c"
+                  (("(H5Rdereference\\(_iDatasetId, H5R_OBJECT, )&(.*)\\);$"
+                    all common ref)
+                   (string-append common ref)))
+                ;; fix multiple definitions
+                (substitute* "modules/tclsci/src/c/TCL_Command.h"
+                  (("^__thread")
+                   "extern __thread"))
+                (substitute* "modules/tclsci/src/c/InitTclTk.c"
+                  (("BOOL TK_Started = FALSE;" all)
+                   (string-append all "\n"
+                                  "__threadId TclThread;" "\n"
+                                  "__threadSignal InterpReady;" "\n"
+                                  "__threadSignalLock InterpReadyLock;"
+                                  "\n")))
+                ;; Set SCIHOME to /tmp before macros compilation.
+                (setenv "SCIHOME" "/tmp"))))))
+    (home-page "https://scilab.org")
+    (synopsis "Software for engineers and scientists")
+    (description "This package provides the non-graphical version of the Scilab
+software for engineers and scientists. Scilab is used for signal processing,
+statistical analysis, image enhancement, fluid dynamics simulations, numerical
+optimization, and modeling, simulation of explicit and implicit dynamical
+systems and symbolic manipulations.")
+    (license license:cecill)))                    ;CeCILL v2.1
diff --git a/gnu/packages/medical.scm b/gnu/packages/medical.scm
index 6c9cc757eb..33877083e2 100644
--- a/gnu/packages/medical.scm
+++ b/gnu/packages/medical.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Quiliro <quiliro@fsfla.org>
+;;; Copyright © 2022 Petr Hodina <phodina@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,13 +20,67 @@
 
 (define-module (gnu packages medical)
   #:use-module (guix build-system python)
+  #:use-module (guix build-system qt)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix licenses)
   #:use-module (guix packages)
+  #:use-module (gnu packages bash) ; wrap-program
   #:use-module (gnu packages databases)
+  #:use-module (gnu packages kde-frameworks) ; kirigami
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages python-crypto)
+  #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt))
 
+(define-public mygnuhealth
+  (package
+    (name "mygnuhealth")
+    (version "1.0.5")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "MyGNUHealth" version))
+              (sha256
+               (base32
+                "1jcrriccqzb4jx7zayhiqmpvi3cvfy3bbf9zr3m83878f94yww8j"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:imported-modules `(,@%python-build-system-modules
+                           ,@%qt-build-system-modules)
+      #:modules `(((guix build qt-build-system) #:prefix qt:)
+                  (guix build python-build-system)
+                  (guix build utils))
+      #:phases #~(modify-phases %standard-phases
+                   (add-after 'install 'qt-wrap
+                     (assoc-ref qt:%standard-phases 'qt-wrap))
+                   (add-before 'check 'env-setup
+                     (lambda _
+                       (mkdir-p "/tmp/mygh/")
+                       (setenv "HOME" "/tmp"))))))
+    (native-inputs (list python-pyside-2))
+    (inputs (list bash-minimal
+                  kirigami
+                  python
+                  python-bcrypt
+                  python-matplotlib
+                  python-requests
+                  python-tinydb
+                  qtbase-5
+                  qtdeclarative-5
+                  qtgraphicaleffects
+                  qtquickcontrols-5
+                  qtquickcontrols2-5
+                  qtsvg-5))
+    (home-page "https://www.gnuhealth.org")
+    (synopsis "The GNU Health Personal Health Record")
+    (description
+     "This package provides GNUHealth Personal Health Record
+application for desktop and mobile devices that integrates with the GNU
+Health Federation.")
+    (license gpl3+)))
+
 (define-public openmolar-1
   (package
    (name "openmolar")
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 1cef8d4811..95d30b46d7 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -38,6 +38,7 @@
 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2022 Giovanni Biscuolo <g@xelera.eu>
 ;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2023 Yovan Naumovski <yovan@gorski.stream>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1321,7 +1322,7 @@ Encryption to Gajim.")
 (define-public dino
   (package
     (name "dino")
-    (version "0.4.0")
+    (version "0.4.2")
     (source
      (origin
        (method url-fetch)
@@ -1329,7 +1330,7 @@ Encryption to Gajim.")
         (string-append "https://github.com/dino/dino/releases/download/v"
                        version "/dino-" version ".tar.gz"))
        (sha256
-        (base32 "115p7mjk0q68nvv8asrm6hsv0dzsz7hy2bnvhwhxmcfbilr8fq68"))))
+        (base32 "1vbyrnivibsn4jzmfb6sfq5fxhb0xh1cnhgcmg1rafq751q55cg1"))))
     (build-system cmake-build-system)
     (outputs '("out" "debug"))
     (arguments
@@ -2842,7 +2843,7 @@ as well as on desktop platforms.  It's based on libpurple and ModemManager.")
 (define-public mosquitto
   (package
     (name "mosquitto")
-    (version "1.6.12")
+    (version "2.0.15")
     (source
      (origin
        (method url-fetch)
@@ -2850,10 +2851,10 @@ as well as on desktop platforms.  It's based on libpurple and ModemManager.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1yq7y329baa1ly488rw125c3mvsnsa7kjkik602xv1xpkz8p73al"))))
+         "1ils0ckxz86gvr37k2gfl4q9gs12625dhhb7i6lcg49z5v9v2da7"))))
     (build-system cmake-build-system)
     (inputs
-     (list openssl))
+     (list openssl libxslt))
     (synopsis "Message broker")
     (description "This package provides Eclipse Mosquitto, a message broker
 that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1.  Mosquitto
@@ -3259,14 +3260,14 @@ notifications.")
 (define-public pounce
   (package
     (name "pounce")
-    (version "3.0")
+    (version "3.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://git.causal.agency/pounce/snapshot/pounce-"
                            version ".tar.gz"))
        (sha256
-        (base32 "1w4x34bspkqvk9p7bfj0zmvmbzvxb7lxrrr3g6lrfdj9f3qzfxpp"))))
+        (base32 "0kk0jrfiwfaybr0i5xih3b0yd4i6v3bz866a7xal1j8wddalbwlp"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ;there are no tests
@@ -3278,7 +3279,7 @@ notifications.")
      (list pkg-config universal-ctags))
     (inputs
      (list libressl))
-    (home-page "https://code.causal.agency/june/pounce")
+    (home-page "https://git.causal.agency/pounce")
     (synopsis "Simple multi-client TLS-only IRC bouncer")
     (description
      "@command{pounce} is a multi-client, TLS-only IRC bouncer.  It maintains
diff --git a/gnu/packages/minetest.scm b/gnu/packages/minetest.scm
index 4c14d9412c..bf0df314a7 100644
--- a/gnu/packages/minetest.scm
+++ b/gnu/packages/minetest.scm
@@ -52,7 +52,7 @@
 (define-public minetest
   (package
     (name "minetest")
-    (version "5.6.1")
+    (version "5.7.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -61,7 +61,7 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1bgk369n7r52vh3hdngrlf98k3v84ch2qp341xhs53ixrns2crfn"))
+                "008l44zwwsarwk4hn7wx2nj2m21b1iqsphl7g69rrlxj760zl0pl"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -106,7 +106,8 @@
                   "(void)0;"))
                (setenv "MINETEST_SUBGAME_PATH" ; for check
                        (string-append (getcwd) "/games"))))
-           (replace 'check
+           (delete 'check)
+           (add-after 'install 'check
              (lambda* (#:key tests? #:allow-other-keys)
                ;; Thanks to our substitutions, the tests should also run
                ;; when invoked on the target outside of `guix build'.
@@ -165,7 +166,7 @@ in different ways.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1w0vdk6a1rhsfwyfviayfwsyqbzwikqazkgbrfl39anf3a50rvv1"))))
+                "02kbj1h6jsq6k8x4v2ir0njczdz7nyx6dbym85ixxp3mrqxiws61"))))
     (build-system copy-build-system)
     (arguments
      (list #:install-plan
diff --git a/gnu/packages/monitoring.scm b/gnu/packages/monitoring.scm
index c0df1e501c..5ef40bdf58 100644
--- a/gnu/packages/monitoring.scm
+++ b/gnu/packages/monitoring.scm
@@ -171,7 +171,7 @@ etc. via a Web interface.  Features include:
 (define-public zabbix-agentd
   (package
     (name "zabbix-agentd")
-    (version "6.0.12")
+    (version "6.0.14")
     (source
      (origin
        (method url-fetch)
@@ -179,7 +179,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 "04083aa63bzfg5jp958nypbqr0hlcbhj73whlinr1ri3x1z0caz7"))
+        (base32 "0n6fqa9vbhh2syxii7ds2x6dnplrgrj98by1zl0ij1wfbnbxa6k3"))
        (modules '((guix build utils)))
        (snippet
         '(substitute* '("src/zabbix_proxy/proxy.c"
@@ -829,4 +829,3 @@ user-configured power thresholds.  This can be used to force powering off a
 laptop when the battery gets below critical levels, instead of damaging the
 battery.")
     (license license:isc)))
-
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index 6b7c78c71b..ef45511546 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -600,7 +600,7 @@ mpdevil loads all tags and covers on demand.")
 (define-public mympd
   (package
     (name "mympd")
-    (version "10.2.4")
+    (version "10.2.6")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -609,7 +609,7 @@ mpdevil loads all tags and covers on demand.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0544vx9x103394mz2x92ycfj5lh59xrzcvagi4q0jb9b1hh44s6p"))))
+                "1adi1pdygj7wlfi6k3978b6ny2cziai4f761a61j9vxa2ywf7wbb"))))
     (build-system cmake-build-system)
     (arguments
      (list #:tests? #f)) ; no test target
diff --git a/gnu/packages/mpi.scm b/gnu/packages/mpi.scm
index baef62616f..f21bd16d3a 100644
--- a/gnu/packages/mpi.scm
+++ b/gnu/packages/mpi.scm
@@ -141,7 +141,7 @@ bind processes, and much more.")
 (define-public hwloc-2
   (package
     (inherit hwloc-1)
-    (version "2.9.0")
+    (version "2.9.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.open-mpi.org/release/hwloc/v"
@@ -149,7 +149,7 @@ bind processes, and much more.")
                                   "/hwloc-" version ".tar.bz2"))
               (sha256
                (base32
-                "11v8hnl6fdsdbm3wnz5gg88f2ghixjyl7jlfmywj293ab5iyjw10"))))
+                "17jr14a5ns5rpwvy28fy7xqagbvfprsz7wrsjgh5gx7y40d97i3w"))))
 
     ;; libnuma is no longer needed.
     (inputs (modify-inputs (package-inputs hwloc-1)
@@ -168,16 +168,7 @@ bind processes, and much more.")
            (add-before 'check 'skip-tests-that-require-/sys
              (lambda _
                ;; 'test-gather-topology.sh' requires /sys as of 2.9.0; skip it.
-               (setenv "HWLOC_TEST_GATHER_TOPOLOGY" "0")
-
-               ;; 'hwloc_backends' also requires /sys on non-x86 systems, for
-               ;; which hwloc lacks a topology backend not reliant on the
-               ;; operating system; skip it also on these machines.
-               (substitute* "tests/hwloc/hwloc_backends.c"
-                 ,@(if (not (target-x86?))
-                       '((("putenv\\(\\(char \\*\\) \"HWLOC_L" all)
-                          (string-append "exit (77);\n" all)))
-                       '()))))
+               (setenv "HWLOC_TEST_GATHER_TOPOLOGY" "0")))
            (add-before 'check 'skip-test-that-fails-on-qemu
              (lambda _
                ;; Skip test that fails on emulated hardware due to QEMU bug:
@@ -186,8 +177,6 @@ bind processes, and much more.")
                  (("hwloc_topology_init" all)
                   (string-append "exit (77);\n" all)))))))))))
 
-(define-deprecated hwloc-2.0 hwloc-2)
-
 (define-public hwloc
   ;; The latest stable series of hwloc.
   hwloc-2)
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 2b246be758..23bd358240 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -34,7 +34,7 @@
 ;;; Copyright © 2019 Riku Viitanen <riku.viitanen0@gmail.com>
 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
 ;;; Copyright © 2021 Liliana Marie Prikler <liliana.prikler@gmail.com>
-;;; Copyright © 2021, 2022 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021, 2022, 2023 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
 ;;; Copyright © 2021 Frank Pursel <frank.pursel@gmail.com>
@@ -51,6 +51,7 @@
 ;;; Copyright © 2022 Jose G Perez Taveras <josegpt27@gmail.com>
 ;;; Copyright © 2022 jgart <jgart@dismail.de>
 ;;; Copyright © 2023 Jonathan Brielmaier <jonathan.brielmaier@web.de>
+;;; Copyright © 2023 Antero Mejr <antero@mailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -112,6 +113,7 @@
   #:use-module (gnu packages curl)
   #:use-module (gnu packages cyrus-sasl)
   #:use-module (gnu packages datastructures)
+  #:use-module (gnu packages digest)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages emacs)
@@ -122,6 +124,7 @@
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages game-development)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
@@ -140,6 +143,7 @@
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages java)
+  #:use-module (gnu packages kde-frameworks)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libusb)
@@ -478,10 +482,74 @@ playing your music.")
                ;; qocoa is under MIT and CC by-sa for the icons.
                license:cc-by-sa3.0))))
 
+(define-public ctrlr
+  ;; The latest release from 2021 does not have a build system.
+  (let ((commit "8aa00d82127acda42ad9ac9b7b479461e9436aa4")
+        (revision "1"))
+    (package
+      (name "ctrlr")
+      (version (git-version "5.5.9" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/RomanKubiak/ctrlr")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1lpfkjp9y0wh2kj02isv8ixnxn3wyvrxhkx0rybwzswfiz5kqdlm"))))
+      (build-system cmake-build-system)
+      (arguments
+       (list
+        #:cmake cmake                   ;needs 3.25
+        #:tests? #false                 ;there are none
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'pre-configure
+              (lambda _
+                ;; Override default location of fonts.conf.  Without this no
+                ;; fonts will be rendered at all.
+                (substitute* "JUCE/modules/juce_graphics/native/juce_linux_Fonts.cpp"
+                  (("/usr/share/fonts/fonts.conf")
+                   "/run/current-system/profile/etc/fonts/fonts.conf"))
+                ;; Do not build the VST or AU plugins, because these require
+                ;; external proprietary SDKs.
+                (substitute* "CMakeLists.txt"
+                  (("juce_set_vst2_sdk_path.*") "")
+                  (("FORMATS VST3 VST AU Standalone")
+                   "FORMATS Standalone")
+                  ;; BFD also need -liberty.
+                  (("list\\(APPEND ctrlrLibs \"bfd\"\\)" m)
+                   (string-append m "
+list(APPEND ctrlrLibs \"iberty\")")))))
+            ;; The install target doesn't install ctrlr but JUCE helpers.
+            (replace 'install
+              (lambda _
+                (install-file "ctrlr_artefacts/RelWithDebInfo/Standalone/ctrlr"
+                              (string-append #$output "/bin")))))))
+      (inputs
+       (list alsa-lib
+             boost
+             eudev
+             freetype
+             libiberty
+             libx11
+             webkitgtk))
+      (native-inputs
+       (list pkg-config))
+      (home-page "https://ctrlr.org/")
+      (synopsis "Control any MIDI-enabled hardware")
+      (description "This package provides a tool to control any MIDI-enabled
+hardware such as synthesizers, drum machines, samplers, or effects.  It lets
+you create custom user interfaces for your MIDI hardware.")
+      (license (list license:gpl2+
+                     license:gpl3       ;JUCE
+                     license:bsd-3)))))
+
 (define-public strawberry
   (package
     (name "strawberry")
-    (version "1.0.15")
+    (version "1.0.17")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -490,7 +558,7 @@ playing your music.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "04ddplldlls0gxw8qppw6dsqhfnxamxfnnyq0i04mbs5hi83pcrz"))
+                "1xcf9jighb759kdh4p32wib2pipgcx3qdf5x7da6cjhxjbzgfrk7"))
               (modules '((guix build utils)
                          (ice-9 regex)))
               (snippet
@@ -503,8 +571,8 @@ playing your music.")
                      (let ((bundled '("singleapplication")))
                        (if (not
                             (string-match
-                              (string-append ".?*(" (string-join bundled "|") ")")
-                              dir))
+                             (string-append ".?*(" (string-join bundled "|") ")")
+                             dir))
                            (delete-file-recursively dir))))
                    (find-files "3rdparty"
                                (lambda (file stat)
@@ -516,23 +584,23 @@ playing your music.")
        #:phases
        (modify-phases %standard-phases
          (add-after 'install 'wrap-program
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out             (assoc-ref outputs "out"))
-                   (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
-               (wrap-program (string-append out "/bin/strawberry")
-                 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))))))
+           (lambda* (#:key outputs #:allow-other-keys)
+             (wrap-program (search-input-file outputs "bin/strawberry")
+               `("GST_PLUGIN_SYSTEM_PATH" ":" prefix
+                 (,(getenv "GST_PLUGIN_SYSTEM_PATH"))))))
          (add-before 'check 'pre-check
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((xorg-server (assoc-ref inputs "xorg-server")))
-               (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
-               (setenv "DISPLAY" ":1")
-               (setenv "HOME" (getcwd))))))))
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (system (format #f "~a :1 &"
+                             (search-input-file (or native-inputs inputs)
+                                                "bin/Xvfb")))
+             (setenv "DISPLAY" ":1")
+             (setenv "HOME" (getcwd)))))))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("googletest" ,googletest)
-       ("pkg-config" ,pkg-config)
-       ("qtlinguist" ,qttools)
-       ("xorg-server" ,xorg-server-for-tests)))
+     (list gettext-minimal
+           googletest
+           pkg-config
+           qttools
+           xorg-server-for-tests))
     (inputs
      (list alsa-lib
            boost
@@ -1543,9 +1611,6 @@ Because Abjad wraps the LilyPond music notation package, you can use Abjad to co
 typographic detail of symbols on the page.")
      (license license:expat)))
 
-(define-public python-abjad
-  (deprecated-package "python-abjad" abjad))
-
 (define-public abjad-ext-rmakers
   (package
     (name "abjad-ext-rmakers")
@@ -2198,7 +2263,7 @@ a JACK session.")
 (define-public mixxx
   (package
     (name "mixxx")
-    (version "2.3.3")
+    (version "2.3.4")
     (source
      (origin
        (method git-fetch)
@@ -2210,7 +2275,7 @@ a JACK session.")
         (search-patches "mixxx-link-qtscriptbytearray-qtscript.patch"
                         "mixxx-system-googletest-benchmark.patch"))
        (sha256
-        (base32 "0zrmy97lk0xdfnlvygshr8vradypmnypki3s1mhc296xhq96n6rm"))
+        (base32 "056zn0nxl7xrmg467ljdszsycrszsrzsc8k4s39mp4qxyd9qq4yn"))
        (modules '((guix build utils)))
        (snippet
         ;; Delete libraries that we already have or don't need.
@@ -2495,44 +2560,64 @@ reverb effects.")
                 "1pff51imfgmgqzc6mdgwd1v9fci0a8hj85fnkdsvkdzbnxdzvs9r"))))
     (build-system cmake-build-system)
     (arguments
-     (list #:tests? #f                            ;no test suite
-           #:phases
-           #~(modify-phases %standard-phases
-               (replace 'install
-                 (lambda _
-                   (let* ((bin (string-append #$output "/bin"))
-                          (lib (string-append #$output "/lib"))
-                          (share (string-append #$output "/share"))
-                          (clap (string-append lib "/clap"))
-                          (vst3 (string-append lib "/vst3")))
-                     (with-directory-excursion
-                         "PaulXStretch_artefacts/RelWithDebInfo"
-                       (install-file "Standalone/paulxstretch" bin)
-                       (install-file "CLAP/PaulXStretch.clap" clap)
-                       (mkdir-p vst3)
-                       (copy-recursively "VST3" vst3)
-                       (install-file (string-append
-                                      #$source
-                                      "/linux/paulxstretch.desktop")
-                                     (string-append share "/applications"))
-                       (install-file
-                        (string-append
-                         #$source
-                         "/images/paulxstretch_icon_1024_rounded.png")
-                        (string-append share "/pixmaps")))))))))
+     (list
+      #:tests? #f                       ;no test suite
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-paths
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "deps/juce/extras/Projucer/Source/ProjectSaving/\
+jucer_ProjectExport_CodeBlocks.h"
+                (("/usr/include/freetype2")
+                 (search-input-directory inputs "/include/freetype2")))
+              (substitute*
+                  "deps/juce/modules/juce_graphics/native/juce_linux_Fonts.cpp"
+                (("/etc/fonts")
+                 (search-input-directory inputs "/etc/fonts")))
+              (substitute*
+                  "deps/juce/modules/juce_gui_basics/native/x11/\
+juce_linux_XWindowSystem.cpp"
+                (("/usr/bin/dconf")
+                 (search-input-file inputs "/bin/dconf"))
+                (("/usr/bin/gsettings")
+                 (search-input-file inputs "/bin/gsettings")))))
+          (replace 'install
+            (lambda _
+              (let* ((lib (string-append #$output "/lib"))
+                     (share (string-append #$output "/share"))
+                     (clap (string-append lib "/clap"))
+                     (vst3 (string-append lib "/vst3")))
+                (with-directory-excursion
+                    "PaulXStretch_artefacts/RelWithDebInfo"
+                  (install-file "Standalone/paulxstretch"
+                                (string-append #$output "/bin"))
+                  (install-file "CLAP/PaulXStretch.clap" clap)
+                  (mkdir-p vst3)
+                  (copy-recursively "VST3" vst3)
+                  (install-file (string-append
+                                 #$source
+                                 "/linux/paulxstretch.desktop")
+                                (string-append share "/applications"))
+                  (install-file (string-append
+                                 #$source
+                                 "/images/paulxstretch_icon_1024_rounded.png")
+                                (string-append share "/pixmaps")))))))))
     (home-page "https://sonosaurus.com/paulxstretch/")
     (native-inputs (list pkg-config))
     (inputs (list alsa-lib
                   curl
+                  dconf
                   fftwf
+                  fontconfig
                   freetype
+                  `(,glib "bin")
                   jack-1
                   libx11
                   libxcursor
                   libxext
                   libxinerama
                   libxrandr))
-    (supported-systems '("x86_64-linux"))         ;pffft.c uses SIMD code
+    (supported-systems '("x86_64-linux")) ;pffft.c uses SIMD code
     (synopsis "Audio timestretching application and plugin")
     (description
      "PaulXStretch is an application/plugin is based on the PaulStretch
@@ -4874,7 +4959,7 @@ includes LV2 plugins and a JACK standalone client.")
 (define-public musescore
   (package
     (name "musescore")
-    (version "4.0.1")
+    (version "4.0.2")
     (source
      (origin
        (method git-fetch)
@@ -4883,7 +4968,7 @@ includes LV2 plugins and a JACK standalone client.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0x1aahpbvss3sjydcq6xdh198fmslgypixmd2gckfwjqzady662y"))
+        (base32 "1yri94xs4xw0lsvmk5q7bqnpgmdadchfn08r7bb2y07jsi8qgm6w"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -5019,7 +5104,7 @@ studio.")
 (define-public gsequencer
   (package
     (name "gsequencer")
-    (version "4.4.2")
+    (version "4.5.0")
     (source
      (origin
        (method git-fetch)
@@ -5028,7 +5113,7 @@ studio.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "01fy9jkbwj8h7p0cjpc9ghjvh2d8w6n7vs6w5jbacgs2i61jx6hh"))))
+        (base32 "0j66b8y1pyka2im5hbwz6yh3hip0wsw7fa3kwl2212wq1y2a4ys1"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      `(#:phases
@@ -6351,62 +6436,100 @@ and as an LV2 plugin.")
     ;; distros to make necessary changes to integrate the software into the
     ;; distribution.
     (name "zrythm")
-    (version "1.0.0-alpha.12.0.1")
+    (version "1.0.0-beta.4.5.62")
     (source
-      (origin
-        (method url-fetch)
-        (uri (string-append "https://www.zrythm.org/releases/zrythm-"
-                            version ".tar.xz"))
-        (sha256
-          (base32
-           "1si4n8rdg0a3frlbj6yqpyzr4f20v3cpl4m6kv0yf7r25psyl5pk"))))
-   (build-system meson-build-system)
-   (arguments
-    `(#:glib-or-gtk? #t
-      #:configure-flags
-      `("-Dtests=true"
-        "-Dmanpage=true"
-        "-Ddseg_font=false"
-        "-Dgraphviz=enabled" ; for exporting routing graphs
-        "-Dguile=enabled" ; for Guile scripting
-        "-Djack=enabled" ; for JACK audio/MIDI backend
-        "-Drtmidi=enabled" ; for RtMidi backend (ALSA sequencer)
-        "-Dsdl=enabled"))) ; for SDL audio backend (which uses ALSA)
-   (inputs
-    `(("alsa-lib" ,alsa-lib)
-      ("jack" ,jack-1)
-      ("font-dseg" ,font-dseg)
-      ("fftw" ,fftw)
-      ("fftwf" ,fftwf)
-      ("gettext" ,gettext-minimal)
-      ("glibc" ,glibc)
-      ("graphviz" ,graphviz)
-      ("gtk+" ,gtk+)
-      ("gtksourceview" ,gtksourceview-4)
-      ("guile" ,guile-2.2)
-      ("libaudec" ,libaudec)
-      ("libcyaml" ,libcyaml)
-      ("libsamplerate" ,libsamplerate)
-      ("libsndfile" ,libsndfile)
-      ("libyaml" ,libyaml)
-      ("lilv" ,lilv)
-      ("lv2" ,lv2)
-      ("pulseaudio" ,pulseaudio)
-      ("reproc" ,reproc)
-      ("rubberband" ,rubberband)
-      ("rtmidi" ,rtmidi-4.0)
-      ("sdl2" ,sdl2)
-      ("xdg-utils" ,xdg-utils)
-      ("zstd" ,zstd "lib")))
-   (native-inputs
-     (list pkg-config help2man
-           `(,glib "bin"))) ; for 'glib-compile-resources'
-   (synopsis "Digital audio workstation focusing on usability")
-   (description "Zrythm is a digital audio workstation designed to be
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.zrythm.org/releases/zrythm-"
+                           version ".tar.xz"))
+       (sha256
+        (base32
+         "1nfb3h3aky8f8xslx6qzvcgcfrhlqa1v50kzanmpjxrx9dcllin7"))))
+    (build-system meson-build-system)
+    (arguments
+     (list #:tests? #f             ;123 pass, 3 fail. Appears network-related.
+           #:glib-or-gtk? #t
+           #:configure-flags
+           #~(list "-Dtests=true"
+                   "-Dmanpage=false"    ;fish-completions breaks this
+                   "-Ddseg_font=false"
+                   "-Dextra_optimizations=false" ;machine-specific
+                   "-Dgraphviz=enabled" ;for exporting routing graphs
+                   "-Dguile=enabled"    ;for Guile scripting
+                   "-Djack=enabled"     ;for JACK audio/MIDI backend
+                   "-Drtmidi=enabled"   ;for RtMidi backend (ALSA sequencer)
+                   "-Dsdl=enabled")   ;for SDL audio backend (which uses ALSA)
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'build 'disable-guile-auto-compilation
+                 (lambda _
+                   (setenv "GUILE_AUTO_COMPILE" "0")))
+               (add-after 'install 'wrap-program
+                 (lambda _
+                   (wrap-program (string-append #$output "/bin/zrythm")
+                     ;; Wrapping GDK_PIXBUF_MODULE_FILE allows Zrythm to load
+                     ;; its own SVG icons in pure environments.
+                     `("GDK_PIXBUF_MODULE_FILE" =
+                       (,(getenv "GDK_PIXBUF_MODULE_FILE")))))))))
+    (inputs
+     (list alsa-lib
+           boost
+           carla-2.6
+           curl
+           fftw
+           fftwf
+           flex
+           font-dseg
+           gettext-minimal
+           glib-next
+           glibc
+           graphviz
+           gtk
+           gtksourceview
+           guile-2.2
+           jack-2
+           json-glib
+           libadwaita
+           libaudec
+           (module-ref
+            (resolve-interface '(gnu packages debug)) 'libbacktrace)
+           libcyaml
+           libpanel
+           (librsvg-for-system)
+           libsamplerate
+           libsndfile
+           libyaml
+           lilv
+           lv2
+           pango
+           pipewire
+           pulseaudio
+           reproc
+           rtmidi
+           rubberband
+           sdl2
+           vamp
+           xdg-utils
+           xxhash
+           zix
+           `(,zstd "lib")))
+    (native-inputs
+     ;; Zrythm require breeze-icons to be installed.  Having them listed in
+     ;; the native inputs cause them to be wrapped and made available via
+     ;; XDG_DATA_DIRS.
+     (list breeze-icons                 ;native because not executable
+           help2man
+           `(,glib-next "bin")          ;for 'glib-compile-resources'
+           pkg-config
+           python-sphinx
+           python-sphinx-intl
+           sassc))
+    (synopsis "Digital audio workstation focusing on usability")
+    (description "Zrythm is a digital audio workstation designed to be
 featureful and easy to use.  It offers unlimited automation options, LV2
 plugin support, JACK support and chord assistance.")
-   (home-page "https://www.zrythm.org")
-   (license license:agpl3+)))
+    (home-page "https://www.zrythm.org/en/index.html")
+    (license license:agpl3+)))
 
 (define-public dragonfly-reverb
   (package
@@ -6491,10 +6614,6 @@ to be bundled with the Zrythm @dfn{digital audio workstation} (DAW).")
     (home-page "https://www.zrythm.org/en/plugins.html")
     (license license:agpl3+)))
 
-(define-public zlfo
-  ;; The "zlfo" package is now included in zplugins
-  (deprecated-package "zlfo" zplugins))
-
 (define-public remid-lv2
   (package
     (name "remid-lv2")
@@ -7084,6 +7203,40 @@ Renoise, VCV Rack, or SuperCollider.")
       (home-page "https://100r.co/site/orca.html")
       (license license:expat))))
 
+(define-public samplebrain
+  (package
+    (name "samplebrain")
+    (version "0.18.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://gitlab.com/then-try-this/samplebrain")
+                    (commit (string-append "v" version "_release"))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "17p6n16x89bbzlpn9r7w1lgr1ifxs45npn8gxymkdr3j16dhg4zy"))))
+    (build-system qt-build-system)
+    (arguments
+     (list #:tests? #f ;no tests
+           #:phases #~(modify-phases %standard-phases
+                        (replace 'configure
+                          (lambda _
+                            (substitute* "samplebrain.pro"
+                              (("\\/usr")
+                               #$output))
+                            (invoke "qmake"))))))
+    (inputs (list fftw liblo libsndfile portaudio))
+    (home-page "https://thentrythis.org/projects/samplebrain/")
+    (synopsis "Sample mashing synthesizer designed by Aphex Twin")
+    (description
+     "Samplebrain chops samples up into a 'brain' of
+interconnected small sections called blocks which are connected into a network
+by similarity.  It processes a target sample, chopping it up into blocks in
+the same way, and tries to match each block with one in its brain to play in
+realtime.")
+    (license license:gpl2+)))
+
 ;;;
 ;;; Avoid adding new packages to the end of this file. To reduce the chances
 ;;; of a merge conflict, place them above by existing packages with similar
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 8571c57800..8f4318afba 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -30,7 +30,7 @@
 ;;; Copyright © 2019 Vasile Dumitrascu <va511e@yahoo.com>
 ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2019 Timotej Lazar <timotej.lazar@araneo.si>
-;;; Copyright © 2019, 2020, 2021 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2019, 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2019, 2020 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
 ;;; Copyright © 2019 Daniel Schaefer <git@danielschaefer.me>
@@ -58,6 +58,7 @@
 ;;; Copyright © 2023 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2023 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
+;;; Copyright © 2023 Yovan Naumovski <yovan@gorski.stream>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -200,7 +201,7 @@ runs on top of IP or UDP, and supports both v4 and v6 versions.")
 (define-public arp-scan
   (package
     (name "arp-scan")
-    (version "1.9.8")
+    (version "1.10.0")
     (source
      (origin
        (method git-fetch)
@@ -210,7 +211,7 @@ runs on top of IP or UDP, and supports both v4 and v6 versions.")
          (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "18pck3hi7caykpkry5ri16w4w8m11g8gvh3qx5rhwsc6d9xa2a6d"))))
+        (base32 "1d603by2v7gj6bdxn1d23l425q115dk5qfk3ywbj6wbsjysqhbq5"))))
     (build-system gnu-build-system)
     (inputs
      (list libpcap))
@@ -1755,41 +1756,36 @@ of the same name.")
 (define-public wireshark
   (package
     (name "wireshark")
-    (version "4.0.3")
+    (version "4.0.4")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.wireshark.org/download/src/wireshark-"
                            version ".tar.xz"))
        (sha256
-        (base32 "04cmgvmkyvxdpfy08adxf3smklgzakrvyvb89rrr7yqaridy2lbc"))))
+        (base32 "0jz76ra86gy7r4wwb174lggnl5y29nn68l7ydw1kj1phcijrz854"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             ;; Skip test suite failing with "Program reassemble_test is not
-             ;; available" and alike errors.  Also skip test suite failing
-             ;; with "AssertionError: Program extcap/sdjournal is not
-             ;; available" error.'
-             (when tests?
-               (invoke "ctest"
-                       "-E"
-                       (string-join (list "suite_unittests" "suite_extcaps")
-                                    "|"))))))
-       ;; Build process chokes during `validate-runpath' phase.
-       ;;
-       ;; Errors are like the following:
-       ;; "/gnu/store/...wireshark-3.0.0/lib/wireshark/plugins/3.0/epan/ethercat.so:
-       ;; error: depends on 'libwireshark.so.12', which cannot be found in
-       ;; RUNPATH".  That is, "/gnu/store/...wireshark-3.0.0./lib" doesn't
-       ;; belong to RUNPATH.
-       ;;
-       ;; That’s not a problem in practice because "ethercat.so" is a plugin,
-       ;; so it’s dlopen’d by a process that already provides "libwireshark".
-       ;; For now, we disable this phase.
-       #:validate-runpath? #f))
+     (list
+      ;; This causes the plugins to register runpaths for the wireshark
+      ;; libraries, which would otherwise cause the validate-runpath phase to
+      ;; fail.
+      #:configure-flags #~(list (string-append "-DCMAKE_MODULE_LINKER_FLAGS="
+                                               "-Wl,-rpath=" #$output "/lib")
+                                "-DUSE_qt6=ON")
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'check
+            (lambda* (#:key parallel-tests? tests? #:allow-other-keys)
+              (when tests?
+                (invoke "ctest" "-VV"
+                        "-j" (if parallel-tests?
+                                 (number->string (parallel-job-count))
+                                 "1")
+                        ;; Skip the suite_extcaps.case_extcaps.test_sdjournal
+                        ;; test as it requires sdjournal (from systemd) and
+                        ;; fails.
+                        "-E" "suite_extcaps")))))))
     (inputs
      (list c-ares
            glib
@@ -1802,14 +1798,15 @@ of the same name.")
            libssh
            libxml2
            lz4
-           lua-5.2                      ;Lua 5.3 unsupported
+           lua
            mit-krb5
            `(,nghttp2 "lib")
            minizip
            pcre2
-           qtbase-5
-           qtmultimedia-5
-           qtsvg-5
+           qt5compat
+           qtbase
+           qtmultimedia
+           qtsvg
            sbc
            snappy
            zlib
@@ -1822,7 +1819,7 @@ of the same name.")
            perl
            pkg-config
            python-wrapper
-           qttools-5))
+           qttools))
     (synopsis "Network traffic analyzer")
     (description "Wireshark is a network protocol analyzer, or @dfn{packet
 sniffer}, that lets you capture and interactively browse the contents of
@@ -2913,6 +2910,39 @@ networks.")
 speedtest.net.")
     (license license:asl2.0)))
 
+(define-public atftp
+  (package
+    (name "atftp")
+    (version "0.8.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://git.code.sf.net/p/atftp/code")
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32
+                "019qrh2wpvr577ksvs3s82q6kiqm5i6869aj7qba326b59lhkxrc"))
+              (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'autoreconf
+                          (lambda _
+                            (invoke "autoreconf" "-vif"))))))
+    (native-inputs (list autoconf automake perl pkg-config))
+    (inputs (list pcre2 procps readline tcp-wrappers))
+    (home-page "https://sourceforge.net/projects/atftp/")
+    (synopsis "Advanced TFTP server and client")
+    (description
+     "This package provides a multi-threaded TFTP server that implements all
+options, including all extensions, as specified in RFC 1350, RFC 2090, RFC
+2347, RFC 2348, RFC 2349 and RFC7440.  Atftpd also supports a multicast
+protocol known as mtftp, which was defined in the PXE specification.
+
+The server is socket activated by default but supports being started from
+@command{inetd} as well as in daemon mode.")
+    (license license:gpl2+)))
+
 (define-public tftp-hpa
   (package
     (name "tftp-hpa")
@@ -3676,55 +3706,56 @@ communication over HTTP.")
     (license license:agpl3+)))
 
 (define-public restinio
-  (package
-    (name "restinio")
-    (version "0.6.17")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/Stiffstream/restinio")
-                    (commit (string-append "v." version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1jpvfa2sjkihbkcc1q6c9zb1vry9mkkhbz2jrl831bqslpq9la3p"))))
-    (build-system cmake-build-system)
-    (arguments
-     (list
-      ;; Multiple tests fail to run in the build container due to host name
-      ;; resolution (see: https://github.com/Stiffstream/restinio/issues/172).
-      #:tests? #f
-      #:configure-flags #~(list "-DRESTINIO_FIND_DEPS=ON"
-                                "-DRESTINIO_INSTALL=ON"
-                                "-DRESTINIO_TEST=ON"
-                                "-DRESTINIO_USE_EXTERNAL_HTTP_PARSER=ON"
-                                "-DRESTINIO_USE_EXTERNAL_SOBJECTIZER=ON")
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'change-directory
-            (lambda _
-              (chdir "dev"))))))
-    (native-inputs
-     (list catch2
-           clara
-           json-dto))
-    (inputs
-     (list openssl
-           sobjectizer))
-    (propagated-inputs
-     ;; These are all #include'd by restinio's .hpp header files.
-     (list asio
-           fmt
-           http-parser
-           pcre
-           pcre2
-           zlib))
-    (home-page "https://stiffstream.com/en/products/restinio.html")
-    (synopsis "C++14 library that gives you an embedded HTTP/Websocket server")
-    (description "RESTinio is a header-only C++14 library that gives you an embedded
+  ;; Temporarily use an unreleased commit, which includes fixes to be able to
+  ;; run the test suite in the resolver-less Guix build environment.
+  (let ((revision "0")
+        (commit "eda471ec3a2815965ca02ec93a1124a342b7601d"))
+    (package
+      (name "restinio")
+      (version (git-version "0.6.18" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/Stiffstream/restinio")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0f4w7714r0ic7csgxydw2vzfh35ssk34pns9jycmc08dzc3r7whb"))))
+      (build-system cmake-build-system)
+      (arguments
+       (list
+        #:configure-flags #~(list "-DRESTINIO_FIND_DEPS=ON"
+                                  "-DRESTINIO_INSTALL=ON"
+                                  "-DRESTINIO_TEST=ON"
+                                  "-DRESTINIO_USE_EXTERNAL_HTTP_PARSER=ON"
+                                  "-DRESTINIO_USE_EXTERNAL_SOBJECTIZER=ON")
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'change-directory
+              (lambda _
+                (chdir "dev"))))))
+      (native-inputs
+       (list catch2
+             clara
+             json-dto))
+      (inputs
+       (list openssl
+             sobjectizer))
+      (propagated-inputs
+       ;; These are all #include'd by restinio's .hpp header files.
+       (list asio
+             fmt
+             http-parser
+             pcre
+             pcre2
+             zlib))
+      (home-page "https://stiffstream.com/en/products/restinio.html")
+      (synopsis "C++14 library that gives you an embedded HTTP/Websocket server")
+      (description "RESTinio is a header-only C++14 library that gives you an embedded
 HTTP/Websocket server.  It is based on standalone version of ASIO
 and targeted primarily for asynchronous processing of HTTP-requests.")
-    (license license:bsd-3)))
+      (license license:bsd-3))))
 
 (define-public opendht
   (package
@@ -4237,46 +4268,6 @@ cables.")
                     "file://COPYING.slirpvde"
                     "See COPYING.slirpvde in the distribution."))))))
 
-(define-public haproxy
-  (package
-    (name "haproxy")
-    (version "2.1.7")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://www.haproxy.org/download/"
-                                  (version-major+minor version)
-                                  "/src/haproxy-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0fd3c1znid5a9w3gcf77b85hm2a2558w9s02c4b7xzkmivqnqbir"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:make-flags
-       (let* ((out (assoc-ref %outputs "out")))
-         (list (string-append "PREFIX=" out)
-               (string-append "DOCDIR=" out "/share/" ,name)
-               "TARGET=linux-glibc"
-               "USE_LUA=1"
-               "USE_OPENSSL=1"
-               "USE_ZLIB=1"
-               "USE_PCRE_2=1"))
-       #:tests? #f  ; there are only regression tests, using varnishtest
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure))))
-    (inputs
-     (list lua openssl pcre2 zlib))
-    (home-page "https://www.haproxy.org/")
-    (synopsis "Reliable, high performance TCP/HTTP load balancer")
-    (description "HAProxy offers @acronym{HA, high availability}, load
-balancing, and proxying for TCP and HTTP-based applications.  It is particularly
-suited to Web sites crawling under very high loads while needing persistence or
-Layer 7 processing.  Supporting tens of thousands of connections is clearly
-realistic with today's hardware.")
-    (license (list license:gpl2+
-                   license:lgpl2.1
-                   license:lgpl2.1+))))
-
 (define-public lldpd
   (package
     (name "lldpd")
diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm
index 43a37e85ec..d8d40e8fb4 100644
--- a/gnu/packages/node.scm
+++ b/gnu/packages/node.scm
@@ -887,7 +887,6 @@ source files.")
            brotli
            `(,nghttp2-for-node "lib")
            openssl-1.1
-           python-wrapper ;; for node-gyp (supports python3)
            zlib))))
 
 (define-public libnode
diff --git a/gnu/packages/nss.scm b/gnu/packages/nss.scm
index 7108c3909b..19ca675730 100644
--- a/gnu/packages/nss.scm
+++ b/gnu/packages/nss.scm
@@ -41,7 +41,7 @@
 (define-public nspr
   (package
     (name "nspr")
-    (version "4.34")
+    (version "4.35")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -49,8 +49,8 @@
                     version "/src/nspr-" version ".tar.gz"))
               (sha256
                (base32
-                "177rxcf3lglabs7sgwcvf72ww4v56qa71lc495wl13sxs4f03vxy"))))
-    (build-system mozilla-build-system)
+                "13xwda56yhp1w7v02qvlxvlqiniw8kr4g3fxlljmv6wnlmz2k8vy"))))
+    (build-system gnu-build-system)
     (inputs
      (list perl                         ;for 'compile-et.pl'
            bash-minimal))               ;for 'nspr-config'
@@ -191,7 +191,7 @@ in the Mozilla clients.")
                     ;; leading to test failures:
                     ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=609734>.  To
                     ;; work around that, set the time to roughly the release date.
-                    (invoke "faketime" "2022-09-01" "./nss/tests/all.sh"))
+                    (invoke "faketime" "2022-11-01" "./nss/tests/all.sh"))
                   (format #t "test suite not run~%"))))
           (replace 'install
             (lambda* (#:key outputs #:allow-other-keys)
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index b462d315e1..95ddea92c5 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -1117,14 +1117,14 @@ concrete syntax of the language (Quotations, Syntax Extensions).")
 (define-public hevea
   (package
     (name "hevea")
-    (version "2.35")
+    (version "2.36")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://hevea.inria.fr/old/"
                                   "hevea-" version ".tar.gz"))
               (sha256
                (base32
-                "1jwydkb9ldb1sx815c364dxgr569f2rbbzgxbn2kanrybpdbm2gi"))))
+                "0j06f8gb8f5is34kzmzy3znb0jkm2qd2l6rcl5v5qa9af3bmjrsx"))))
     (build-system gnu-build-system)
     (inputs
      (list ocaml))
diff --git a/gnu/packages/ocr.scm b/gnu/packages/ocr.scm
index 3b66d8d0b5..99ebc9d4f7 100644
--- a/gnu/packages/ocr.scm
+++ b/gnu/packages/ocr.scm
@@ -88,7 +88,7 @@ it produces text in 8-bit or UTF-8 formats.")
                (base32
                 "1m310cpb87xx8l8q7jy9fvzf6a0m8rm0dmjpbiwhc2mi6w4gn084"))))
     (build-system copy-build-system)
-    (arguments (list #:install-plan #~'(("." "share/tesseract-ocr/tessdata"))
+    (arguments (list #:install-plan #~'(("." "share/tessdata"))
                      #:phases #~(modify-phases %standard-phases
                                   (add-after 'unpack 'delete-broken-links
                                     (lambda _
@@ -131,15 +131,6 @@ models for the Tesseract OCR Engine.")
               (substitute* "configure.ac"
                 (("AC_SUBST\\(\\[XML_CATALOG_FILES])")
                  ""))))
-          (add-after 'unpack 'adjust-TESSDATA_PREFIX-macro
-            (lambda _
-              ;; Use a deeper TESSDATA_PREFIX hierarchy so that a more
-              ;; specific search-path than '/share' can be specified.  The
-              ;; build system uses CPPFLAGS for itself, so we can't simply set
-              ;; a make flag.
-              (substitute* "Makefile.am"
-                (("-DTESSDATA_PREFIX='\"@datadir@\"'")
-                 "-DTESSDATA_PREFIX='\"@datadir@/tesseract-ocr\"'"))))
           (add-after 'build 'build-training
             (lambda* (#:key parallel-build? #:allow-other-keys)
               (define n (if parallel-build? (number->string
@@ -155,7 +146,7 @@ models for the Tesseract OCR Engine.")
             ;; extended via TESSDATA_PREFIX.
             (lambda* (#:key native-inputs inputs #:allow-other-keys)
               (define eng.traineddata
-                "/share/tesseract-ocr/tessdata/eng.traineddata")
+                "/share/tessdata/eng.traineddata")
               (install-file (search-input-file (or native-inputs inputs)
                                                eng.traineddata)
                             (dirname (string-append #$output
@@ -183,7 +174,7 @@ models for the Tesseract OCR Engine.")
      (list leptonica))
     (native-search-paths (list (search-path-specification
                                 (variable "TESSDATA_PREFIX")
-                                (files (list "share/tesseract-ocr/tessdata"))
+                                (files (list "share/tessdata"))
                                 (separator #f)))) ;single value
     (home-page "https://github.com/tesseract-ocr/tesseract")
     (synopsis "Optical character recognition engine")
diff --git a/gnu/packages/opencl.scm b/gnu/packages/opencl.scm
index 2e506156b2..85b063b136 100644
--- a/gnu/packages/opencl.scm
+++ b/gnu/packages/opencl.scm
@@ -279,38 +279,53 @@ back-end for the LLVM compiler framework.")
 (define-public pocl
   (package
     (name "pocl")
-    (version "1.4")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/pocl/pocl")
-             (commit (string-append "v" version))))
-       (sha256
-        (base32 "1c4y69zks6hkq5fqh9waxgb8g4ka7y6h3vacmsm720kba0h57g8a"))
-       (file-name (git-file-name name version))))
+    (version "3.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/pocl/pocl")
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32
+                "1pw4q0hi5ynx34fvzryravz3jbh89f9cg60fkjj77sxh9xw8phdd"))
+              (file-name (git-file-name name version))
+              (modules '((guix build utils)))
+              (snippet
+                 '(begin
+                        ;; "kernel/test_printf_vectors" and
+                        ;; "kernel/test_printf_vectors_ulongn"
+                        ;; fail on aarch5 and likely other platforms
+                        ;; as commented in CMakeLists.txt
+                        ;; thus disable the block in CMakeList.txt adding
+                        ;; these two tests
+                       (substitute* "tests/kernel/CMakeLists.txt"
+                         (("NOT ENABLE_POCL_FLOAT_CONVERSION") "false"))))))
     (build-system cmake-build-system)
-    (native-inputs
-     (list libltdl pkg-config))
-    (inputs
-     (list clang-9 llvm-9 `(,hwloc-2 "lib") opencl-icd-loader))
+    (native-inputs (list libltdl pkg-config python-3))
+    (inputs (list clang-15 llvm-15
+                  `(,hwloc-2 "lib") opencl-icd-loader))
     (arguments
-     `(#:configure-flags
-       (list "-DENABLE_ICD=ON"
-             "-DENABLE_TESTSUITES=ON"
-             ;; We are not developers, don't run conformance suite.
-             "-DENABLE_CONFORMANCE=OFF"
-             (string-append "-DEXTRA_HOST_LD_FLAGS=-L"
-                            (assoc-ref %build-inputs "libc") "/lib"))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'set-HOME
-           (lambda _
-             (setenv "HOME" "/tmp")
+     `(#:configure-flags (let* ((libdir (string-append (assoc-ref %outputs
+                                                                  "out")
+                                                       "/lib")))
+                           (list "-DENABLE_ICD=ON"
+                                 "-DENABLE_TESTSUITES=ON"
+                                 ;; We are not developers, don't run conformance suite.
+                                 "-DENABLE_CONFORMANCE=OFF"
+                                 (string-append "-DEXTRA_HOST_LD_FLAGS=-L"
+                                                (assoc-ref %build-inputs
+                                                           "libc") "/lib")
+                                 ;; We need both libdir and libdir/pocl in RUNPATH.
+                                 (string-append "-DCMAKE_INSTALL_RPATH="
+                                                libdir ";" libdir "/pocl")))
+       #:phases (modify-phases %standard-phases
+                  (add-before 'check 'set-HOME
+                    (lambda _
+                      (setenv "HOME" "/tmp")
 
-             ;; Since 2.9.0, hwloc fails when /sys is missing, so provide a
-             ;; fake topology.
-             (setenv "HWLOC_SYNTHETIC" "4"))))))
+                      ;; Since 2.9.0, hwloc fails when /sys is missing, so provide a
+                      ;; fake topology.
+                      (setenv "HWLOC_SYNTHETIC" "4"))))))
     (home-page "http://portablecl.org/")
     (synopsis "Portable Computing Language (pocl), an OpenCL implementation")
     (description
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index b764cde62d..612208f266 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -59,6 +59,7 @@
   #:use-module (gnu packages crypto)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages databases)
+  #:use-module (gnu packages debian)
   #:use-module (gnu packages dejagnu)
   #:use-module (gnu packages dbm)
   #:use-module (gnu packages docbook)
@@ -87,6 +88,7 @@
   #:use-module (gnu packages nettle)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages ninja)
+  #:use-module (gnu packages node)
   #:use-module (gnu packages nss)
   #:use-module (gnu packages patchutils)
   #:use-module (gnu packages perl)
@@ -98,6 +100,7 @@
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages ruby)
   #:use-module (gnu packages serialization)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages ssh)
@@ -117,6 +120,7 @@
   #:use-module (guix build-system guile)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
+  #:use-module (guix build-system ruby)
   #:use-module (guix build-system trivial)
   #:use-module (guix download)
   #:use-module (guix gexp)
@@ -1133,7 +1137,7 @@ written entirely in Python.")
 (define-public conan
   (package
     (name "conan")
-    (version "1.50.0")
+    (version "2.0.2")
     (source
      (origin
        (method git-fetch)               ;no tests in PyPI archive
@@ -1143,104 +1147,113 @@ written entirely in Python.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1jjrinz5wkcxfvwdpldrv4h7vacdyz88cc4af5vi3sdnjra0i0m5"))))
+         "1y4qmqnw3s8xv64lgp388qpj9vqharyfqi5s8dxvgsns6cafv7lf"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'relax-requirements
-           (lambda _
-             (substitute* "conans/requirements.txt"
-               (("node-semver==0.6.1")
-                "node-semver>=0.6.1")
-               (("Jinja2>=2.9, <3")
-                "Jinja2>=2.9")
-               (("PyYAML>=3.11, <6.0")
-                "PyYAML"))))
-         (add-after 'unpack 'patch-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((coreutils (assoc-ref inputs "coreutils")))
-               ;; It seems that PATH is manipulated, as printenv is not found
-               ;; during tests.  Patch in its exact location.
-               (substitute* "conan/tools/env/environment.py"
-                 (("printenv")
-                  (string-append coreutils "/bin/printenv")))
-               (substitute* "conans/client/envvars/environment.py"
-                 (("#!/usr/bin/env")
-                  (string-append "#!" coreutils "/bin/env"))))))
-         (add-before 'check 'set-home
-           (lambda _
-             (setenv "HOME" "/tmp")))
-         (replace 'check
-           (lambda* (#:key tests? outputs #:allow-other-keys)
-             (define system ,(or (%current-target-system)
-                                 (%current-system)))
-             (when tests?
-               (setenv "PATH" (string-append (getenv "PATH") ":"
-                                             (assoc-ref outputs "out") "/bin"))
-               (invoke "python" "-m" "pytest"
-                       "-n" "auto"      ;parallelize tests
-                       "-m" "not slow and not tool_svn"
-                       ;; Disable problematic tests.
-                       "-k"
-                       (string-append
-                        ;; These tests rely on networking.
-                        "not shallow_clone_remote "
-                        "and not remote_build "
-                        "and not download_retries_errors "
-                        "and not ftp "
-                        "and not build_local_different_folders "
-                        ;; These expect CMake available at fixed versions.
-                        "and not custom_cmake "
-                        "and not default_cmake "
-                        "and not bazel " ;bazel is not packaged
-                        ;; Guix sets PKG_CONFIG_PATH itself, which is not
-                        ;; expected by the following test.
-                        "and not pkg_config_path "
-                        "and not compare " ;caused by newer node-semver?
-                        ;; Guix is not currently a supported package manager.
-                        "and not system_package_tool "
-                        ;; These expect GCC 5 to be available.
-                        "and not test_reuse "
-                        "and not test_install "
-                        ;; The installed configure script trips on the /bin/sh
-                        ;; shebang.  We'd have to patch it in the Python code.
-                        "and not test_autotools "
-                        "and not test_use_build_virtualenv "
-                        ;; This test is architecture-dependent.
-                        "and not test_toolchain_linux "
-                        ;; This one fails for unknown reasons (see:
-                        ;; https://github.com/conan-io/conan/issues/9671).
-                        "and not test_build "
-                        ;; These tests expect the 'apt' command to be available.
-                        "and not test_apt_check "
-                        "and not test_apt_install_substitutes "
-                        (if (not (string-prefix? "x86_64" system))
-                            ;; These tests either assume the machine is
-                            ;; x86_64, or require a cross-compiler to target
-                            ;; it.
-                            (string-append
-                             "and not cpp_package "
-                             "and not exclude_code_analysis "
-                             "and not cmakedeps_multi "
-                             "and not locally_build_linux "
-                             "and not custom_configuration "
-                             "and not package_from_system "
-                             "and not cross_build_command "
-                             "and not test_package "
-                             "and not test_deleted_os "
-                             "and not test_same ")
-                            "")
-                        (if (not (or (string-prefix? "x86_64" system)
-                                     (string-prefix? "i686" system)))
-                            ;; These tests either assume the machine is i686,
-                            ;; or require a cross-compiler to target it.
-                            (string-append
-                             "and not vcvars_raises_when_not_found "
-                             "and not conditional_generators "
-                             "and not test_folders "
-                             "and not settings_as_a_dict_conanfile ")
-                            "")))))))))
+     (list
+      #:modules '((guix build python-build-system)
+                  (guix build utils)
+                  (ice-9 format))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-paths
+            (lambda* (#:key inputs #:allow-other-keys)
+              ;; It seems that PATH is manipulated, as printenv is not found
+              ;; during tests.  Patch in its exact location.
+              (substitute* "conan/tools/env/environment.py"
+                (("printenv")
+                 (search-input-file inputs "bin/printenv")))))
+          (add-after 'unpack 'patch-hard-coded-GCC-references
+            (lambda _
+              ;; The test suite expects GCC 9 to be used (see:
+              ;; https://github.com/conan-io/conan/issues/13575).  Render the
+              ;; check version agnostic.
+              (substitute* "conans/test/functional/toolchains/meson/_base.py"
+                (("__GNUC__9")
+                 "__GNUC__"))))
+          (add-after 'unpack 'use-current-cmake-for-tests
+            (lambda _
+              (substitute* (find-files "conans/test" "\\.py$")
+                (("@pytest.mark.tool\\(\"cmake\", \"3.23\")")
+                 "@pytest.mark.tool(\"cmake\")"))))
+          (add-before 'check 'configure-tests
+            (lambda _
+              (let* ((cmake-version #$(version-major+minor
+                                       (package-version cmake)))
+                     (pkg-config-version #$(version-major+minor
+                                            (package-version pkg-config))))
+                (call-with-output-file "conans/test/conftest_user.py"
+                  (lambda (port)
+                    (format port "\
+tools_locations = {
+    'apt_get': {'disabled': True},
+    'bazel': {'disabled': True},
+    'cmake': {'default': '~a',
+              '3.15': {'disabled': True},
+              '3.16': {'disabled': True},
+              '3.17': {'disabled': True},
+              '3.19': {'disabled': True},
+              '~:*~a': {}},
+    'pkg_config': {'exe': 'pkg-config',
+                   'default': '~a',
+                   '~:*~a': {}},
+    'svn': {'disabled': True}}~%" cmake-version pkg-config-version))))))
+          (add-before 'check 'set-home
+            (lambda _
+              (setenv "HOME" "/tmp")))
+          (replace 'check
+            (lambda* (#:key tests? outputs #:allow-other-keys)
+              (define system #$(or (%current-target-system)
+                                   (%current-system)))
+              (when tests?
+                (setenv "CONFIG_SHELL" (which "sh"))
+                (setenv "PATH" (string-append (getenv "PATH") ":"
+                                              #$output "/bin"))
+                (invoke "python" "-m" "pytest" "-vv"
+                        "-n" (number->string (parallel-job-count))
+                        "-m" "not slow"
+                        ;; Disable problematic tests.
+                        "-k"
+                        (string-append
+                         ;; These tests rely on networking.
+                         "not download_retries_errors "
+                         "and not ftp "
+                         ;; Guix sets PKG_CONFIG_PATH itself, which is not
+                         ;; expected by the following test.
+                         "and not pkg_config_path "
+                         "and not compare " ;caused by newer node-semver?
+                         ;; This test hard-codes a compiler version.
+                         "and not test_toolchain "
+                         ;; The 'test_list' tests may fail
+                         ;; non-deterministically (see:
+                         ;; https://github.com/conan-io/conan/issues/13583).
+                         "and not test_list "
+                         ;; These tests fail when Autoconf attempt to load a
+                         ;; shared library in the same directory (see:
+                         ;; https://github.com/conan-io/conan/issues/13577).
+                         "and not test_other_client_can_link_autotools "
+                         "and not test_autotools_lib_template "
+                         (if (not (string-prefix? "x86_64" system))
+                             ;; These tests either assume the machine is
+                             ;; x86_64, or require a cross-compiler to target
+                             ;; it.
+                             (string-append
+                              "and not cpp_package "
+                              "and not exclude_code_analysis "
+                              "and not cmakedeps_multi "
+                              "and not locally_build_linux "
+                              "and not custom_configuration "
+                              "and not package_from_system "
+                              "and not cross_build_command "
+                              "and not test_package "
+                              "and not test_same ")
+                             "")
+                         (if (not (or (string-prefix? "x86_64" system)
+                                      (string-prefix? "i686" system)))
+                             ;; This test only works with default arch "x86",
+                             ;; "x86_64", "sparc" or "sparcv9".
+                             "and not settings_as_a_dict_conanfile "
+                             "")))))))))
     (propagated-inputs
      (list python-bottle
            python-colorama
@@ -1260,22 +1273,23 @@ written entirely in Python.")
            python-tqdm
            python-urllib3))
     (inputs
-     (list coreutils))       ;for printenv
+     (list coreutils))                  ;for printenv
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("cmake" ,cmake)
-       ("git" ,git-minimal)
-       ("meson" ,meson)
-       ("ninja",ninja)
-       ("pkg-config" ,pkg-config)
-       ("python-bottle" ,python-bottle)
-       ("python-mock" ,python-mock)
-       ("python-parameterized" ,python-parameterized)
-       ("python-pytest" ,python-pytest)
-       ("python-pytest-xdist" ,python-pytest-xdist)
-       ("python-webtest" ,python-webtest)
-       ("which" ,which)))
+     (list autoconf-wrapper
+           automake
+           cmake
+           git-minimal
+           libtool
+           meson
+           ninja
+           pkg-config
+           python-bottle
+           python-mock
+           python-parameterized
+           python-pytest
+           python-pytest-xdist
+           python-webtest
+           which))
     (home-page "https://conan.io")
     (synopsis "Decentralized C/C++ package manager")
     (description "Conan is a package manager for C and C++ developers that
@@ -1363,8 +1377,8 @@ environments.")
                   "0k9zkdyyzir3fvlbcfcqy17k28b51i20rpbjwlx2i1mwd2pw9cxc")))))))
 
 (define-public guix-build-coordinator
-  (let ((commit "7c1eedfba9ef5ccc5651cd5e88662c158e594a2c")
-        (revision "73"))
+  (let ((commit "7f6db4b55411f79ab5f2639318dc5871c1452f00")
+        (revision "77"))
     (package
       (name "guix-build-coordinator")
       (version (git-version "0" revision commit))
@@ -1375,7 +1389,7 @@ environments.")
                       (commit commit)))
                 (sha256
                  (base32
-                  "1prsxj3n8ggv28fqk00yvnbvy0da0lq6m553fs636s8b2yjka8nj"))
+                  "07pi5yjgagv0xyz9f5cnfz1c06gzx1mpi17h3a1w5h6lp3kwqrv9"))
                 (file-name (string-append name "-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
@@ -1414,7 +1428,7 @@ environments.")
                                          "guile-gnutls"
                                          ,@(if (hurd-target?)
                                                '()
-                                               '("guile-fibers")))))
+                                               '("guile-fibers-next")))))
                       (wrap-program file
                         `("PATH" ":" prefix
                           (,bin
@@ -1455,7 +1469,7 @@ environments.")
              guile-gcrypt
              guix
              guile-prometheus
-             guile-fibers-1.1
+             guile-fibers-next
              guile-lib
              (first (assoc-ref (package-native-inputs guix) "guile"))))
       (inputs
@@ -1479,7 +1493,7 @@ environments.")
               guile-gnutls)
         (if (hurd-target?)
             '()
-            (list guile-fibers-1.1))))
+            (list guile-fibers-next))))
       (home-page "https://git.cbaines.net/guix/build-coordinator/")
       (synopsis "Tool to help build derivations")
       (description
@@ -1901,14 +1915,14 @@ the boot loader configuration.")
 (define-public flatpak
   (package
     (name "flatpak")
-    (version "1.14.3")
+    (version "1.14.4")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/flatpak/flatpak/releases/download/"
                            version "/flatpak-" version ".tar.xz"))
        (sha256
-        (base32 "1gpfax92kpchmbr3cp1w0cw5xjdwv11i1g3g9hp8akc9rc64gw2r"))
+        (base32 "16b7f7n2mms6zgm0lj3fn86ny11xjn8cd3mrk1slwhvwnv8dnd4a"))
        (patches
         (search-patches "flatpak-fix-path.patch"
                         "flatpak-unset-gdk-pixbuf-for-sandbox.patch"))))
@@ -1959,10 +1973,12 @@ cp -r /tmp/locale/*/en_US.*")))
           ;; Many tests fail for unknown reasons, so we just run a few basic
           ;; tests.
           (replace 'check
-            (lambda _
-              (setenv "HOME" "/tmp")
-              (invoke "make" "check"
-                      "TESTS=tests/test-basic.sh tests/test-config.sh testcommon"))))))
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (setenv "HOME" "/tmp")
+                (invoke "make" "check"
+                        "TESTS=tests/test-basic.sh tests/test-config.sh
+                        testcommon")))))))
     (native-inputs
      (list bison
            dbus ; for dbus-daemon
@@ -2003,6 +2019,88 @@ applications")
 sandboxed desktop applications on GNU/Linux.")
     (license license:lgpl2.1+)))
 
+(define-public fpm
+  (package
+    (name "fpm")
+    (version "1.15.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/jordansissel/fpm")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1m2zxf7wyk7psvm611yxs68hnwm0pyqilsmcq3x791hz7rvbg68w"))
+              (patches (search-patches "fpm-newer-clamp-fix.patch"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'extract-gemspec 'patch-paths
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   (substitute* '("lib/fpm/util.rb"
+                                  "spec/fpm/util_spec.rb"
+                                  "spec/fpm/package/rpm_spec.rb")
+                     (("\"/bin/sh\"")
+                      (string-append "\"" (search-input-file inputs "bin/sh")
+                                     "\"")))))
+               (add-after 'extract-gemspec 'relax-requirements
+                 (lambda _
+                   (substitute* "fpm.gemspec"
+                     (("\"clamp\", \"~> 1.0.0\"")
+                      "\"clamp\", \">= 1.0.0\""))))
+               (add-after 'extract-gemspec 'disable-problematic-tests
+                 ;; Disable some tests which are failing (see:
+                 ;; https://github.com/jordansissel/fpm/issues/2000).
+                 (lambda _
+                   ;; There are 4 'NoMethodError' test failures in the
+                   ;; command_spec suite, for unknown reasons.
+                   (delete-file "spec/fpm/command_spec.rb")
+                   (substitute* "spec/fpm/package_spec.rb"
+                     (("@oldtmp = ENV\\[\"TMP\"]" all)
+                      "skip('fails with guix')"))
+                   (substitute* "spec/fpm/package/cpan_spec.rb"
+                     ;; This test is marked as expected to fail (pending) when
+                     ;; TRAVIS_OS_NAME is set, but passes with Guix; skip it.
+                     (("it \"should unpack tarball containing" all)
+                      (string-append "x" all)))
+                   (substitute* "spec/fpm/package/gem_spec.rb"
+                     ;; This test fails for unknown reason; perhaps a patched
+                     ;; shebang.
+                     (("it 'should not change the shebang'" all)
+                      (string-append "x" all)))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     ;; Set TRAVIS_OS_NAME to skip tests known to cause
+                     ;; problems in minimal environments.
+                     (setenv "TRAVIS_OS_NAME" "GNU Guix")
+                     (invoke "rspec")))))))
+    (native-inputs
+     (list dpkg
+           libarchive
+           node
+           perl-app-cpanminus
+           python
+           ruby-rspec
+           squashfs-tools
+           zstd))
+    (inputs
+     (list bash-minimal
+           ruby-arr-pm
+           ruby-backports
+           ruby-cabin
+           ruby-clamp
+           ruby-pleaserun
+           ruby-rexml
+           ruby-stud))
+    (home-page "https://github.com/jordansissel/fpm/")
+    (synopsis "Package building and mangling tool")
+    (description "@command{fpm} is a command to convert directories, RPMs,
+Python eggs, Ruby gems, and more to RPMs, debs, Solaris packages and more.")
+    (license license:expat)))
+
 (define-public akku
   (package
     (name "akku")
diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm
index 58b78f27f6..3c638e4ff9 100644
--- a/gnu/packages/parallel.scm
+++ b/gnu/packages/parallel.scm
@@ -64,14 +64,14 @@
 (define-public parallel
   (package
     (name "parallel")
-    (version "20230222")
+    (version "20230322")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://gnu/parallel/parallel-"
                           version ".tar.bz2"))
       (sha256
-       (base32 "03lqkhh9pa9kyrpfkcd4jlwidnjj0bq2ykp7h2vxss3n17maadkd"))
+       (base32 "1jkv5c0ddnwbmx7ay3zxn14sxibhi4ff58waqm6rvg0cdnxb3iz5"))
       (snippet
        '(begin
           (use-modules (guix build utils))
diff --git a/gnu/packages/password-utils.scm b/gnu/packages/password-utils.scm
index 9ea1ce00a5..f5f301308a 100644
--- a/gnu/packages/password-utils.scm
+++ b/gnu/packages/password-utils.scm
@@ -352,32 +352,30 @@ applications, there is xclip integration." )
     (license license:gpl3+)))
 
 (define-public ssh-to-age
-  (let* ((commit "37365ce80fa64d8794855ec3c63cc9a071799fea")
-         (revision "0"))
-    (package
-      (name "ssh-to-age")
-      (version (git-version "1.0.2" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/Mic92/ssh-to-age")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "1fk2vxa854jnnffcw4q3vm1445jk1ck1v3p4mr9fh04yz06g7d28"))))
-      (build-system go-build-system)
-      (arguments
-       '(#:import-path "github.com/Mic92/ssh-to-age/cmd/ssh-to-age"
-         #:unpack-path "github.com/Mic92/ssh-to-age"))
-      (inputs (list go-golang-org-x-crypto
-                    go-filippo-io-edwards25519
-                    go-filippo-io-age))
-      (home-page "https://github.com/Mic92/ssh-to-age")
-      (synopsis "Convert SSH @code{ed25519} keys to @code{age} keys.")
-      (description "This package provides a simple command-line tool to
+  (package
+    (name "ssh-to-age")
+    (version "1.1.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Mic92/ssh-to-age")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "09rhga9iqmyyq8pkprydy8y15qhzqvbpgzvs681rcyllf8szrj73"))))
+    (build-system go-build-system)
+    (arguments
+     '(#:import-path "github.com/Mic92/ssh-to-age/cmd/ssh-to-age"
+       #:unpack-path "github.com/Mic92/ssh-to-age"))
+    (inputs (list go-golang-org-x-crypto
+                  go-filippo-io-edwards25519
+                  go-filippo-io-age))
+    (home-page "https://github.com/Mic92/ssh-to-age")
+    (synopsis "Convert SSH @code{ed25519} keys to @code{age} keys.")
+    (description "This package provides a simple command-line tool to
 convert SSH @code{ed25519} keys to @code{age} keys.")
-      (license license:expat))))
+    (license license:expat)))
 
 (define-public yapet
   (package
@@ -634,7 +632,7 @@ through the pass command.")
   (package
     (inherit password-store)
     (name "pass-age")
-    (version "1.7.4a0")
+    (version "1.7.4a1")
     (source
      (origin
        (method git-fetch)
@@ -643,7 +641,7 @@ through the pass command.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "17899whffnpqqx9x1nx2b8bfxbxlh1pwlglqa0kznl0cn6sb37ql"))))
+        (base32 "0g8x2zivid18qf1czq1yqychmbdzxzs83rg8a5b392m2rzxlrx08"))))
     (build-system copy-build-system)
     (arguments
      '(#:modules
diff --git a/gnu/packages/patches/a2ps-CVE-2001-1593.patch b/gnu/packages/patches/a2ps-CVE-2001-1593.patch
deleted file mode 100644
index 17b7e7d932..0000000000
--- a/gnu/packages/patches/a2ps-CVE-2001-1593.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-Index: b/lib/routines.c
-===================================================================
---- a/lib/routines.c
-+++ b/lib/routines.c
-@@ -242,3 +242,50 @@
-   /* Don't complain if you can't unlink.  Who cares of a tmp file? */
-   unlink (filename);
- }
-+
-+/*
-+ * Securely generate a temp file, and make sure it gets
-+ * deleted upon exit.
-+ */
-+static char **	tempfiles;
-+static unsigned	ntempfiles;
-+
-+static void
-+cleanup_tempfiles()
-+{
-+	while (ntempfiles--)
-+		unlink(tempfiles[ntempfiles]);
-+}
-+
-+char *
-+safe_tempnam(const char *pfx)
-+{
-+	char	*dirname, *filename;
-+	int	fd;
-+
-+	if (!(dirname = getenv("TMPDIR")))
-+		dirname = "/tmp";
-+
-+	tempfiles = (char **) realloc(tempfiles,
-+			(ntempfiles+1) * sizeof(char *));
-+	if (tempfiles == NULL)
-+		return NULL;
-+
-+	filename = malloc(strlen(dirname) + strlen(pfx) + sizeof("/XXXXXX"));
-+	if (!filename)
-+		return NULL;
-+
-+	sprintf(filename, "%s/%sXXXXXX", dirname, pfx);
-+
-+	if ((fd = mkstemp(filename)) < 0) {
-+		free(filename);
-+		return NULL;
-+	}
-+	close(fd);
-+
-+	if (ntempfiles == 0)
-+		atexit(cleanup_tempfiles);
-+	tempfiles[ntempfiles++] = filename;
-+
-+	return filename;
-+}
-Index: b/lib/routines.h
-===================================================================
---- a/lib/routines.h
-+++ b/lib/routines.h
-@@ -255,7 +255,8 @@
- /* If _STR_ is not defined, give it a tempname in _TMPDIR_ */
- #define tempname_ensure(Str)				\
- do {							\
--  (Str) = (Str) ? (Str) : tempnam (NULL, "a2_");	\
-+  (Str) = (Str) ? (Str) : safe_tempnam("a2_");	\
- } while (0)
-+char * safe_tempnam(const char *);
- 
- #endif
diff --git a/gnu/packages/patches/a2ps-CVE-2014-0466.patch b/gnu/packages/patches/a2ps-CVE-2014-0466.patch
deleted file mode 100644
index 85199e35b0..0000000000
--- a/gnu/packages/patches/a2ps-CVE-2014-0466.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-Description: CVE-2014-0466: fixps does not invoke gs with -dSAFER
- A malicious PostScript file could delete files with the privileges of
- the invoking user.
-Origin: vendor
-Bug-Debian: http://bugs.debian.org/742902
-Author: Salvatore Bonaccorso <carnil@debian.org>
-Last-Update: 2014-03-28
-
---- a/contrib/fixps.in
-+++ b/contrib/fixps.in
-@@ -389,7 +389,7 @@
-   	eval "$command" ;;
-       gs)
-         $verbose "$program: making a full rewrite of the file ($gs)." >&2
--  	$gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=- -c save pop -f $file ;;
-+  	$gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=- -c save pop -f $file ;;
-     esac
-   )
- fi
---- a/contrib/fixps.m4
-+++ b/contrib/fixps.m4
-@@ -307,7 +307,7 @@
-   	eval "$command" ;;
-       gs)
-         $verbose "$program: making a full rewrite of the file ($gs)." >&2
--  	$gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=- -c save pop -f $file ;;
-+  	$gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=- -c save pop -f $file ;;
-     esac
-   )
- fi
diff --git a/gnu/packages/patches/a2ps-CVE-2015-8107.patch b/gnu/packages/patches/a2ps-CVE-2015-8107.patch
deleted file mode 100644
index 5ea35d45da..0000000000
--- a/gnu/packages/patches/a2ps-CVE-2015-8107.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-https://sources.debian.org/data/main/a/a2ps/1:4.14-2/debian/patches/fix-format-security.diff
-
-Index: b/lib/psgen.c
-===================================================================
---- a/lib/psgen.c
-+++ b/lib/psgen.c
-@@ -232,7 +232,7 @@
-     default:
-       *buf = '\0';
-       ps_escape_char (job, cp[i], buf);
--      output (jdiv, (char *) buf);
-+      output (jdiv, "%s", (char *) buf);
-       break;
-     }
-   }
-Index: b/lib/output.c
-===================================================================
---- a/lib/output.c
-+++ b/lib/output.c
-@@ -525,7 +525,7 @@
- 		     expand_user_string (job, FIRST_FILE (job),
- 					 (const uchar *) "Expand: requirement",
- 					 (const uchar *) token));
--	output (dest, expansion);
-+	output (dest, "%s", expansion);
- 	continue;
-       }
- 
-Index: b/lib/parseppd.y
-===================================================================
---- a/lib/parseppd.y
-+++ b/lib/parseppd.y
-@@ -154,7 +154,7 @@
- void
- yyerror (const char *msg)
- {
--  error_at_line (1, 0, ppdfilename, ppdlineno, msg);
-+  error_at_line (1, 0, ppdfilename, ppdlineno, "%s", msg);
- }
- 
- /*
-Index: b/src/parsessh.y
-===================================================================
---- a/src/parsessh.y
-+++ b/src/parsessh.y
-@@ -740,7 +740,7 @@
- void
- yyerror (const char *msg)
- {
--  error_at_line (1, 0, sshfilename, sshlineno, msg);
-+  error_at_line (1, 0, sshfilename, sshlineno, "%s", msg);
- }
- 
- /*
-Index: b/lib/parseppd.c
-===================================================================
---- a/lib/parseppd.c
-+++ b/lib/parseppd.c
-@@ -1707,7 +1707,7 @@
- void
- yyerror (const char *msg)
- {
--  error_at_line (1, 0, ppdfilename, ppdlineno, msg);
-+  error_at_line (1, 0, ppdfilename, ppdlineno, "%s", msg);
- }
- 
- /*
-Index: b/src/parsessh.c
-===================================================================
---- a/src/parsessh.c
-+++ b/src/parsessh.c
-@@ -2639,7 +2639,7 @@
- void
- yyerror (const char *msg)
- {
--  error_at_line (1, 0, sshfilename, sshlineno, msg);
-+  error_at_line (1, 0, sshfilename, sshlineno, "%s", msg);
- }
- 
- /*
diff --git a/gnu/packages/patches/dbacl-icheck-multiple-definitions.patch b/gnu/packages/patches/dbacl-icheck-multiple-definitions.patch
new file mode 100644
index 0000000000..e82d0819bb
--- /dev/null
+++ b/gnu/packages/patches/dbacl-icheck-multiple-definitions.patch
@@ -0,0 +1,33 @@
+From f5df6813e305372e25b8a2124c491293a176e115 Mon Sep 17 00:00:00 2001
+From: Danny O'Brien <danny@spesh.com>
+Date: Fri, 3 Feb 2023 16:48:59 -0800
+Subject: [PATCH] Fix failing build of icheck.
+
+Building icheck fails with a duplicate symbol definition 
+error. This allows the icheck executable to compile.
+
+Submitted upstream[1] but not yet moderated/accepted.
+
+[1] https://sourceforge.net/p/dbacl/discussion/239876/thread/87636b0114/
+
+---
+ src/icheck.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/src/icheck.c b/src/icheck.c
+index efbb6a5..12a3b7a 100644
+--- a/src/icheck.c
++++ b/src/icheck.c
+@@ -39,9 +39,6 @@ extern regex_count_t regex_count;
+ extern empirical_t empirical;
+ 
+ extern int cmd;
+-char *progname = "icheck";
+-char *inputfile = "";
+-long inputline = 0;
+ 
+ extern long system_pagesize;
+ extern void *in_iobuf;
+-- 
+2.39.1
+
diff --git a/gnu/packages/patches/fpm-newer-clamp-fix.patch b/gnu/packages/patches/fpm-newer-clamp-fix.patch
new file mode 100644
index 0000000000..9fbb15ee29
--- /dev/null
+++ b/gnu/packages/patches/fpm-newer-clamp-fix.patch
@@ -0,0 +1,33 @@
+Retrieved from: https://github.com/jordansissel/fpm/pull/1561.patch
+
+From 956a218a7b35de08ea35da3b702ffdc716656b68 Mon Sep 17 00:00:00 2001
+From: Jordan Sissel <jls@semicomplete.com>
+Date: Mon, 15 Oct 2018 21:05:47 -0700
+Subject: [PATCH] Check if an option has a default value before we try to look
+ it up.
+
+This fixes fpm when used with clamp 1.3.0 or above.
+
+Fixes #1543
+---
+ lib/fpm/command.rb | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/lib/fpm/command.rb b/lib/fpm/command.rb
+index a204001e1..a99ddb627 100644
+--- a/lib/fpm/command.rb
++++ b/lib/fpm/command.rb
+@@ -394,7 +394,12 @@ def execute
+     set = proc do |object, attribute|
+       # if the package's attribute is currently nil *or* the flag setting for this
+       # attribute is non-default, use the value.
+-      if object.send(attribute).nil? || send(attribute) != send("default_#{attribute}")
++
++      # Not all options have a default value, so we assume `nil` if there's no default. (#1543)
++      # In clamp >= 1.3.0, options without `:default => ..` will not have any # `default_xyz` 
++      # methods generated, so we need to check for the presence of this method first.
++      default = respond_to?("default_#{attribute}") ? send("default_#{attribute}") : nil
++      if object.send(attribute).nil? || send(attribute) != default
+         logger.info("Setting from flags: #{attribute}=#{send(attribute)}")
+         object.send("#{attribute}=", send(attribute))
+       end
diff --git a/gnu/packages/patches/geeqie-clutter.patch b/gnu/packages/patches/geeqie-clutter.patch
deleted file mode 100644
index ab7cc957d8..0000000000
--- a/gnu/packages/patches/geeqie-clutter.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From c99084ac5fc2fb854ff8e8abd4bd3298fb08fb43 Mon Sep 17 00:00:00 2001
-From: Colin Clark <colin.clark@cclark.uk>
-Date: Sat, 9 Jan 2021 11:35:41 +0000
-Subject: [PATCH] Fix #829: segfault with clutter-gtk
-
-https://github.com/BestImageViewer/geeqie/issues/829
-
-This fix might cause other problems which might be cured by calling:
-LIBGL_ALWAYS_INDIRECT=1 geeqie
-
-or, worst case:
-geeqie --disable-clutter
----
- src/main.c | 5 -----
- 1 file changed, 5 deletions(-)
-
-diff --git a/src/main.c b/src/main.c
-index f497240d..4af654fe 100644
---- a/src/main.c
-+++ b/src/main.c
-@@ -904,11 +904,6 @@ gint main(gint argc, gchar *argv[])
- #ifdef HAVE_GTHREAD
- #if !GLIB_CHECK_VERSION(2,32,0)
- 	g_thread_init(NULL);
--#endif
--#ifdef HAVE_CLUTTER
--/* FIXME: see below */
--	putenv("LIBGL_ALWAYS_INDIRECT=1");
--	XInitThreads();
- #endif
- 	gdk_threads_init();
- 	gdk_threads_enter();
--- 
-2.34.0
-
diff --git a/gnu/packages/patches/glslang-install-static-libs.patch b/gnu/packages/patches/glslang-install-static-libs.patch
new file mode 100644
index 0000000000..a155dde30e
--- /dev/null
+++ b/gnu/packages/patches/glslang-install-static-libs.patch
@@ -0,0 +1,61 @@
+Install OGLCompiler et.al. even when building shared libraries.  Also fix
+CMake file locations.
+
+Patch taken from Gentoo:
+
+  https://gitweb.gentoo.org/repo/gentoo.git/tree/dev-util/glslang/files/glslang-1.3.231-Install-static-libs.patch
+
+diff --git a/OGLCompilersDLL/CMakeLists.txt b/OGLCompilersDLL/CMakeLists.txt
+--- a/OGLCompilersDLL/CMakeLists.txt
++++ b/OGLCompilersDLL/CMakeLists.txt
+@@ -41,7 +41,7 @@ if(WIN32)
+     source_group("Source" FILES ${SOURCES})
+ endif(WIN32)
+ 
+-if(ENABLE_GLSLANG_INSTALL AND NOT BUILD_SHARED_LIBS)
++if(ENABLE_GLSLANG_INSTALL)
+     install(TARGETS OGLCompiler EXPORT glslang-targets)
+ 
+     # Backward compatibility
+@@ -49,7 +49,7 @@ if(ENABLE_GLSLANG_INSTALL AND NOT BUILD_SHARED_LIBS)
+         message(WARNING \"Using `OGLCompilerTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
+ 
+         if (NOT TARGET glslang::OGLCompiler)
+-            include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/glslang-targets.cmake\")
++            include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
+         endif()
+ 
+         add_library(OGLCompiler ALIAS glslang::OGLCompiler)
+diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt
+--- a/glslang/CMakeLists.txt
++++ b/glslang/CMakeLists.txt
+@@ -203,7 +203,7 @@ endif()
+ ################################################################################
+ if(ENABLE_GLSLANG_INSTALL)
+     install(TARGETS glslang EXPORT glslang-targets)
+-    if(NOT BUILD_SHARED_LIBS)
++    if(BUILD_SHARED_LIBS)
+         install(TARGETS MachineIndependent EXPORT glslang-targets)
+         install(TARGETS GenericCodeGen EXPORT glslang-targets)
+ 
+diff --git a/glslang/OSDependent/Unix/CMakeLists.txt b/glslang/OSDependent/Unix/CMakeLists.txt
+--- a/glslang/OSDependent/Unix/CMakeLists.txt
++++ b/glslang/OSDependent/Unix/CMakeLists.txt
+@@ -52,7 +52,7 @@ else()
+     target_link_libraries(OSDependent Threads::Threads)
+ endif()
+ 
+-if(ENABLE_GLSLANG_INSTALL AND NOT BUILD_SHARED_LIBS)
++if(ENABLE_GLSLANG_INSTALL)
+     install(TARGETS OSDependent EXPORT glslang-targets)
+ 
+     # Backward compatibility
+@@ -60,7 +60,7 @@ if(ENABLE_GLSLANG_INSTALL AND NOT BUILD_SHARED_LIBS)
+         message(WARNING \"Using `OSDependentTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
+ 
+         if (NOT TARGET glslang::OSDependent)
+-            include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/glslang-targets.cmake\")
++            include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
+         endif()
+ 
+         add_library(OSDependent ALIAS glslang::OSDependent)
diff --git a/gnu/packages/patches/guile-fix-invalid-unicode-handling.patch b/gnu/packages/patches/guile-fix-invalid-unicode-handling.patch
new file mode 100644
index 0000000000..20ee1a2cf5
--- /dev/null
+++ b/gnu/packages/patches/guile-fix-invalid-unicode-handling.patch
@@ -0,0 +1,83 @@
+Reported upstream at https://debbugs.gnu.org/cgi/bugreport.cgi?bug=62290 and
+patch merged as cba2e7e3fec3c781230570f5d1ef070625eeeda8.
+
+From 31a1c3c4783e8e66b93500737f23f209d8115f77 Mon Sep 17 00:00:00 2001
+From: Christopher Baines <mail@cbaines.net>
+Date: Fri, 17 Mar 2023 12:48:39 +0000
+Subject: [PATCH] Fix some invalid unicode handling issues with suspendable
+ ports.
+
+Based on the implementation in ports.c.  I don't understand what this
+code is really doing, but the suspendable ports implementation differs
+from the similar C code for a couple of inequalities.
+
+* module/ice-9/suspendable-ports.scm (decode-utf8, bad-utf8-len): Flip a
+couple of inequalities.
+* test-suite/tests/ports.test ("string ports"): Add additional invalid
+UTF-8 test case.
+---
+ module/ice-9/suspendable-ports.scm | 8 ++++----
+ test-suite/tests/ports.test        | 7 +++++++
+ 2 files changed, 11 insertions(+), 4 deletions(-)
+
+diff --git a/module/ice-9/suspendable-ports.scm b/module/ice-9/suspendable-ports.scm
+index a823f1d37..9fac1df62 100644
+--- a/module/ice-9/suspendable-ports.scm
++++ b/module/ice-9/suspendable-ports.scm
+@@ -419,7 +419,7 @@
+                (= (logand u8_2 #xc0) #x80)
+                (case u8_0
+                  ((#xe0) (>= u8_1 #xa0))
+-                 ((#xed) (>= u8_1 #x9f))
++                 ((#xed) (<= u8_1 #x9f))
+                  (else #t)))
+           (kt (integer->char
+                (logior (ash (logand u8_0 #x0f) 12)
+@@ -436,7 +436,7 @@
+                (= (logand u8_3 #xc0) #x80)
+                (case u8_0
+                  ((#xf0) (>= u8_1 #x90))
+-                 ((#xf4) (>= u8_1 #x8f))
++                 ((#xf4) (<= u8_1 #x8f))
+                  (else #t)))
+           (kt (integer->char
+                (logior (ash (logand u8_0 #x07) 18)
+@@ -462,7 +462,7 @@
+      ((< buffering 2) 1)
+      ((not (= (logand (ref 1) #xc0) #x80)) 1)
+      ((and (eq? first-byte #xe0) (< (ref 1) #xa0)) 1)
+-     ((and (eq? first-byte #xed) (< (ref 1) #x9f)) 1)
++     ((and (eq? first-byte #xed) (> (ref 1) #x9f)) 1)
+      ((< buffering 3) 2)
+      ((not (= (logand (ref 2) #xc0) #x80)) 2)
+      (else 0)))
+@@ -471,7 +471,7 @@
+      ((< buffering 2) 1)
+      ((not (= (logand (ref 1) #xc0) #x80)) 1)
+      ((and (eq? first-byte #xf0) (< (ref 1) #x90)) 1)
+-     ((and (eq? first-byte #xf4) (< (ref 1) #x8f)) 1)
++     ((and (eq? first-byte #xf4) (> (ref 1) #x8f)) 1)
+      ((< buffering 3) 2)
+      ((not (= (logand (ref 2) #xc0) #x80)) 2)
+      ((< buffering 4) 3)
+diff --git a/test-suite/tests/ports.test b/test-suite/tests/ports.test
+index 66e10e3dd..1b30e1a68 100644
+--- a/test-suite/tests/ports.test
++++ b/test-suite/tests/ports.test
+@@ -1059,6 +1059,13 @@
+        eof))
+ 
+     (test-decoding-error (#xf0 #x88 #x88 #x88) "UTF-8"
++      (error                ;; 2nd byte should be in the 90..BF range
++       error                ;; 88: not a valid starting byte
++       error                ;; 88: not a valid starting byte
++       error                ;; 88: not a valid starting byte
++       eof))
++
++    (test-decoding-error (#xf4 #xa4 #xbd #xa4) "UTF-8"
+       (error                ;; 2nd byte should be in the 90..BF range
+        error                ;; 88: not a valid starting byte
+        error                ;; 88: not a valid starting byte
+-- 
+2.39.1
+
diff --git a/gnu/packages/patches/heimdal-CVE-2022-45142.patch b/gnu/packages/patches/heimdal-CVE-2022-45142.patch
new file mode 100644
index 0000000000..a7258a937c
--- /dev/null
+++ b/gnu/packages/patches/heimdal-CVE-2022-45142.patch
@@ -0,0 +1,49 @@
+From: Helmut Grohne <helmut@...divi.de>
+Subject: [PATCH v3] CVE-2022-45142: gsskrb5: fix accidental logic inversions
+
+The referenced commit attempted to fix miscompilations with gcc-9 and
+gcc-10 by changing `memcmp(...)` to `memcmp(...) != 0`. Unfortunately,
+it also inverted the result of the comparison in two occasions. This
+inversion happened during backporting the patch to 7.7.1 and 7.8.0.
+
+Fixes: f6edaafcfefd ("gsskrb5: CVE-2022-3437 Use constant-time memcmp()
+ for arcfour unwrap")
+Signed-off-by: Helmut Grohne <helmut@...divi.de>
+---
+ lib/gssapi/krb5/arcfour.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Changes since v1:
+ * Fix typo in commit message.
+ * Mention 7.8.0 in commit message. Thanks to Jeffrey Altman.
+
+Changes since v2:
+ * Add CVE identifier.
+
+NB (Felix Lechner): The message above and the patch below were taken from the
+disclosure here: https://www.openwall.com/lists/oss-security/2023/02/08/1
+
+diff --git a/lib/gssapi/krb5/arcfour.c b/lib/gssapi/krb5/arcfour.c
+index e838d007a..eee6ad72f 100644
+--- a/lib/gssapi/krb5/arcfour.c
++++ b/lib/gssapi/krb5/arcfour.c
+@@ -365,7 +365,7 @@ _gssapi_verify_mic_arcfour(OM_uint32 * minor_status,
+ 	return GSS_S_FAILURE;
+     }
+
+-    cmp = (ct_memcmp(cksum_data, p + 8, 8) == 0);
++    cmp = (ct_memcmp(cksum_data, p + 8, 8) != 0);
+     if (cmp) {
+ 	*minor_status = 0;
+ 	return GSS_S_BAD_MIC;
+@@ -730,7 +730,7 @@ OM_uint32 _gssapi_unwrap_arcfour(OM_uint32 *minor_status,
+ 	return GSS_S_FAILURE;
+     }
+
+-    cmp = (ct_memcmp(cksum_data, p0 + 16, 8) == 0); /* SGN_CKSUM */
++    cmp = (ct_memcmp(cksum_data, p0 + 16, 8) != 0); /* SGN_CKSUM */
+     if (cmp) {
+ 	_gsskrb5_release_buffer(minor_status, output_message_buffer);
+ 	*minor_status = 0;
+--
+2.38.1
diff --git a/gnu/packages/patches/jami-libjami-headers-search.patch b/gnu/packages/patches/jami-libjami-headers-search.patch
index b3384ba563..92cc92a4a6 100644
--- a/gnu/packages/patches/jami-libjami-headers-search.patch
+++ b/gnu/packages/patches/jami-libjami-headers-search.patch
@@ -1,30 +1,10 @@
-From 1168aba6181e30ee4c322e5f437bde22bece5698 Mon Sep 17 00:00:00 2001
-From: Maxim Cournoyer <maxim.cournoyer@savoirfairelinux.com>
-Date: Sat, 5 Nov 2022 23:18:13 -0400
-Subject: [PATCH 1/3] cmake: Simplify lookup logic for libjami headers.
-
-* extras/build/cmake/modules/FindLibJami.cmake: Rename
-LIBJAMI_INCLUDE_DIRS to LIBJAMI_INCLUDE_DIR.  Use find_path to search
-for jami.h directory.
-* CMakeLists.txt: Adjust accordingly.
-* src/libclient/CMakeLists.txt: Likewise.
-* src/libclient/qtwrapper/CMakeLists.txt: Likewise.
-
-Change-Id: I494358f9bfafb41f000daeec4196747b2c184401
----
-Upstream status: https://review.jami.net/c/jami-client-qt/+/22973
-
- CMakeLists.txt                               |  2 +-
- extras/build/cmake/modules/FindLibJami.cmake | 21 ++++++--------------
- src/libclient/CMakeLists.txt                 |  2 +-
- src/libclient/qtwrapper/CMakeLists.txt       |  2 +-
- 4 files changed, 9 insertions(+), 18 deletions(-)
+Upstream status: https://review.jami.net/c/jami-client-qt/+/24273.
 
 diff --git a/CMakeLists.txt b/CMakeLists.txt
-index d0a8fd70..94ac6074 100644
+index 8d71b84b..36729698 100644
 --- a/CMakeLists.txt
 +++ b/CMakeLists.txt
-@@ -118,7 +118,7 @@ set(CMAKE_MODULE_PATH
+@@ -136,7 +136,7 @@ set(CMAKE_MODULE_PATH
    ${CMAKE_MODULE_PATH} "${EXTRAS_DIR}/build/cmake/modules")
  find_package(LibJami REQUIRED)
  if(LIBJAMI_FOUND)
@@ -34,15 +14,15 @@ index d0a8fd70..94ac6074 100644
  
  include(FindPython3)
 diff --git a/extras/build/cmake/modules/FindLibJami.cmake b/extras/build/cmake/modules/FindLibJami.cmake
-index ddb05319..9ad20d2b 100644
+index 5cce45fc..11746cd8 100644
 --- a/extras/build/cmake/modules/FindLibJami.cmake
 +++ b/extras/build/cmake/modules/FindLibJami.cmake
-@@ -20,28 +20,19 @@
+@@ -20,30 +20,19 @@
  
  # Once done, this find module will set:
  #
 -#   LIBJAMI_INCLUDE_DIRS - libjami include directories
-+#   LIBJAMI_INCLUDE_DIR - libjami include directories
++#   LIBJAMI_INCLUDE_DIR - libjami include directory
  #   LIBJAMI_FOUND - whether it was able to find the include directories
  #   LIBJAMI_LIB - path to libjami or libring library
  
@@ -62,16 +42,18 @@ index ddb05319..9ad20d2b 100644
 -    set(LIBJAMI_INCLUDE_DIRS ${RING_BUILD_DIR}/jami)
 -  elseif(EXISTS ${CMAKE_INSTALL_PREFIX}/include/jami/jami.h)
 -    set(LIBJAMI_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/include/jami)
+-  elseif(EXISTS ${CMAKE_INSTALL_PREFIX}/daemon/include/jami/jami.h)
+-    set(LIBJAMI_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/daemon/include/jami)
 -  else()
 +  find_path(LIBJAMI_INCLUDE_DIR jami.h PATH_SUFFIXES jami)
 +  if(NOT LIBJAMI_INCLUDE_DIR)
      message(STATUS "Jami daemon headers not found!
 -Set -DLIBJAMI_BUILD_DIR or -DCMAKE_INSTALL_PREFIX")
-+Set -DCMAKE_INSTALL_PREFIX or use -DWITH_DAEMON_SUBMODULE")
++To build using the daemon git submodule, set -DWITH_DAEMON_SUBMODULE")
      set(LIBJAMI_FOUND false)
    endif()
  endif()
-@@ -102,5 +93,5 @@ endif()
+@@ -115,5 +104,5 @@ endif()
  # Restore the original value of CMAKE_FIND_LIBRARY_SUFFIXES.
  set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_orig})
  
@@ -79,7 +61,7 @@ index ddb05319..9ad20d2b 100644
 +message(STATUS "Jami daemon headers are in " ${LIBJAMI_INCLUDE_DIR})
  message(STATUS "Jami daemon library is at " ${LIBJAMI_LIB})
 diff --git a/src/libclient/CMakeLists.txt b/src/libclient/CMakeLists.txt
-index 2676c9c4..ac58ea2b 100644
+index 144efaf5..cb87fc2a 100644
 --- a/src/libclient/CMakeLists.txt
 +++ b/src/libclient/CMakeLists.txt
 @@ -62,7 +62,7 @@ set(CMAKE_MODULE_PATH
@@ -92,7 +74,7 @@ index 2676c9c4..ac58ea2b 100644
  
  string(SUBSTRING ${CMAKE_GENERATOR} 0 14 CMAKE_GENERATOR_SHORT)
 diff --git a/src/libclient/qtwrapper/CMakeLists.txt b/src/libclient/qtwrapper/CMakeLists.txt
-index acee0d0c..ba68aac4 100644
+index 46887051..a20658ad 100644
 --- a/src/libclient/qtwrapper/CMakeLists.txt
 +++ b/src/libclient/qtwrapper/CMakeLists.txt
 @@ -46,7 +46,7 @@ else()
@@ -104,6 +86,3 @@ index acee0d0c..ba68aac4 100644
  include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../)
  include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../dbus)
  
--- 
-2.37.3
-
diff --git a/gnu/packages/patches/libcdio-glibc-compat.patch b/gnu/packages/patches/libcdio-glibc-compat.patch
new file mode 100644
index 0000000000..1d325bce96
--- /dev/null
+++ b/gnu/packages/patches/libcdio-glibc-compat.patch
@@ -0,0 +1,43 @@
+Fix test failure with glibc 2.36:
+
+  https://savannah.gnu.org/bugs/?62948
+
+Patch taken from upstream:
+
+  https://git.savannah.gnu.org/cgit/libcdio.git/commit/?id=56335fff0f21d294cd0e478d49542a43e9495ed0
+
+diff --git a/test/driver/realpath.c b/test/driver/realpath.c
+index 289253e..cd46d62 100644
+--- a/test/driver/realpath.c
++++ b/test/driver/realpath.c
+@@ -1,5 +1,7 @@
+ /* -*- C -*-
+-  Copyright (C) 2010-2012, 2015, 2017 Rocky Bernstein <rocky@gnu.org>
++
++  Copyright (C) 2010-2012, 2015, 2017, 2022 Rocky Bernstein
++  <rocky@gnu.org>
+ 
+   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
+@@ -175,16 +177,17 @@ main(int argc, const char *argv[])
+         rc = check_rc(symlink(psz_symlink_file, psz_symlink_file),
+                       "symlink", psz_symlink_file);
+         if (0 == rc) {
+-            cdio_realpath(psz_symlink_file, psz_file_check);
+-            if (0 != strncmp(psz_file_check, symlink_file, PATH_MAX)) {
++            char *retvalue = cdio_realpath(psz_symlink_file, psz_file_check);
++            if (0 != retvalue) {
++	      if (0 != strncmp(psz_file_check, symlink_file, PATH_MAX)) {
+                 fprintf(stderr, "direct cdio_realpath cycle test failed. %s vs %s\n",
+                         psz_file_check, symlink_file);
+ 		rc = 5;
+ 		goto err_exit;
++	      }
++	      check_rc(unlink(psz_symlink_file), "unlink", psz_symlink_file);
+             }
+-            check_rc(unlink(psz_symlink_file), "unlink", psz_symlink_file);
+         }
+-
+     }
+ 
+     check_rc(unlink(psz_orig_file), "unlink", psz_orig_file);
diff --git a/gnu/packages/patches/mariadb-link-libatomic.patch b/gnu/packages/patches/mariadb-link-libatomic.patch
deleted file mode 100644
index f331067b6e..0000000000
--- a/gnu/packages/patches/mariadb-link-libatomic.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-https://github.com/MariaDB/server/commit/f502ccbcb5dfce29067434885a23db8d1bd5f134.patch
-This was apparently merged in 10.8.2.
-
-From f502ccbcb5dfce29067434885a23db8d1bd5f134 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Vicen=C8=9Biu=20Ciorbaru?= <cvicentiu@gmail.com>
-Date: Fri, 15 Oct 2021 16:51:05 +0300
-Subject: [PATCH] Link with libatomic to enable C11 atomics support
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Some architectures (mips) require libatomic to support proper
-atomic operations. Check first if support is available without
-linking, otherwise use the library.
-
-Contributors:
-James Cowgill <jcowgill@debian.org>
-Jessica Clarke <jrtc27@debian.org>
-Vicențiu Ciorbaru <vicentiu@mariadb.org>
----
- configure.cmake      | 20 +++++++++++++++++++-
- mysys/CMakeLists.txt |  4 ++++
- sql/CMakeLists.txt   |  1 -
- 3 files changed, 23 insertions(+), 2 deletions(-)
-
-diff --git a/configure.cmake b/configure.cmake
-index 7a1369d77703f..db8742bb93b5a 100644
---- a/configure.cmake
-+++ b/configure.cmake
-@@ -895,7 +895,25 @@ int main()
-   long long int *ptr= &var;
-   return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
- }"
--HAVE_GCC_C11_ATOMICS)
-+HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
-+IF (HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
-+  SET(HAVE_GCC_C11_ATOMICS True)
-+ELSE()
-+  SET(OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-+  LIST(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
-+  CHECK_CXX_SOURCE_COMPILES("
-+  int main()
-+  {
-+    long long int var= 1;
-+    long long int *ptr= &var;
-+    return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
-+  }"
-+  HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
-+  IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
-+    SET(HAVE_GCC_C11_ATOMICS True)
-+  ENDIF()
-+  SET(CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQUIRED_LIBRARIES})
-+ENDIF()
- 
- IF(WITH_VALGRIND)
-   SET(HAVE_valgrind 1)
-diff --git a/mysys/CMakeLists.txt b/mysys/CMakeLists.txt
-index f97e3b4d3904c..09d3f726ffc74 100644
---- a/mysys/CMakeLists.txt
-+++ b/mysys/CMakeLists.txt
-@@ -78,6 +78,10 @@ TARGET_LINK_LIBRARIES(mysys dbug strings ${ZLIB_LIBRARY}
-  ${LIBNSL} ${LIBM} ${LIBRT} ${CMAKE_DL_LIBS} ${LIBSOCKET} ${LIBEXECINFO} ${CRC32_LIBRARY})
- DTRACE_INSTRUMENT(mysys)
- 
-+IF (HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
-+  TARGET_LINK_LIBRARIES(mysys atomic)
-+ENDIF()
-+
- IF(HAVE_BFD_H)
-   TARGET_LINK_LIBRARIES(mysys bfd)  
- ENDIF(HAVE_BFD_H)
-diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt
-index 5f5d7daf1a5bc..f574f1f20295d 100644
---- a/sql/CMakeLists.txt
-+++ b/sql/CMakeLists.txt
-@@ -307,7 +307,6 @@ IF(WITH_MYSQLD_LDFLAGS)
-      "${MYSQLD_LINK_FLAGS} ${WITH_MYSQLD_LDFLAGS}")
- ENDIF()
- 
--
- FIND_PACKAGE(BISON 2.0)
- 
- 
diff --git a/gnu/packages/patches/mecab-variable-param.patch b/gnu/packages/patches/mecab-variable-param.patch
new file mode 100644
index 0000000000..4457cf3f44
--- /dev/null
+++ b/gnu/packages/patches/mecab-variable-param.patch
@@ -0,0 +1,30 @@
+From 2396e90056706ef897acab3aaa081289c7336483 Mon Sep 17 00:00:00 2001
+From: LEPILLER Julien <julien.lepiller@irisa.fr>
+Date: Fri, 19 Apr 2019 11:48:39 +0200
+Subject: [PATCH] Allow variable parameters
+
+---
+ mecab/src/param.cpp | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/mecab/src/param.cpp b/mecab/src/param.cpp
+index 65328a2..006b1b5 100644
+--- a/mecab/src/param.cpp
++++ b/mecab/src/param.cpp
+@@ -79,8 +79,12 @@ bool Param::load(const char *filename) {
+     size_t s1, s2;
+     for (s1 = pos+1; s1 < line.size() && isspace(line[s1]); s1++);
+     for (s2 = pos-1; static_cast<long>(s2) >= 0 && isspace(line[s2]); s2--);
+-    const std::string value = line.substr(s1, line.size() - s1);
++    std::string value = line.substr(s1, line.size() - s1);
+     const std::string key   = line.substr(0, s2 + 1);
++
++    if(value.find('$') == 0) {
++        value = std::getenv(value.substr(1).c_str());
++    }
+     set<std::string>(key.c_str(), value, false);
+   }
+ 
+-- 
+2.20.1
+
diff --git a/gnu/packages/patches/openboardview-use-system-mpc.patch b/gnu/packages/patches/openboardview-use-system-mpc.patch
new file mode 100644
index 0000000000..7726c55fe8
--- /dev/null
+++ b/gnu/packages/patches/openboardview-use-system-mpc.patch
@@ -0,0 +1,42 @@
+Upstream status: https://github.com/OpenBoardView/OpenBoardView/pull/281
+
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 452dfa9..e30c3cf 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -206,13 +206,15 @@ endif()
+ add_definitions(-DSTBI_FAILURE_USERMSG)
+ 
+ ## mpc - Micro Parser Combinators ##
+-execute_process(
+-	COMMAND git submodule update --init src/mpc
+-	WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+-)
+-
+-add_library(mpc STATIC "mpc/mpc.c")
+-
++pkg_check_modules(MPC QUIET mpc)
++if(NOT MPC_FOUND)
++	execute_process(
++		COMMAND git submodule update --init src/mpc
++		WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
++    	)
++        add_library(mpc STATIC "mpc/mpc.c")
++        include_directories(${CMAKE_CURRENT_SOURCE_DIR}/mpc)
++endif()
+ 
+ ## OpenBoardView ##
+ add_subdirectory(openboardview)
+diff --git a/src/openboardview/FileFormats/GenCADFile.h b/src/openboardview/FileFormats/GenCADFile.h
+index 1ccf8df..c57f7ff 100644
+--- a/src/openboardview/FileFormats/GenCADFile.h
++++ b/src/openboardview/FileFormats/GenCADFile.h
+@@ -5,7 +5,7 @@
+ 
+ #include "build-generated/GenCADFileGrammar.h"
+ 
+-#include "mpc/mpc.h"
++#include "mpc.h"
+ 
+ #include <map>
+ #include <string>
diff --git a/gnu/packages/patches/openboardview-use-system-utf8.patch b/gnu/packages/patches/openboardview-use-system-utf8.patch
deleted file mode 100644
index 25b5952bda..0000000000
--- a/gnu/packages/patches/openboardview-use-system-utf8.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From 251e23422f37c93a3f460fb660c5e5bfa8200d91 Mon Sep 17 00:00:00 2001
-From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
-Date: Sun, 2 Dec 2018 16:40:39 -0500
-Subject: [PATCH] build system: Allow using utf8.h from the system.
-
----
- src/CMakeLists.txt               | 12 ++++++++----
- src/openboardview/CMakeLists.txt |  1 +
- 2 files changed, 9 insertions(+), 4 deletions(-)
-
-diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
-index 90442ed..26d4a69 100644
---- a/src/CMakeLists.txt
-+++ b/src/CMakeLists.txt
-@@ -8,10 +8,14 @@ if(NOT WIN32 OR MINGW)
- endif()
- 
- ## utf8.h ##
--execute_process(
--	COMMAND git submodule update --init src/utf8
--	WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
--)
-+FIND_PATH(UTF8_INCLUDE_DIR utf8.h)
-+if(NOT UTF8_INCLUDE_DIR)
-+  execute_process(
-+    COMMAND git submodule update --init src/utf8
-+    WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
-+    )
-+  set(UTF8_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/utf8)
-+endif()
- 
- ## zlib ##
- find_package(ZLIB)
-diff --git a/src/openboardview/CMakeLists.txt b/src/openboardview/CMakeLists.txt
-index b0bdbe3..6c4564c 100644
---- a/src/openboardview/CMakeLists.txt
-+++ b/src/openboardview/CMakeLists.txt
-@@ -44,6 +44,7 @@ include_directories(
- 	${CMAKE_CURRENT_SOURCE_DIR}
- 	${CMAKE_CURRENT_SOURCE_DIR}/..
- 	${IMGUI_INCLUDE_DIRS}
-+	${UTF8_INCLUDE_DIR}
- 	${GLAD_INCLUDE_DIRS}
- 	${GTK_INCLUDE_DIRS}
- 	${OPENGL_INCLUDE_DIR}
--- 
-2.34.0
-
diff --git a/gnu/packages/patches/orangeduck-mpc-fix-pkg-config.patch b/gnu/packages/patches/orangeduck-mpc-fix-pkg-config.patch
new file mode 100644
index 0000000000..f6155517d1
--- /dev/null
+++ b/gnu/packages/patches/orangeduck-mpc-fix-pkg-config.patch
@@ -0,0 +1,25 @@
+Upstream status: https://github.com/orangeduck/mpc/pull/160
+
+diff --git a/Makefile b/Makefile
+index 7719acc..fe798c5 100644
+--- a/Makefile
++++ b/Makefile
+@@ -15,7 +15,7 @@ EXAMPLESEXE = $(EXAMPLES:.c=)
+ 

+ .PHONY: all check clean libs $(DIST)/$(PROJ).pc

+ 

+-all: $(EXAMPLESEXE) check

++all: $(EXAMPLESEXE) check libs $(DIST)/$(PROJ).pc

+ 

+ $(DIST):

+ 	$(MKDIR) $(DIST)

+@@ -65,7 +65,8 @@ install: all
+ 	install -m755 -t $(DESTDIR)$(PREFIX)/lib $(DIST)/lib*

+ 	install -m644 -t $(DESTDIR)$(PREFIX)/share/$(PROJ) $(PROJ).c $(PROJ).h

+ 	install -m644 $(PROJ).h $(DESTDIR)$(PREFIX)/include/$(PROJ).h

+-	install -m644 $(PROJ).pc $(DESTDIR)$(PREFIX)/lib/pkgconfig/$(PROJ).pc

++	install -m644 $(DIST)/$(PROJ).pc \

++	  $(DESTDIR)$(PREFIX)/lib/pkgconfig/$(PROJ).pc

+ 

+ uninstall:

+ 	rm -rf -- \

diff --git a/gnu/packages/patches/python-afdko-suppress-copyright-test.patch b/gnu/packages/patches/python-afdko-suppress-copyright-test.patch
deleted file mode 100644
index 94cd73d5f7..0000000000
--- a/gnu/packages/patches/python-afdko-suppress-copyright-test.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Supress copyright check in tests which can differ based on current year.
-
-  https://github.com/adobe-type-tools/afdko/issues/1589
-
-Adapted from upstream:
-
-  https://github.com/adobe-type-tools/afdko/commit/feebd77d9b6507a0b32f837535511be3c94d9c6f
-
-diff --git a/tests/tx_test.py b/tests/tx_test.py
---- a/tests/tx_test.py
-+++ b/tests/tx_test.py
-@@ -1246,7 +1246,7 @@ def test_ufo_fontinfo_parsing(file, msg, ret_code):
-     if (ret_code == 0):
-         expected_path = generate_ps_dump(expected_path)
-         output_path = generate_ps_dump(output_path)
--        assert differ([expected_path, output_path])
-+        assert differ([expected_path, output_path, '-s'] + PFA_SKIP)
-     else:
-         arg = [TOOL, '-t1', '-f', ufo_input_path]
-         assert subprocess.call(arg) == 6
diff --git a/gnu/packages/patches/python2-pyopenssl-openssl-compat.patch b/gnu/packages/patches/python2-pyopenssl-openssl-compat.patch
deleted file mode 100644
index a185f4172d..0000000000
--- a/gnu/packages/patches/python2-pyopenssl-openssl-compat.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-Adjust for OpenSSL 1.1.1:
-
-  https://github.com/pyca/pyopenssl/issues/1043
-
-Taken from upstream:
-
-  https://github.com/pyca/pyopenssl/commit/cc5c00ae5fd3c19d07fff79b5c4a08f5e58697ad
-
-diff --git a/src/OpenSSL/SSL.py b/src/OpenSSL/SSL.py
-index 59f21cec..fcdee047 100644
---- a/src/OpenSSL/SSL.py
-+++ b/src/OpenSSL/SSL.py
-@@ -1421,6 +1421,12 @@ def set_alpn_protos(self, protos):
-             This list should be a Python list of bytestrings representing the
-             protocols to offer, e.g. ``[b'http/1.1', b'spdy/2']``.
-         """
-+        # Different versions of OpenSSL are inconsistent about how they handle empty
-+        # proto lists (see #1043), so we avoid the problem entirely by rejecting them
-+        # ourselves.
-+        if not protos:
-+            raise ValueError("at least one protocol must be specified")
-+
-         # Take the list of protocols and join them together, prefixing them
-         # with their lengths.
-         protostr = b"".join(
-@@ -2449,6 +2455,12 @@ def set_alpn_protos(self, protos):
-             This list should be a Python list of bytestrings representing the
-             protocols to offer, e.g. ``[b'http/1.1', b'spdy/2']``.
-         """
-+        # Different versions of OpenSSL are inconsistent about how they handle empty
-+        # proto lists (see #1043), so we avoid the problem entirely by rejecting them
-+        # ourselves.
-+        if not protos:
-+            raise ValueError("at least one protocol must be specified")
-+
-         # Take the list of protocols and join them together, prefixing them
-         # with their lengths.
-         protostr = b"".join(
-diff --git a/tests/test_ssl.py b/tests/test_ssl.py
-index ffc505d8..ca363b45 100644
---- a/tests/test_ssl.py
-+++ b/tests/test_ssl.py
-@@ -1928,7 +1928,7 @@ def test_alpn_call_failure(self):
-         protocols list. Ensure that we produce a user-visible error.
-         """
-         context = Context(SSLv23_METHOD)
--        with pytest.raises(Error):
-+        with pytest.raises(ValueError):
-             context.set_alpn_protos([])
- 
-     def test_alpn_set_on_connection(self):
diff --git a/gnu/packages/patches/ruby-hiredis-use-system-hiredis.patch b/gnu/packages/patches/ruby-hiredis-use-system-hiredis.patch
new file mode 100644
index 0000000000..1b238f5099
--- /dev/null
+++ b/gnu/packages/patches/ruby-hiredis-use-system-hiredis.patch
@@ -0,0 +1,52 @@
+Retrieved 2023-03-05 from
+https://sources.debian.org/data/main/r/ruby-hiredis/0.6.3-2/debian/patches/use_system_libhiredis.patch.
+
+From: Apollon Oikonomopoulos <apoikos@gmail.com>
+Date: Mon, 20 Jan 2020 09:28:45 -0300
+Subject: Use system libhiredis
+
+Last-Update: 2013-04-10
+Forwarded: no
+
+Use Debian's libhiredis version instead of downloading one and statically
+linking against it.
+---
+ ext/hiredis_ext/extconf.rb | 18 +++---------------
+ 1 file changed, 3 insertions(+), 15 deletions(-)
+
+diff --git a/ext/hiredis_ext/extconf.rb b/ext/hiredis_ext/extconf.rb
+index da39eb5..ffa3abf 100644
+--- a/ext/hiredis_ext/extconf.rb
++++ b/ext/hiredis_ext/extconf.rb
+@@ -9,12 +9,6 @@ end
+ 
+ RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']
+ 
+-hiredis_dir = File.join(File.dirname(__FILE__), %w{.. .. vendor hiredis})
+-unless File.directory?(hiredis_dir)
+-  STDERR.puts "vendor/hiredis missing, please checkout its submodule..."
+-  exit 1
+-end
+-
+ RbConfig::CONFIG['configure_args'] =~ /with-make-prog\=(\w+)/
+ make_program = $1 || ENV['make']
+ make_program ||= case RUBY_PLATFORM
+@@ -27,15 +21,9 @@ else
+ end
+ 
+ if build_hiredis
+-  # Make sure hiredis is built...
+-  Dir.chdir(hiredis_dir) do
+-    success = system("#{make_program} static")
+-    raise "Building hiredis failed" if !success
+-  end
+-
+-  # Statically link to hiredis (mkmf can't do this for us)
+-  $CFLAGS << " -I#{hiredis_dir}"
+-  $LDFLAGS << " #{hiredis_dir}/libhiredis.a"
++  # Debian: use system hiredis
++  $CFLAGS << " -I/usr/include/hiredis"
++  $LDFLAGS << " -lhiredis"
+ 
+   have_func("rb_thread_fd_select")
+   create_makefile('hiredis/ext/hiredis_ext')
diff --git a/gnu/packages/patches/rust-openssl-sys-no-vendor.patch b/gnu/packages/patches/rust-openssl-sys-no-vendor.patch
index 3e300ea69e..5872d4cf22 100644
--- a/gnu/packages/patches/rust-openssl-sys-no-vendor.patch
+++ b/gnu/packages/patches/rust-openssl-sys-no-vendor.patch
@@ -1,12 +1,17 @@
-https://sources.debian.org/data/main/r/rust-openssl-sys/0.9.53-1/debian/patches/disable-vendor.patch
-"MIT" licensed according to debian/copyright file
-slightly modified to only change the vendored openssl-src dependency
-
-Starting from rust-openssl-sys@0.9.69 Cargo.toml starts searching for openssl-3.0.
-
---- a/Cargo.toml
-+++ b/Cargo.toml
-@@ -31,15 +31,12 @@
+--- openssl-sys-0.9.84/Cargo.toml.orig	2023-04-03 09:10:11.979197979 -0400
++++ openssl-sys-0.9.84/Cargo.toml	2023-04-03 12:07:30.285315609 -0400
+@@ -31,10 +31,6 @@
+ [package.metadata.pkg-config]
+ openssl = "1.0.1"
+ 
+-[dependencies.bssl-sys]
+-version = "0.1.0"
+-optional = true
+-
+ [dependencies.libc]
+ version = "0.2"
+ 
+@@ -46,16 +42,12 @@
  [build-dependencies.cc]
  version = "1.0"
  
@@ -18,9 +23,10 @@ Starting from rust-openssl-sys@0.9.69 Cargo.toml starts searching for openssl-3.
  version = "0.3.9"
  
  [features]
- vendored = ["openssl-src"]
-+openssl-src = []
+-unstable_boringssl = ["bssl-sys"]
+-vendored = ["openssl-src"]
++unstable_boringssl = []
++vendored = []
  
  [target."cfg(target_env = \"msvc\")".build-dependencies.vcpkg]
  version = "0.2.8"
-
diff --git a/gnu/packages/patches/webkitgtk-libelogind.patch b/gnu/packages/patches/webkitgtk-libelogind.patch
new file mode 100644
index 0000000000..fa1fbc8783
--- /dev/null
+++ b/gnu/packages/patches/webkitgtk-libelogind.patch
@@ -0,0 +1,38 @@
+From 8d46803c09edc2b6d4e35c778a3d2f90e5baad0b Mon Sep 17 00:00:00 2001
+From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
+Date: Sat, 25 Mar 2023 22:55:16 -0400
+Subject: [PATCH] Fallback to elogind when systemd is unavailable at build time
+ https://bugs.webkit.org/show_bug.cgi?id=254475
+
+Reviewed by NOBODY (OOPS!).
+
+The build system supports elogind, but it only considers the
+'libsystemd' library name for the pkg-config lookup and not
+'libelogind'.  This change makes the build system fallback to search
+for libelogind when libsystemd was not found.
+
+* Source/cmake/FindJournald.cmake [!PC_SYSTEMD_FOUND]: Search for libelogind.
+---
+ Source/cmake/FindJournald.cmake | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/Source/cmake/FindJournald.cmake b/Source/cmake/FindJournald.cmake
+index 18dd6b50908c..e0dc9ce1d397 100644
+--- a/Source/cmake/FindJournald.cmake
++++ b/Source/cmake/FindJournald.cmake
+@@ -55,6 +55,10 @@ find_package(PkgConfig QUIET)
+ 
+ # libelogind provides compatible pc and header files
+ pkg_check_modules(PC_SYSTEMD QUIET libsystemd)
++if (NOT PC_SYSTEMD_FOUND)
++    pkg_check_modules(PC_SYSTEMD QUIET libelogind)
++endif ()
++
+ set(Journald_COMPILE_OPTIONS ${PC_SYSTEMD_CFLAGS_OTHER})
+ set(Journald_VERSION ${PC_SYSTEMD_VERSION})
+ 
+
+base-commit: 43ea8744bc6065aad7ae5988e32d31d253905e5f
+-- 
+2.39.2
+
diff --git a/gnu/packages/patchutils.scm b/gnu/packages/patchutils.scm
index 05a9a62dbf..0d88a2d943 100644
--- a/gnu/packages/patchutils.scm
+++ b/gnu/packages/patchutils.scm
@@ -168,7 +168,7 @@ refreshed, and more.")
 (define-public colordiff
   (package
     (name "colordiff")
-    (version "1.0.20")
+    (version "1.0.21")
     (source
       (origin
         (method url-fetch)
@@ -177,7 +177,7 @@ refreshed, and more.")
                    (string-append "http://www.colordiff.org/archive/colordiff-"
                                   version ".tar.gz")))
       (sha256
-       (base32 "1kbv3lsyzzrwca4v3ajpnv8q5j0h53r94lxiqgmikxmrxrxh3cp3"))))
+       (base32 "05g64z4ls1i70rpzznjxy2cpjgywisnwj9ssx9nq1w7hgqjz8c4v"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no tests
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index 48420c730f..4a43b97d39 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -20,7 +20,7 @@
 ;;; Copyright © 2020-2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020, 2022 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Timotej Lazar <timotej.lazar@araneo.si>
-;;; Copyright © 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2022 Paul A. Patience <paul@apatience.com>
 ;;; Copyright © 2022 Petr Hodina <phodina@protonmail.com>
diff --git a/gnu/packages/perl-check.scm b/gnu/packages/perl-check.scm
index 6562390d20..7bf58832bc 100644
--- a/gnu/packages/perl-check.scm
+++ b/gnu/packages/perl-check.scm
@@ -546,7 +546,7 @@ Test::More and friends.")
 (define-public perl-test-fatal
   (package
     (name "perl-test-fatal")
-    (version "0.014")
+    (version "0.016")
     (source
      (origin
        (method url-fetch)
@@ -554,7 +554,7 @@ Test::More and friends.")
                            "Test-Fatal-" version ".tar.gz"))
        (sha256
         (base32
-         "1c6bs68mss4q7cyapkv2c0jn66i21050p0faxf3s3417gdffzp5w"))))
+         "13vqdyk95y89msk1r8g1vp1jw6rzkl1y76lprnw3085sy8qd90vj"))))
     (build-system perl-build-system)
     (propagated-inputs (list perl-try-tiny))
     (home-page "https://metacpan.org/release/Test-Fatal")
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index 294b99230f..4fa061362e 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -36,6 +36,7 @@
 ;;; Copyright © 2022 gemmaro <gemmaro.dev@gmail.com>
 ;;; Copyright © 2023 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
 ;;; Copyright © 2023 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2023 Jake Leporte <jakeleporte@outlook.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -88,6 +89,7 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages sdl)
+  #:use-module (gnu packages security-token)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages video)
   #:use-module (gnu packages web)
@@ -549,6 +551,27 @@ users can force the decision of which backend to use by setting the environment
 variable ANY_MOOSE to be Moose or Mouse.")
     (license (package-license perl))))
 
+(define-public perl-app-cpanminus
+  (package
+    (name "perl-app-cpanminus")
+    (version "1.7046")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/M/MI/MIYAGAWA/App-cpanminus-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0qpq1x24dcrm7bm2qj814nkmxg8mzkdn6wcirjd8yd578jdrv31y"))))
+    (build-system perl-build-system)
+    (home-page "https://metacpan.org/release/App-cpanminus")
+    (synopsis "CPAN package manager")
+    (description "App::cpanminus is a script to get, unpack, build and install
+modules from CPAN and does nothing else.  It's dependency free (can bootstrap
+itself), requires zero configuration, and stands alone.  When running, it
+requires only 10MB of RAM.")
+    (license (package-license perl))))
+
 (define-public perl-app-xml-docbook-builder
   (package
     (name "perl-app-xml-docbook-builder")
@@ -819,9 +842,6 @@ error when it would have happened.")
     (description "This module disables bareword filehandles.")
     (license (package-license perl))))
 
-(define-public perl-base
-  (deprecated-package "perl-base" perl))
-
 (define-public perl-browser-open
   (package
     (name "perl-browser-open")
@@ -8650,8 +8670,25 @@ defaults, optional parameters, and extra \"slurpy\" parameters.")
 distributions.")
     (license (package-license perl))))
 
-(define-public perl-parent
-  (deprecated-package "perl-parent" perl))
+(define-public perl-par
+  (package
+    (name "perl-par")
+    (version "1.018")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/R/RS/RSCHUPP/PAR-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0ifyjd1pxbfp8wxa9l8b1irjwln4gwh4nz256mjacjv194mh99bc"))))
+    (build-system perl-build-system)
+    (propagated-inputs (list perl-archive-zip perl-par-dist))
+    (home-page "https://metacpan.org/release/PAR")
+    (synopsis "Perl Archive Toolkit")
+    (description
+     "Perl module for using special zip files (called Perl ARchives) as
+libraries from which Perl modules can be loaded.")
+    (license license:perl-license)))
 
 (define-public perl-path-class
   (package
@@ -11280,7 +11317,7 @@ Tree::Simple::Visitor::* objects.")
 (define-public perl-try-tiny
   (package
     (name "perl-try-tiny")
-    (version "0.30")
+    (version "0.31")
     (source
      (origin
        (method url-fetch)
@@ -11288,7 +11325,7 @@ Tree::Simple::Visitor::* objects.")
                            "Try-Tiny-" version ".tar.gz"))
        (sha256
         (base32
-         "0szgvlz19yz3mq1lbzmwh8w5dh6agg5s16xv22zrnl83r7ax0nys"))))
+         "1ghidhh2wasxbmjsdsyfcy20wgli3m58dkj6ixnv4xa0i8fx601k"))))
     (build-system perl-build-system)
     (home-page "https://metacpan.org/release/Try-Tiny")
     (synopsis "Minimal try/catch with proper preservation of $@@")
@@ -12301,6 +12338,40 @@ As a convenience, the PIR module is an empty subclass of this one that is less
 arduous to type for one-liners.")
     (license license:asl2.0)))
 
+(define-public perl-pcsc
+  (package
+    (name "perl-pcsc")
+    (version "1.4.14")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/W/WH/WHOM/pcsc-perl-" version
+                    ".tar.bz2"))
+              (sha256
+               (base32
+                "17f6i16jv6ci6459vh6y3sz94vgcvykjjszcl4xsykryakjvf8i7"))))
+    (build-system perl-build-system)
+    (arguments
+     (list
+      ;; The test suite is disabled because it requires access to a card
+      ;; reader with a card inserted.
+      #:tests? #f
+      #:phases #~(modify-phases %standard-phases
+                   (add-after 'unpack 'patch-dlopen
+                     (lambda* (#:key inputs #:allow-other-keys)
+                       (substitute* "PCSCperl.h"
+                         (("libpcsclite.so.1")
+                          (search-input-file inputs
+                                             "/lib/libpcsclite.so.1"))))))))
+    (native-inputs (list pkg-config))
+    (inputs (list pcsc-lite))
+    (synopsis "Perl library for PC/SC")
+    (description
+     "This library allows communication with a smart card using PC/SC from a Perl
+script.")
+    (home-page "https://pcsc-perl.apdu.fr/")
+    (license license:gpl2+)))
+
 (define-public perl-pod-constants
   (package
     (name "perl-pod-constants")
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index 80fc963363..c498703205 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -207,23 +207,22 @@ cameras (CRW/CR2, NEF, RAF, DNG, and others).")
     ;; both two licensing modes for your changes/additions."
     (license (list license:lgpl2.1 license:cddl1.0))))
 
-
 (define-public libexif
   (package
     (name "libexif")
-    (version "0.6.22")
+    (version "0.6.24")
     (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/libexif/libexif/releases"
-                    "/download/libexif-"
-                    (string-map (lambda (x) (if (char=? x #\.) #\_ x)) version)
-                    "-release/libexif-" version ".tar.xz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/libexif/libexif.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "0mhcad5zab7fsn120rd585h8ncwkq904nzzrq8vcd72hzk4g2j2h"))))
+                "0zi5vvb0khlzc6xyfayk6mjx5lgkrj8r7s8lfv4j7wkcgndjga0j"))))
     (build-system gnu-build-system)
-    (home-page "https://libexif.github.io/")
+    (native-inputs (list autoconf automake gettext-minimal libtool))
+    (home-page "https://github.com/libexif/libexif")
     (synopsis "Read and manipulate EXIF data in digital photographs")
     (description
      "The libexif C library allows applications to read, edit, and save EXIF
@@ -460,7 +459,7 @@ photographic equipment.")
 (define-public darktable
   (package
     (name "darktable")
-    (version "4.2.0")
+    (version "4.2.1")
     (source
      (origin
        (method url-fetch)
@@ -468,101 +467,102 @@ photographic equipment.")
              "https://github.com/darktable-org/darktable/releases/"
              "download/release-" version "/darktable-" version ".tar.xz"))
        (sha256
-        (base32 "1y8sn7yyqyg1n82byaw5csjr8a6m7g6839krq9k9zc79vxzr3c0q"))))
+        (base32 "1b3vr6njwqfvnrx3qpbg5aqcbl1z8nxnxcgyyw0sd4a20z33jfk0"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:configure-flags '("-DBINARY_PACKAGE_BUILD=On"
-                           "-DBUILD_TESTING=On")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'libOpenCL-path
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; Statically link to libOpenCL.
-             (substitute* "./src/common/dlopencl.c"
-               (("\"libOpenCL\"")
-                (string-append "\"" (assoc-ref inputs "opencl-icd-loader")
-                               "/lib/libOpenCL.so\"")))))
-         (add-after 'unpack 'fix-missing-include
-           (lambda _
-             ;; Fix missing include needed to build tests.  See upstream
-             ;; issue: https://github.com/darktable-org/darktable/issues/12604
-             (substitute* "./src/common/variables.h"
-               (("once")
-                "once\n#include \"common/image.h\""))))
-         (add-before 'configure 'prepare-build-environment
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; Rawspeed fails to build with GCC due to OpenMP error:
-             ;; "undefined reference to `GOMP_loop_nonmonotonic_dynamic_next'"
-             (setenv "CC" "clang") (setenv "CXX" "clang++")
-             ;; Darktable looks for opencl-c.h in the LLVM dir. Guix installs
-             ;; it to the Clang dir. We fix this by patching CMakeLists.txt.
-             (substitute* "CMakeLists.txt"
-               (("\\$\\{LLVM_INSTALL_PREFIX\\}")
-                (assoc-ref %build-inputs "clang")))))
-         (add-before 'configure 'set-LDFLAGS
-           (lambda* (#:key outputs #:allow-other-keys)
-             (setenv "LDFLAGS"
-                     (string-append
-                      "-Wl,-rpath="
-                      (assoc-ref outputs "out") "/lib/darktable"))))
-         (add-after 'install 'wrap-program
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (wrap-program (string-append (assoc-ref outputs "out")
-                                          "/bin/darktable")
-               ;; For GtkFileChooserDialog.
-               `("GSETTINGS_SCHEMA_DIR" =
-                 (,(string-append (assoc-ref inputs "gtk+")
-                                  "/share/glib-2.0/schemas")))))))))
+     (list
+      #:configure-flags
+      #~(list "-DBINARY_PACKAGE_BUILD=On"
+              "-DBUILD_TESTING=On")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'libOpenCL-path
+            (lambda* (#:key inputs #:allow-other-keys)
+              ;; Statically link to libOpenCL.
+              (substitute* "./src/common/dlopencl.c"
+                (("\"libOpenCL\"")
+                 (string-append "\""
+                                (search-input-file inputs "/lib/libOpenCL.so")
+                                "\"")))))
+          (add-after 'unpack 'fix-missing-include
+            (lambda _
+              ;; Fix missing include needed to build tests.  See upstream
+              ;; issue: https://github.com/darktable-org/darktable/issues/12604
+              (substitute* "./src/common/variables.h"
+                (("once")
+                 "once\n#include \"common/image.h\""))))
+          (add-before 'configure 'prepare-build-environment
+            (lambda _
+              ;; Rawspeed fails to build with GCC due to OpenMP error:
+              ;; "undefined reference to `GOMP_loop_nonmonotonic_dynamic_next'"
+              (setenv "CC" "clang")
+              (setenv "CXX" "clang++")
+              ;; Darktable looks for opencl-c.h in the LLVM dir. Guix installs
+              ;; it to the Clang dir. We fix this by patching CMakeLists.txt.
+              (substitute* "CMakeLists.txt"
+                (("\\$\\{LLVM_INSTALL_PREFIX\\}")
+                 #$(this-package-native-input "clang")))))
+          (add-before 'configure 'set-LDFLAGS
+            (lambda _
+              (setenv "LDFLAGS"
+                      (string-append "-Wl,-rpath=" #$output "/lib/darktable"))))
+          (add-after 'install 'wrap-program
+            (lambda _
+              (wrap-program (string-append #$output "/bin/darktable")
+                ;; For GtkFileChooserDialog.
+                `("GSETTINGS_SCHEMA_DIR" =
+                  (,(string-append #$(this-package-input "gtk+")
+                                   "/share/glib-2.0/schemas")))))))))
     (native-inputs
-     `(("clang" ,clang-11)
-       ("cmocka" ,cmocka)
-       ("desktop-file-utils" ,desktop-file-utils)
-       ("glib:bin" ,glib "bin")
-       ("gobject-introspection" ,gobject-introspection)
-       ("intltool" ,intltool)
-       ("llvm" ,llvm-11) ;should match the Clang version
-       ("opencl-headers" ,opencl-headers)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("po4a" ,po4a)
-       ("python-wrapper" ,python-wrapper)
-       ("ruby" ,ruby)))
+     (list clang-11
+           cmocka
+           desktop-file-utils
+           `(,glib "bin")
+           gobject-introspection
+           intltool
+           llvm-11                      ;should match the Clang version
+           opencl-headers
+           perl
+           pkg-config
+           po4a
+           python-wrapper
+           ruby))
     (inputs
      (list bash-minimal
            cairo
-           colord-gtk ;optional, for color profile support
-           cups ;optional, for printing support
+           colord-gtk                   ;optional, for color profile support
+           cups                         ;optional, for printing support
            curl
            dbus-glib
            exiv2
            freeimage
-           gmic ;optional, for HaldcLUT support
+           gmic                         ;optional, for HaldcLUT support
            graphicsmagick
            gsettings-desktop-schemas
            gtk+
            imath
-           iso-codes ;optional, for language names in the preferences
+           iso-codes          ;optional, for language names in the preferences
            json-glib
            lcms
-           lensfun ;optional, for the lens distortion plugin
-           libgphoto2 ;optional, for camera tethering
-           libavif ;optional, for AVIF support
+           lensfun                   ;optional, for the lens distortion plugin
+           libgphoto2                ;optional, for camera tethering
+           libavif                   ;optional, for AVIF support
            libjpeg-turbo
            libomp
            libpng
            librsvg
-           libsecret ;optional, for storing passwords
+           libsecret                    ;optional, for storing passwords
            libsoup-minimal-2
            libtiff
-           libwebp ;optional, for WebP support
+           libwebp                      ;optional, for WebP support
            libxml2
            libxslt
            libheif
-           lua-5.4 ;optional, for plugins
-           opencl-icd-loader ;optional, for OpenCL support
-           openexr ;optional, for EXR import/export
-           openjpeg ;optional, for JPEG2000 export
-           osm-gps-map ;optional, for geotagging view
+           lua-5.4                      ;optional, for plugins
+           opencl-icd-loader            ;optional, for OpenCL support
+           openexr                      ;optional, for EXR import/export
+           openjpeg                     ;optional, for JPEG2000 export
+           osm-gps-map                  ;optional, for geotagging view
            pugixml
            python-jsonschema
            sdl2
@@ -577,8 +577,8 @@ and enhance them.")
     (supported-systems '("x86_64-linux" "aarch64-linux" "powerpc64le-linux"))
     (properties
      '((release-monitoring-url . "https://github.com/darktable-org/darktable/releases")))
-    (license (list license:gpl3+ ;; Darktable itself.
-                   license:lgpl2.1+)))) ;; Rawspeed library.
+    (license (list license:gpl3+        ;Darktable itself
+                   license:lgpl2.1+)))) ;Rawspeed library
 
 (define-public photoflare
   (package
diff --git a/gnu/packages/plotutils.scm b/gnu/packages/plotutils.scm
index c1e579eb58..46e86158b6 100644
--- a/gnu/packages/plotutils.scm
+++ b/gnu/packages/plotutils.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016-2023 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2023 gemmaro <gemmaro.dev@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,6 +29,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system ruby)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bash)
@@ -50,7 +52,9 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
+  #:use-module (gnu packages ruby)
   #:use-module (gnu packages qt)
+  #:use-module (gnu packages statistics)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tex)
   #:use-module (gnu packages web)
@@ -427,3 +431,54 @@ LaTeX does for scientific text.")
     ;; noted otherwise, are released under version 3 (or later) of the GNU
     ;; Lesser General Public License"
     (license license:lgpl3+)))
+
+(define-public ruby-unicode-plot
+  (package
+    (name "ruby-unicode-plot")
+    (version "0.0.5")
+    ;; Source at RubyGems.org doesn't have test fixtures.
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url
+                     "https://github.com/red-data-tools/unicode_plot.rb")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0g67brnb7zp1xx9cp1x7bmyxwnvi2i8gplw7p1j7cppzin4kr1vj"))))
+    (build-system ruby-build-system)
+    (native-inputs (list bundler ruby-rake ruby-test-unit ruby-yard))
+    (propagated-inputs (list ruby-enumerable-statistics))
+    (synopsis "Library to plot your data by Unicode characters")
+    (description "UnicodePlot provides the feature to make charts with Unicode
+characters.  Supported charts are: barplot, boxplot, densityplot,
+histogram, lineplot, and scatterplot.")
+    (home-page "https://github.com/red-data-tools/unicode_plot.rb")
+    (license license:expat)))
+
+(define-public youplot
+  (package
+    (name "youplot")
+    (version "0.4.5")
+    ;; Source at RubyGems.org doesn't have tests.
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/red-data-tools/YouPlot")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1y54apw7hx9mhjnf277w9wayvq954mdnip4dpajhc0qjg2464c2b"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-rake ruby-simplecov ruby-test-unit))
+    (propagated-inputs (list ruby-unicode-plot))
+    (synopsis "Command line tool that draw plots on the terminal")
+    (description
+     "YouPlot is a command line tool that draws plots on the terminal,
+powered by UnicodePlot gem.  It provides commands @command{youplot}
+and @command{uplot} (shorthand) are provided, and supports chart types
+of barplot, histogram, lineplot, scatter, density, boxplot, and count.")
+    (home-page "https://github.com/red-data-tools/YouPlot")
+    (license license:expat)))
diff --git a/gnu/packages/potassco.scm b/gnu/packages/potassco.scm
new file mode 100644
index 0000000000..0e6973d980
--- /dev/null
+++ b/gnu/packages/potassco.scm
@@ -0,0 +1,376 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2022, 2023 Liliana Marie Prikler <liliana.prikler@gmail.com>
+;;; Copyright © 2023 Simon Tournier <zimon.toutoune@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages potassco)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages)
+  #:use-module (guix gexp)
+  #: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-system cmake)
+  #:use-module (guix build-system emacs)
+  #:use-module (guix build-system python)
+  #:use-module (guix build-system pyproject)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages graphviz)
+  #:use-module (gnu packages libffi)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz))
+
+(define-public libpotassco
+  ;; No public release, update together with clasp
+  (let ((revision "1")
+        (commit "2f9fb7ca2c202f1b47643aa414054f2f4f9c1821"))
+    (package
+      (name "libpotassco")
+      (version (git-version "0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/potassco/libpotassco")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1c32f9gqclf7qx07lpx8wd720vfhkjqhzc6nyy8mjmgwpmb3iyyn"))))
+      (arguments
+       `(#:configure-flags '("-DLIB_POTASSCO_BUILD_TESTS=on"
+                             "-DLIB_POTASSCO_INSTALL_LIB=on"
+                             "-DBUILD_SHARED_LIBS=on")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'patch-cmake
+             (lambda _
+               (substitute* "CMakeLists.txt"
+                 ;; clasp expects lowercase potassco and include directory is
+                 ;; lowercase as well, so let's use that
+                 (("\"cmake/Potassco\"") "\"cmake/potassco\"")
+                 (("PotasscoConfig\\.cmake") "potassco-config.cmake")
+                 (("PotasscoConfigVersion\\.cmake")
+                  "potassco-config-version.cmake"))
+               (rename-file "cmake/PotasscoConfig.cmake.in"
+                            "cmake/potassco-config.cmake.in"))))))
+      (build-system cmake-build-system)
+      (home-page "https://potassco.org/")
+      (synopsis "Utility library for Potassco's projects")
+      (description "@code{libpotassco} is a utility library providing functions
+and datatypes for
+@itemize
+@item parsing, writing, and converting logic programs in aspif and smodels
+format,
+@item passing information between a grounder and a solver,
+@item and defining and parsing command-line options and for creating
+command-line applications.
+@end itemize
+Furthermore, it comes with the tool @command{lpconvert} that converts either
+between aspif and smodels format or to a human-readable text format.")
+      (license license:expat))))
+
+(define-public clasp
+  (package
+    (name "clasp")
+    (version "3.3.9")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/potassco/clasp")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "163ps9zq7xppqy9hj5qnw6z5lcjnm4xf5fwjsavpia5ynm3hngcw"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags '("-DCLASP_BUILD_TESTS=on"
+                           "-DCLASP_INSTALL_LIB=on"
+                           "-DCLASP_USE_LOCAL_LIB_POTASSCO=off"
+                           "-DBUILD_SHARED_LIBS=on")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-cmake
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               ;; Use lowercase to be consistent with libpotassco
+               (("\"cmake/Clasp\"") "\"cmake/clasp\"")
+               (("ClaspConfig\\.cmake") "clasp-config.cmake")
+               (("ClaspConfigVersion\\.cmake")
+                "clasp-config-version.cmake"))
+             (substitute* "cmake/ClaspConfig.cmake.in"
+               (("find_package\\(Potassco") "find_package(potassco"))
+             (rename-file "cmake/ClaspConfig.cmake.in"
+                          "cmake/clasp-config.cmake.in"))))))
+    (inputs
+     (list libpotassco))
+    (home-page "https://potassco.org/")
+    (synopsis "Answer set solver")
+    (description "clasp is an answer set solver for (extended) normal and
+disjunctive logic programs.  The primary algorithm of clasp relies on
+conflict-driven nogood learning, a technique that proved very successful for
+satisfiability checking (SAT).")
+    (license license:expat)))
+
+(define-public clingo
+  (package
+    (name "clingo")
+    (version "5.6.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/potassco/clingo")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (modules '((guix build utils)))
+              (snippet
+               #~(begin
+                   (delete-file-recursively "clasp")
+                   ;; TODO: Unvendor other third-party stuff
+                   (delete-file-recursively "third_party/catch")))
+              (sha256
+               (base32
+                "19s59ndcm2yj0kxlikfxnx2bmp6b7n31wq1zvwc7hyk37rqarwys"))))
+    (build-system cmake-build-system)
+    (arguments
+     (list
+      #:configure-flags #~`("-DCLINGO_BUILD_TESTS=on"
+                            "-DCLINGO_INSTALL_LIB=on"
+                            "-DCLINGO_BUILD_STATIC=off"
+                            "-DCLINGO_BUILD_SHARED=on"
+                            "-DCLINGO_USE_LOCAL_CLASP=off"
+                            "-DCLINGO_USE_LOCAL_CATCH=off")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-cmake
+            (lambda _
+              (substitute* "CMakeLists.txt"
+                (("add_subdirectory\\(clasp\\)")
+                 "find_package(clasp REQUIRED)"))
+              (substitute* "libclingo/CMakeLists.txt"
+                (("\"cmake/Clingo\"") "\"cmake/clingo\"")
+                (("ClingoConfig\\.cmake") "clingo-config.cmake")
+                (("ClingoConfigVersion\\.cmake")
+                 "clingo-config-version.cmake"))
+              (substitute* "cmake/ClingoConfig.cmake.in"
+                (("find_package\\(Clasp") "find_package(clasp"))
+              (rename-file "cmake/ClingoConfig.cmake.in"
+                           "cmake/clingo-config.cmake.in")))
+          (add-after 'unpack 'skip-failing-tests
+            (lambda _
+              (with-directory-excursion "libclingo/tests"
+                (substitute* "CMakeLists.txt"
+                  (("COMMAND test_clingo" all)
+                   (string-append all
+                                  " -f "
+                                  "\"${CMAKE_CURRENT_SOURCE_DIR}/good.txt\"")))
+                (call-with-output-file "good.txt"
+                  (lambda (port)
+                    (for-each (lambda (test) (format port "~s~%" test))
+                              '("parse-ast-v2" "add-ast-v2" "build-ast-v2"
+                                "unpool-ast-v2" "parse_term"
+                                "propagator" "propgator-sequence-mining"
+                                "symbol" "visitor"))))))))))
+    (inputs (list catch2-3.1 clasp libpotassco))
+    (native-inputs (list pkg-config))
+    (home-page "https://potassco.org/")
+    (synopsis "Grounder and solver for logic programs")
+    (description "Clingo computes answer sets for a given logic program.")
+    (license license:expat)))
+
+(define-public emacs-pasp-mode
+  (let ((commit "59385eb0e8ebcfc8c11dd811fb145d4b0fa3cc92")
+        (revision "1"))
+    (package
+     (name "emacs-pasp-mode")
+     (version (git-version "0.1.0" revision commit))
+     (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/santifa/pasp-mode")
+                    (commit commit)))
+              (patches
+               (search-patches "emacs-pasp-mode-quote-file-names.patch"))
+              (sha256
+               (base32
+                "1ar4vws3izzmir7m870mccci620ns3c5j26dcmwaxavhgw45wcmf"))))
+     (build-system emacs-build-system)
+     (arguments
+      (list
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-after 'unpack 'defconst-version
+             (lambda _
+               (emacs-batch-edit-file "pasp-mode.el"
+                 '(progn
+                   (search-forward-regexp "(defcustom pasp-mode-version")
+                   (forward-sexp)
+                   (kill-sexp)
+                   (backward-sexp)
+                   (beginning-of-line)
+                   (kill-sexp)
+                   (insert (format "(defconst emacs-pasp-version \"%s\" %s)"
+                                   #$version (cadr kill-ring)))
+                   (basic-save-buffer)))))
+           (add-after 'unpack 'hardcode-clingo
+             (lambda* (#:key inputs #:allow-other-keys)
+               (emacs-substitute-variables "pasp-mode.el"
+                 ("pasp-clingo-path"
+                  (search-input-file inputs "/bin/clingo"))))))))
+     (inputs (list clingo))
+     (home-page "https://github.com/santifa/pasp-mode")
+     (synopsis "Major mode for editing answer set programs")
+     (description
+      "This package provides a major mode for editing answer set programs,
+in particular ones that can be solved by @command{clingo}.")
+     (license license:gpl3+))))
+
+(define-public python-clingo
+  (package
+    (inherit clingo)
+    (name "python-clingo")
+    (version (package-version clingo)) ; for #$version in arguments
+    (arguments
+     (substitute-keyword-arguments (package-arguments clingo)
+       ((#:configure-flags flags #~'())
+        #~(cons* "-DCLINGO_BUILD_WITH_PYTHON=pip"
+                 "-DCLINGO_USE_LIB=yes"
+                 #$flags))
+       ((#:imported-modules _ '())
+        `(,@%cmake-build-system-modules
+          (guix build python-build-system)))
+       ((#:modules _ '())
+        '((guix build cmake-build-system)
+          ((guix build python-build-system) #:prefix python:)
+          (guix build utils)))
+       ((#:phases phases #~%standard-phases)
+        #~(modify-phases #$phases
+            (add-after 'unpack 'fix-failing-tests
+              (lambda _
+                (substitute* "libpyclingo/clingo/tests/test_conf.py"
+                  (("ctl\\.solve\\(on_statistics=on_statistics\\)" all)
+                   (string-append
+                    all
+                    "; self.skipTest(\"You shall not fail.\")")))))
+            (add-after 'install 'install-distinfo
+              (lambda* (#:key inputs outputs #:allow-other-keys)
+                (with-directory-excursion (python:site-packages inputs outputs)
+                   (let ((dir (string-append "clingo-" #$version ".dist-info")))
+                     (mkdir-p dir)
+                     (call-with-output-file (string-append dir "/METADATA")
+                       (lambda (port)
+                         (format port "Metadata-Version: 1.1~%")
+                         (format port "Name: clingo~%")
+                         (format port "Version: ~a~%" #$version)))))))))))
+    (inputs (list clingo python-wrapper))
+    (propagated-inputs (list python-cffi))
+    (native-inputs (modify-inputs (package-native-inputs clingo)
+                     (prepend python-scikit-build)))
+    (synopsis "Python bindings for clingo")
+    (description "This package provides Python bindings to the clingo package,
+making it so that you can write @acronym{ASPs, Answer Set Programs} through
+Python code.")))
+
+(define-public python-clorm
+  (package
+   (name "python-clorm")
+   (version "1.4.1")
+   (source (origin
+            (method git-fetch)
+            (uri (git-reference
+                  (url "https://github.com/potassco/clorm")
+                  (commit (string-append "v" version))))
+            (file-name (git-file-name name version))
+            (sha256
+             (base32
+              "0jx99y71mrgdicn1da5dwz5nzgvvpabrikff783sg4shbv2cf0b5"))))
+   (build-system pyproject-build-system)
+   (arguments
+    (list #:phases
+          #~(modify-phases %standard-phases
+              (add-before 'check 'fix-breaking-tests
+                (lambda _
+                  ;; noclingo tests rely on this being set
+                  (setenv "CLORM_NOCLINGO" "1")
+                  (delete-file "tests/test_mypy_query.py")
+                  (substitute* "tests/test_clingo.py"
+                    (("self\\.assertTrue\\(os_called\\)" all)
+                     (string-append "# " all))))))))
+   (propagated-inputs (list python-clingo))
+   (native-inputs (list python-typing-extensions))
+   (home-page "https://potassco.org")
+   (synopsis "Object relational mapping to clingo")
+   (description "@acronym{Clorm, Clingo ORM} provides an @acronym{ORM,
+Object Relational Mapping} interface to the @acronym{ASP, answer set
+programming} solver clingo.  Its goal is to make integration of clingo
+into Python programs easier.")
+   (license license:expat)))
+
+(define-public python-telingo
+  (package
+    (name "python-telingo")
+    (version "2.1.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/potassco/telingo")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (patches (search-patches "python-telingo-fix-comparison.patch"))
+              (sha256
+               (base32
+                "0g3khxfdzc2hc7dkiyyqhb399h6h21m5wkp6wy8w71n0m32fiy53"))))
+    (build-system pyproject-build-system)
+    (propagated-inputs (list python-clingo))
+    (home-page "https://potassco.org/")
+    (synopsis "Solve dynamic temporal logic programs")
+    (description "This package provides a system to solve dynamic temporal
+logic programs based on clingo.")
+    (license license:expat)))
+
+(define-public python-clingraph
+  (package
+    (name "python-clingraph")
+    (version "1.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/potassco/clingraph")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0bdhli20nw9qnyxmpisgz7m97d7bwx6lbmxy9bgqvm6mipprnv3n"))))
+    (build-system pyproject-build-system)
+    (inputs (list dot2tex graphviz))
+    (propagated-inputs (list python-clingo
+                             python-clorm
+                             python-graphviz
+                             python-imageio
+                             python-jinja2
+                             python-jsonschema
+                             python-networkx))
+    (native-inputs (list dot2tex graphviz python-pylint python-pytest))
+    (home-page "https://github.com/potassco/clingraph")
+    (synopsis "Visualizer for graphs defined as logic programs")
+    (description
+     "This package provides a clingo-based visualizer for graphs defined
+as logic programs.")
+    (license license:expat)))
diff --git a/gnu/packages/pretty-print.scm b/gnu/packages/pretty-print.scm
index 416e5b90c2..58efb3237b 100644
--- a/gnu/packages/pretty-print.scm
+++ b/gnu/packages/pretty-print.scm
@@ -27,6 +27,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages pretty-print)
+  #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix licenses)
   #:use-module (guix git-download)
@@ -38,7 +39,9 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages bdw-gc)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages file)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gperf)
@@ -53,62 +56,61 @@
 (define-public a2ps
   (package
     (name "a2ps")
-    (version "4.14")
+    (version "4.15.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/a2ps/a2ps-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "195k78m1h03m961qn7jr120z815iyb93gwi159p1p9348lyqvbpk"))
+                "1izpmbk3i66g8cn1bd3kdpk72vxn5ggy329xjvag5jsdxgh823nh"))
               (modules '((guix build utils)))
               (snippet
                ;; Remove timestamp from the installed 'README' file.
-               '(begin
-                  (substitute* "etc/README.in"
-                    (("@date@")
-                     "1st of some month, sometime after 1970"))
-                  #t))
-              (patches (search-patches
-                        "a2ps-CVE-2001-1593.patch"
-                        "a2ps-CVE-2014-0466.patch"
-                        "a2ps-CVE-2015-8107.patch"))))
+               #~(begin
+                   (substitute* "etc/README.in"
+                     (("@date@")
+                      "1st of some month, sometime after 1970"))))))
     (build-system gnu-build-system)
-    (inputs
-     (list psutils gv))
-    (native-inputs
-     (list gperf groff perl))
     (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'patch-scripts
-           (lambda _
-             (substitute*
-                 '("afm/make_fonts_map.sh"
-                   "tests/defs"
-                   "tests/backup.tst"
-                   "tests/styles.tst")
-               (("/bin/rm") (which "rm")))))
-         (add-before 'check 'patch-test-files
-           ;; Alternatively, we could unpatch the shebangs in tstfiles
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((perl (assoc-ref inputs "perl")))
-               (substitute* '("tests/ps-ref/includeres.ps"
-                              "tests/gps-ref/includeres.ps")
-                 (("/usr/local/bin/perl")
-                  (string-append perl "/bin/perl"))))
-             ;; Some of the reference postscript contain a 'version 3'
-             ;; string that in inconsistent with the source text in the
-             ;; tstfiles directory.  Erroneous search-and-replace?
-             (substitute* '("tests/ps-ref/InsertBlock.ps"
-                            "tests/gps-ref/InsertBlock.ps"
-                            "tests/ps-ref/bookie.ps"
-                            "tests/gps-ref/bookie.ps")
-               (("version 3") "version 2"))
-             (substitute* '("tests/ps-ref/psmandup.ps"
-                            "tests/gps-ref/psmandup.ps")
-               (("#! */bin/sh") (string-append
-                                 "#!" (which "sh")))))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'skip-failing-tests
+            (lambda _
+              (substitute* (list "tests/Makefile.am" "tests/Makefile.in")
+                (("(encoding|prolog-2)\\.tst") ""))))
+          (add-before 'build 'patch-scripts
+            (lambda _
+              (substitute*
+                  '("afm/make_fonts_map.sh"
+                    "tests/defs"
+                    "tests/backup.tst"
+                    "tests/styles.tst")
+                (("/bin/rm") (which "rm")))))
+          (add-before 'check 'patch-test-files
+            ;; Alternatively, we could unpatch the shebangs in tst files.
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* '("tests/ps-ref/includeres.ps"
+                             "tests/gps-ref/includeres.ps")
+                (("/usr/local/bin/perl")
+                 (search-input-file inputs "/bin/perl")))
+              ;; Some of the reference postscript contain a 'version 3'
+              ;; string that in inconsistent with the source text in the
+              ;; tstfiles directory.  Erroneous search-and-replace?
+              (substitute* '("tests/ps-ref/InsertBlock.ps"
+                             "tests/gps-ref/InsertBlock.ps"
+                             "tests/ps-ref/bookie.ps"
+                             "tests/gps-ref/bookie.ps")
+                (("version 3") "version 2"))
+              (substitute* '("tests/ps-ref/psmandup.ps"
+                             "tests/gps-ref/psmandup.ps")
+                (("#! */bin/sh")
+                 (string-append "#!" (which "sh")))))))))
+    (native-inputs
+     (list gperf groff perl pkg-config))
+    (inputs
+     (list file gv libgc libpaper psutils))
     (home-page "https://www.gnu.org/software/a2ps/")
     (synopsis "Any file to PostScript, including pretty-printing")
     (description
@@ -116,7 +118,7 @@
 printing.  It accomplishes this by being able to delegate files to external
 handlers, such as Groff and Gzip.  It handles as many steps as is necessary to
 produce a pretty-printed file.  It also includes some extra abilities for
-special cases, such as pretty-printing \"--help\" output.")
+special cases, such as pretty-printing @samp{-help} output.")
     (license gpl3+)))
 
 (define-public trueprint
diff --git a/gnu/packages/protobuf.scm b/gnu/packages/protobuf.scm
index b580f8b2a7..82cf8f452d 100644
--- a/gnu/packages/protobuf.scm
+++ b/gnu/packages/protobuf.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017, 2018, 2019, 2022 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
@@ -49,6 +49,7 @@
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages rpc)
+  #:use-module (gnu packages rails)
   #:use-module (gnu packages ruby)
   #:use-module (srfi srfi-1))
 
@@ -512,7 +513,7 @@ source files.")
 (define-public ruby-protobuf
   (package
     (name "ruby-protobuf")
-    (version "3.10.3")
+    (version "3.10.7")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -521,7 +522,7 @@ source files.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1yzz7jgpp6qip5d6qhzbkf5gqaydfk3z3c1ngccwzp6w6wa75g8a"))))
+                "12hp1clg83jfl35x1h2ymzpj5w83wrnqw7hjfc6mqa8lsvpw535r"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
@@ -529,8 +530,7 @@ source files.")
          (add-after 'unpack 'do-not-use-bundler-for-tests
            (lambda _
              (substitute* "spec/spec_helper.rb"
-               (("Bundler\\.setup.*") ""))
-             #t))
+               (("Bundler\\.setup.*") ""))))
          (add-after 'unpack 'relax-version-requirements
            (lambda _
              (substitute* ((@@ (guix build ruby-build-system) first-gemspec))
@@ -539,33 +539,30 @@ source files.")
                (("\"rubocop\",.*")
                 "'rubocop'\n")
                (("\"parser\",.*")
-                "'parser'\n"))
-             #t))
+                "'parser'\n"))))
          (add-after 'unpack 'patch-protoc
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((protoc (assoc-ref inputs "protobuf")))
-               (substitute* "lib/protobuf/tasks/compile.rake"
-                 (("\"protoc\"")
-                  (string-append "\"" protoc "/bin/protoc" "\"")))
-               #t)))
+             (substitute* "lib/protobuf/tasks/compile.rake"
+               (("\"protoc\"")
+                (string-append "\"" (search-input-file inputs "bin/protoc")
+                               "\"")))))
          (add-after 'unpack 'skip-failing-test
            ;; See: https://github.com/ruby-protobuf/protobuf/issues/419
            (lambda _
              (substitute* "spec/lib/protobuf/rpc/connectors/ping_spec.rb"
                (("expect\\(::IO\\)\\.to receive\\(:select\\).*" all)
-                (string-append "        pending\n" all)))
-             #t))
+                (string-append "        pending\n" all)))))
          (add-after 'replace-git-ls-files 'replace-more-git-ls-files
            (lambda _
              (substitute* ((@@ (guix build ruby-build-system) first-gemspec))
                (("`git ls-files -- \\{test,spec,features\\}/*`")
                 "`find test spec features -type f | sort`")
                (("`git ls-files -- bin/*`")
-                "`find bin -type f | sort`"))
-             #t))
+                "`find bin -type f | sort`"))))
          (replace 'check
-           (lambda _
-             (invoke "rspec"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "rspec")))))))
     (native-inputs
      (list ruby-benchmark-ips
            ruby-ffi-rzmq
@@ -583,26 +580,12 @@ source files.")
     (inputs
      (list protobuf))
     (propagated-inputs
-     (list ruby-activesupport ruby-middleware ruby-thor ruby-thread-safe))
+     (list ruby-activesupport
+           ruby-middleware
+           ruby-thor
+           ruby-thread-safe))
     (home-page "https://github.com/ruby-protobuf/protobuf")
     (synopsis "Implementation of Google's Protocol Buffers in Ruby")
     (description "Protobuf is an implementation of Google's Protocol Buffers
 in pure Ruby.")
     (license license:expat)))
-
-;;; This is a modified ruby-protobuf package used by ruby-cucumber-messages
-;;; until https://github.com/ruby-protobuf/protobuf/pull/411 and
-;;; https://github.com/ruby-protobuf/protobuf/pull/415 are merged upstream.
-(define-public ruby-protobuf-cucumber
-  (hidden-package
-   (package
-     (inherit ruby-protobuf)
-     (name "ruby-protobuf-cucumber")
-     (version "3.10.8")
-     (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "protobuf-cucumber" version))
-        (sha256
-         (base32
-          "1rd6naabhpfb1i5dr6fp5mqwaawsx0mqm73h5ycwkgbm1n2si872")))))))
diff --git a/gnu/packages/python-check.scm b/gnu/packages/python-check.scm
index c3d7113459..8cf9e74f68 100644
--- a/gnu/packages/python-check.scm
+++ b/gnu/packages/python-check.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2019, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2019, 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019, 2021 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2020, 2022 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
@@ -945,13 +945,13 @@ in Pytest.")
 (define-public python-pytest-subtests
   (package
     (name "python-pytest-subtests")
-    (version "0.5.0")
+    (version "0.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-subtests" version))
        (sha256
-        (base32 "087i03nmkmfnrpc7mmizvr40ijnjw4lfxc22rnk8jk6s1szy9lav"))))
+        (base32 "05zvnxx0hdrd9w4z51qhchg3nkz5s47agryw68g8q7krq5kim5nr"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -961,8 +961,7 @@ in Pytest.")
              (when tests?
                (add-installed-pythonpath inputs outputs)
                (invoke "python" "-m" "pytest")))))))
-    (native-inputs
-     (list python-pytest python-setuptools-scm))
+    (native-inputs (list python-pytest-7.1 python-setuptools-scm))
     (home-page "https://github.com/pytest-dev/pytest-subtests")
     (synopsis "Unittest subTest() support and subtests fixture")
     (description "This Pytest plugin provides unittest @code{subTest()}
diff --git a/gnu/packages/python-compression.scm b/gnu/packages/python-compression.scm
index c483d68b5f..f3530e5230 100644
--- a/gnu/packages/python-compression.scm
+++ b/gnu/packages/python-compression.scm
@@ -342,20 +342,18 @@ Python strings.")
 (define-public python-lz4
   (package
     (name "python-lz4")
-    (version "4.0.2")
+    (version "4.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "lz4" version))
        (sha256
         (base32
-         "16vj2bnhhdkcz2a2ai2mx2kf9ngx1cjr18636yp1514kq9r72fq8"))
+         "1nmc36j5xnk7mvwwpm0nb1sddjk5iv77h877fdkkxcngm621shz1"))
        (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; Remove bundled copy of lz4.
-           (delete-file-recursively "lz4libs")
-           #t))))
+       (snippet '(begin
+                   ;; Remove bundled copy of lz4.
+                   (delete-file-recursively "lz4libs")))))
     (build-system python-build-system)
     (arguments
      (list #:phases
@@ -510,13 +508,13 @@ wrapper.  It provides a backport of the @code{Path} object.")
 (define-public python-zopfli
   (package
     (name "python-zopfli")
-    (version "0.2.1")
+    (version "0.2.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "zopfli" version ".zip"))
        (sha256
-        (base32 "1ipjkcgdbplsrhr31ypk48px8cax4cm9gcjj7yrcrhg20ql3s9p5"))))
+        (base32 "1z1akqx3fjnwa75insch9p08hafikqdvqkj6mxv1k6fr81sxnj9d"))))
     (build-system python-build-system)
     (arguments
      (list
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index 602768ae85..9cf5914337 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -24,7 +24,7 @@
 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
 ;;; Copyright © 2020 Justus Winter <justus@sequoia-pgp.org>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
-;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
 ;;;
@@ -60,6 +60,7 @@
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages password-utils)
+  #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-build)
@@ -465,17 +466,17 @@ for example, for recording or replaying web content.")
 is used by the Requests library to verify HTTPS requests.")
     (license license:asl2.0)))
 
-(define-public python-cryptography-vectors-next
+(define-public python-cryptography-vectors
   (package
     (name "python-cryptography-vectors")
-    (version "37.0.4")
+    (version "40.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cryptography_vectors" version))
        (sha256
         (base32
-         "1a1yi37ygw0jp72q280cmxd3qn9y9vmcch2bcnjkg2g2202l0qas"))))
+         "0hd0ppss5xg0kzf36q8cdaxh1xw8ry4k7jkianlf832xbdmp0q44"))))
     (build-system python-build-system)
     (home-page "https://github.com/pyca/cryptography")
     (synopsis "Test vectors for the cryptography package")
@@ -484,179 +485,127 @@ is used by the Requests library to verify HTTPS requests.")
     ;; Distributed under either BSD-3 or ASL2.0
     (license (list license:bsd-3 license:asl2.0))))
 
-(define-public python-cryptography-vectors
-  (package
-    (inherit python-cryptography-vectors-next)
-    (version "3.4.8")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "cryptography_vectors" version))
-              (sha256
-               (base32 "1wl0ynh3lzhc6q59g8mybvijmnp195x7fjxlb3h3sgcraw14312c"))))))
-
-(define-public python-cryptography-next
+(define-public python-cryptography
   (package
     (name "python-cryptography")
-    (version "37.0.4")
+    (version "40.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cryptography" version))
        (sha256
         (base32
-         "10haq7sn8mrdlhcfs791rczknnxm0wpww0lkpjzcqx141ryc3yb3"))))
-    (build-system python-build-system)
+         "0wilrilfcyl78caxcpna2k3aya6qamppwv4j35262pz9n7wg40r8"))))
+    (build-system pyproject-build-system)
     (arguments
      (list
-      #:imported-modules (append %cargo-build-system-modules
-                                 %python-build-system-modules)
-      #:modules `(((guix build cargo-build-system) #:prefix cargo:)
-                  ,@%python-build-system-modules
-                  (srfi srfi-1)
-                  (ice-9 match))
-      #:phases
-      #~(modify-phases (@ (guix build python-build-system) %standard-phases)
-          (add-after 'unpack 'adjust-pyo3-requirement
-            (lambda _
-              ;; The package depends on 0.15.2, which is not on crates.io(!?).
-              ;; Downgrade to 0.15.1...
-              (substitute* "src/rust/Cargo.toml"
-                (("pyo3 = \\{ version = \"0\\.15\\.2\"")
-                 "pyo3 = { version = \"0.15.1\""))))
-          (add-before 'build 'configure-cargo
-            (lambda* (#:key inputs #:allow-other-keys)
-              ;; Hide irrelevant inputs from cargo-build-system so it does
-              ;; not try to unpack sanity-check.py, etc.
-              (let ((cargo-inputs (filter (match-lambda
-                                            ((name . path)
-                                             (or (string-prefix? "rust-" name)
-                                                 (string=? "gcc" name))))
-                                          inputs)))
-                (with-directory-excursion "src/rust"
-                  ((assoc-ref cargo:%standard-phases 'unpack-rust-crates)
-                   #:inputs cargo-inputs
-                   #:vendor-dir "guix-vendor")
-                  ((assoc-ref cargo:%standard-phases 'configure)
-                   #:inputs cargo-inputs)
-                  ((assoc-ref cargo:%standard-phases 'patch-cargo-checksums)
-                   #:vendor-dir "guix-vendor"))
-                (rename-file "src/rust/.cargo" ".cargo"))))
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke "pytest" "-vv" "tests")))))))
-    (inputs
-     (list openssl
-           ;; TODO: Most of these inputs are transitive dependencies of
-           ;; the Rust requirements (see src/rust/cargo.toml).  Surely
-           ;; there is a better way than manually listing everything..?
-           rust-aliasable-0.1
-           rust-asn1-0.8
-           rust-asn1-derive-0.8
-           rust-autocfg-1
-           rust-base64-0.13
-           rust-bitflags-1
-           rust-cfg-if-0.1
-           rust-cfg-if-1
-           rust-chrono-0.4
-           rust-cloudabi-0.1
-           rust-lazy-static-1
-           rust-libc-0.2
-           rust-indoc-0.3
-           rust-indoc-impl-0.3
-           rust-inflector-0.11
-           rust-instant-0.1
-           rust-lock-api-0.4
-           rust-num-integer-0.1
-           rust-num-traits-0.2
-           rust-once-cell-1
-           rust-ouroboros-0.15
-           rust-ouroboros-macro-0.15
-           rust-parking-lot-0.11
-           rust-parking-lot-core-0.8
-           rust-paste-0.1
-           rust-paste-impl-0.1
-           rust-pem-1
-           rust-proc-macro-error-1
-           rust-proc-macro-error-attr-1
-           rust-proc-macro-hack-0.5
-           rust-proc-macro2-1
-           rust-pyo3-0.15
-           rust-pyo3-build-config-0.15
-           rust-pyo3-macros-0.15
-           rust-pyo3-macros-backend-0.15
-           rust-quote-1
-           rust-redox-syscall-0.2
-           rust-scopeguard-1
-           rust-smallvec-1
-           rust-stable-deref-trait-1
-           rust-syn-1
-           rust-unicode-xid-0.2
-           rust-unindent-0.1
-           rust-version-check-0.9
-           rust-winapi-0.3))
-    (propagated-inputs
-     (list python-asn1crypto python-cffi python-six python-idna
-           python-iso8601))
+      #:phases #~(modify-phases %standard-phases
+                   (add-after 'unpack 'disable-rust-extension-build
+                     (lambda _
+                       ;; The Rust extension is built separately as
+                       ;; 'python-cryptography-rust', so there's no need
+                       ;; to build it here.
+                       (substitute* "pyproject.toml"
+                         ((".*setuptools-rust.*") ""))
+                       (delete-file "setup.py")))
+                   (add-before 'check 'symlink-rust-library
+                     (lambda* (#:key inputs outputs #:allow-other-keys)
+                       (symlink (search-input-file
+                                 inputs "lib/libcryptography_rust.so")
+                                (string-append (site-packages inputs outputs)
+                                               "/cryptography/hazmat/bindings/"
+                                               "_rust.abi3.so")))))))
+
     (native-inputs
-     (list python-cryptography-vectors-next
+     (list python-cryptography-vectors
            python-hypothesis
+           python-iso8601
            python-pretend
-           python-pytz
-           python-pytest
+           python-pytest-7.1            ;for subtests
            python-pytest-benchmark
-           python-pytest-subtests
-           python-setuptools-rust
-           rust
-           `(,rust "cargo")))
+           python-pytest-subtests))
+    (inputs (list python-cryptography-rust))
+    (propagated-inputs (list python-cffi))
     (home-page "https://github.com/pyca/cryptography")
     (synopsis "Cryptographic recipes and primitives for Python")
     (description
-      "cryptography is a package which provides cryptographic recipes and
-primitives to Python developers.  It aims to be the “cryptographic standard
-library” for Python.  The package includes both high level recipes, and low
-level interfaces to common cryptographic algorithms such as symmetric ciphers,
-message digests and key derivation functions.")
+     "@code{cryptography} is a package which provides cryptographic recipes
+and primitives to Python developers.  It aims to be the “cryptographic
+standard library” for Python.  The package includes both high level recipes,
+and low level interfaces to common cryptographic algorithms such as symmetric
+ciphers, message digests and key derivation functions.")
     ;; Distributed under either BSD-3 or ASL2.0
     (license (list license:bsd-3 license:asl2.0))))
 
-(define-public python-cryptography
+;;; This is the Rust component of the python-cryptography library, extracted
+;;; as a separate package to ease the Rust build.
+(define-public python-cryptography-rust
   (package
-    (inherit python-cryptography-next)
-    (version "3.4.8")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "cryptography" version))
-              (sha256
-               (base32 "072awar70cwfd2hnx0pvp1dkc7gw45mbm3wcyddvxz5frva5xk4l"))))
+    (inherit python-cryptography)
+    (name "python-cryptography-rust")
+    (build-system cargo-build-system)
     (arguments
-     (list #:phases
-           #~(modify-phases %standard-phases
-               (add-after 'unpack 'set-no-rust
-                 (lambda _
-                   (setenv "CRYPTOGRAPHY_DONT_BUILD_RUST" "1"))))))
-    (inputs (list openssl-1.1))
-    (native-inputs
-     (list python-cryptography-vectors
-           python-hypothesis
-           python-pretend
-           python-pytz
-           python-pytest
-           python-setuptools-rust))))
+     (list
+      #:modules '((guix build cargo-build-system)
+                  (guix build utils)
+                  (srfi srfi-1)
+                  (ice-9 match))
+      ;; XXX: Building the test objects appear to fail due to a missing link
+      ;; directive to Python's shared library (e.g.: "ld:
+      ;; cryptography_rust.c950d742-cgu.11:(.text._ZN3...+0x57): undefined
+      ;; reference to `PyLong_FromLong'").
+      #:tests? #f
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'chdir
+            (lambda _
+              (chdir "src/rust")))
+          (replace 'unpack-rust-crates
+            ;; This is to avoid the non-crate source from being erroneously
+            ;; unpacked by this phase, causing an error.
+            (lambda* (#:key inputs #:allow-other-keys #:rest args)
+              (apply (assoc-ref %standard-phases 'unpack-rust-crates)
+                     (append args
+                             (list #:inputs (alist-delete "source" inputs))))))
+          (replace 'configure
+            (lambda* (#:key inputs #:allow-other-keys #:rest args)
+              (apply (assoc-ref %standard-phases 'configure)
+                     (append args
+                             (list #:inputs (alist-delete "source" inputs))))))
+          (add-after 'install 'install-shared-library
+            (lambda _
+              (install-file "target/release/libcryptography_rust.so"
+                            (string-append #$output "/lib")))))
+      #:cargo-inputs
+      `(("rust-asn1-0.13" ,rust-asn1-0.13)
+        ("rust-chrono-0.4" ,rust-chrono-0.4)
+        ("rust-foreign-types-shared-0.1" ,rust-foreign-types-shared-0.1)
+        ("rust-once-cell-1" ,rust-once-cell-1)
+        ("rust-openssl-0.10" ,rust-openssl-0.10)
+        ("rust-openssl-sys-0.9" ,rust-openssl-sys-0.9)
+        ("rust-ouroboros-0.15" ,rust-ouroboros-0.15)
+        ("rust-pem-1" ,rust-pem-1)
+        ("rust-pyo3-0.15" ,rust-pyo3-0.15))
+      #:cargo-development-inputs
+      `(("rust-cc" ,rust-cc-1))))
+    (native-inputs (list pkg-config python python-cffi))
+    ;; XXX: Adding rust-openssl-sys-0.9 is needed because #:cargo-inputs
+    ;; doesn't honor propagated-inputs.
+    (inputs (list python rust-openssl-sys-0.9))
+    (propagated-inputs '())
+    (synopsis "Core implementation of the Cryptography Python library")))
 
-;; This is the last version which is compatable with python-cryptography < 35.
 (define-public python-pyopenssl
   (package
     (name "python-pyopenssl")
-    (version "21.0.0")
+    (version "23.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyOpenSSL" version))
        (sha256
         (base32
-         "1cqcc20fwl521z3fxsc1c98gbnhb14q55vrvjfp6bn6h8rg8qbay"))
-       (patches (search-patches "python2-pyopenssl-openssl-compat.patch"))))
+         "1dxhip610zw1j2bz35g1w1h7vh374g0bnzn4nsqj65n6pswrh544"))))
     (build-system python-build-system)
     (arguments
      (list
@@ -668,7 +617,7 @@ message digests and key derivation functions.")
                 ;; PyOpenSSL runs tests against a certificate with a fixed
                 ;; expiry time.  To ensure successful builds in the future,
                 ;; set the time to roughly the release date.
-                (invoke "faketime" "2022-02-01" "py.test" "-v" "-k"
+                (invoke "faketime" "2023-03-25" "pytest" "-vv" "-k"
                         (string-append
                          ;; This test tries to look up certificates from
                          ;; the compiled-in default path in OpenSSL, which
@@ -680,17 +629,13 @@ message digests and key derivation functions.")
                          ;; Fails on i686-linux and possibly other 32-bit platforms
                          ;; https://github.com/pyca/pyopenssl/issues/974
                          "and not test_verify_with_time"))))))))
-    (propagated-inputs
-     (list python-cryptography python-six))
-    (inputs
-     (list openssl))
-    (native-inputs
-     (list libfaketime python-flaky python-pretend python-pytest))
+    (propagated-inputs (list python-cryptography))
+    (inputs (list openssl))
+    (native-inputs (list libfaketime python-flaky python-pretend python-pytest))
     (home-page "https://github.com/pyca/pyopenssl")
     (synopsis "Python wrapper module around the OpenSSL library")
-    (description
-      "PyOpenSSL is a high-level wrapper around a subset of the OpenSSL
-library.")
+    (description "PyOpenSSL is a high-level wrapper around a subset of the
+OpenSSL library.")
     (license license:asl2.0)))
 
 (define-public python-ed25519
@@ -1232,18 +1177,17 @@ derivation function.")
 (define-public python-service-identity
   (package
     (name "python-service-identity")
-    (version "18.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "service_identity" version))
-       (sha256
-        (base32
-         "0b9f5qiqjy8ralzgwjgkhx82h6h8sa7532psmb8mkd65md5aan08"))))
-    (build-system python-build-system)
-    (propagated-inputs
-     (list python-attrs python-pyasn1 python-pyasn1-modules
-           python-pyopenssl))
+    (version "21.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "service-identity" version))
+              (sha256
+               (base32
+                "0d4x84crbz0a17d8gi90z6zlxwm9pslc65rx0cdw2797ra360v3f"))))
+    (build-system pyproject-build-system)
+    (native-inputs (list python-idna python-pytest))
+    (propagated-inputs (list python-attrs python-cryptography python-pyasn1
+                             python-pyasn1-modules python-six))
     (home-page "https://service-identity.readthedocs.io/")
     (synopsis "Service identity verification for PyOpenSSL")
     (description
@@ -1444,21 +1388,14 @@ items and collections, editing items, locking and unlocking collections
 (define-public python-trustme
   (package
     (name "python-trustme")
-    (version "0.6.0")
+    (version "0.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "trustme" version))
        (sha256
-        (base32 "0v3vr5z6apnfmklf07m45kv5kaqvm6hxrkaqywch57bjd2siiywx"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             (invoke "pytest" "-vv"))))))
+        (base32 "0v2qzszmyazfgc1snicdr4b4qdajpjd4pbinpgrn9vfff0yv41sy"))))
+    (build-system pyproject-build-system)
     (native-inputs
      (list python-more-itertools
            python-pyopenssl
@@ -1467,7 +1404,9 @@ items and collections, editing items, locking and unlocking collections
            python-service-identity
            python-zipp))
     (propagated-inputs
-     (list python-cryptography))
+     (list python-cryptography
+           python-idna
+           python-ipaddress))
     (home-page "https://github.com/python-trio/trustme")
     (synopsis "Fake a certificate authority for tests")
     (description
diff --git a/gnu/packages/python-science.scm b/gnu/packages/python-science.scm
index 37beb5ed61..c0a1c4794f 100644
--- a/gnu/packages/python-science.scm
+++ b/gnu/packages/python-science.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2020, 2021, 2022, 2023 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
@@ -158,6 +158,57 @@ the SciPy stack.  It provides many user-friendly and efficient numerical
 routines such as routines for numerical integration and optimization.")
     (license license:bsd-3)))
 
+(define-public python-scikit-allel
+  (package
+    (name "python-scikit-allel")
+    (version "1.3.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "scikit-allel" version))
+       (sha256
+        (base32 "1vg88ng6gd175gzk39iz1drxig5l91dyx398w2kbw3w8036zv8gj"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:test-flags
+      '(list "-k"
+             (string-append
+              ;; AttributeError: 'Dataset' object has no attribute 'asstr'
+              "not test_vcf_to_hdf5"
+              " and not test_vcf_to_hdf5_exclude"
+              " and not test_vcf_to_hdf5_rename"
+              " and not test_vcf_to_hdf5_group"
+              " and not test_vcf_to_hdf5_ann"
+              ;; Does not work with recent hmmlearn
+              " and not test_roh_mhmm_0pct"
+              " and not test_roh_mhmm_100pct"))
+      #:phases
+      '(modify-phases %standard-phases
+         (add-before 'check 'build-ext
+           (lambda _
+             (invoke "python" "setup.py" "build_ext" "--inplace"))))))
+    (propagated-inputs
+     (list python-dask
+           python-numpy))
+    (native-inputs
+     (list python-cython
+           ;; The following are all needed for the tests
+           htslib
+           python-h5py
+           python-hmmlearn
+           python-numexpr
+           python-pytest
+           python-scipy
+           python-setuptools-scm
+           python-zarr))
+    (home-page "https://github.com/cggh/scikit-allel")
+    (synopsis "Explore and analyze genetic variation data")
+    (description
+     "This package provides utilities for exploratory analysis of large scale
+genetic variation data.")
+    (license license:expat)))
+
 (define-public python-scikit-fuzzy
   (package
     (name "python-scikit-fuzzy")
@@ -234,53 +285,33 @@ logic, also known as grey logic.")
      "Scikit-image is a collection of algorithms for image processing.")
     (license license:bsd-3)))
 
-(define-public python-scikit-allel
+(define-public python-scikit-optimize
   (package
-    (name "python-scikit-allel")
-    (version "1.3.5")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "scikit-allel" version))
-        (sha256
-         (base32 "1vg88ng6gd175gzk39iz1drxig5l91dyx398w2kbw3w8036zv8gj"))))
-    (build-system python-build-system)
-    (arguments
-     (list
-       #:phases
-       #~(modify-phases %standard-phases
-           (replace 'check
-             (lambda* (#:key tests? #:allow-other-keys)
-               (when tests?
-                 (invoke "python" "setup.py" "build_ext" "--inplace")
-                 (invoke "python" "-m" "pytest" "-v" "allel"
-                         ;; AttributeError: 'Dataset' object has no attribute 'asstr'
-                         "-k" (string-append
-                                "not test_vcf_to_hdf5"
-                                " and not test_vcf_to_hdf5_exclude"
-                                " and not test_vcf_to_hdf5_rename"
-                                " and not test_vcf_to_hdf5_group"
-                                " and not test_vcf_to_hdf5_ann"))))))))
+    (name "python-scikit-optimize")
+    (version "0.9.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "scikit-optimize" version))
+              (sha256
+               (base32
+                "0230ya8bwrzxjwcy2vz23a3hg6caggnnmg2vq1f9zz2797kckn3p"))))
+    (build-system pyproject-build-system)
     (propagated-inputs
-     (list python-dask
-           python-numpy))
+     (list python-joblib
+           python-matplotlib
+           python-numpy
+           python-pyaml
+           python-scikit-learn
+           python-scipy))
     (native-inputs
-     (list python-cython
-           ;; The following are all needed for the tests
-           htslib
-           python-h5py
-           python-hmmlearn
-           python-numexpr
-           python-pytest
-           python-scipy
-           python-setuptools-scm
-           python-zarr))
-    (home-page "https://github.com/cggh/scikit-allel")
-    (synopsis "Explore and analyze genetic variation data")
-    (description
-     "This package provides utilities for exploratory analysis of large scale
-genetic variation data.")
-    (license license:expat)))
+     (list python-pytest))
+    (home-page "https://scikit-optimize.github.io/")
+    (synopsis "Sequential model-based optimization toolbox")
+    (description "Scikit-Optimize, or @code{skopt}, is a simple and efficient
+library to minimize (very) expensive and noisy black-box functions.  It
+implements several methods for sequential model-based optimization.
+@code{skopt} aims to be accessible and easy to use in many contexts.")
+    (license license:bsd-3)))
 
 (define-public python-trimesh
   (package
@@ -1677,6 +1708,50 @@ Out-of-Core DataFrames (similar to Pandas), to visualize and explore big
 tabular datasets.  This package provides the core modules of Vaex.")
     (license license:expat)))
 
+(define-public python-pylems
+  (package
+    (name "python-pylems")
+    (version "0.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "PyLEMS" version))
+              (sha256
+               (base32
+                "074azbyivjbwi61fs5p8z9n6d8nk8xw6fmln1www13z1dccb3740"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-lxml))
+    (home-page "https://github.com/LEMS/pylems")
+    (synopsis
+     "Python support for the Low Entropy Model Specification language (LEMS)")
+    (description
+     "A LEMS simulator written in Python which can be used to run
+NeuroML2 models.")
+    (license license:lgpl3)))
+
+(define-public python-libneuroml
+  (package
+    (name "python-libneuroml")
+    (version "0.4.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/NeuralEnsemble/libNeuroML.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0mrm4rd6x1sm6hkvhk20mkqp9q53sl3lbvq6hqzyymkw1iqq6bhy"))))
+    (build-system pyproject-build-system)
+    (propagated-inputs (list python-lxml python-six))
+    (native-inputs (list python-pytest python-numpy python-tables))
+    (home-page "https://libneuroml.readthedocs.org/en/latest/")
+    (synopsis
+     "Python library for working with NeuroML descriptions of neuronal models")
+    (description
+     "This package provides a Python library for working with NeuroML descriptions of
+neuronal models")
+    (license license:bsd-3)))
+    
 ;;;
 ;;; Avoid adding new packages to the end of this file. To reduce the chances
 ;;; of a merge conflict, place them above by existing packages with similar
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index bb36591a54..c7ccdcd5af 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -26,7 +26,7 @@
 ;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org>
 ;;; Copyright © 2018, 2019, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
-;;; Copyright © 2018, 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2018, 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Vagrant Cascadian <vagrant@debian.org>
 ;;; Copyright © 2019 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
@@ -49,7 +49,7 @@
 ;;; Copyright © 2021 Alice Brenon <alice.brenon@ens-lyon.fr>
 ;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
 ;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
-;;; Copyright © 2022 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2022, 2023 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2022 Peter Polidoro <peter@polidoro.io>
 ;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
 ;;; Copyright © 2022 Luis Henrique Gomes Higino <luishenriquegh2701@gmail.com>
@@ -570,6 +570,87 @@ communicate with each other, and positioned as an asynchronous successor to
 WSGI.  This package includes libraries for implementing ASGI servers.")
     (license license:bsd-3)))
 
+(define-public python-asgi-csrf
+  (package
+    (name "python-asgi-csrf")
+    (version "0.9")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/simonw/asgi-csrf")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1j134mjh0ff61rvkm3q67m463j1bhyxc9dwsdany3scnd4vsqqws"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list #:test-flags
+           ;; Provide a null config to avoid the extraneous dependency on
+           ;; python-pytest-coverage.
+           #~(list "-c" "/dev/null"
+                   ;; Disable two failing tests (see:
+                   ;; https://github.com/simonw/asgi-csrf/issues/24).
+                   "-k" (string-append
+                         "not (test_multipart "
+                         "or test_multipart_failure_wrong_token)"))))
+    (propagated-inputs (list python-itsdangerous python-multipart))
+    (native-inputs (list python-asgi-lifespan
+                         python-httpx
+                         python-pytest
+                         python-pytest-asyncio
+                         python-starlette))
+    (home-page "https://github.com/simonw/asgi-csrf")
+    (synopsis "ASGI middleware for protecting against CSRF attacks")
+    (description "This Asynchronous Server Gateway Interface (ASGI)
+middleware protects against Cross-site request forgery (CSRF) attacks.
+It implements the Double Submit Cookie pattern, where a cookie is set
+that is then compared to a @code{csrftoken} hidden form field or a
+@code{x-csrftoken} HTTP header.")
+    (license license:asl2.0)))
+
+(define-public python-asgi-lifespan
+  (package
+    (name "python-asgi-lifespan")
+    (version "1.0.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/florimondmanca/asgi-lifespan")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "10a5ci9ddr8wnjf3wai7xifbbplirhyrgvw4p28q0ha63cvhb2j2"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:test-flags
+      '(list "-c" "/dev/null"           ;ignore coverage-related options
+             "-k"
+             (string-append
+              ;; XXX: Some tests fail because of a 'lifespan.shutdown.failed'
+              ;; extra event, perhaps because our version of trio is older.
+              "not (test_lifespan_manager[asyncio-None-ValueError-None]"
+              " or test_lifespan_manager[asyncio-ValueError-None-None]"
+              " or test_lifespan_manager[asyncio-ValueError-ValueError-None]"
+              " or test_lifespan_manager[trio-None-ValueError-None]"
+              " or test_lifespan_manager[trio-ValueError-None-None]"
+              " or test_lifespan_manager[trio-ValueError-ValueError-None])"))))
+    (native-inputs (list python-pytest
+                         python-pytest-asyncio
+                         python-pytest-trio
+                         python-starlette))
+    (propagated-inputs (list python-sniffio))
+    (home-page "https://github.com/florimondmanca/asgi-lifespan")
+    (synopsis "Programmatic startup/shutdown of ASGI apps")
+    (description "Programmatically send startup/shutdown lifespan events
+into Asynchronous Server Gateway Interface (ASGI) applications.  When
+used in combination with an ASGI-capable HTTP client such as HTTPX, this
+allows mocking or testing ASGI applications without having to spin up an
+ASGI server.")
+    (license license:expat)))
+
 (define-public python-css-html-js-minify
   (package
     (name "python-css-html-js-minify")
@@ -3684,13 +3765,13 @@ for the basic TCP/IP protocols.")
 (define-public python-geventhttpclient
   (package
     (name "python-geventhttpclient")
-    (version "1.5.3")
+    (version "2.0.9")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "geventhttpclient" version))
               (sha256
                (base32
-                "104p14p67xa5gch8dy2zqmzmjra31fflk1c1alrry8dp8bzwj3nq"))
+                "04qmcc7qpnif70ph61339dcld4g107fkhpa0gdmbs8z98v9kkg4a"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -3713,15 +3794,14 @@ for the basic TCP/IP protocols.")
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
-               (invoke "pytest"  "src/geventhttpclient/tests" "-v"
+               (invoke "pytest" "src/geventhttpclient/tests" "-v"
                        ;; Append the test modules to sys.path to avoid
                        ;; namespace conflict which breaks SSL tests.
                        "--import-mode=append")))))))
-    (native-inputs
-     (list python-dpkt python-pytest))
-    (propagated-inputs
-     (list python-brotli python-certifi python-gevent python-six))
-    (home-page "https://github.com/gwik/geventhttpclient")
+    (native-inputs (list python-dpkt python-pytest))
+    (propagated-inputs (list python-brotli python-certifi python-gevent
+                             python-six python-urllib3))
+    (home-page "https://github.com/geventhttpclient/geventhttpclient")
     (synopsis "HTTP client library for gevent")
     (description "@code{python-geventhttpclient} is a high performance,
 concurrent HTTP client library for python using @code{gevent}.")
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index ae20f48ac6..e77b16a007 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -58,7 +58,7 @@
 ;;; Copyright © 2015, 2018 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2019 Sam <smbaines8@gmail.com>
-;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
+;;; Copyright © 2019, 2023 Jack Hill <jackhill@jackhill.us>
 ;;; Copyright © 2019, 2020, 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2019, 2020, 2021, 2022 Pierre Langlois <pierre.langlois@gmx.com>
@@ -968,7 +968,7 @@ Markdown.  All extensions are found under the module namespace of pymdownx.")
                 "0rv0cbala7ibjbaf6kkcn0mdhqdbajnvlcw0f15gwzfwg10g0z1q"))))
     (build-system python-build-system)
     (native-inputs
-     (list python-pytest
+     (list python-pytest-7.1            ;for pytest-subtests
            python-pytest-cov
            python-pytest-mpl
            python-pytest-subtests
@@ -1737,7 +1737,7 @@ variable bit length encoding, you may find this module useful.")
 (define-public python-boolean.py
   (package
     (name "python-boolean.py")
-    (version "3.6")
+    (version "4.0")
     (source
      (origin
        ;; There's no source tarball on PyPI.
@@ -1747,7 +1747,7 @@ variable bit length encoding, you may find this module useful.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
+        (base32 "1s4mrgqf1phwvda81dpnlkdadcbjgpl8mjvmc1yjlrp1c368v9lb"))))
     (build-system python-build-system)
     (home-page "https://github.com/bastikr/boolean.py")
     (synopsis "Boolean algebra in one Python module")
@@ -1760,6 +1760,51 @@ compositions like @code{XOR} and @code{NAND} are emulated on top of them.
 Expressions are constructed from parsed strings or directly in Python.")
     (license license:bsd-2)))
 
+(define-public python-hatchling
+  (package
+    (name "python-hatchling")
+    (version "1.13.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "hatchling" version))
+              (sha256
+               (base32
+                "1isk1kqra0sm2sj2yp39sgk62mx0bp1jnbkwdcl3a1vjrji7blpq"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:tests? #false ;there are none
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'do-not-depend-on-hatchling
+            (lambda _
+              ;; We don't use hatchling.
+              (delete-file "pyproject.toml")
+              (call-with-output-file "pyproject.toml"
+                (lambda (port)
+                  (format port "\
+[build-system]
+build-backend = 'setuptools.build_meta'
+requires = ['setuptools']
+")))
+              (call-with-output-file "setup.cfg"
+                (lambda (port)
+                  (format port "\
+[metadata]
+name = hatchling
+version = '~a' " #$version))))))))
+    (propagated-inputs
+     (list python-editables
+           python-importlib-metadata
+           python-packaging
+           python-pathspec
+           python-pluggy
+           python-tomli))
+    (home-page "https://pypi.org/project/hatchling/")
+    (synopsis "Extensible Python build backend")
+    (description "Hatchling is an extensible Python build backend.")
+    (license license:expat)))
+
 (define-public python-hdf4
   (package
    (name "python-hdf4")
@@ -1823,14 +1868,14 @@ library.")
 (define-public python-h5py
   (package
     (name "python-h5py")
-    (version "3.6.0")
+    (version "3.8.0")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "h5py" version))
       (sha256
        (base32
-        "0afv805vqrm5071g7alwv41920nhh8kjv4m5nbia9awj9a0x4ll7"))))
+        "0pyr6z4h2xqbp49yx2i1401gl6yqh03h771zslwcy0201hpxiskg"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f ; no test target
@@ -2094,14 +2139,16 @@ and lookups.")
 (define-public python-license-expression
   (package
     (name "python-license-expression")
-    (version "1.2")
+    (version "30.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "license-expression" version))
        (sha256
-        (base32 "1g0sgphss8hbi1rpl4avy1nmbixmy9v194xdbvkjgl90vzgy2q3r"))))
-    (build-system python-build-system)
+        (base32 "0lvshl2fhwa568d3y3vmx45hdp8gk5w9yl3b2q5d66r5vqn1sfwl"))))
+    (build-system pyproject-build-system)
+    (native-inputs
+     (list python-setuptools-scm python-pytest))
     (propagated-inputs
      (list python-boolean.py))
     (home-page "https://github.com/nexB/license-expression")
@@ -2851,6 +2898,84 @@ from @code{lxml}.  It aims to provide a low memory, compatible implementation
 of @code{xmlfile}.")
     (license license:expat)))
 
+(define-public python-omero-py
+  (package
+    (name "python-omero-py")
+    (version "5.13.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ome/omero-py")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0n94v5dpmh873hjqd9k9ky85iab4xh37ibmi13rqpclv01ibvvxa"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:test-flags
+      '(list "-m" "not broken" "-rf" "test" "-s"
+             ;; TestImport tries to download Java things; TestSessions
+             ;; and TestBuildQuery require networking.
+             "-k" "not TestImport and not TestSessions and not TestBuildQuery")
+      #:modules '((guix build pyproject-build-system)
+                  (guix build utils)
+                  (ice-9 match)
+                  (srfi srfi-1)
+                  (srfi srfi-26))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'find-artifacts
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let ((zip-file
+                     (match inputs
+                       (((labels . files) ...)
+                        (find (cut string-suffix? "omero-blitz-5.5.5-python.zip" <>)
+                              files)))))
+                (setenv "ZIP_FILE"
+                        (or zip-file (error "failed to find artifact file"))))))
+          ;; Some tests need this, such as TestTempFileManager
+          (add-after 'build 'set-HOME
+            (lambda _ (setenv "HOME" "/tmp")))
+          ;; The sanity check mistakes omero_model_TypeAnnotationI.py for a
+          ;; module to load.
+          (delete 'sanity-check)
+          ;; The argument parser is picky and interprets the "-real" part as
+          ;; the first argument.
+          (add-after 'wrap 'rename-executable
+            (lambda _
+              (with-directory-excursion (string-append #$output "/bin")
+                (rename-file ".omero-real" ".omero")
+                (substitute* "omero"
+                  (("bin/.omero-real") "bin/.omero"))))))))
+    (propagated-inputs
+     (list python-appdirs
+           python-future
+           python-numpy
+           python-pillow
+           python-pyyaml
+           python-requests
+           python-tables
+           python-zeroc-ice-3.6))
+    (native-inputs
+     (list python-mox3
+           python-pytest
+           python-pytest-rerunfailures
+           python-pytest-xdist
+           unzip
+           (origin
+             (method url-fetch)
+             (uri "https://artifacts.openmicroscopy.org/artifactory/\
+ome.releases/org/openmicroscopy/omero-blitz/5.5.5/omero-blitz-5.5.5-python.zip")
+             (sha256
+              (base32 "0wyja1zv19c1r3m31gsp555jzj3cg2v2pl00zlybpw3qd36yffwc")))))
+    (home-page "https://github.com/ome/omero-py")
+    (synopsis "Python bindings to the OMERO.blitz server")
+    (description "This package provides Python bindings to the OMERO.blitz
+server.")
+    (license license:gpl2)))
+
 (define-public python-openpyxl
   (package
     (name "python-openpyxl")
@@ -3422,7 +3547,7 @@ and is not compatible with JSON.")
 (define-public python-exceptiongroup
   (package
     (name "python-exceptiongroup")
-    (version "1.0.0rc8")
+    (version "1.1.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3431,7 +3556,7 @@ and is not compatible with JSON.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0xsbpv22n51p6yvyvz231mf8zhbi1i88b4zmacaxxx31zrq5ifv4"))))
+                "0wcvzwgjs0xmggs6dh92jxdqi988gafzh10hrzvw10kasy0xakfj"))))
     (build-system python-build-system)
     (arguments
      (list
@@ -3839,6 +3964,28 @@ with sensible defaults out of the box.")
         (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
     (arguments `())))
 
+(define-public python-clickgen
+  (package
+    (name "python-clickgen")
+    (version "2.1.3")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "clickgen" version))
+              (sha256
+               (base32
+                "010j9zz0gd2za5l4hibicypnfw721x0gxp3rr0329bc97vw5maha"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     (list python-pillow python-toml python-numpy-next python-attrs))
+    (inputs (list libx11 libpng libxcursor))
+    (native-inputs (list python-wheel))
+    (home-page "https://github.com/ful1e5/clickgen")
+    (synopsis "The hassle-free cursor building toolbox")
+    (description
+     "Clickgen is an API for building X11 and Windows cursors from .png files.
+clickgen is using @code{anicursorgen} and @code{xcursorgen} under the hood.")
+    (license license:expat)))
+
 (define-public python-cligj
   (package
     (name "python-cligj")
@@ -8049,32 +8196,73 @@ converting, and viewing many of the proprietary file formats used to store
 experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
     (license license:bsd-3)))
 
+(define-public python-imageio-ffmpeg
+  (package
+   (name "python-imageio-ffmpeg")
+   (version "0.4.8")
+   (source (origin
+            (method url-fetch)
+            (uri (pypi-uri "imageio-ffmpeg" version))
+            (sha256
+             (base32
+              "1a8as5c42s8yl79gc2nhj6vvkwr81p5ibxp5m1zhn1zy22nhbapx"))))
+   (arguments
+    (list #:phases
+          #~(modify-phases %standard-phases
+              (add-after 'unpack 'hardcode-ffmpeg
+                (lambda* (#:key inputs #:allow-other-keys)
+                  (substitute* "imageio_ffmpeg/_utils.py"
+                    (("os\\.getenv\\(\"IMAGEIO_FFMPEG_EXE\".*\\)" all)
+                     (string-append "(" all " or \""
+                                    (search-input-file inputs "bin/ffmpeg")
+                                    "\")"))))))))
+   (inputs (list ffmpeg-4))
+   (build-system python-build-system)
+   (home-page "https://github.com/imageio/imageio-ffmpeg")
+   (synopsis "FFMPEG wrapper for Python")
+   (description "This package provides an FFMPEG wrapper for working with video
+files.  It implements generator functions for reading and writing data to and
+from FFMPEG, reliably terminating the process when done.")
+   (license license:bsd-2)))
+
 (define-public python-imageio
   (package
     (name "python-imageio")
-    (version "2.8.0")
+    (version "2.26.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "imageio" version))
        (sha256
         (base32
-         "1ksjl523fm0fikrd85llxfba35rc1qsgwadgr6mbn9kis79xcpzv"))))
-    (build-system python-build-system)
+         "0dgddhi5dlpry5j4d3256v09pcziyj3ii47yx0zi68xprm11d7qn"))))
+    (build-system pyproject-build-system)
     (arguments
-     `(#:tests? #f ; many tests require online data
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key outputs inputs tests? #:allow-other-keys)
-             (if tests?
-                 (begin
-                   ;; Make installed package available for running the tests.
-                   (add-installed-pythonpath inputs outputs)
-                   (invoke "pytest" "-vv"))
-                 #t))))))
+     (list
+      #:test-flags #~(list "-m" "not needs_internet")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-source
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "imageio/plugins/_freeimage.py"
+                (("os\\.getenv\\(\"IMAGEIO_FREEIMAGE_LIB\".*\\)" all)
+                 (string-append
+                  "(" all " or \""
+                  (search-input-file inputs "lib/libfreeimage.so")
+                  "\")")))
+              (substitute* "imageio/core/util.py"
+                (("\"/var/tmp\"")
+                 "os.getenv(\"TMPDIR\", \"/tmp\")"))))
+          (add-after 'unpack 'fix-failing-tests
+            (lambda _
+              (substitute* "tests/test_core.py"
+                (("(core\\.load_lib)\\((\\[gllib\\], \\[\\])\\)"
+                  all fun args)
+                 (string-append "raises(ValueError, " fun ", " args ")")))
+              (delete-file "tests/test_freeimage.py"))))))
+    (inputs (list freeimage))
     (propagated-inputs
-     (list python-numpy python-pillow python-psutil))
+     (list python-imageio-ffmpeg python-numpy python-pillow python-psutil))
     (native-inputs
      (list python-pytest))
     (home-page "https://imageio.github.io/")
@@ -9296,6 +9484,24 @@ is a distinct layer on top of traitlets, so you can use traitlets in your code
 without using the configuration machinery.")
     (license license:bsd-3)))
 
+(define-public python-treelib
+  (package
+    (name "python-treelib")
+    (version "1.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "treelib" version))
+              (sha256
+               (base32
+                "1247rv9fbb8pw3xbkbz04q3vnvvva3hcw002gp1clp5psargzgqw"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-future))
+    (home-page "https://github.com/caesar0301/treelib")
+    (synopsis "Implementation of a tree structure in Python")
+    (description
+     "This package provides a Python implementation of a tree structure.")
+    (license license:asl2.0)))
+
 (define-public python-jupyter-core
   (package
     (name "python-jupyter-core")
@@ -11995,36 +12201,17 @@ the @code{sendfile(2)} system call.")
 (define-public python-pyftpdlib
   (package
     (name "python-pyftpdlib")
-    (version "1.5.6")
+    (version "1.5.7")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyftpdlib" version))
        (sha256
-        (base32 "0pnv2byzmzg84q5nmmhn1xafvfil85qa5y52bj455br93zc5b9px"))))
-    (build-system python-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (replace 'check
-            (lambda* (#:key tests? #:allow-other-keys)
-              (when tests?
-                (invoke
-                 "pytest"
-                 ;; Deselect failing tests.
-                 "-k" (string-append
-                       ;; Using Pytest instead of the Makefile causes the
-                       ;; command line tests to fail on unknown Pytest
-                       ;; arguments.
-                       "not TestCommandLineParser "
-                       ;; https://github.com/giampaolo/pyftpdlib/issues/478
-                       "and not test_use_gmt_times "
-                       ;; https://github.com/giampaolo/pyftpdlib/issues/550
-                       "and not test_masquerade_address "
-                       ;; https://github.com/giampaolo/pyftpdlib/issues/500
-                       "and not test_rest_on_stor "
-                       "and not test_stor_ascii"))))))))
+        (base32 "0vk5gcx4svjrpm014ykwxmijqihgb4ha17kb3yphk0nv6x0wx8vy"))))
+    (build-system pyproject-build-system)
+    ;; Using Pytest instead of the Makefile causes the command line tests to
+    ;; fail on unknown Pytest arguments.
+    (arguments (list #:test-flags #~(list "-k" "not TestCommandLineParser")))
     (native-inputs (list python-psutil python-pytest))
     (propagated-inputs (list python-pyopenssl python-pysendfile))
     (home-page "https://github.com/giampaolo/pyftpdlib/")
@@ -12133,7 +12320,12 @@ from an XML-based format.")
                                     "test_read_fontdimens_mathex"
                                     "test_read_fontdimens_vanilla"
                                     "test_read_boundary_char"
-                                    "fontTools.tfmLib")
+                                    "fontTools.tfmLib"
+                                    ;; The MtiTest tests fail for unknown
+                                    ;; reasons (see:
+                                    ;; https://github.com/fonttools/
+                                    ;; fonttools/issues/3078)
+                                    "MtiTest")
                                   " and not "))))))))))
     (native-inputs
      (modify-inputs (package-native-inputs python-fonttools)
@@ -13690,7 +13882,7 @@ Python.")
   (package
     (name "python-debian")
     (home-page "https://salsa.debian.org/python-debian-team/python-debian")
-    (version "0.1.36")
+    (version "0.1.49")
     (source
      (origin
        ;; Use git-fetch, as pypi doesn't include test suite.
@@ -13701,34 +13893,31 @@ Python.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
+         "190vy2ns0650icpwvv4qp6kr3c3i9jszy1vkdwpigxb96fs1bqf3"))
+       (modules '((guix build utils)))
+       (snippet
+        #~(begin
+            ;; python-apt, apt and dpkg are not yet available in guix,
+            ;; and these tests heavily depend on them.
+            (for-each delete-file
+                      '("lib/debian/tests/test_deb822.py"
+                        "lib/debian/tests/test_debfile.py"))
+
+            ;; for reproducible builds, otherwise python-debian
+            ;; generates a _version.py including the date
+            (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
+            (substitute* "lib/debian/_version.py"
+              (("__CHANGELOG_VERSION__") #$version))))))
     (build-system python-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'set-version
-                    ;; for reproducible builds, otherwise python-debian
-                    ;; generates a _version.py including the date
-                    (lambda _
-                      (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
-                      (substitute* "lib/debian/_version.py"
-                        (("__CHANGELOG_VERSION__") ,version))))
-                  (add-after 'unpack 'remove-debian-specific-tests
-                    ;; python-apt, apt and dpkg are not yet available in guix,
-                    ;; and these tests heavily depend on them.
-                    (lambda _
-                      (delete-file "lib/debian/tests/test_deb822.py")
-                      (delete-file "lib/debian/tests/test_debfile.py")
-                      #t)))))
+    (native-inputs
+     (list python-pytest))
     (propagated-inputs
      (list python-six python-chardet))
     (synopsis "Debian package related modules")
     (description
-     ;; XXX: Use @enumerate instead of @itemize to work around
-     ;; <http://bugs.gnu.org/21772>.
      "This package provides Python modules that abstract many formats of
 Debian-related files, such as:
-
-@enumerate
+@itemize
 @item Debtags information;
 @item @file{debian/changelog} files;
 @item packages files, pdiffs;
@@ -13736,8 +13925,7 @@ Debian-related files, such as:
    @file{debian/control}, @file{.changes}, @file{.dsc};
 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
    contained files and meta-information.
-@end enumerate\n")
-
+@end itemize")
     ;; Modules are either GPLv2+ or GPLv3+.
     (license license:gpl3+)))
 
@@ -14432,26 +14620,24 @@ simulation, statistical modeling, machine learning and much more.")
 (define-public python-chardet
   (package
     (name "python-chardet")
-    (version "5.0.0")
+    (version "5.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "chardet" version))
        (sha256
         (base32
-         "1amqmz8731ly6f9rkbk09w4jqgmmgyxykd1bawhgrdbqzlmxys03"))))
+         "1r9ixxnish9j3dq4h0z0cwlkr4f5lgi6d8mhbzw59hbbjlmp2qhd"))))
     (native-inputs
      (list python-pytest))
-    (build-system python-build-system)
+    (build-system pyproject-build-system)
     (arguments
-     (list #:phases
+     (list #:test-flags
+           ;; Disable test that fails sporadically:
+           ;; https://github.com/chardet/chardet/issues/256
+           #~'("-k" "not test_detect_all_and_detect_one_should_agree")
+           #:phases
            #~(modify-phases %standard-phases
-               (replace 'check
-                 (lambda _
-                   (invoke "pytest" "-vv" "-k"
-                           ;; Disable test that fails sporadically:
-                           ;; https://github.com/chardet/chardet/issues/256
-                           "not test_detect_all_and_detect_one_should_agree")))
                ;; This package provides a 'chardetect' executable that only
                ;; depends on Python, so customize the wrap phase to avoid
                ;; adding pytest and friends in order to save size.
@@ -15121,7 +15307,7 @@ with a new public API, and RPython support.")
 (define-public python-hy
   (package
     (name "python-hy")
-    (version "0.25.0")
+    (version "0.26.0")
     (source
      (origin
        (method git-fetch)               ; no tests in PyPI release
@@ -15130,24 +15316,36 @@ with a new public API, and RPython support.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1am6z9m0s9svysj0wrfz069rpvbqqimphqll3912q4bvdlz6vrjp"))))
+        (base32 "1czhh7s81sg0nrnf4zv0ydqi4f7s6sywf4ks4fd59vpx441ca39v"))))
     (build-system python-build-system)
     (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "python" "-m" "pytest" "-k"
-                       (string-append   ; skip some failed tests
-                        "not test_sys_executable"
-                        " and not test_circular_macro_require"
-                        " and not test_macro_require"
-                        " and not test_requires_pollutes_core"))))))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; Hy includes a script that writes a version.py file that Hy uses to
+          ;; report its version. That script uses information from the git
+          ;; repository or the HY_VERSION environment variable. Therefore,
+          ;; these phases set HY_VERSION and then remove the support scripts
+          ;; which get installed in the root of the output.
+          (add-after 'unpack 'set-version
+            (lambda _
+              (setenv "HY_VERSION" #$version)))
+          (add-after 'install 'remove-installed-build-scripts
+            (lambda _
+              (delete-file-recursively (string-append #$output "/get_version"))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "python" "-m" "pytest" "-k"
+                        (string-append   ; skip some failed tests
+                         "not test_sys_executable"
+                         " and not test_circular_macro_require"
+                         " and not test_macro_require"
+                         " and not test_requires_pollutes_core"))))))))
     (native-inputs
      (list python-pytest-7.1 python-wheel))
     (propagated-inputs
-     (list python-colorama python-funcparserlib))
+     (list python-funcparserlib))
     (home-page "https://docs.hylang.org/en/stable/")
     (synopsis "Lisp frontend to Python")
     (description
@@ -15415,6 +15613,19 @@ Pytest but stripped of Pytest specific details.")
    (home-page "https://pypi.org/project/pluggy/")
    (license license:expat)))
 
+;;; TODO: Make this the default python-pluggy in the next rebuild cycle.
+(define-public python-pluggy-next
+  (package
+   (inherit python-pluggy)
+   (version "1.0.0")
+   (source
+    (origin
+     (method url-fetch)
+     (uri (pypi-uri "pluggy" version))
+     (sha256
+      (base32
+       "0n8iadlas2z1b4h0fc73b043c7iwfvx9rgvqm1azjmffmhxkf922"))))))
+
 (define-public python-plumbum
   (package
     (name "python-plumbum")
@@ -15489,13 +15700,13 @@ document.")
 (define-public python-symengine
   (package
     (name "python-symengine")
-    (version "0.9.2")
+    (version "0.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "symengine" version))
        (sha256
-        (base32 "0qjgdbnb10kfk7jdhxnzfl8cpaps81k8vap7gm7q9ym3pgslazhg"))))
+        (base32 "0i97lb6h8jk0k98805mkw6id5r537469zbh2d95320azq9nfj824"))))
     (build-system python-build-system)
     (arguments
      (list
@@ -15549,13 +15760,13 @@ expression.")
 (define-public python-unicodedata2
   (package
     (name "python-unicodedata2")
-    (version "14.0.0")
+    (version "15.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "unicodedata2" version))
        (sha256
-        (base32 "110nnvh02ssp92xbmswy39aa186jrmb7m41x4220wigl8c0dzxs1"))))
+        (base32 "0bcgls7m2zndpd8whgznnd5908jbsa50si2bh88wsn0agcznhv7d"))))
     (build-system python-build-system)
     (home-page "https://github.com/fonttools/unicodedata2")
     (synopsis "Python unicodedata backport")
@@ -16224,7 +16435,7 @@ Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
            python-iniconfig
            python-moto
            python-msgpack
-           python-pytest
+           python-pytest-7.1            ;for pytest-subtests
            python-pytest-celery
            python-pytest-subtests
            python-pytest-timeout
@@ -18118,13 +18329,13 @@ parsing UK postcodes.")
 (define-public python-faker
   (package
     (name "python-faker")
-    (version "13.3.4")
+    (version "15.0.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "Faker" version))
               (sha256
                (base32
-                "04855dqvvi2mr739l5x3qf82rxq0a7spc8gl76k8xixmbw36328q"))))
+                "1yx3gsivisf8ls43v0fgzy4n5q9625xrp9fr9cb5gp3h6k9cfpr4"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -24574,13 +24785,13 @@ project.")
 (define-public python-trio
   (package
     (name "python-trio")
-    (version "0.20.0")
+    (version "0.22.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "trio" version))
        (sha256
-        (base32 "0w30cwmdwfa8zq2agqv3h62jzwwsk7ms8f683ag8f3jx279m42k7"))))
+        (base32 "1kxa9v0cds0xnklvzppv4ix4xg81r73p5pm4qlvv2iqa832z2s6f"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -24606,7 +24817,8 @@ project.")
                          ;; Assertion errors.
                          " and not test_guest_mode_ki"
                          " and not test_run_in_trio_thread_ki"
-                         " and not test_simple_cancel_scope_usage_doesnt_create_cyclic_garbage"
+                         " and not test_simple_cancel_scope_usage_doesnt_create\
+_cyclic_garbage"
                          " and not test_nursery_cancel_doesnt_create_cyclic_garbage"
                          " and not test_cancel_scope_exit_doesnt_create_cyclic_garbage"
                          " and not test_locals_destroyed_promptly_on_cancel"
@@ -24637,6 +24849,8 @@ project.")
     (propagated-inputs
      (list python-async-generator
            python-attrs
+           python-cffi
+           python-exceptiongroup
            python-idna
            python-outcome
            python-sniffio
@@ -24653,22 +24867,15 @@ programs that do multiple things at the same time with parallelized I/O.")
 (define-public python-trio-typing
   (package
     (name "python-trio-typing")
-    (version "0.5.0")
+    (version "0.8.0")
     (source
      (origin
-      (method url-fetch)
-      (uri (pypi-uri "trio-typing" version))
-      (sha256
-       (base32 "1yvlj4vf3wyvp16dw6vyfm4i2idm8lvdc3fvjhi6mhm62zv7s07j"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda _
-             (invoke "pytest" "-vv"))))))
-    (native-inputs
-     (list python-attrs python-pytest))
+       (method url-fetch)
+       (uri (pypi-uri "trio-typing" version))
+       (sha256
+        (base32 "15wa66cs165wawh4pi808ac43n67b8jqddi5ppdcbkj5gfi68hpi"))))
+    (build-system pyproject-build-system)
+    (native-inputs (list python-attrs python-pytest))
     (propagated-inputs
      (list python-mypy python-mypy-extensions python-trio
            python-typing-extensions))
@@ -27094,7 +27301,7 @@ accessor layer.")
 (define-public pyzo
   (package
     (name "pyzo")
-    (version "4.12.7")
+    (version "4.12.8")
     (source
      (origin
        (method git-fetch)
@@ -27104,7 +27311,7 @@ accessor layer.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "15c92l0g3fziyn6cmjrbr57bz70cz8w282yjb370r36x2bpykbii"))))
+         "036snpv6j63bv9z9mbq317qb43zwsj1m8vljra3c0kiakahp7cc3"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -27758,17 +27965,17 @@ By default it uses the open Python vulnerability database Safety DB.")
 (define-public python-pypandoc
   (package
     (name "python-pypandoc")
-    (version "1.6.4")
+    (version "1.7.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pypandoc" version))
        (sha256
         (base32
-         "149basv4pvzg9zm74cjz68x8s2n5fykyj7prgysb0qfmja73r83f"))))
+         "0l6a8ngzpx363q2jskxxkx6psfhqrvc4js80dmn16r3vw6m2cb40"))))
     (build-system python-build-system)
     (inputs
-     (list pandoc))
+     (list pandoc python-pandocfilters))
     (propagated-inputs
      `(("wheel" ,python-wheel)))
     (native-inputs
@@ -31454,6 +31661,24 @@ GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
 versa.  Extended WKB/WKT are also supported.")
     (license license:asl2.0)))
 
+(define-public python-cogapp
+  (package
+    (name "python-cogapp")
+    (version "3.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "cogapp" version))
+              (sha256
+               (base32
+                "1c0xx3p3lzrlyqhmccyq9c50f8v9pqk2992gb4nl50h2yy1m3s8v"))))
+    (build-system pyproject-build-system)
+    (native-inputs (list python-pytest))
+    (home-page "https://nedbatchelder.com/code/cog")
+    (synopsis "Content generation tool that leverages Python")
+    (description "Cog is a file generation tool.  It allows using pieces of
+Python code as generators in your source files to generate arbitrary text.")
+    (license license:expat)))
+
 (define-public python-bsdiff4
   (package
     (name "python-bsdiff4")
@@ -31918,6 +32143,58 @@ functions
 @end itemize")
     (license license:bsd-3)))
 
+(define-public python-markdown-strings
+  (package
+    (name "python-markdown-strings")
+    (version "3.3.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/awesmubarak/markdown_strings.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0064ni7s3k8hqw61wi9m31icxp61f8adhija2qsp46hclcwx7vz2"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-lxml python-six))
+    (home-page "https://github.com/awesmubarak/markdown_strings")
+    (synopsis "Python library to create markdown-formatted text")
+    (description "This package allows the programmatic creation of
+markdown-compliant strings.")
+    (license license:expat)))
+
+(define-public python-zeroc-ice
+  (package
+    (name "python-zeroc-ice")
+    (version "3.7.9")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "zeroc-ice" version))
+              (sha256
+               (base32
+                "0bqkrjxp2fbz34x3wxkxji39kxinypzg8q2994sibiay29mpipxb"))))
+    (build-system pyproject-build-system)
+    (inputs (list openssl))
+    (home-page "https://zeroc.com")
+    (synopsis "RPC framework")
+    (description
+     "Ice is a comprehensive RPC framework.  Ice helps you network your
+software by taking care of all interactions with low-level network programming
+interfaces.")
+    (license license:gpl2)))
+
+(define-public python-zeroc-ice-3.6
+  (package
+    (inherit python-zeroc-ice)
+    (version "3.6.5")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "zeroc-ice" version))
+              (sha256
+               (base32
+                "0mikjfvq26kh8asnn9v55z41pap4c5ypymqnwwi4xkavc3mzyda2"))))))
+
 ;;;
 ;;; Avoid adding new packages to the end of this file. To reduce the chances
 ;;; of a merge conflict, place them above by existing packages with similar
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index acf2d70736..c3722549cc 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -367,50 +367,50 @@ system, and the core design of Django is reused in Grantlee.")
            ;; Use which the package, not the function
            (@ (gnu packages base) which)))
     (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("cups" ,cups)
-       ("dbus" ,dbus)
-       ("double-conversion" ,double-conversion)
-       ("eudev" ,eudev)
-       ("expat" ,expat)
-       ("fontconfig" ,fontconfig)
-       ("freetype" ,freetype)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+)                   ;for GTK theme support
-       ("harfbuzz" ,harfbuzz)
-       ("icu4c" ,icu4c)
-       ("libinput" ,libinput-minimal)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libmng" ,libmng)
-       ("libpng" ,libpng)
-       ("libx11" ,libx11)
-       ("libxcomposite" ,libxcomposite)
-       ("libxcursor" ,libxcursor)
-       ("libxfixes" ,libxfixes)
-       ("libxi" ,libxi)
-       ("libxinerama" ,libxinerama)
-       ("libxkbcommon" ,libxkbcommon)
-       ("libxml2" ,libxml2)
-       ("libxrandr" ,libxrandr)
-       ("libxrender" ,libxrender)
-       ("libxslt" ,libxslt)
-       ("libxtst" ,libxtst)
-       ("mtdev" ,mtdev)
-       ("mariadb-dev" ,mariadb "dev")
-       ("nss" ,nss)
-       ("openssl" ,openssl)
-       ("pcre2" ,pcre2)
-       ("postgresql" ,postgresql)
-       ("pulseaudio" ,pulseaudio)
-       ("sqlite" ,sqlite)
-       ("unixodbc" ,unixodbc)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-image" ,xcb-util-image)
-       ("xcb-util-keysyms" ,xcb-util-keysyms)
-       ("xcb-util-renderutil" ,xcb-util-renderutil)
-       ("xcb-util-wm" ,xcb-util-wm)
-       ("xdg-utils" ,xdg-utils)
-       ("zlib" ,zlib)))
+     (list alsa-lib
+           cups
+           dbus
+           double-conversion
+           eudev
+           expat
+           fontconfig
+           freetype
+           glib
+           gtk+               ;for GTK theme support
+           harfbuzz
+           icu4c
+           libinput-minimal
+           libjpeg-turbo
+           libmng
+           libpng
+           libx11
+           libxcomposite
+           libxcursor
+           libxfixes
+           libxi
+           libxinerama
+           libxkbcommon
+           libxml2
+           libxrandr
+           libxrender
+           libxslt
+           libxtst
+           mtdev
+           `(,mariadb "dev")
+           nss
+           openssl
+           pcre2
+           postgresql
+           pulseaudio
+           sqlite
+           unixodbc
+           xcb-util
+           xcb-util-image
+           xcb-util-keysyms
+           xcb-util-renderutil
+           xcb-util-wm
+           xdg-utils
+           zlib))
     (native-inputs
      (list bison
            flex
@@ -778,6 +778,9 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                       ;; Actual   (dt5.offsetFromUtc()): 0
                       ;; Expected (46800)              : 46800
                       "tst_qdatetime"
+                      ;; The tst_QObjectRace::destroyRace is flaky (see:
+                      ;; https://bugreports.qt.io/browse/QTBUG-103489).
+                      "tst_qobjectrace"
                       ;; The 'tst_QSettings::fromFile' assumes the data
                       ;; location to be relative to the root directory and
                       ;; fails.
@@ -1187,38 +1190,35 @@ XML and custom data models.  It contains programs such as xmlpatterns and
 xmlpatternsvalidator.")))
 
 (define-public qtdeclarative-5
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtdeclarative")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "1kb8nj17vmnky0ayiwypim7kf6rmlmfcjf6gnrw8rydmp61w0vh2"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "1kb8nj17vmnky0ayiwypim7kf6rmlmfcjf6gnrw8rydmp61w0vh2"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg-5)
        ((#:tests? _ #f) #f)             ;TODO: Enable the tests
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'build 'fix-qt5core-install-prefix
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
-                 ;; The Qt5Core install prefix is set to qtbase, but qmlcachegen
-                 ;; is provided by qtdeclarative-5.
-                 (substitute*
-                     "lib/cmake/Qt5QuickCompiler/Qt5QuickCompilerConfig.cmake"
-                   (("\\$\\{_qt5Core_install_prefix\\}") out)))))
-           ;; TODO: Add phase unconditionally.
-           ,@(if (target-riscv64?)
-               '((add-after 'unpack 'fix-linking-riscv64
-                   (lambda _
-                     (substitute* "src/qml/qml.pro"
-                       (("DEFINES \\+= QT_NO_FOREACH")
-                        (string-append
-                          "isEqual(QT_ARCH, \"riscv64\"): QMAKE_LIBS += -latomic\n\n"
-                          "DEFINES += QT_NO_FOREACH"))))))
-               '())))))
+        #~(modify-phases #$phases
+            (add-after 'build 'fix-qt5core-install-prefix
+              (lambda _
+                ;; The Qt5Core install prefix is set to qtbase, but qmlcachegen
+                ;; is provided by qtdeclarative-5.
+                (substitute*
+                    "lib/cmake/Qt5QuickCompiler/Qt5QuickCompilerConfig.cmake"
+                  (("\\$\\{_qt5Core_install_prefix\\}") #$output))))
+            (add-after 'unpack 'fix-linking-riscv64
+              (lambda _
+                (substitute* "src/qml/qml.pro"
+                  (("DEFINES \\+= QT_NO_FOREACH")
+                   (string-append
+                    "isEqual(QT_ARCH, \"riscv64\"): QMAKE_LIBS += -latomic\n\n"
+                    "DEFINES += QT_NO_FOREACH")))))))))
     (native-inputs
      (list perl
            pkg-config
@@ -1368,15 +1368,16 @@ integrate QML code with JavaScript and C++.")
     (license (package-license qtbase))))
 
 (define-public qtconnectivity
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtconnectivity")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "1j6qgkg77ycwcjxnhh38i9np1z8pjsqrzvfk3zsyq07f6k563fnc"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "1j6qgkg77ycwcjxnhh38i9np1z8pjsqrzvfk3zsyq07f6k563fnc"))))
     (native-inputs
      (list perl pkg-config qtdeclarative-5))
     (inputs
@@ -1448,25 +1449,26 @@ consume data received from the server, or both.")
     (license (package-license qtbase))))
 
 (define-public qtsensors
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtsensors")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "1fdpgbikvxjacyipcyac0czqhv96pvc75dl9cyafslws8m53fm56"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "1fdpgbikvxjacyipcyac0czqhv96pvc75dl9cyafslws8m53fm56"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg-5)
-       ((#:parallel-tests? _ #f) #f) ; can lead to race condition
+       ((#:parallel-tests? _ #f) #f)    ; can lead to race condition
        ((#:phases phases)
         `(modify-phases ,phases
            (add-after 'unpack 'fix-tests
              (lambda _
                (substitute* "tests/auto/qsensorgestures_gestures/tst_sensorgestures_gestures.cpp"
-                 (("2000") "5000")                                      ;lengthen test timeout
-                 (("QTest::newRow(\"twist\") << \"twist\"") ""))))))))  ;failing test
+                 (("2000") "5000")      ;lengthen test timeout
+                 (("QTest::newRow(\"twist\") << \"twist\"") "")))))))) ;failing test
     (native-inputs
      (list perl qtdeclarative-5))
     (inputs (list qtbase-5))
@@ -1481,19 +1483,19 @@ recognition API for devices.")))
     (name "qtmultimedia")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "1fz0ffpckvbg6qfhab2rrzfnvh4mlalqxcn0kbkd21mi44apjirk"))
-             (modules '((guix build utils)))
-             (snippet
-              '(begin
-                 (delete-file-recursively
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "1fz0ffpckvbg6qfhab2rrzfnvh4mlalqxcn0kbkd21mi44apjirk"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (delete-file-recursively
                    "examples/multimedia/spectrum/3rdparty")
-                 ;; We also prevent the spectrum example from being built.
-                 (substitute* "examples/multimedia/multimedia.pro"
-                   (("spectrum") "#"))))))
+                  ;; We also prevent the spectrum example from being built.
+                  (substitute* "examples/multimedia/multimedia.pro"
+                    (("spectrum") "#"))))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg-5)
        ((#:phases phases)
@@ -1615,38 +1617,38 @@ set of plugins for interacting with pulseaudio and GStreamer.")
     (license (package-license qtbase))))
 
 (define-public qtwayland-5
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtwayland")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (patches (search-patches "qtwayland-gcc-11.patch"
-                                      "qtwayland-dont-recreate-callbacks.patch"
-                                      "qtwayland-cleanup-callbacks.patch"))
-             (sha256
-              (base32
-               "0aa5jcvvap6qca6imdkhs1mhv5bnaxn466mmpl7x78jx1za7n3ps"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (patches (search-patches "qtwayland-gcc-11.patch"
+                                       "qtwayland-dont-recreate-callbacks.patch"
+                                       "qtwayland-cleanup-callbacks.patch"))
+              (sha256
+               (base32
+                "0aa5jcvvap6qca6imdkhs1mhv5bnaxn466mmpl7x78jx1za7n3ps"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg-5)
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'disable-failing-tests
-             (lambda _
-               ;; FIXME: tst_seatv4::animatedCursor() fails for no good
-               ;; reason and breaks these two tests.
-               (substitute* "tests/auto/client/seatv4/tst_seatv4.cpp"
-                 (((string-append "QVERIFY\\(!cursorSurface\\(\\)->"
-                                  "m_waitingFrameCallbacks\\.empty\\(\\)\\);"))
-                  "")
-                 (("QTRY_COMPARE\\(bufferSpy\\.count\\(\\), 1\\);")
-                  ""))))
-           (add-before 'check 'set-test-environment
-             (lambda _
-               ;; Do not fail just because /etc/machine-id is missing.
-               (setenv "DBUS_FATAL_WARNINGS" "0")))))))
-    (native-inputs
-     (list glib perl pkg-config qtdeclarative-5))
+        #~(modify-phases #$phases
+            (add-after 'unpack 'disable-failing-tests
+              (lambda _
+                ;; FIXME: tst_seatv4::animatedCursor() fails for no good
+                ;; reason and breaks these two tests.
+                (substitute* "tests/auto/client/seatv4/tst_seatv4.cpp"
+                  (((string-append "QVERIFY\\(!cursorSurface\\(\\)->"
+                                   "m_waitingFrameCallbacks\\.empty\\(\\)\\);"))
+                   "")
+                  (("QTRY_COMPARE\\(bufferSpy\\.count\\(\\), 1\\);")
+                   ""))))
+            (add-before 'check 'set-test-environment
+              (lambda _
+                ;; Do not fail just because /etc/machine-id is missing.
+                (setenv "DBUS_FATAL_WARNINGS" "0")))))))
+    (native-inputs (list glib perl pkg-config qtdeclarative-5))
     (inputs
      (list fontconfig
            freetype
@@ -1715,58 +1717,59 @@ compositor libraries.")
     (license (package-license qtbase))))
 
 (define-public qtserialport
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtserialport")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "04i8pdyml1sw4dkk9vyw2xy5bz3fp6f90fws7ag5y8iizfgs5v2v"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "04i8pdyml1sw4dkk9vyw2xy5bz3fp6f90fws7ag5y8iizfgs5v2v"))))
     (native-inputs (list perl))
-    (inputs
-     (list qtbase-5 eudev))
+    (inputs (list qtbase-5 eudev))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg-5)
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'patch-dlopen-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "src/serialport/qtudev_p.h"
-               ;; Use the absolute paths for dynamically loaded libs,
-               ;; otherwise the lib will be searched in LD_LIBRARY_PATH which
-               ;; typically is not set in guix.
-               (("^\\s*(udevLibrary->setFileNameAndVersion\\(QStringLiteral\\(\")(udev\"\\),\\s*[0-9]+\\);)" _ a b)
-                (string-append a (assoc-ref inputs "eudev") "/lib/lib" b)))))))))
+        #~(modify-phases #$phases
+            (add-after 'unpack 'patch-dlopen-paths
+              (lambda* (#:key inputs #:allow-other-keys)
+                (substitute* "src/serialport/qtudev_p.h"
+                  ;; Use the absolute paths for dynamically loaded libs,
+                  ;; otherwise the lib will be searched in LD_LIBRARY_PATH which
+                  ;; typically is not set in guix.
+                  (("setFileNameAndVersion\\(QStringLiteral\\(\"udev\")")
+                   (format #f "setFileNameAndVersion(QStringLiteral(~s))"
+                           (string-append #$(this-package-input "eudev")
+                                          "/lib/libudev"))))))))))
     (synopsis "Qt Serial Port module")
     (description "The Qt Serial Port module provides the library for
 interacting with serial ports from within Qt.")))
 
 (define-public qtserialbus
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtserialbus")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "0ws3pjbp4g8f49k8q0qa5hgyisbyk3m7kl8pwzkfws048glvz570"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "0ws3pjbp4g8f49k8q0qa5hgyisbyk3m7kl8pwzkfws048glvz570"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg-5)
        ((#:phases phases '%standard-phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'patch-libsocketcan-reference
-             (lambda* (#:key inputs #:allow-other-keys)
-               (let* ((libcansocket (assoc-ref inputs "libsocketcan"))
-                      (libcansocket.so (string-append libcansocket
-                                                      "/lib/libsocketcan.so")))
-                 (substitute* "src/plugins/canbus/socketcan/libsocketcan.cpp"
-                   (("QStringLiteral\\(\"socketcan\"\\)")
-                    (format #f "QStringLiteral(~s)" libcansocket.so))))))))))
-    (inputs
-     (list libsocketcan qtbase-5 qtserialport))
+        #~(modify-phases #$phases
+            (add-after 'unpack 'patch-libsocketcan-reference
+              (lambda* (#:key inputs #:allow-other-keys)
+                (substitute* "src/plugins/canbus/socketcan/libsocketcan.cpp"
+                  (("QStringLiteral\\(\"socketcan\"\\)")
+                   (format #f "QStringLiteral(~s)"
+                           (search-input-file inputs
+                                              "lib/libsocketcan.so"))))))))))
+    (inputs (list libsocketcan qtbase-5 qtserialport))
     (synopsis "Qt Serial Bus module")
     (description "The Qt Serial Bus API provides classes and functions to
 access the various industrial serial buses and protocols, such as CAN, ModBus,
@@ -1782,8 +1785,7 @@ and others.")))
              (sha256
               (base32
                "1pfmy6fqis47awjb590r63y13vvsfm0fq70an3ylsknhyq3firgn"))))
-    (native-inputs
-     (list perl qtdeclarative-5 qtwebsockets-5))
+    (native-inputs (list perl qtdeclarative-5 qtwebsockets-5))
     (inputs (list qtbase-5))
     (synopsis "Web communication library for Qt")
     (description "The Qt WebChannel module enables peer-to-peer communication
@@ -1829,25 +1831,26 @@ application).")
     (license (package-license qtbase))))
 
 (define-public qtwebglplugin
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtwebglplugin")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "1gvzhgfn55kdp5g11fg5yja5xb6wghx5sfc8vfp8zzpxnak7pbn1"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "1gvzhgfn55kdp5g11fg5yja5xb6wghx5sfc8vfp8zzpxnak7pbn1"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg-5)
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'disable-network-tests
-             (lambda _ (substitute* "tests/plugins/platforms/platforms.pro"
-                         (("webgl") "# webgl"))))))))
+        #~(modify-phases #$phases
+            (add-after 'unpack 'disable-network-tests
+              (lambda _
+                (substitute* "tests/plugins/platforms/platforms.pro"
+                  (("webgl") "# webgl"))))))))
     (native-inputs '())
-    (inputs
-     (list mesa qtbase-5 qtdeclarative-5 qtwebsockets-5 zlib))
+    (inputs (list mesa qtbase-5 qtdeclarative-5 qtwebsockets-5 zlib))
     (synopsis "QPA plugin for running applications via a browser using
 streamed WebGL commands")
     (description "Qt back end that uses WebGL for rendering. It allows Qt
@@ -1857,46 +1860,44 @@ compatible web browser without the use of plug-ins.  The API is similar to
 OpenGL ES 2.0 and can be used in HTML5 canvas elements")))
 
 (define-public qtwebview
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtwebview")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "1b03dzlff840n2i53r105c7sv91ivwzxn7ldpgnhiyrhr897i9kj"))))
-    (native-inputs
-     (list perl))
-    (inputs
-     (list qtbase-5 qtdeclarative-5))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "1b03dzlff840n2i53r105c7sv91ivwzxn7ldpgnhiyrhr897i9kj"))))
+    (native-inputs (list perl))
+    (inputs (list qtbase-5 qtdeclarative-5))
     (synopsis "Display web content in a QML application")
     (description "Qt WebView provides a way to display web content in a QML
 application without necessarily including a full web browser stack by using
 native APIs where it makes sense.")))
 
 (define-public qtlocation
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtlocation")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "0r16qxy0pfpwvna4gpz67jk3qv3qizfd659kc9iwdh8bhz7lpjrw"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "0r16qxy0pfpwvna4gpz67jk3qv3qizfd659kc9iwdh8bhz7lpjrw"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg-5)
-       ((#:tests? _ #f) #f)   ; TODO: Enable the tests
+       ((#:tests? _ #f) #f)             ; TODO: Enable the tests
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-before 'check 'pre-check
-             (lambda _
-               (setenv "HOME" "/tmp")))))))
-    (native-inputs
-     (list perl qtdeclarative-5 qtquickcontrols-5 qtserialport))
-    (inputs
-     (list icu4c openssl qtbase-5 zlib))
+        #~(modify-phases #$phases
+            (add-before 'check 'pre-check
+              (lambda _
+                (setenv "HOME" "/tmp")))))))
+    (native-inputs (list perl qtdeclarative-5 qtquickcontrols-5 qtserialport))
+    (inputs (list icu4c openssl qtbase-5 zlib))
     (synopsis "Qt Location and Positioning modules")
     (description "The Qt Location module provides an interface for location,
 positioning and geolocation plugins.")))
@@ -1934,22 +1935,21 @@ plugin for Adobe After Effects.")
     (license (package-license qtbase))))
 
 (define-public qttools-5
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qttools")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "1i79fwsn799x3n3jidp3f4gz9d5vi9gg6p8g8lbswb832gggigm3"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "1i79fwsn799x3n3jidp3f4gz9d5vi9gg6p8g8lbswb832gggigm3"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg-5)
-       ((#:tests? _ #f) #f))) ; TODO: Enable the tests
-    (native-inputs
-     (list perl qtdeclarative-5 vulkan-headers))
-    (inputs
-     (list mesa qtbase-5))
+       ((#:tests? _ #f) #f)))           ; TODO: Enable the tests
+    (native-inputs (list perl qtdeclarative-5 vulkan-headers))
+    (inputs (list mesa qtbase-5))
     (synopsis "Qt Tools and Designer modules")
     (description "The Qt Tools module provides a set of applications to browse
 the documentation, translate applications, generate help files and other stuff
@@ -2017,60 +2017,59 @@ the Qt community.")
     (license (list license:gpl3))))
 
 (define-public qtscript
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtscript")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "0rjj1pn0fwdq0qz0nzisxza671ywfrq5cv6iplywfyflh7q4dmcs"))
-             (patches (search-patches "qtscript-disable-tests.patch"))))
-    (native-inputs
-     (list perl qttools-5))
-    (inputs
-     (list qtbase-5))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "0rjj1pn0fwdq0qz0nzisxza671ywfrq5cv6iplywfyflh7q4dmcs"))
+              (patches (search-patches "qtscript-disable-tests.patch"))))
+    (native-inputs (list perl qttools-5))
+    (inputs (list qtbase-5))
     (synopsis "Qt Script module")
     (description "Qt provides support for application scripting with ECMAScript.
 The following guides and references cover aspects of programming with
 ECMAScript and Qt.")))
 
 (define-public qtquickcontrols-5
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtquickcontrols")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "0yp47bpkfckms76vw0hrwnzchy8iak23ih6w9pnwrnjkmbc65drc"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "0yp47bpkfckms76vw0hrwnzchy8iak23ih6w9pnwrnjkmbc65drc"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg-5)
-       ((#:tests? _ #f) #f))) ; TODO: Enable the tests
-    (inputs
-     (list qtbase-5 qtdeclarative-5))
+       ((#:tests? _ #f) #f)))           ; TODO: Enable the tests
+    (inputs (list qtbase-5 qtdeclarative-5))
     (synopsis "Qt Quick Controls and other Quick modules")
     (description "The QtScript module provides classes for making Qt
 applications scriptable.  This module provides a set of extra components that
 can be used to build complete interfaces in Qt Quick.")))
 
 (define-public qtquickcontrols2-5
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtquickcontrols2")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "058dkj6272za47vnz3mxsmwsj85gxf6g0ski645fphk8s3jp2bk5"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "058dkj6272za47vnz3mxsmwsj85gxf6g0ski645fphk8s3jp2bk5"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg-5)
-       ((#:tests? _ #f) #f))) ; TODO: Enable the tests
-    (inputs
-     (list qtbase-5 qtdeclarative-5))
+       ((#:tests? _ #f) #f)))           ; TODO: Enable the tests
+    (inputs (list qtbase-5 qtdeclarative-5))
     (synopsis "Qt Quick Controls 2 and other Quick 2 modules")
     (description "The Qt Quick Controls 2 module contains the Qt Labs Platform
 module that provides platform integration: native dialogs, menus and menu bars,
@@ -2084,20 +2083,20 @@ not available.")))
   (deprecated-package "qtquickcontrols2" qtdeclarative))
 
 (define-public qtgraphicaleffects
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtgraphicaleffects")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "0wypji8i19kjq18qd92z8kkd3fj2n0d5hgh6xiza96833afvibj9"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "0wypji8i19kjq18qd92z8kkd3fj2n0d5hgh6xiza96833afvibj9"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg-5)
-       ((#:tests? _ #f) #f))) ; TODO: Enable the tests
-    (inputs
-     (list qtbase-5 qtdeclarative-5))
+       ((#:tests? _ #f) #f)))           ; TODO: Enable the tests
+    (inputs (list qtbase-5 qtdeclarative-5))
     (synopsis "Qt Graphical Effects module")
     (description "The Qt Graphical Effects module provides a set of QML types
 for adding visually impressive and configurable effects to user interfaces.
@@ -2107,15 +2106,16 @@ types.  The effects cover functional areas such as blending, masking, blurring,
 coloring, and many more.")))
 
 (define-public qtgamepad
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtgamepad")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "0vgxprgk7lak209wsg2ljzfkpwgjzscpbxmj5fyvvwm2pbnpspvk"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "0vgxprgk7lak209wsg2ljzfkpwgjzscpbxmj5fyvvwm2pbnpspvk"))))
     (native-inputs
      (list perl pkg-config))
     (inputs
@@ -2133,27 +2133,26 @@ primary target audience are embedded devices with fullscreen user interfaces,
 and mobile applications targeting TV-like form factors.")))
 
 (define-public qtscxml
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtscxml")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "17j6npvgr8q3lyrqmvfh1n47mkhfzk18r998hcjm2w75xj46km1n"))
-             (modules '((guix build utils)))
-             (snippet
-              '(begin
-                 (delete-file-recursively "tests/3rdparty")
-                 ;; the scion test refers to the bundled 3rd party test code.
-                 (substitute* "tests/auto/auto.pro"
-                   (("scion") "#"))))))
-    (arguments
-     (substitute-keyword-arguments (package-arguments qtsvg-5)
-       ((#:tests? _ #f) #f))) ; TODO: Enable the tests
-    (inputs
-     (list qtbase-5 qtdeclarative-5))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "17j6npvgr8q3lyrqmvfh1n47mkhfzk18r998hcjm2w75xj46km1n"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (delete-file-recursively "tests/3rdparty")
+                  ;; the scion test refers to the bundled 3rd party test code.
+                  (substitute* "tests/auto/auto.pro"
+                    (("scion") "#"))))))
+    (arguments (substitute-keyword-arguments (package-arguments qtsvg-5)
+                 ((#:tests? _ #f) #f))) ; TODO: Enable the tests
+    (inputs (list qtbase-5 qtdeclarative-5))
     (synopsis "Qt SCXML module")
     (description "The Qt SCXML module provides functionality to create state
 machines from SCXML files.  This includes both dynamically creating state
@@ -2192,15 +2191,16 @@ information and perform area based monitoring.")
     (license (package-license qtbase))))
 
 (define-public qtpurchasing
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtpurchasing")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "0bjky5ncg9yhz4a63g3jl1r5pa6i09f6g8wgzs591mhybrbmhcw8"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "0bjky5ncg9yhz4a63g3jl1r5pa6i09f6g8wgzs591mhybrbmhcw8"))))
     (inputs
      (list qtbase-5 qtdeclarative-5))
     (synopsis "Qt Purchasing module")
@@ -2208,26 +2208,26 @@ information and perform area based monitoring.")
 purchasing goods and services.")))
 
 (define-public qtcharts
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtcharts")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "1q11ank69l9qw3iks2svr0g2g6pzng9v8p87dpsmjs988f4ysmll"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "1q11ank69l9qw3iks2svr0g2g6pzng9v8p87dpsmjs988f4ysmll"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg-5)
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'remove-failing-test
-             (lambda _
-               (substitute* "tests/auto/auto.pro"
-                 (("qml") "# qml")
-                 (("qml-qtquicktest") "# qml-qtquicktest"))))))))
-    (inputs
-     (list qtbase-5 qtdeclarative-5))
+        #~(modify-phases #$phases
+            (add-after 'unpack 'remove-failing-test
+              (lambda _
+                (substitute* "tests/auto/auto.pro"
+                  (("qml") "# qml")
+                  (("qml-qtquicktest") "# qml-qtquicktest"))))))))
+    (inputs (list qtbase-5 qtdeclarative-5))
     (synopsis "Qt Charts module")
     (description "The Qt Charts module provides a set of easy to use chart
 components.  It uses the Qt Graphics View Framework, therefore charts can be
@@ -2237,15 +2237,16 @@ selecting one of the charts themes.")
     (license license:gpl3)))
 
 (define-public qtdatavis3d
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtdatavis3d")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "1mr2kdshahxrkjs9wlgpr59jbqvyvlax16rlnca4iq00w3v5hrdh"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "1mr2kdshahxrkjs9wlgpr59jbqvyvlax16rlnca4iq00w3v5hrdh"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg-5)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
@@ -2269,8 +2270,7 @@ customized by using themes or by adding custom items and labels to them.")
              (sha256
               (base32
                "0fsmpjwkzzy3281shld7gs1gj217smb1f8ai63gdvnkp0jb2fhc5"))))
-    (inputs
-     (list qtbase-5))
+    (inputs (list qtbase-5))
     (synopsis "Qt Network Authorization module")
     (description "The Qt Network Authorization module provides an
 implementation of OAuth and OAuth2 authenticathon methods for Qt.")))
@@ -2296,54 +2296,58 @@ implementation of OAuth and OAuth2 authenticathon methods for Qt.")
     (license (package-license qtbase))))
 
 (define-public qtremoteobjects
-  (package (inherit qtsvg-5)
+  (package
     (name "qtremoteobjects")
-    (version %qt-version)
+    (version "6.3.2")
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "1bi9yzipyccskda18pf5wis45q8qcxzvvi1slabjzdbvd9wkzj54"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "099b3vchi458i4fci9kfwan871jplqlk5l8q78mfnh33g80qnasi"))))
+    (build-system cmake-build-system)
     (arguments
-     (substitute-keyword-arguments (package-arguments qtsvg-5)
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'unpack 'remove-failing-test
-             (lambda _
-               ;; This test can't find its imports.
-               (substitute* "tests/auto/qml/qml.pro"
-                 (("integration") "# integration")
-                 (("usertypes") "# usertypes"))
-               ;; disable failing tests: they need network
-               (substitute* "tests/auto/auto.pro"
-                 (("integration_multiprocess proxy_multiprocess integration_external restart")
-                   "integration_multiprocess"))))))))
-    (inputs
-     (list qtbase-5 qtdeclarative-5))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'set-display
+            (lambda _
+              ;; Make Qt render "offscreen", required for tests.
+              (setenv "QT_QPA_PLATFORM" "offscreen")))
+          (delete 'check)               ;move after the install phase
+          (add-after 'install 'check
+            (assoc-ref %standard-phases 'check))
+          (add-before 'check 'prepare-for-tests
+            (lambda _
+              (setenv "QML2_IMPORT_PATH"
+                      (string-append #$output "/lib/qt6/qml:"
+                                     (getenv "QML2_IMPORT_PATH"))))))))
+    (native-inputs (list perl vulkan-headers))
+    (inputs (list libxkbcommon qtbase qtdeclarative))
     (synopsis "Qt Remote Objects module")
     (description "The Qt Remote Objects module is an @dfn{inter-process
 communication} (IPC) module developed for Qt.  The idea is to extend existing
 Qt's functionalities to enable an easy exchange of information between
-processes or computers.")))
+processes or computers.")
+    (home-page (package-home-page qtbase))
+    (license (package-license qtbase))))
 
 (define-public qtspeech
-  (package (inherit qtsvg-5)
+  (package
+    (inherit qtsvg-5)
     (name "qtspeech")
     (version %qt-version)
     (source (origin
-             (method url-fetch)
-             (uri (qt-urls name version))
-             (sha256
-              (base32
-               "1q56lyj7s05sx52j5z6gcs000mni4c7mb7qyq4lfval7c06hw5p6"))))
+              (method url-fetch)
+              (uri (qt-urls name version))
+              (sha256
+               (base32
+                "1q56lyj7s05sx52j5z6gcs000mni4c7mb7qyq4lfval7c06hw5p6"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg-5)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
-    (inputs
-     (list qtbase-5))
-    (native-inputs
-     (list perl qtdeclarative-5 qtmultimedia-5 qtxmlpatterns))
+    (inputs (list qtbase-5))
+    (native-inputs (list perl qtdeclarative-5 qtmultimedia-5 qtxmlpatterns))
     (synopsis "Qt Speech module")
     (description "The Qt Speech module enables a Qt application to support
 accessibility features such as text-to-speech, which is useful for end-users
@@ -2455,180 +2459,181 @@ using the Enchant spell-checking library.")
                   (guix build utils)))
        (snippet
         #~(begin
-           (let ((preserved-third-party-files
-                  '("base/third_party/double_conversion"
-                    "base/third_party/cityhash"
-                    "base/third_party/cityhash_v103"
-                    "base/third_party/dynamic_annotations"
-                    "base/third_party/icu"
-                    "base/third_party/libevent"
-                    "base/third_party/nspr"
-                    "base/third_party/superfasthash"
-                    "base/third_party/symbolize"
-                    "base/third_party/xdg_mime"
-                    "base/third_party/xdg_user_dirs"
-                    "net/third_party/mozilla_security_manager"
-                    "net/third_party/nss"
-                    "net/third_party/quiche"
-                    "net/third_party/uri_template"
-                    "third_party/abseil-cpp"
-                    "third_party/angle"
-                    "third_party/angle/src/common/third_party/base"
-                    "third_party/angle/src/common/third_party/smhasher"
-                    "third_party/angle/src/common/third_party/xxhash"
-                    "third_party/angle/src/third_party/compiler"
-                    "third_party/axe-core"
-                    "third_party/blink"
-                    "third_party/boringssl"
-                    "third_party/boringssl/src/third_party/fiat"
-                    "third_party/breakpad"
-                    "third_party/brotli"
-                    "third_party/catapult/common/py_vulcanize/py_vulcanize"
-                    "third_party/catapult/common/py_vulcanize/third_party"
-                    "third_party/catapult/third_party/beautifulsoup4"
-                    "third_party/catapult/third_party/html5lib-python"
-                    "third_party/catapult/third_party/polymer/components"
-                    "third_party/catapult/tracing"
-                    "third_party/catapult/tracing/third_party"
-                    "third_party/ced"
-                    "third_party/cld_3"
-                    "third_party/closure_compiler"
-                    "third_party/crashpad"
-                    "third_party/crashpad/crashpad/third_party/lss"
-                    "third_party/crashpad/crashpad/third_party/zlib"
-                    "third_party/crc32c"
-                    "third_party/dav1d"
-                    "third_party/dawn"
-                    "third_party/devtools-frontend"
-                    "third_party/devtools-frontend/src/front_end/third_party"
-                    "third_party/devtools-frontend/src/third_party/typescript"
-                    "third_party/emoji-segmenter"
-                    "third_party/ffmpeg"
-                    "third_party/googletest"
-                    "third_party/harfbuzz-ng/utils"
-                    "third_party/hunspell"
-                    "third_party/iccjpeg"
-                    "third_party/icu"
-                    "third_party/inspector_protocol"
-                    "third_party/jinja2"
-                    "third_party/jsoncpp"
-                    "third_party/jstemplate"
-                    "third_party/khronos"
-                    "third_party/leveldatabase"
-                    "third_party/libaddressinput"
-                    "third_party/libavif"
-                    "third_party/libgifcodec"
-                    "third_party/libjingle_xmpp"
-                    "third_party/libjpeg_turbo"
-                    "third_party/libpng"
-                    "third_party/libsrtp"
-                    "third_party/libsync"
-                    "third_party/libudev"
-                    "third_party/libvpx"
-                    "third_party/libwebm"
-                    "third_party/libwebp"
-                    "third_party/libxml"
-                    "third_party/libxslt"
-                    "third_party/libyuv"
-                    "third_party/lottie"
-                    "third_party/lss"
-                    "third_party/mako"
-                    "third_party/markupsafe"
-                    "third_party/mesa_headers"
-                    "third_party/metrics_proto"
-                    "third_party/modp_b64"
-                    "third_party/nasm"
-                    "third_party/node"
-                    "third_party/one_euro_filter"
-                    "third_party/openh264/src/codec/api/svc"
-                    "third_party/opus"
-                    "third_party/ots"
-                    "third_party/pdfium"
-                    "third_party/pdfium/third_party/agg23"
-                    "third_party/pdfium/third_party/base"
-                    "third_party/pdfium/third_party/freetype"
-                    "third_party/pdfium/third_party/lcms"
-                    "third_party/pdfium/third_party/libopenjpeg20"
-                    "third_party/pdfium/third_party/skia_shared"
-                    "third_party/perfetto"
-                    "third_party/pffft"
-                    "third_party/ply"
-                    "third_party/polymer"
-                    "third_party/protobuf"
-                    "third_party/protobuf/third_party/six"
-                    "third_party/pyjson5"
-                    "third_party/re2"
-                    "third_party/rnnoise"
-                    "third_party/skia"
-                    "third_party/skia/include/third_party/skcms/skcms.h"
-                    "third_party/skia/include/third_party/vulkan"
-                    "third_party/skia/third_party/skcms"
-                    "third_party/smhasher"
-                    "third_party/snappy"
-                    "third_party/sqlite"
-                    "third_party/usb_ids"
-                    "third_party/usrsctp"
-                    "third_party/vulkan_memory_allocator"
-                    "third_party/web-animations-js"
-                    "third_party/webrtc"
-                    "third_party/webrtc/common_audio/third_party/ooura/fft_size_128"
-                    "third_party/webrtc/common_audio/third_party/ooura/fft_size_256"
-                    "third_party/webrtc/common_audio/third_party/spl_sqrt_floor"
-                    "third_party/webrtc/modules/third_party/fft"
-                    "third_party/webrtc/modules/third_party/g711"
-                    "third_party/webrtc/modules/third_party/g722"
-                    "third_party/webrtc/rtc_base/third_party/base64"
-                    "third_party/webrtc/rtc_base/third_party/sigslot"
-                    "third_party/webrtc_overrides"
-                    "third_party/widevine/cdm/widevine_cdm_common.h"
-                    "third_party/widevine/cdm/widevine_cdm_version.h"
-                    "third_party/woff2"
-                    "third_party/xcbproto"
-                    "third_party/zlib"
-                    "url/third_party/mozilla"
-                    "v8/src/third_party/utf8-decoder"
-                    "v8/src/third_party/valgrind"
-                    "v8/src/third_party/siphash"
-                    "v8/third_party/v8/builtins"
-                    "v8/third_party/inspector_protocol")))
+            (let ((preserved-third-party-files
+                   '("base/third_party/double_conversion"
+                     "base/third_party/cityhash"
+                     "base/third_party/cityhash_v103"
+                     "base/third_party/dynamic_annotations"
+                     "base/third_party/icu"
+                     "base/third_party/libevent"
+                     "base/third_party/nspr"
+                     "base/third_party/superfasthash"
+                     "base/third_party/symbolize"
+                     "base/third_party/xdg_mime"
+                     "base/third_party/xdg_user_dirs"
+                     "net/third_party/mozilla_security_manager"
+                     "net/third_party/nss"
+                     "net/third_party/quiche"
+                     "net/third_party/uri_template"
+                     "third_party/abseil-cpp"
+                     "third_party/angle"
+                     "third_party/angle/src/common/third_party/base"
+                     "third_party/angle/src/common/third_party/smhasher"
+                     "third_party/angle/src/common/third_party/xxhash"
+                     "third_party/angle/src/third_party/compiler"
+                     "third_party/axe-core"
+                     "third_party/blink"
+                     "third_party/boringssl"
+                     "third_party/boringssl/src/third_party/fiat"
+                     "third_party/breakpad"
+                     "third_party/brotli"
+                     "third_party/catapult/common/py_vulcanize/py_vulcanize"
+                     "third_party/catapult/common/py_vulcanize/third_party"
+                     "third_party/catapult/third_party/beautifulsoup4"
+                     "third_party/catapult/third_party/html5lib-python"
+                     "third_party/catapult/third_party/polymer/components"
+                     "third_party/catapult/tracing"
+                     "third_party/catapult/tracing/third_party"
+                     "third_party/ced"
+                     "third_party/cld_3"
+                     "third_party/closure_compiler"
+                     "third_party/crashpad"
+                     "third_party/crashpad/crashpad/third_party/lss"
+                     "third_party/crashpad/crashpad/third_party/zlib"
+                     "third_party/crc32c"
+                     "third_party/dav1d"
+                     "third_party/dawn"
+                     "third_party/devtools-frontend"
+                     "third_party/devtools-frontend/src/front_end/third_party"
+                     "third_party/devtools-frontend/src/third_party/typescript"
+                     "third_party/emoji-segmenter"
+                     "third_party/ffmpeg"
+                     "third_party/googletest"
+                     "third_party/harfbuzz-ng/utils"
+                     "third_party/hunspell"
+                     "third_party/iccjpeg"
+                     "third_party/icu"
+                     "third_party/inspector_protocol"
+                     "third_party/jinja2"
+                     "third_party/jsoncpp"
+                     "third_party/jstemplate"
+                     "third_party/khronos"
+                     "third_party/leveldatabase"
+                     "third_party/libaddressinput"
+                     "third_party/libavif"
+                     "third_party/libgifcodec"
+                     "third_party/libjingle_xmpp"
+                     "third_party/libjpeg_turbo"
+                     "third_party/libpng"
+                     "third_party/libsrtp"
+                     "third_party/libsync"
+                     "third_party/libudev"
+                     "third_party/libvpx"
+                     "third_party/libwebm"
+                     "third_party/libwebp"
+                     "third_party/libxml"
+                     "third_party/libxslt"
+                     "third_party/libyuv"
+                     "third_party/lottie"
+                     "third_party/lss"
+                     "third_party/mako"
+                     "third_party/markupsafe"
+                     "third_party/mesa_headers"
+                     "third_party/metrics_proto"
+                     "third_party/modp_b64"
+                     "third_party/nasm"
+                     "third_party/node"
+                     "third_party/one_euro_filter"
+                     "third_party/openh264/src/codec/api/svc"
+                     "third_party/opus"
+                     "third_party/ots"
+                     "third_party/pdfium"
+                     "third_party/pdfium/third_party/agg23"
+                     "third_party/pdfium/third_party/base"
+                     "third_party/pdfium/third_party/freetype"
+                     "third_party/pdfium/third_party/lcms"
+                     "third_party/pdfium/third_party/libopenjpeg20"
+                     "third_party/pdfium/third_party/skia_shared"
+                     "third_party/perfetto"
+                     "third_party/pffft"
+                     "third_party/ply"
+                     "third_party/polymer"
+                     "third_party/protobuf"
+                     "third_party/protobuf/third_party/six"
+                     "third_party/pyjson5"
+                     "third_party/re2"
+                     "third_party/rnnoise"
+                     "third_party/skia"
+                     "third_party/skia/include/third_party/skcms/skcms.h"
+                     "third_party/skia/include/third_party/vulkan"
+                     "third_party/skia/third_party/skcms"
+                     "third_party/smhasher"
+                     "third_party/snappy"
+                     "third_party/sqlite"
+                     "third_party/usb_ids"
+                     "third_party/usrsctp"
+                     "third_party/vulkan_memory_allocator"
+                     "third_party/web-animations-js"
+                     "third_party/webrtc"
+                     "third_party/webrtc/common_audio/third_party/ooura/fft_size_128"
+                     "third_party/webrtc/common_audio/third_party/ooura/fft_size_256"
+                     "third_party/webrtc/common_audio/third_party/spl_sqrt_floor"
+                     "third_party/webrtc/modules/third_party/fft"
+                     "third_party/webrtc/modules/third_party/g711"
+                     "third_party/webrtc/modules/third_party/g722"
+                     "third_party/webrtc/rtc_base/third_party/base64"
+                     "third_party/webrtc/rtc_base/third_party/sigslot"
+                     "third_party/webrtc_overrides"
+                     "third_party/widevine/cdm/widevine_cdm_common.h"
+                     "third_party/widevine/cdm/widevine_cdm_version.h"
+                     "third_party/woff2"
+                     "third_party/xcbproto"
+                     "third_party/zlib"
+                     "url/third_party/mozilla"
+                     "v8/src/third_party/utf8-decoder"
+                     "v8/src/third_party/valgrind"
+                     "v8/src/third_party/siphash"
+                     "v8/third_party/v8/builtins"
+                     "v8/third_party/inspector_protocol")))
 
-             (with-directory-excursion "src/3rdparty"
-               ;; TODO: Try removing "gn" too for future versions of qtwebengine-5.
-               (delete-file-recursively "ninja")
+              (with-directory-excursion "src/3rdparty"
+                ;; TODO: Try removing "gn" too for future versions of qtwebengine-5.
+                (delete-file-recursively "ninja")
 
-               (with-directory-excursion "chromium"
-                 ;; Delete bundled software and binaries that were not explicitly
-                 ;; preserved above.
-                 #$remove-third-party-files
+                (with-directory-excursion "chromium"
+                  ;; Delete bundled software and binaries that were not explicitly
+                  ;; preserved above.
+                  #$remove-third-party-files
 
-                 ;; Use relative header locations instead of hard coded ones.
-                 (substitute*
-                   "base/third_party/dynamic_annotations/dynamic_annotations.c"
-                   (("base/third_party/valgrind") "valgrind"))
-                 (substitute*
-                   '("third_party/breakpad/breakpad/src/common/linux/http_upload.cc"
-                     "third_party/breakpad/breakpad/src/common/linux/libcurl_wrapper.h")
-                   (("third_party/curl") "curl"))
-                 (substitute*
-                   '("components/viz/common/gpu/vulkan_context_provider.h"
-                     "components/viz/common/resources/resource_format_utils.h"
-                     "gpu/config/gpu_info_collector_win.cc"
-                     "gpu/config/gpu_util.cc"
-                     "gpu/config/vulkan_info.h")
-                   (("third_party/vulkan_headers/include/")
-                    ""))
+                  ;; Use relative header locations instead of hard coded ones.
+                  (substitute*
+                      "base/third_party/dynamic_annotations/dynamic_annotations.c"
+                    (("base/third_party/valgrind") "valgrind"))
+                  (substitute* '("third_party/breakpad/breakpad/src/common\
+/linux/http_upload.cc"
+                                 "third_party/breakpad/breakpad/src/common/\
+linux/libcurl_wrapper.h")
+                    (("third_party/curl") "curl"))
+                  (substitute*
+                      '("components/viz/common/gpu/vulkan_context_provider.h"
+                        "components/viz/common/resources/resource_format_utils.h"
+                        "gpu/config/gpu_info_collector_win.cc"
+                        "gpu/config/gpu_util.cc"
+                        "gpu/config/vulkan_info.h")
+                    (("third_party/vulkan_headers/include/")
+                     ""))
 
-                 ;; Replace Google Analytics bundle with an empty file and hope
-                 ;; no one notices.
-                 (mkdir-p "third_party/analytics")
-                 (call-with-output-file
-                     "third_party/analytics/google-analytics-bundle.js"
-                   (lambda (port)
-                     (const #t)))))
-             ;; Do not enable support for loading the Widevine DRM plugin.
-             (substitute* "src/buildtools/config/common.pri"
-               (("enable_widevine=true")
-                "enable_widevine=false")))))))
+                  ;; Replace Google Analytics bundle with an empty file and hope
+                  ;; no one notices.
+                  (mkdir-p "third_party/analytics")
+                  (call-with-output-file
+                      "third_party/analytics/google-analytics-bundle.js"
+                    (lambda (port)
+                      (const #t)))))
+              ;; Do not enable support for loading the Widevine DRM plugin.
+              (substitute* "src/buildtools/config/common.pri"
+                (("enable_widevine=true")
+                 "enable_widevine=false")))))))
     (build-system gnu-build-system)
     (native-inputs
      (list bison
@@ -2699,53 +2704,54 @@ using the Enchant spell-checking library.")
           (guix build utils)
           (ice-9 textual-ports)))
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-before 'configure 'substitute-source
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
-                 (with-atomic-file-replacement
-                  "src/buildtools/config/linux.pri"
-                  (lambda (in out)
-                    (display (get-string-all in) out)
-                    (display "\ngn_args += use_system_openh264=true\n" out)
-                    (display "\ngn_args += link_pulseaudio = true\n" out)))
-                 ;; Qtwebengine is not installed into the same prefix as
-                 ;; qtbase.  Some qtbase QTLibraryInfo constants will not
-                 ;; work.  Replace with the full path to the qtwebengine-5
-                 ;; translations and locales in the store.
-                 (substitute* "src/core/web_engine_library_info.cpp"
-                   (("QLibraryInfo::location\\(QLibraryInfo::TranslationsPath\\)")
-                    (string-append "QLatin1String(\"" out "/share/qt5/translations\")"))
-                   (("QLibraryInfo::location\\(QLibraryInfo::DataPath\\)")
-                    (string-append "QLatin1String(\"" out "/share/qt5\")")))
-                 ;; Substitute full dynamic library path for nss.
-                 (substitute* "src/3rdparty/chromium/crypto/nss_util.cc"
-                   (("libnssckbi.so")
-                    (search-input-file inputs "lib/nss/libnssckbi.so")))
-                 ;; Substitute full dynamic library path for udev.
-                 (substitute* "src/3rdparty/chromium/device/udev_linux/udev1_loader.cc"
-                   (("libudev.so.1")
-                    (search-input-file inputs "lib/libudev.so.1"))))))
-           (add-before 'configure 'set-env
-             (lambda _
-               ;; Avoids potential race conditions.
-               (setenv "PYTHONDONTWRITEBYTECODE" "1")
-               (setenv "NINJAFLAGS"
-                       (string-append "-k1" ;less verbose build output
-                                      ;; Respect the '--cores' option of 'guix build'.
-                                      " -j" (number->string (parallel-job-count))))))
-           (replace 'configure
-             (lambda _
-               ;; Valid QT_BUILD_PARTS variables are:
-               ;; libs tools tests examples demos docs translations
-               (invoke "qmake" "QT_BUILD_PARTS = libs tools" "--"
-                       "--webengine-printing-and-pdf=no"
-                       "--webengine-ffmpeg=system"
+        #~(modify-phases #$phases
+            (add-before 'configure 'substitute-source
+              (lambda* (#:key inputs #:allow-other-keys)
+                (with-atomic-file-replacement
+                 "src/buildtools/config/linux.pri"
+                 (lambda (in out)
+                   (display (get-string-all in) out)
+                   (display "\ngn_args += use_system_openh264=true\n" out)
+                   (display "\ngn_args += link_pulseaudio = true\n" out)))
+                ;; Qtwebengine is not installed into the same prefix as
+                ;; qtbase.  Some qtbase QTLibraryInfo constants will not
+                ;; work.  Replace with the full path to the qtwebengine-5
+                ;; translations and locales in the store.
+                (substitute* "src/core/web_engine_library_info.cpp"
+                  (("QLibraryInfo::location\\(QLibraryInfo::TranslationsPath\\)")
+                   (string-append "QLatin1String(\"" #$output
+                                  "/share/qt5/translations\")"))
+                  (("QLibraryInfo::location\\(QLibraryInfo::DataPath\\)")
+                   (string-append "QLatin1String(\"" #$output
+                                  "/share/qt5\")")))
+                ;; Substitute full dynamic library path for nss.
+                (substitute* "src/3rdparty/chromium/crypto/nss_util.cc"
+                  (("libnssckbi.so")
+                   (search-input-file inputs "lib/nss/libnssckbi.so")))
+                ;; Substitute full dynamic library path for udev.
+                (substitute* "src/3rdparty/chromium/device/udev_linux/udev1_loader.cc"
+                  (("libudev.so.1")
+                   (search-input-file inputs "lib/libudev.so.1")))))
+            (add-before 'configure 'set-env
+              (lambda _
+                ;; Avoids potential race conditions.
+                (setenv "PYTHONDONTWRITEBYTECODE" "1")
+                (setenv "NINJAFLAGS"
+                        (string-append "-k1" ;less verbose build output
+                                       ;; Respect the '--cores' option of 'guix build'.
+                                       " -j" (number->string (parallel-job-count))))))
+            (replace 'configure
+              (lambda _
+                ;; Valid QT_BUILD_PARTS variables are:
+                ;; libs tools tests examples demos docs translations
+                (invoke "qmake" "QT_BUILD_PARTS = libs tools" "--"
+                        "--webengine-printing-and-pdf=no"
+                        "--webengine-ffmpeg=system"
                        ;; FIXME: Building qtwebengine-5 5.12.2 with
                        ;; icu4c >= 68 fails.
                        ;;"--webengine-icu=system"
-                       "--webengine-pepper-plugins=no"
-                       "-webengine-proprietary-codecs")))))
+                        "--webengine-pepper-plugins=no"
+                        "-webengine-proprietary-codecs")))))
        ;; Tests are disabled due to "Could not find QtWebEngineProcess error"
        ;; It's possible this can be fixed by setting QTWEBENGINEPROCESS_PATH
        ;; before running tests.
diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm
index 648d6c9281..42f5744987 100644
--- a/gnu/packages/radio.scm
+++ b/gnu/packages/radio.scm
@@ -40,6 +40,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages astronomy)
   #:use-module (gnu packages audio)
+  #:use-module (gnu packages avahi)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
@@ -453,6 +454,58 @@ controls for certain tuners which may be paired with an audio device.")
        "This package provides HackRF devices support to the SoapySDR library.")
       (license license:expat))))
 
+(define-public soapymultisdr
+  (let ((commit "e8bd3298afaec04cb7ce2c8c516cb9cd8bd3bc9d")
+        (revision "1"))
+    (package
+      (name "soapymultisdr")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/pothosware/SoapyMultiSDR")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0f7d39s2zpgfi677i2aqp4zkf5c6cv8mpm7w8s7xj45bfhf94acl"))))
+      (build-system cmake-build-system)
+      (inputs
+       (list soapysdr))
+      (home-page "https://github.com/pothosware/SoapyMultiSDR")
+      (synopsis "Multi-device support module for SoapySDR")
+      (description
+       "This is a SoapySDR module to use multiple supported devices under
+a single device wrapper.")
+      (license license:boost1.0))))
+
+(define-public soapyremote
+  (let ((commit "f375555e7380acfd2517acde598e2e553e08df88")
+        (revision "1"))
+    (package
+      (name "soapyremote")
+      (version (git-version "0.5.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/pothosware/SoapyRemote")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0whn87wck7agsk3af4lh7nyyjn0ncs3xdny4vsd94qbjikfl6x5z"))))
+      (build-system cmake-build-system)
+      (inputs
+       (list avahi soapysdr))
+      (arguments
+       '(#:tests? #f)) ; No test suite
+      (home-page "https://github.com/pothosware/SoapyRemote")
+      (synopsis "Remote support for Soapy SDR")
+      (description
+       "This is a SoapySDR module to use a supported device transparently over
+a local network link.")
+      (license license:boost1.0))))
+
 (define-public soapyrtlsdr
   (package
     (name "soapyrtlsdr")
@@ -1457,7 +1510,7 @@ instances over the network, and general QSO and DXpedition logging.")
 (define-public wsjtx
   (package
     (name "wsjtx")
-    (version "2.5.4")
+    (version "2.6.1")
     (source
      (origin
        (method git-fetch)
@@ -1466,21 +1519,26 @@ instances over the network, and general QSO and DXpedition logging.")
              (commit (string-append "wsjtx-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0nciw9smrfcsirlwyny5r9h7sk2zvm40m56y1hxpgpmbnh6mqikh"))))
+        (base32 "1lqd77v9xm58k9g9kfwxva3mmzm1yyk1v27nws5j1a293zfg2hkw"))))
     (build-system qt-build-system)
+    (arguments
+     (list #:tests? #f)) ; No test suite
     (native-inputs
-     (list asciidoc gfortran pkg-config qttools-5 ruby-asciidoctor))
+     (list asciidoc
+           gfortran
+           pkg-config
+           qttools-5
+           ruby-asciidoctor))
     (inputs
-     `(("boost" ,boost)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
-       ("hamlib" ,wsjtx-hamlib)
-       ("libusb" ,libusb)
-       ("qtbase" ,qtbase-5)
-       ("qtmultimedia-5" ,qtmultimedia-5)
-       ("qtserialport" ,qtserialport)))
-    (arguments
-     `(#:tests? #f)) ; No test suite
+     (list boost
+           fftw
+           fftwf
+           libusb
+           qtbase-5
+           qtmultimedia-5
+           qtserialport
+           wsjtx-hamlib))
+    (home-page "https://www.physics.princeton.edu/pulsar/k1jt/wsjtx.html")
     (synopsis "Weak-signal ham radio communication program")
     (description
      "WSJT-X implements communication protocols or modes called FT4, FT8,
@@ -1488,7 +1546,6 @@ JT4, JT9, JT65, QRA64, ISCAT, MSK144, and WSPR, as well as one called Echo for
 detecting and measuring your own radio signals reflected from the Moon.  These
 modes were all designed for making reliable, confirmed QSOs under extreme
 weak-signal conditions.")
-    (home-page "https://www.physics.princeton.edu/pulsar/k1jt/wsjtx.html")
     (license license:gpl3)))
 
 (define-public jtdx
@@ -2160,7 +2217,7 @@ program that can be used to build simple signal processing flow graphs.")
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/glv2/convert-samples")
+             (url "https://codeberg.org/glv/convert-samples")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
@@ -2192,7 +2249,7 @@ Supported formats:
 @item cu32: complex made of unsigned 32 bit integers
 @item cf32: complex made of 32 bit floats
 @end itemize")
-    (home-page "https://github.com/glv2/convert-samples")
+    (home-page "https://codeberg.org/glv/convert-samples")
     (license license:gpl3+)))
 
 (define-public serialdv
diff --git a/gnu/packages/rails.scm b/gnu/packages/rails.scm
index 8f5bda4638..b1abb65a6d 100644
--- a/gnu/packages/rails.scm
+++ b/gnu/packages/rails.scm
@@ -2,6 +2,8 @@
 ;;; Copyright © 2016 Matthew Jordan <matthewjordandevops@yandex.com>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2019 Christopher Baines <mail@cbaines.net>
+;;; Copyright © 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,40 +26,151 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix packages)
+  #:use-module (guix utils)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages databases)
   #:use-module (gnu packages node)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages version-control)
   #:use-module (guix build-system ruby))
 
+(define %ruby-rails-version "7.0.4.3")
+
+(define ruby-rails-monorepo
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://github.com/rails/rails")
+          (commit (string-append "v" %ruby-rails-version))))
+    (file-name (git-file-name "ruby-rails" %ruby-rails-version))
+    (sha256
+     (base32
+      "0f5f8r8wdmdmbyl07b0z555arai4ys2j8dj3fy0mq63y9bfhcqqk"))))
+
+(define-public ruby-activesupport
+  (package
+    (name "ruby-activesupport")
+    (version %ruby-rails-version)
+    (source ruby-rails-monorepo)
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'delete-gemfiles
+            (lambda _
+              (delete-file "Gemfile")
+              (delete-file "Gemfile.lock")))
+          (add-after 'delete-gemfiles 'chdir
+            (lambda _
+              (chdir "activesupport")))
+          (add-before 'check 'check-setup
+            (lambda* (#:key native-inputs inputs #:allow-other-keys)
+              ;; Multiple tests require to set the timezone.
+              (setenv "TZDIR" (search-input-directory (or native-inputs inputs)
+                                                      "share/zoneinfo"))
+              ;; The test suite requires a memcached and a redis server.
+              (invoke "memcached" "-d")
+              (invoke "redis-server" "--daemonize" "yes")))
+          (add-before 'check 'delete-problematic-tests
+            (lambda _
+              ;; These tests fail non-deterministically.
+              (substitute* "test/cache/behaviors.rb"
+                ((".*behaviors/cache_store_behavior.*")
+                 "")
+                ((".*behaviors/encoded_key_cache_behavior.*")
+                 ""))
+              (when #$(target-x86-32?)
+                ;; This test fails on i686 (see:
+                ;; https://github.com/rails/rails/issues/47832).
+                (substitute* "test/core_ext/duration_test.rb"
+                  (("def test_iso8601_output_and_reparsing.*" all)
+                   (string-append all "    skip('fails on i686')\n"))))
+              (delete-file "test/evented_file_update_checker_test.rb")
+              ;; These tests require cache_store_behavior, disabled above.
+              (delete-file "test/cache/stores/file_store_test.rb")
+              (delete-file "test/cache/stores/mem_cache_store_test.rb")
+              (delete-file "test/cache/stores/memory_store_test.rb")
+              (delete-file "test/cache/stores/redis_cache_store_test.rb"))))))
+    (native-inputs
+     (list memcached
+           redis
+           ruby-builder
+           ruby-connection-pool
+           ruby-dalli
+           ruby-hiredis
+           ruby-libxml
+           ruby-listen
+           ruby-rack
+           ruby-redis
+           ruby-rexml
+           tzdata-for-tests))
+    (propagated-inputs
+     (list ruby-concurrent
+           ruby-i18n
+           ;; This is sub-optimal, but apparently necessary (see:
+           ;; https://github.com/rails/rails/commit/
+           ;; 9766eb4a833c26c64012230b96dd1157ebb8e8a2).
+           ruby-minitest-5.15
+           ruby-tzinfo
+           ruby-tzinfo-data))
+    (synopsis "Ruby on Rails utility library")
+    (description "ActiveSupport is a toolkit of support libraries and Ruby
+core extensions extracted from the Rails framework.  It includes support for
+multibyte strings, internationalization, time zones, and testing.")
+    (home-page "https://rubyonrails.org/")
+    (license license:expat)))
+
+(define-public ruby-globalid
+  (package
+    (name "ruby-globalid")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "globalid" version))
+       (sha256
+        (base32
+         "0kqm5ndzaybpnpxqiqkc41k4ksyxl41ln8qqr6kb130cdxsf2dxk"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f))                    ;no included tests
+    (propagated-inputs
+     (list ruby-activesupport))
+    (synopsis "Generate URIs idenfitying model instances in Ruby")
+    (description
+     "@code{GlobalID} provides a way to generate URIs from a model in Ruby that
+uniquely identify it.")
+    (home-page "https://rubyonrails.org/")
+    (license license:expat)))
+
 (define-public ruby-spring
   (package
     (name "ruby-spring")
-    (version "1.7.2")
+    (version "4.1.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-              (url "https://github.com/rails/spring")
-              (commit (string-append "v" version))))
+             (url "https://github.com/rails/spring")
+             (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0smwrndjmnr7g7jjskw05zin3gh6kx5db6yrkiqi6i9wl5mrn9n5"))))
+         "0p8hidxqnk8s1gfm1s1xb06gbbahdxjmzy6x3ybi25nkmdp0anb6"))))
     (build-system ruby-build-system)
     (arguments
-     `(#:test-target "test:unit"
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'remove-bump
-           (lambda _
-             (substitute* "spring.gemspec"
-               (("gem.add_development_dependency 'bump'") "")
-               (("gem.add_development_dependency 'activesupport'.*")
-                "gem.add_development_dependency 'activesupport'\n"))
-             (substitute* "Rakefile"
-               (("require \\\"bump/tasks\\\"") ""))
-             #t)))))
-    (native-inputs
-     (list bundler ruby-activesupport))
+     (list #:test-target "test:unit"
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'check 'remove-bump
+                 (lambda _
+                   (substitute* "spring.gemspec"
+                     (("gem.add_development_dependency 'bump'") ""))
+                   (substitute* "Rakefile"
+                     (("require \\\"bump/tasks\\\"") "")))))))
+    (native-inputs (list bundler ruby-activesupport))
     (synopsis "Ruby on Rails application preloader")
     (description
      "Spring is a Ruby on Rails application preloader.  It speeds up
@@ -124,45 +237,42 @@ API.")
 (define-public ruby-autoprefixer-rails
   (package
     (name "ruby-autoprefixer-rails")
-    (version "9.4.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "autoprefixer-rails" version))
-       (sha256
-        (base32
-         "0fxbfl3xrrjj84n98x24yzxbz4nvm6c492dxj41kkrl9z97ga13i"))))
+    (version "10.4.13.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ai/autoprefixer-rails")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1i34apjlav1qz8mdg2fyf0hvs5z32inv1snycdkhmqpkfj2ri2hh"))))
     (build-system ruby-build-system)
     (arguments
      '(#:test-target "spec"
        #:phases
        (modify-phases %standard-phases
-         (add-after 'extract-gemspec 'remove-unnecessary-dependencies
+         (add-after 'extract-gemspec 'relax-requirements
            (lambda _
-             ;; Remove the testing of compass, as its use is deprecated, and
-             ;; it's unpackaged for Guix.
-             (substitute* "autoprefixer-rails.gemspec"
-               ((".*%q<compass>.*") "\n")
-               (("\"spec/compass_spec\\.rb\"\\.freeze, ") ""))
-             (delete-file "spec/compass_spec.rb")
-
              (substitute* "Gemfile"
                ;; Remove overly strict requirement on sprockets
                ((", '>= 4\\.0\\.0\\.beta1'") "")
                ;; The mini_racer gem isn't packaged yet, and it's not directly
                ;; required, as other backends for ruby-execjs can be used.
-               (("gem 'mini_racer'") "")
-               ;; For some reason, this is required for the gems to be picked
-               ;; up
-               (("gemspec") "gemspec\ngem 'tzinfo-data'\ngem 'sass'"))
-             #t)))))
+               (("gem \"mini_racer\"") "")
+               ;; For some reason, this is required for the tzinfo-data gem to
+               ;; be picked up.
+               (("gemspec") "gemspec\ngem 'tzinfo-data'\n"))
+             (substitute* "autoprefixer-rails.gemspec"
+               ((".*rubocop.*") ""))))))) ;provided by 'standard'
     (native-inputs
      (list bundler
            ruby-rails
            ruby-rspec-rails
-           ;; This is needed for a test, but I'm unsure why
-           ruby-sass
-           ;; This is used as the ruby-execjs runtime
+           ruby-sassc-rails
+           ruby-sprockets
+           ruby-standard
+           ;; This is used at runtime by ruby-execjs.
            node))
     (propagated-inputs
      (list ruby-execjs))
@@ -176,67 +286,133 @@ Can I Use website.")
 
 (define-public ruby-activemodel
   (package
-   (name "ruby-activemodel")
-   (version "6.1.3")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (rubygems-uri "activemodel" version))
-     (sha256
-      (base32
-       "07m85r00cd1dzxg65zr9wjrdqppw51b5ka9c5mrz92vnw18kfb70"))))
-   (build-system ruby-build-system)
-   (arguments
-    '(;; No included tests
-      #:tests? #f))
-   (propagated-inputs
-    (list ruby-activesupport))
-   (synopsis "Toolkit for building modeling frameworks like Active Record")
-   (description
-    "This package provides a toolkit for building modeling frameworks like
+    (name "ruby-activemodel")
+    (version %ruby-rails-version)
+    (source ruby-rails-monorepo)
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'chdir
+            (lambda _
+              (chdir "activemodel")))
+          (add-after 'chdir 'delete-problematic-tests
+            (lambda _
+              ;; We do not want to depend on ruby-railties at this stage.
+              (delete-file "test/cases/railtie_test.rb"))))))
+    (native-inputs (list ruby-bcrypt))
+    (propagated-inputs (list ruby-activesupport))
+    (synopsis "Toolkit for building modeling frameworks like Active Record")
+    (description
+     "This package provides a toolkit for building modeling frameworks like
 Active Record.  ActiveSupport handles attributes, callbacks, validations,
 serialization, internationalization, and testing.")
-   (home-page "https://rubyonrails.org/")
-   (license license:expat)))
+    (home-page "https://rubyonrails.org/")
+    (license license:expat)))
 
 (define-public ruby-activerecord
   (package
-   (name "ruby-activerecord")
-   (version "6.1.3")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (rubygems-uri "activerecord" version))
-     (sha256
-      (base32
-       "03kr6vslwd9iw89jidjpjlp7prr2rf7kpsfa4fz03g9by0kliivs"))))
-   (build-system ruby-build-system)
-   (arguments
-    '(;; No included tests
-      #:tests? #f))
-   (propagated-inputs
-    (list ruby-activemodel ruby-activesupport ruby-arel))
-   (synopsis "Ruby library to connect to relational databases")
-   (description
-    "Active Record connects classes to relational database table to establish
+    (name "ruby-activerecord")
+    (version %ruby-rails-version)
+    (source ruby-rails-monorepo)
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'chdir
+            (lambda _
+              (chdir "activerecord")))
+          (delete 'check)
+          (add-after 'install 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                ;; Avoid running the database tests, which require railties
+                ;; and/or database servers.
+                (invoke "ruby" "-Itest" "test/cases/base_test.rb"))))
+          (add-before 'check 'set-GEM_PATH
+            (lambda _
+              (setenv "GEM_PATH" (string-append
+                                  (getenv "GEM_PATH") ":"
+                                  #$output "/lib/ruby/vendor_ruby"))))
+          (add-before 'check 'check-setup
+            (lambda* (#:key native-inputs inputs #:allow-other-keys)
+              ;; A few tests require to set the timezone.
+              (setenv "TZDIR" (search-input-directory (or native-inputs inputs)
+                                                      "share/zoneinfo")))))))
+    (native-inputs (list tzdata-for-tests))
+    (propagated-inputs (list ruby-activemodel ruby-activesupport ruby-sqlite3))
+    (synopsis "Ruby library to connect to relational databases")
+    (description
+     "Active Record connects classes to relational database table to establish
 an almost zero-configuration persistence layer for applications.")
-   (home-page "https://rubyonrails.org")
-   (license license:expat)))
+    (home-page "https://rubyonrails.org")
+    (license license:expat)))
 
 (define-public ruby-rspec-rails
   (package
     (name "ruby-rspec-rails")
-    (version "3.8.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "rspec-rails" version))
-       (sha256
-        (base32
-         "1pf6n9l4sw1arlax1bdbm1znsvl8cgna2n6k6yk1bi8vz2n73ls1"))))
+    (version "6.0.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rspec/rspec-rails")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0wmrpwv2vgrwmby01pld6r6sdfa265lb6pd3fp2kifs40nn7ff6b"))))
     (build-system ruby-build-system)
     (arguments
-     '(#:tests? #f)) ; No included tests
+     (list
+      ;; Run the 'spec' instead of the 'default' Rake target to avoid running
+      ;; the acceptance test suite, which doesn't seem to allow being run
+      ;; offline (see: https://github.com/rspec/rspec-rails/issues/2660).
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'relax-requirements
+            (lambda _
+              (substitute* "Gemfile"
+                ;; Remove a few extraneous requirements.
+                ((".*yard.*") "")
+                ((".*github-markup.*") "")
+                ((".*redcarpet.*") "")
+                ((".*relish.*") "")
+                ((".*rubocop.*") ""))
+              (substitute* "Gemfile-rspec-dependencies"
+                ((", :git => \"https://github.com/rspec.*")
+                 "\n"))
+              (substitute* "Gemfile-rails-dependencies"
+                (("gem 'puma', '< 6.0.0'")
+                 "gem 'puma', '>= 6.0.0'"))
+              (substitute* "rspec-rails.gemspec"
+                (("'aruba',    '~> 0.14.12'")
+                 "'aruba',    '>= 0.14.12'")
+                (("'cucumber', '~> 7.0'")
+                 "'cucumber', '>= 7.0'"))))
+          (replace 'replace-git-ls-files
+            (lambda _
+              (substitute* "rspec-rails.gemspec"
+                (("`git ls-files -- lib/\\*`")
+                 "`find lib -type f |sort`"))))
+          (add-before 'check 'patch-tests
+            (lambda _
+              (substitute* "spec/rspec/rails_spec.rb"
+                (("`git ls-files -z`")
+                 "`find . -type f -not -regex '.*\\.gem$' -print0 | \
+sort -z | cut -zc3-`")))))))
+    (native-inputs
+     (list ruby-ammeter-bootstrap
+           ruby-aruba
+           ruby-capybara
+           ruby-cucumber
+           ruby-puma
+           ruby-rails
+           ruby-rspec
+           ruby-selenium-webdriver
+           ruby-sqlite3))
     (propagated-inputs
      (list ruby-actionpack
            ruby-activesupport
@@ -313,21 +489,23 @@ useful when writing tests.")
 (define-public ruby-actiontext
   (package
     (name "ruby-actiontext")
-    (version "6.1.3")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "actiontext" version))
-        (sha256
-         (base32
-          "04k4z4xj40sbzbgx0x9m6i8k0nc22jb6dkrlslj16p2z2dfnwhqg"))))
+    (version %ruby-rails-version)
+    (source ruby-rails-monorepo)
     (build-system ruby-build-system)
-   (arguments
-    '(;; No included tests
-      #:tests? #f))
+    (arguments
+     (list
+      #:tests? #f                       ;avoid a cycle with ruby-rails
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'chdir
+            (lambda _
+              (chdir "actiontext"))))))
     (propagated-inputs
-     (list ruby-actionpack ruby-activerecord ruby-activestorage
-           ruby-activesupport ruby-nokogiri))
+     (list ruby-actionpack
+           ruby-activerecord
+           ruby-activestorage
+           ruby-activesupport
+           ruby-nokogiri))
     (synopsis "Edit and display rich text in Rails applications")
     (description
      "ActionText edits and displays rich text in Rails applications.")
@@ -337,21 +515,27 @@ useful when writing tests.")
 (define-public ruby-actionview
   (package
    (name "ruby-actionview")
-   (version "6.1.3")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (rubygems-uri "actionview" version))
-     (sha256
-      (base32
-       "1s5kc1abi7id1g54lz1npgc42zl7pbz172wp8pi7j3s7qljafzw5"))))
-   (build-system ruby-build-system)
-   (arguments
-    '(;; No included tests
-      #:tests? #f))
+    (version %ruby-rails-version)
+    (source ruby-rails-monorepo)
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      ;; XXX: This gem appears to load action_controller, provided by
+      ;; ruby-actionpack, but actionpack propagates ruby-actionview,
+      ;; introducing a circular dependency.
+      #:tests? #f
+      #:test-target "test:template"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'chdir
+            (lambda _
+              (chdir "actionview"))))))
    (propagated-inputs
-    (list ruby-activesupport ruby-builder ruby-erubi
-          ruby-rails-dom-testing ruby-rails-html-sanitizer))
+    (list ruby-activesupport
+          ruby-builder
+          ruby-erubi
+          ruby-rails-dom-testing
+          ruby-rails-html-sanitizer))
    (synopsis "Conventions and helpers for building web pages")
    (description
     "ActionView provides conventions and helpers for building web pages in
@@ -361,104 +545,200 @@ Ruby.")
 
 (define-public ruby-actionpack
   (package
-   (name "ruby-actionpack")
-   (version "6.1.3")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (rubygems-uri "actionpack" version))
-     (sha256
-      (base32
-       "030yyaskzlic5cp4d9zbwwr3rhf4k6hsls44a7ihsfd6r8mlivq5"))))
-   (build-system ruby-build-system)
-   (arguments
-    '(;; No included tests
-      #:tests? #f))
-   (propagated-inputs
-    (list ruby-actionview
-          ruby-activesupport
-          ruby-rack
-          ruby-rack-test
-          ruby-rails-dom-testing
-          ruby-rails-html-sanitizer))
-   (synopsis "Conventions for building and testing MVC web applications")
-   (description
-    "ActionPack provides conventions for building and testing MVC web
+    (name "ruby-actionpack")
+    (version %ruby-rails-version)
+    (source ruby-rails-monorepo)
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'chdir
+            (lambda _
+              (chdir "actionpack")))
+          (add-before 'check 'delete-problematic-tests
+            (lambda _
+              (let-syntax ((skip-tests
+                            (syntax-rules ()
+                              ((_ file test ...)
+                               (substitute* file
+                                 ;; ActiveSupport test case.
+                                 (((string-append "test \"" test "\".*") all)
+                                  (string-append
+                                   all "    skip    'fails on guix'\n")) ...
+                                 ;; MiniTest test case.
+                                 (((string-append "def " test ".*") all)
+                                  (string-append
+                                   all "    skip('fails on guix')\n")) ...)))))
+
+                (with-directory-excursion "test"
+                  (for-each delete-file
+                            ;; These tests depend on rails, which depends on
+                            ;; this package.
+                            '("dispatch/mount_test.rb"
+                              "dispatch/prefix_generation_test.rb"
+                              "dispatch/routing_assertions_test.rb"
+                              "dispatch/routing/inspector_test.rb"
+                              "controller/live_stream_test.rb"
+                              "controller/integration_test.rb"
+                              "controller/test_case_test.rb"))
+
+                  ;; The following test failures have been reported upstream
+                  ;; (see: https://github.com/rails/rails/issues/47615).
+                  (skip-tests "controller/new_base/render_streaming_test.rb"
+                              ;; These tests fail due to white space
+                              ;; characters in the compared strings.
+                              "rendering with streaming no layout"
+                              "rendering with streaming enabled at the \
+class level"
+                              "rendering with streaming given to render"
+                              "rendering with layout exception"
+                              "rendering with template exception"
+                              "rendering with streaming do not override \
+explicit cache control given to render")
+
+                  (skip-tests "dispatch/system_testing/driver_test.rb"
+                              ;; These tests require Firefox.
+                              "define extra capabilities using headless_firefox"
+                              "define extra capabilities using firefox")
+
+                  (skip-tests "dispatch/session/cache_store_test.rb"
+                              ;; This test fails with: "NoMethodError:
+                              ;; undefined method `hash_for' for
+                              ;; #<Rack::Test::CookieJar:0x0000000003572170>".
+                              "test_getting_session_value_after_session_reset"))))))))
+    (native-inputs
+     (list ruby-activemodel
+           ruby-capybara
+           ruby-selenium-webdriver
+           ruby-zeitwerk))
+    (propagated-inputs
+     (list ruby-actionview
+           ruby-activesupport
+           ruby-rack
+           ruby-rack-cache
+           ruby-rack-session
+           ruby-rack-test
+           ruby-rails-dom-testing
+           ruby-rails-html-sanitizer))
+    (synopsis "Conventions for building and testing MVC web applications")
+    (description
+     "ActionPack provides conventions for building and testing MVC web
 applications.  These work with any Rack-compatible server.")
-   (home-page "https://rubyonrails.org/")
-   (license license:expat)))
+    (home-page "https://rubyonrails.org/")
+    (license license:expat)))
 
 (define-public ruby-actioncable
   (package
-   (name "ruby-actioncable")
-   (version "6.1.3")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (rubygems-uri "actioncable" version))
-     (sha256
-      (base32
-       "1cgb1l0gml1vklxka2djpi5q5b4bgzgm5pahzfjvvgm5vzvrvi9v"))))
-   (build-system ruby-build-system)
-   (arguments
-    '(;; No included tests
-      #:tests? #f))
-   (propagated-inputs
-    (list ruby-actionpack ruby-activesupport ruby-nio4r
-          ruby-websocket-driver))
-   (synopsis "Integrate integrates WebSockets with Rails applications")
-   (description
-    "Action Cable integrates WebSockets with Rails applications.  Through
+    (name "ruby-actioncable")
+    (version %ruby-rails-version)
+    (source ruby-rails-monorepo)
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'chdir
+            (lambda _
+              (chdir "actioncable")))
+          (delete 'check)               ;moved after install phase
+          (add-after 'install 'check
+            (assoc-ref %standard-phases 'check))
+          (add-before 'check 'set-GEM_PATH
+            (lambda _
+              (setenv "GEM_PATH" (string-append
+                                  (getenv "GEM_PATH") ":"
+                                  #$output "/lib/ruby/vendor_ruby"))))
+          (add-before 'check 'disable-problematic-tests
+            (lambda _
+              ;; There are multiple client test failures (see:
+              ;; https://github.com/rails/rails/issues/47617).
+              (delete-file "test/client_test.rb")))
+          (add-before 'check 'start-redis
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "redis-server" "--daemonize" "yes")))))))
+    (native-inputs
+     (list redis
+           ruby-activerecord
+           ruby-pg
+           ruby-puma
+           ruby-redis
+           ruby-websocket-client-simple))
+    (propagated-inputs
+     (list ruby-actionpack
+           ruby-activesupport
+           ruby-nio4r
+           ruby-websocket-driver))
+    (synopsis "Integrate integrates WebSockets with Rails applications")
+    (description
+     "Action Cable integrates WebSockets with Rails applications.  Through
 WebSockets it allows for real-time features in web applications.")
-   (home-page "https://rubyonrails.org/")
-   (license license:expat)))
+    (home-page "https://rubyonrails.org/")
+    (license license:expat)))
 
 (define-public ruby-activejob
   (package
-   (name "ruby-activejob")
-   (version "6.1.3")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (rubygems-uri "activejob" version))
-     (sha256
-      (base32
-       "175d8q0achdlsxjsvq0w9znvfqfkgbj75kbmdrvg4fb277wwplmf"))))
-   (build-system ruby-build-system)
-   (arguments
-    '(;; No included tests
-      #:tests? #f))
-   (propagated-inputs
-    (list ruby-activesupport ruby-globalid))
-   (synopsis "Declare job classes for multiple backends")
-   (description
-    "ActiveJob allows declaring job classes in a common way across Rails
-applications.")
-   (home-page "https://rubyonrails.org/")
-   (license license:expat)))
+    (name "ruby-activejob")
+    (version %ruby-rails-version)
+    (source ruby-rails-monorepo)
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'chdir
+            (lambda _
+              (chdir "activejob")))
+          (add-after 'chdir 'delete-problematic-tests
+            (lambda _
+              (substitute* "Rakefile"
+                ;; Remove the adapters that aren't yet packaged or would
+                ;; introduce cyclic dependencies.
+                (("backburner ") "")
+                (("resque ") "")
+                (("sidekiq ") "")
+                (("sneakers ") "")
+                (("sucker_punch ") ""))
+              (substitute* "test/cases/exceptions_test.rb"
+                (("ActiveJob::QueueAdapters::SneakersAdapter") "")))))))
+    (native-inputs
+     (list ruby-queue-classic
+           ruby-delayed-job
+           ruby-que
+           ruby-zeitwerk))
+    (propagated-inputs
+     (list ruby-activesupport
+           ruby-globalid))
+    (synopsis "Declare job classes for multiple backends")
+    (description "ActiveJob allows declaring job classes in a common way
+across Rails applications.")
+    (home-page "https://rubyonrails.org/")
+    (license license:expat)))
 
 (define-public ruby-activestorage
   (package
     (name "ruby-activestorage")
-    (version "6.1.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "activestorage" version))
-       (sha256
-        (base32
-         "0gkxvbi5w8zmdxpiyz3b10kzz8cxqqh9bj81sjl3fp8wa3v2ld4i"))))
+    (version %ruby-rails-version)
+    (source ruby-rails-monorepo)
     (build-system ruby-build-system)
     (arguments
-     '(;; No included tests
-       #:tests? #f))
+     (list
+      ;; The test suite is disabled, because it activestorage requires
+      ;; 'rails', which would introduce a dependency cycle.
+      #:tests? #f
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'chdir
+            (lambda _
+              (chdir "activestorage"))))))
     (propagated-inputs
      (list ruby-actionpack
            ruby-activejob
            ruby-activerecord
            ruby-activesupport
            ruby-marcel
-           ruby-mimemagic))
+           ruby-mini-mime))
     (synopsis "Integrate file storage services in to Rails applications")
     (description
      "ActiveStorage integrates file storage services with Rails applications,
@@ -469,25 +749,27 @@ allowing files to be attached to ActiveRecord models.")
 (define-public ruby-actionmailbox
   (package
     (name "ruby-actionmailbox")
-    (version "6.1.3")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "actionmailbox" version))
-        (sha256
-         (base32
-         "0wv2p24xn4f0kj8kiyagkn934hzrcp98vzjqxwd4r75qq0cijadp"))))
+    (version %ruby-rails-version)
+    (source ruby-rails-monorepo)
     (build-system ruby-build-system)
-   (arguments
-    '(;; No included tests
-      #:tests? #f))
+    (arguments
+     (list
+      #:tests? #f                       ;avoid a cycle with ruby-rails
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'chdir
+            (lambda _
+              (chdir "actionmailbox"))))))
     (propagated-inputs
      (list ruby-actionpack
            ruby-activejob
            ruby-activerecord
            ruby-activestorage
            ruby-activesupport
-           ruby-mail))
+           ruby-mail
+           ruby-net-imap
+           ruby-net-pop
+           ruby-net-smtp))
     (synopsis "Receive and process incoming emails in Rails applications")
     (description
      "ActionMailbox receives and processes incoming emails in Rails applications.")
@@ -496,69 +778,560 @@ allowing files to be attached to ActiveRecord models.")
 
 (define-public ruby-actionmailer
   (package
-   (name "ruby-actionmailer")
-   (version "6.1.3")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (rubygems-uri "actionmailer" version))
-     (sha256
-      (base32
-       "0lic4mc6wqi3p9ipdqljl64vd9ndabm0k8hww0m07sfdhwsl5ba9"))))
-   (build-system ruby-build-system)
-   (arguments
-    '(;; No included tests
-      #:tests? #f))
-   (propagated-inputs
-    (list ruby-actionpack
-          ruby-actionview
-          ruby-activejob
-          ruby-activesupport
-          ruby-mail
-          ruby-rails-dom-testing))
-   (synopsis "Work with emails using the controller/view pattern")
-   (description
-    "Compose, deliver, receive, and test emails using the controller/view
+    (name "ruby-actionmailer")
+    (version %ruby-rails-version)
+    (source ruby-rails-monorepo)
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:tests? #f                       ;avoid a cycle with ruby-rails
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'chdir
+            (lambda _
+              (chdir "actionmailer"))))))
+    (propagated-inputs
+     (list ruby-actionpack
+           ruby-actionview
+           ruby-activejob
+           ruby-activesupport
+           ruby-mail
+           ruby-net-imap
+           ruby-net-pop
+           ruby-net-smtp
+           ruby-rails-dom-testing))
+    (synopsis "Work with emails using the controller/view pattern")
+    (description
+     "Compose, deliver, receive, and test emails using the controller/view
 pattern.  Including support for multipart email and attachments.")
-   (home-page "https://rubyonrails.org/")
-   (license license:expat)))
+    (home-page "https://rubyonrails.org/")
+    (license license:expat)))
+
+;; A variant where the ruby-rspec-rails dependency purposefully omitted to
+;; avoid a dependency cycle with that same package.
+(define ruby-ammeter-bootstrap
+  (package
+    (name "ruby-ammeter-bootstrap")
+    (version "1.1.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "ammeter" version))
+              (sha256
+               (base32
+                "1bcslj6y3lgaknd9fpj32m1r4is7blyxygxzmwidq9cjwkrn4msh"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:tests? #f
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'extract-gemspec 'remove-rails-requirement
+                 (lambda _
+                   (substitute* "Gemfile"
+                     (("gem 'rspec-rails', rspec_version")
+                      "")
+                     (("gem 'rails', rails_version")
+                      "")))))))
+    (propagated-inputs (list ruby-activesupport ruby-railties))
+    (synopsis "Write specs for your Rails 3+ generators")
+    (description "The @code{ammeter} gem makes it easy to write specs for
+Rails generators.  An existing user is @code{rspec-rails}, which uses
+@code{ammeter} to spec its own generators.")
+    (home-page "https://github.com/alexrothenberg/ammeter")
+    (license license:expat)))
+
+(define-public ruby-ammeter
+  (package/inherit ruby-ammeter-bootstrap
+    (name "ruby-ammeter")
+    ;; TODO: The test suite requires multiple packages which are not packaged
+    ;; yet.
+    (arguments (list #:tests? #f))
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs ruby-ammeter-bootstrap)
+       (append ruby-rspec-rails)))))
+
+(define-public ruby-bootsnap
+  (package
+    (name "ruby-bootsnap")
+    (version "1.16.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/Shopify/bootsnap")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1gaih5v4jjndrkn0crrr5mxnwc3cd0f3i955n62ghk29zabvd7wf"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "default"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'relax-requirements
+            (lambda _
+              (substitute* "Gemfile"
+                ;; Rubocop and byebug are not actually needed to run the
+                ;; tests.
+                ((".*rubocop.*") "")
+                ((".*byebug.*") ""))))
+          (replace 'replace-git-ls-files
+            (lambda _
+              (substitute* "bootsnap.gemspec"
+                (("`git ls-files -z ext lib`")
+                 "`find ext lib -type f -print0 | sort -z`")))))))
+    (native-inputs (list ruby-mocha ruby-rake-compiler))
+    (propagated-inputs (list ruby-msgpack))
+    (synopsis "Accelerator for large Ruby/Rails application")
+    (description "Bootsnap is a library that plugs into Ruby, with optional
+support for YAML, to optimize and cache expensive computations.")
+    (home-page "https://github.com/Shopify/bootsnap")
+    (license license:expat)))
+
+;;; A private variant used to bootstrap railties.
+(define ruby-importmap-rails-bootstrap
+  (package
+    (name "ruby-importmap-rails-bootstrap")
+    (version "1.1.5")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/rails/importmap-rails")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1d8pqqqrvsnm8rpr7qkpcxpscif61xymi509v1c62laadvhcmklg"))))
+    (build-system ruby-build-system)
+    (arguments (list #:tests? #f))             ;avoid all extra dependencies
+    ;; Leave out ruby-railties, for bootstrapping purposes.
+    (propagated-inputs (list ruby-actionpack))
+    (synopsis "Tool to manage modern JavaScript in Rails")
+    (description "Import maps can import JavaScript modules using logical
+names that map to versioned/digested files -- directly from the browser.  It
+makes it possible to build modern JavaScript applications using JavaScript
+libraries made for ES modules (ESM) without the need for transpiling or
+bundling, which removes the need for Webpack, Yarn, npm, or any other part of
+the JavaScript toolchain.  All that is needed is the asset pipeline that is
+already included in Rails.")
+    (home-page "https://github.com/rails/importmap-rails")
+    (license license:expat)))
+
+(define-public ruby-importmap-rails
+  (package/inherit ruby-importmap-rails-bootstrap
+    (name "ruby-importmap-rails")
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'extract-gemspec 'relax-requirements
+                 (lambda _
+                   (delete-file "gemfiles/rails_7_propshaft.gemfile.lock")
+                   (substitute* "gemfiles/rails_7_propshaft.gemfile"
+                     ;; Remove appraisal, and add tzinfo-data, which needs to
+                     ;; be in the Gemfile to become available.
+                     ((".*appraisal.*")
+                      "gem 'tzinfo-data'\n")
+                     ;; This gem is for managing *installation* of
+                     ;; webdrivers... we do not want that.
+                     ((".*gem \"webdrivers\".*") ""))))
+               (add-before 'check 'set-BUNDLE_GEMFILE
+                 (lambda _
+                   ;; The default Gemfile is for Rails 6.
+                   (setenv "BUNDLE_GEMFILE"
+                           "gemfiles/rails_7_propshaft.gemfile")))
+               (add-before 'check 'disable-problematic-tests
+                 (lambda _
+                   ;; The integration tests require networking; disable them.
+                   (delete-file "test/npm_integration_test.rb")
+                   (delete-file "test/packager_integration_test.rb"))))))
+    (native-inputs
+     (list ruby-byebug
+           ruby-capybara
+           ruby-propshaft
+           ruby-rails
+           ruby-rexml
+           ruby-selenium-webdriver
+           ruby-sqlite3
+           ruby-stimulus-rails
+           ruby-turbo-rails
+           ruby-tzinfo
+           ruby-tzinfo-data))
+    (propagated-inputs
+     (list ruby-actionpack
+           ruby-railties))))
+
+(define-public ruby-marcel
+  (package
+    (name "ruby-marcel")
+    (version "1.0.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rails/marcel")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1i1x24afmn09n48fj4yz2pdm6vlfnq14gism0cgxsyqmlrvsxajn"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "default"
+           #:phases #~(modify-phases %standard-phases
+                        (add-before 'check 'disable-problematic-tests
+                          (lambda _
+                            (substitute* "test/mime_type_test.rb"
+                              ;; One test fails because of the newer rack
+                              ;; version used (see:
+                              ;; https://github.com/rails/marcel/issues/91).
+                              (("test \"gets content type.*" all)
+                               (string-append
+                                all "    skip('fails on guix')\n"))))))))
+    (native-inputs (list ruby-byebug ruby-nokogiri ruby-rack))
+    (propagated-inputs (list ruby-mimemagic))
+    (synopsis "MIME type detection using magic numbers, filenames and extensions")
+    (description
+     "@code{marcel} provides @acronym{MIME, Multipurpose Internet Mail
+Extensions} type detection using magic numbers, filenames, and extensions")
+    (home-page "https://github.com/rails/marcel")
+    (license license:expat)))
+
+(define-public ruby-propshaft
+  (package
+    (name "ruby-propshaft")
+    (version "0.7.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "propshaft" version))
+              (sha256
+               (base32
+                "19s5qvfady49b9b6dcvz6nsna1lvckw509ddh3ihmdz0w4qrjy49"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-actionpack ruby-activesupport ruby-rack
+                             ruby-railties))
+    (synopsis "Asset pipeline library for Rails")
+    (description "Propshaft is an asset pipeline library for Rails.  It's
+built for an era where bundling assets to save on HTTP connections is no
+longer urgent, where JavaScript and CSS are either compiled by dedicated
+Node.js bundlers or served directly to the browsers, and where increases in
+bandwidth have made the need for minification less pressing.  These factors
+allow for a dramatically simpler and faster asset pipeline compared to
+previous options, like Sprockets.")
+    (home-page "https://github.com/rails/propshaft")
+    (license license:expat)))
 
+;;; Pro-tip: to get a summary of the failures, run
+;;; 'M-x occur [1-9][0-9]* \(failures\|errors\)' on the build log.
 (define-public ruby-railties
   (package
-   (name "ruby-railties")
-   (version "6.1.3")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (rubygems-uri "railties" version))
-     (sha256
-      (base32
-       "1685y5dcfgcq0b38j13vrpkhiiblmrl64wa9w065669bkgmkw4ra"))))
-   (build-system ruby-build-system)
-   (arguments
-    '(;; No included tests
-      #:tests? #f))
-   (propagated-inputs
-    (list ruby-actionpack ruby-activesupport ruby-method-source ruby-rake
-          ruby-thor))
-   (synopsis "Rails internals, including application bootup and generators")
-   (description
-    "@code{railties} provides the core Rails internals including handling
-application bootup, plugins, generators, and Rake tasks.")
-   (home-page "https://rubyonrails.org/")
-   (license license:expat)))
+    (name "ruby-railties")
+    (version %ruby-rails-version)
+    (source ruby-rails-monorepo)
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'delete-gemfiles
+            (lambda _
+              ;; Delete Gemfile and Gemfile.lock, as they contains too many
+              ;; dependencies not actually useful here.
+              (delete-file "Gemfile")
+              (delete-file "Gemfile.lock")))
+          (add-after 'extract-gemspec 'chdir
+            (lambda _
+              (chdir "railties")))
+          (add-after 'chdir 'disable-bundler
+            (lambda _
+              (substitute* (append (list "Rakefile")
+                                   (find-files "test" "\\.rb$")
+                                   (find-files "lib" "\\.tt$"))
+                ;; Do not use Bundler, which causes errors such as not finding
+                ;; the gem of this package (railties), or preferring the other
+                ;; in-source gems.
+                (("`bundle exec") "`")
+                ((".*require \"bundler/setup\".*") "")
+                ((".*Bundler.require.*") ""))
+              ;; Adjust a runtime substitution that uses a removed
+              ;; Bundler.require in its pattern; instead of matching
+              ;; "Bundler.require", it now appends to the 'require
+              ;; "rails/all"' line in the generated 'application.rb' template
+              ;; generated from
+              ;; "lib/rails/generators/rails/app/templates/config/application.rb.tt".
+              (substitute* "test/isolation/abstract_unit.rb"
+                (("contents.sub!\\(/\\^Bundler\\\\.require\\.\\*/, \"([^\"]*)"
+                  _ replacement)
+                 (format #f "contents.sub!('require \"rails/all\"', \"\\\\0\\n~a"
+                         replacement)))))
+          (add-after 'chdir 'do-not-load-other-gems-from-source
+            (lambda _
+              ;; The Rakefile adds '-I' Ruby options so that the other Rails
+              ;; libraries are loaded from source; since they are already
+              ;; packaged separately, use these instead.
+              (substitute* "Rakefile"
+                ((".*\"\\.\\./activesupport/lib\",.*") "")
+                ((".*\"\\.\\./actionpack/lib\",.*") "")
+                ((".*\"\\.\\./actionview/lib\",.*") "")
+                ((".*\"\\.\\./activemodel/lib\".*") ""))))
+          (add-after 'chdir 'patch-paths
+            (lambda _
+              (substitute* "lib/rails/generators/base.rb"
+                (("/usr/bin/env") (which "env")))))
+          (delete 'check)               ;moved after install phase
+          (add-after 'install 'check
+            (assoc-ref %standard-phases 'check))
+          (add-before 'check 'prepare-for-tests
+            (lambda _
+              (define (touch file-name)
+                (call-with-output-file file-name (const #t)))
+              ;; Otherwise, the test suite attempts to use yarn to fetch
+              ;; NodeJS modules.
+              (mkdir-p "../actionview/lib/assets/compiled")
+              (touch "../actionview/lib/assets/compiled/rails-ujs.js")
+              (mkdir-p "test/isolation/assets/node_modules")
+              ;; Git requires to be able to write to HOME.
+              (setenv "HOME" "/tmp")))
+          (add-before 'check 'disable-problematic-tests
+            (lambda _
+              (let-syntax ((skip-tests
+                            (syntax-rules ()
+                              ((_ file test ...)
+                               (substitute* file
+                                 ;; ActiveSupport test case.
+                                 (((string-append "test \"" test "\".*") all)
+                                  (string-append
+                                   all "    skip    'fails on guix'\n")) ...
+                                   ;; MiniTest test case.
+                                 (((string-append "def " test ".*") all)
+                                  (string-append
+                                   all "    skip('fails on guix')\n")) ...)))))
+                (with-directory-excursion "test"
+                  ;; This test requires 'rails' and Bundler.
+                  (delete-file "application/server_test.rb")
+                  ;; These tests are incompatible with MiniTest 5.17 (see:
+                  ;; https://github.com/rails/rails/issues/47657).
+                  (skip-tests "generators_test.rb"
+                              "test_invoke_with_config_values"
+                              "test_simple_invoke"
+                              "test_should_give_higher_preference_to_rails_generators"
+                              "test_nested_fallbacks_for_generators"
+                              "test_fallbacks_for_generators_on_invoke"
+                              "test_invoke_with_default_values"
+                              "test_invoke_with_nested_namespaces")
+                  ;; These tests requires the assets which we lack.
+                  (delete-file "application/assets_test.rb")
+                  (delete-file "railties/generators_test.rb")
+                  (skip-tests "generators/shared_generator_tests.rb"
+                              ;; This test checks that bin/rails has /usr/bin/env has a
+                              ;; shebang and fails.
+                              "test_shebang_when_is_the_same_as_default_use_env")
+                  (skip-tests "generators/app_generator_test.rb"
+                              ;; This test requires networking.
+                              "test_template_from_url"
+                              ;; This test requires Bundler.
+                              "test_generation_use_original_bundle_environment"
+                              ;; This test requires assets.
+                              "test_css_option_with_cssbundling_gem"
+                              ;; These tests require the rails/command
+                              ;; namespace provided by the 'ruby-rails'
+                              ;; package, which depends on this one.
+                              "test_css_option_with_asset_pipeline_tailwind"
+                              "test_hotwire")
+                  (skip-tests
+                   "generators/plugin_generator_test.rb"
+                   ;; These tests require assets.
+                   "test_model_with_existent_application_record_in_mountable_engine"
+                   "test_dummy_application_loads_plugin"
+                   "test_generate_application_mailer_when_does_not_exist_in_\
+mountable_engine"
+                   "test_generate_mailer_layouts_when_does_not_exist_in_mountable_engine"
+                   "test_ensure_that_migration_tasks_work_with_mountable_option"
+                   "test_generating_controller_inside_mountable_engine"
+                   "test_generate_application_job_when_does_not_exist_in_mountable_engine"
+                   "test_run_default"
+                   ;; This test expects a /usr/bin/env shebang.
+                   "test_shebang")
+                  ;; The following generator tests require assets.
+                  (skip-tests "generators/plugin_test_runner_test.rb"
+                              "test_run_default")
+                  (skip-tests
+                   "generators/scaffold_controller_generator_test.rb"
+                   "test_controller_tests_pass_by_default_inside_full_engine"
+                   "test_controller_tests_pass_by_default_inside_mountable_engine")
+                  (skip-tests
+                   "generators/scaffold_generator_test.rb"
+                   "test_scaffold_tests_pass_by_default_inside_mountable_engine"
+                   "test_scaffold_tests_pass_by_default_inside_api_mountable_engine"
+                   "test_scaffold_tests_pass_by_default_inside_api_full_engine"
+                   "test_scaffold_on_invoke_inside_mountable_engine"
+                   "test_scaffold_tests_pass_by_default_inside_full_engine"
+                   "test_scaffold_tests_pass_by_default_inside_namespaced_\
+mountable_engine")
+                  (skip-tests "generators/test_runner_in_engine_test.rb"
+                              "test_run_default"
+                              "test_rerun_snippet_is_relative_path")
+                  ;; The actions_test tests depend on assets or the rails gem.
+                  (delete-file "generators/actions_test.rb")
+                  (skip-tests "engine/commands_test.rb"
+                              "test_server_command_work_inside_engine"
+                              "test_runner_command_work_inside_engine")
+                  ;; These tests fails because of cleanup code
+                  ;; when the environment lacks a PTY device (see:
+                  ;; https://github.com/rails/rails/issues/47656).
+                  (delete-file "engine/commands_test.rb")
+                  ;; The following tests require the 'rails' gem.
+                  (skip-tests "application/test_runner_test.rb"
+                              "test_run_app_without_rails_loaded"
+                              "test_generated_scaffold_works_with_rails_test"
+                              "test_load_fixtures_when_running_test_suites"
+                              "test_run_in_parallel_with_unmarshable_exception"
+                              "test_run_in_parallel_with_unknown_object")
+                  (skip-tests
+                   "application/test_test.rb"
+                   "automatically synchronizes test schema after rollback"
+                   "hooks for plugins"
+                   "sql structure migrations when adding column to existing table"
+                   "sql structure migrations"
+                   "ruby schema migrations")
+                  ;; These tests require a PostgreSQL server accepting
+                  ;; connections under /var/run/postgresql.
+                  (skip-tests
+                   "application/rake_test.rb"
+                   "test_not_protected_when_previous_migration_was_not_production")
+                  (delete-file "application/rake/dbs_test.rb")
+                  (delete-file "application/rake/migrations_test.rb")
+                  (delete-file "application/rake/multi_dbs_test.rb")
+                  (skip-tests "engine/test_test.rb"
+                              "automatically synchronize test schema")
+                  (skip-tests "isolation/abstract_unit.rb" "use_postgresql")
+                  (skip-tests "railties/engine_test.rb"
+                              "active_storage:install task works within engine"
+                              "active_storage:update task works within engine"
+                              "rake environment can be called in the engine"
+                              "mountable engine should copy migrations within engine_path"
+                              ;; This test fails because we do not use the
+                              ;; in-source active/action gems.
+                              "i18n files have lower priority than application ones"
+                              ;; This test fails when not using Bundler.
+                              "setting priority for engines with config.railties_order")
+                  ;; This test requires a database server or networking.
+                  (delete-file "application/bin_setup_test.rb")
+                  (skip-tests "application/middleware/cache_test.rb"
+                              ;; This test produces "miss, store" instead of
+                              ;; "fresh".
+                              "test_cache_works_with_expires"
+                              ;; This one produces "miss" instead of "stale,
+                              ;; valid, store".
+                              "test_cache_works_with_etags"
+                              ;; Likewise.
+                              "test_cache_works_with_last_modified")))))
+          (add-before 'check 'set-paths
+            (lambda _
+              (setenv "PATH" (string-append (getenv "PATH") ":"
+                                            #$output "/bin"))
+              (setenv "GEM_PATH" (string-append
+                                  (getenv "GEM_PATH") ":"
+                                  #$output "/lib/ruby/vendor_ruby")))))))
+    (native-inputs
+     (list git-minimal/pinned
+           ruby-actioncable
+           ruby-actionmailbox
+           ruby-actionmailer
+           ruby-actiontext
+           ruby-actionview
+           ruby-activejob
+           ruby-activemodel
+           ruby-activerecord
+           ruby-activestorage
+           ruby-bcrypt
+           ruby-bootsnap
+           ruby-capybara
+           ruby-dalli
+           ruby-importmap-rails-bootstrap
+           ruby-listen
+           ruby-minitest-retry
+           ruby-mysql2
+           ruby-pg
+           ruby-selenium-webdriver
+           ruby-sprockets-rails
+           ruby-webrick
+           sqlite))
+    (propagated-inputs
+     (list ruby-actionpack
+           ruby-activesupport
+           ruby-method-source
+           ruby-rake
+           ruby-thor
+           ruby-zeitwerk))
+    (synopsis "Rails internals, including application bootup and generators")
+    (description "@code{railties} provides the core Rails internals including
+handling application bootup, plugins, generators, and Rake tasks.")
+    (home-page "https://rubyonrails.org")
+    (license license:expat)))
+
+(define-public ruby-sassc-rails
+  (package
+    (name "ruby-sassc-rails")
+    (version "2.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "sassc-rails" version))
+              (sha256
+               (base32
+                "1d9djmwn36a5m8a83bpycs48g8kh1n2xkyvghn7dr6zwh4wdyksz"))))
+    (build-system ruby-build-system)
+    ;; The test suite currently fails with multiple "FrozenError: can't modify
+    ;; frozen Array: []" errors, apparently caused by Rails 7 (see:
+    ;; https://github.com/sass/sassc-rails/pull/178/files).
+    (arguments (list #:tests? #f
+                     #:phases #~(modify-phases %standard-phases
+                                  (add-after 'extract-gemspec 'relax-requirements
+                                    (lambda _
+                                      (substitute* "sassc-rails.gemspec"
+                                        (("%q<rake>.freeze, \\[\"~> 10.0\"]")
+                                         "%q<rake>.freeze, [\">= 10.0\"]")))))))
+    (native-inputs (list ruby-mocha ruby-pry ruby-tzinfo-data))
+    (propagated-inputs (list ruby-railties ruby-sassc ruby-sprockets
+                             ruby-sprockets-rails ruby-tilt))
+    (synopsis "SassC-Ruby integration with Rails")
+    (description "This Ruby library integrates SassC-Ruby into Rails.")
+    (home-page "https://github.com/sass/sassc-rails")
+    (license license:expat)))
+
+(define-public ruby-sprockets
+  (package
+    (name "ruby-sprockets")
+    (version "4.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "sprockets" version))
+       (sha256
+        (base32
+         "0k0236g4h3ax7v6vp9k0l2fa0w6f1wqp7dn060zm4isw4n3k89sw"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(;; No included tests
+       #:tests? #f))
+    (propagated-inputs
+     (list ruby-concurrent ruby-rack))
+    (synopsis "Sprockets is a Rack-based asset packaging system")
+    (description
+     "Sprockets is a Rack-based asset packaging system that concatenates and
+serves JavaScript, CoffeeScript, CSS, LESS, Sass, and SCSS.")
+    (home-page "https://github.com/rails/sprockets")
+    (license license:expat)))
 
 (define-public ruby-sprockets-rails
   (package
    (name "ruby-sprockets-rails")
-   (version "3.2.1")
+   (version "3.4.2")
    (source
     (origin
      (method url-fetch)
      (uri (rubygems-uri "sprockets-rails" version))
      (sha256
       (base32
-       "0ab42pm8p5zxpv3sfraq45b9lj39cz9mrpdirm30vywzrwwkm5p1"))))
+       "1b9i14qb27zs56hlcc2hf139l0ghbqnjpmfi0054dxycaxvk5min"))))
    (build-system ruby-build-system)
    (arguments
     '(;; No included tests
@@ -572,10 +1345,56 @@ application bootup, plugins, generators, and Rake tasks.")
     "https://github.com/rails/sprockets-rails")
    (license license:expat)))
 
+(define-public ruby-stimulus-rails
+  (package
+    (name "ruby-stimulus-rails")
+    (version "1.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "stimulus-rails" version))
+              (sha256
+               (base32
+                "12hfdzh6cwahbd6p4r0r0d14n3laj3cqasx9w18wga9fq70bq6w3"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-railties))
+    (synopsis "Modest JavaScript framework for Rails")
+    (description "This package provides a modest JavaScript framework for the
+HTML you already have.")
+    (home-page "https://stimulus.hotwired.dev")
+    (license license:expat)))
+
+(define-public ruby-turbo-rails
+  (package
+    (name "ruby-turbo-rails")
+    (version "1.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "turbo-rails" version))
+              (sha256
+               (base32
+                "0vm3iqgr3kxyyz5i09lhvfszp4pw1gw5j5rhhv1gmasv4kq2p3qh"))))
+    (build-system ruby-build-system)
+    ;; The test suite depends on JavaScript modules fetched via 'yarn'.
+    (arguments (list #:tests? #f))
+    (propagated-inputs (list ruby-actionpack ruby-activejob ruby-railties))
+    (synopsis "High performance web application framework")
+    (description
+     "Turbo aims to be as fast as single-page web application without having
+to write any JavaScript.  Turbo accelerates links and form submissions without
+requiring server-side changes to the generated HTML.  It allows carving up a
+page into independent frames, which can be lazy-loaded and operated as
+independent components.  Finally, it helps making partial page updates using
+just HTML and a set of CRUD-like container tags.  These three techniques
+reduce the amount of custom JavaScript that many web applications need to
+write by an order of magnitude.  And for the few dynamic bits that are left,
+Stimulus can be used.")
+    (home-page "https://github.com/hotwired/turbo-rails")
+    (license license:expat)))
+
 (define-public ruby-web-console
   (package
     (name "ruby-web-console")
-    (version "4.1.0")
+    (version "4.2.0")
     (source
      (origin
        ;; Download from GitHub as test files are not provided in the gem.
@@ -586,7 +1405,7 @@ application bootup, plugins, generators, and Rake tasks.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0azk8nmimnjbh74vxgwcj9jr588rj7kb5rrlclcjfjsw9jqjzckc"))))
+         "07mg9nq7h48n01hps1m0g2nk94zknab6mrcxsv8x2vaf2xfgjilg"))))
     (build-system ruby-build-system)
     (arguments
      '(#:phases
@@ -602,10 +1421,9 @@ application bootup, plugins, generators, and Rake tasks.")
                (("group :development") "[].each")
                ;; tzinfo-data is propagated by ruby-activesupport, but it
                ;; needs to be in the Gemfile to become available.
-               (("group :test do") "group :test do\n  gem 'tzinfo-data'"))
-             #t)))))
+               (("group :test do") "group :test do\n  gem 'tzinfo-data'")))))))
     (propagated-inputs
-     (list ruby-actionview ruby-activemodel ruby-bindex ruby-railties))
+     (list ruby-actionview ruby-activemodel ruby-arel ruby-bindex ruby-railties))
     (native-inputs
      (list bundler ruby-rails ruby-mocha ruby-simplecov))
     (synopsis "Debugging tool for your Ruby on Rails applications")
@@ -642,57 +1460,59 @@ for locks.")
     (home-page "https://closuretree.github.io/with_advisory_lock/")
     (license license:expat)))
 
+;;; This is a meta-package which propagates all the individual Rails
+;;; components.
 (define-public ruby-rails
   (package
-   (name "ruby-rails")
-   (version "6.1.3")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (rubygems-uri "rails" version))
-     (sha256
-      (base32
-       "0hdancysa617lzyy5gmrcmnpgyb1mz1lawy0l34ycz2wary7y2bz"))))
-   (build-system ruby-build-system)
-   (arguments
-    '(#:phases
-      (modify-phases %standard-phases
-        ;; This gem acts as glue between the gems that actually make up
-        ;; Rails. The important thing to check is that the gemspec matches up
-        ;; with the Guix packages and Rubygems can successfully activate the
-        ;; Rails gem.
-        ;;
-        ;; The following check phase tests this.
-        (delete 'check)
-        (add-after 'install 'check
-          (lambda* (#:key tests? outputs #:allow-other-keys)
-            (setenv "GEM_PATH"
-                    (string-append
-                     (getenv "GEM_PATH")
-                     ":"
-                     (assoc-ref outputs "out") "/lib/ruby/vendor_ruby"))
-            (when tests?
-              (invoke "ruby" "-e" "gem 'rails'"))
-            #t)))))
-   (propagated-inputs
-    (list ruby-actioncable
-          ruby-actionmailbox
-          ruby-actionmailer
-          ruby-actionpack
-          ruby-actiontext
-          ruby-actionview
-          ruby-activejob
-          ruby-activemodel
-          ruby-activerecord
-          ruby-activestorage
-          ruby-activesupport
-          bundler
-          ruby-railties
-          ruby-sprockets-rails))
-   (synopsis "Full-stack web framework optimized for programmer happiness")
-   (description
-    "Ruby on Rails is a full-stack web framework optimized for programmer
+    (name "ruby-rails")
+    (version %ruby-rails-version)
+    (source ruby-rails-monorepo)
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'delete-extraneous-gemspec-files
+            (lambda _
+              ;; They would otherwise be picked up instead of rails.gemspec at
+              ;; the root of the repository.
+              (for-each (lambda (f)
+                          (unless (string-suffix? "rails.gemspec" f)
+                            (delete-file f)))
+                        (find-files "." "\\.gemspec"))))
+          ;; This gem acts as glue between the gems that actually make up
+          ;; Rails. The important thing to check is that the gemspec matches
+          ;; up with the Guix packages and Rubygems can successfully activate
+          ;; the Rails gem.
+          ;;
+          ;; The following check phase tests this.
+          (delete 'check)
+          (add-after 'install 'check
+            (lambda* (#:key tests? outputs #:allow-other-keys)
+              (when tests?
+                (setenv "GEM_PATH"
+                        (string-append (getenv "GEM_PATH") ":" #$output
+                                       "/lib/ruby/vendor_ruby"))
+                (invoke "ruby" "-e" "gem 'rails'")))))))
+    (propagated-inputs
+     (list bundler
+           ruby-actioncable
+           ruby-actionmailbox
+           ruby-actionmailer
+           ruby-actionpack
+           ruby-actiontext
+           ruby-actionview
+           ruby-activejob
+           ruby-activemodel
+           ruby-activerecord
+           ruby-activestorage
+           ruby-activesupport
+           ruby-railties
+           ruby-sprockets-rails))
+    (synopsis "Full-stack web framework optimized for programmer happiness")
+    (description
+     "Ruby on Rails is a full-stack web framework optimized for programmer
 happiness and sustainable productivity.  It encourages beautiful code by
 favoring convention over configuration.")
-   (home-page "https://rubyonrails.org/")
-   (license license:expat)))
+    (home-page "https://rubyonrails.org/")
+    (license license:expat)))
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 595aa1c974..feb78731c2 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -74,6 +74,7 @@
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages node)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
@@ -81,12 +82,16 @@
   #:use-module (gnu packages rsync)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages valgrind)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages web-browsers)
   #:use-module (gnu packages serialization)
   #:use-module (guix packages)
+  #:use-module (guix deprecation)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix gexp)
+  #:use-module (guix modules)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages xml)
@@ -432,6 +437,25 @@ packaging native C and Java extensions in Ruby.")
     (home-page "https://github.com/rake-compiler/rake-compiler")
     (license license:expat)))
 
+(define-public ruby-rake-compiler-dock
+  (package
+    (name "ruby-rake-compiler-dock")
+    (version "1.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rake-compiler-dock" version))
+              (sha256
+               (base32
+                "0yr5f72irvhmnk12q7bbr4qw0xwy7diqkbcvb4lygjbg7rvk3k8k"))))
+    (build-system ruby-build-system)
+    (arguments (list #:tests? #f))      ;test suite requires docker
+    (synopsis "Cross compiler environment for building Ruby gems")
+    (description "The code{rake-compiler-dock} gem provides a cross compiler
+environment for building gems on a variety of platforms (GNU/Linux, JRuby,
+Windows and Mac).")
+    (home-page "https://github.com/rake-compiler/rake-compiler-dock")
+    (license license:expat)))
+
 (define-public ruby-rsync
   (package
     (name "ruby-rsync")
@@ -488,6 +512,54 @@ an extensible architecture with a swappable backend.")
     (home-page "https://github.com/ruby-i18n/i18n")
     (license license:expat)))
 
+(define-public ruby-io-console
+  (package
+    (name "ruby-io-console")
+    (version "0.6.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/io-console/")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0gwxrp29b6awkid1sf85sbh529mnq6hb86m8c2443cm6nc4vr8qb"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'delete-rakelib-files
+                          (lambda _
+                            ;; These depend on git and other extraneous
+                            ;; dependencies, and are loaded by rake.
+                            (delete-file-recursively "rakelib"))))))
+    (native-inputs (list ruby-rake-compiler))
+    (synopsis "Console capabilities library for IO instances")
+    (description "IO.console adds console capabilities to Ruby IO instances.")
+    (home-page "https://github.com/ruby/io-console")
+    (license license:bsd-2)))
+
+(define-public ruby-irb
+  (package
+    (name "ruby-irb")
+    (version "1.6.3")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "irb" version))
+              (sha256
+               (base32
+                "1h9s07n5v3z029v18924ws9vdkdc80n6llp9ccx77yg1krv2g0f3"))))
+    (build-system ruby-build-system)
+    ;; XXX: Disable the test suite, as it requires debug, which requires this
+    ;; package (dependency cycle).
+    (arguments (list #:tests? #f))
+    (propagated-inputs (list ruby-reline))
+    (synopsis "Ruby command-line tool for REPL (Read Eval Print Loop)")
+    (description "IRB is an interactive Ruby command-line tool for REPL (Read
+Eval Print Loop).")
+    (home-page "https://github.com/ruby/irb")
+    (license license:bsd-2)))
+
 (define-public ruby-iruby
   (package
     (name "ruby-iruby")
@@ -550,13 +622,13 @@ notebook).")
 (define-public ruby-rspec-support
   (package
     (name "ruby-rspec-support")
-    (version "3.8.0")
+    (version "3.12.0")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "rspec-support" version))
               (sha256
                (base32
-                "0p3m7drixrlhvj2zpc38b11x145bvm311x6f33jjcxmvcm0wq609"))))
+                "12y52zwwb3xr7h91dy9k3ndmyyhr3mjcayk0nnarnrzz8yr48kfx"))))
     (build-system ruby-build-system)
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
@@ -568,13 +640,13 @@ notebook).")
 (define-public ruby-rspec-core
   (package
     (name "ruby-rspec-core")
-    (version "3.8.0")
+    (version "3.12.1")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "rspec-core" version))
               (sha256
                (base32
-                "1p1s5bnbqp3sxk67y0fh0x884jjym527r0vgmhbm81w7aq6b7l4p"))))
+                "0da45cvllbv39sdbsl65vp5djb2xf5m10mxc9jm7rsqyyxjw4h1f"))))
     (build-system ruby-build-system)
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
@@ -597,6 +669,28 @@ groups.")
                 "0psjy5kdlz3ph39br0m01w65i1ikagnqlg39f8p65jh5q7dz8hwc"))))
     (propagated-inputs `())))
 
+(define-public ruby-date
+  (package
+    (name "ruby-date")
+    (version "3.3.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ruby/date")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1jiqjnaap1jk1r8z37iicnzqha1rhc713qmcir17f4vnz8ac8v75"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "default"))
+    (native-inputs (list ruby-rake-compiler))
+    (synopsis "Ruby @code{Object} subclass with date comparison capability")
+    (description "This package provides a subclass of @code{Object} that
+includes the @code{Comparable} module for handling dates.")
+    (home-page "https://github.com/ruby/date")
+    (license license:bsd-2)))
+
 (define-public ruby-diff-lcs
   (package
     (name "ruby-diff-lcs")
@@ -621,13 +715,13 @@ standard diff-like tool.")
 (define-public ruby-rspec-expectations
   (package
     (name "ruby-rspec-expectations")
-    (version "3.8.2")
+    (version "3.12.2")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "rspec-expectations" version))
               (sha256
                (base32
-                "18l21hy1zdc2pgc2yb17k3n2al1khpfr0z6pijlm852iz6vj0dkm"))))
+                "03ba3lfdsj9zl00v1yvwgcx87lbadf87livlfa5kgqssn9qdnll6"))))
     (build-system ruby-build-system)
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
@@ -674,14 +768,14 @@ re-sourced, but they will be rendered in a single-line format.")
 (define-public ruby-given-core
   (package
     (name "ruby-given-core")
-    (version "3.8.0")
+    (version "3.8.2")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "given_core" version))
        (sha256
         (base32
-         "1lzyqllbbv6as3qgwz2007mvy7wy247bgkch9adnmh1zfa73bkrg"))))
+         "0w1pyhgb2am7c267s8v06dpd9qhmsk2x4hfr2aq8l8lh49ma227s"))))
     (build-system ruby-build-system)
     (arguments '(#:tests? #f))          ;no test suite for the core package
     (propagated-inputs
@@ -696,14 +790,14 @@ when defining specifications.")
 (define-public ruby-rspec-given
   (package
     (name "ruby-rspec-given")
-    (version "3.8.0")
+    (version "3.8.2")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "rspec-given" version))
        (sha256
         (base32
-         "1783bazja10kbha8hk15khvybsq88siyax02cpkk688604h54nji"))))
+         "0xzzxjjzwrsp84p12sd6ab3jbm9kh7sbnqpxgc9mlfq3s3ll0fdj"))))
     (build-system ruby-build-system)
     (arguments
      `(#:test-target "rs"
@@ -716,8 +810,7 @@ when defining specifications.")
                (("Given::VERSION") (format #f "~s" ,version))
                ;; Fix the error: "cannot load such file -- example_helper"
                (("sh \"rspec")
-                "sh \"rspec -Ilib:examples"))
-             #t))
+                "sh \"rspec -Ilib:examples"))))
          (add-after 'extract-gemspec 'delete-failing-tests
            ;; See: https://github.com/jimweirich/rspec-given/issues/57.
            (lambda _
@@ -727,8 +820,7 @@ when defining specifications.")
                (("\"examples/integration/failing_messages_spec.rb\".freeze, ")
                 ""))
              (delete-file "spec/lib/given/natural_assertion_spec.rb")
-             (delete-file "examples/integration/failing_messages_spec.rb")
-             #t)))))
+             (delete-file "examples/integration/failing_messages_spec.rb"))))))
     (native-inputs
      (list ruby-rspec ruby-minitest))
     (propagated-inputs
@@ -806,13 +898,13 @@ eq(1)\\}}.")
 (define-public ruby-rspec-mocks
   (package
     (name "ruby-rspec-mocks")
-    (version "3.8.0")
+    (version "3.12.4")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "rspec-mocks" version))
               (sha256
                (base32
-                "06y508cjqycb4yfhxmb3nxn0v9xqf17qbd46l1dh4xhncinr4fyp"))))
+                "1dcfh85m3ksir6n8gydsal4d85chpww1b2nahb05nl8xhgh0r2ij"))))
     (build-system ruby-build-system)
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
@@ -836,6 +928,63 @@ support for stubbing and mocking.")
     (propagated-inputs
      (list ruby-diff-lcs))))
 
+(define-public ruby-rspec-block-is-expected
+  (package
+    (name "ruby-rspec-block-is-expected")
+    (version "1.0.2")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/pboling/rspec-block_is_expected")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1w8mj00k8am24yw7lbhg616m111p7h7bbfxaw7np4i7wnlwzm8fk"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'relax-requirements
+                          (lambda _
+                            (substitute* "Rakefile"
+                              (("require 'rubocop/rake_task'") "")
+                              (("RuboCop::RakeTask.new") ""))
+                            ;; Contains extraneous requirements not actually
+                            ;; needed for the test suite.
+                            (delete-file "Gemfile"))))))
+    (native-inputs (list ruby-rspec-pending-for ruby-rspec-expectations))
+    (propagated-inputs (list ruby-rspec-core))
+    (synopsis "Simplify testing of blocks in RSpec")
+    (description "This RSpec plugin allows you to use @code{block_is_expected}
+similarly to how you would use @code{is_expected} if a block was wrapping the
+subject.")
+    (home-page "https://github.com/pboling/rspec-block_is_expected")
+    (license license:expat)))
+
+(define-public ruby-rspec-pending-for
+  (package
+    (name "ruby-rspec-pending-for")
+    (version "0.1.16")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/pboling/rspec-pending_for")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "107l560vm0kx25w5iy5rsk9ly8dxzr81b31284j514f4hkd0qv3m"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-rspec ruby-simplecov))
+    (propagated-inputs (list ruby-rspec-core ruby-ruby-engine
+                             ruby-ruby-version))
+    (synopsis "Skip RSpec tests for specific Ruby engines or versions")
+    (description "This RSpec plugin makes it easy to mark test cases as
+pending or skipped for a specific Ruby engine (e.g. MRI or JRuby) or version
+combinations.")
+    (home-page "https://github.com/pboling/rspec-pending_for")
+    (license license:expat)))
+
 (define-public ruby-rspec-rerun
   (package
     (name "ruby-rspec-rerun")
@@ -859,6 +1008,42 @@ RSpec tests.")
     (home-page "https://github.com/dblock/rspec-rerun")
     (license license:expat)))
 
+(define-public ruby-rspec-stubbed-env
+  ;; There is no release nor tag (see:
+  ;; https://github.com/pboling/rspec-stubbed_env/issues/7).
+  (let ((revision "0")
+        (commit "9d767dec77a6d130f6ad83c48a00a5c81b14b9fa"))
+    (package
+      (name "ruby-rspec-stubbed-env")
+      (version (git-version "1.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/pboling/rspec-stubbed_env")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1dy4m04h613dp0s59rknjd6h4lqs1h17mffc5kd8kh046mk8nr1p"))))
+      (build-system ruby-build-system)
+      (arguments
+       (list #:test-target "spec"
+             #:phases #~(modify-phases %standard-phases
+                          (add-after 'unpack 'streamline-requirements
+                            (lambda _
+                              ;; Remove extraneous development dependencies.
+                              (substitute* "rspec-stubbed_env.gemspec"
+                                ((".*bundler.*") "")
+                                ((".*rubocop.*") "")))))))
+      (native-inputs (list ruby-simplecov))
+      (propagated-inputs (list ruby-rspec))
+      (synopsis "RSpec plugin to stub environment variables")
+      (description
+       "This RSpec plugin can be used to stub environment variables in a scoped
+context for testing.")
+      (home-page "https://github.com/pboling/rspec-stubbed_env")
+      (license license:expat))))
+
 (define-public ruby-rspec-wait
   (package
     (name "ruby-rspec-wait")
@@ -891,13 +1076,13 @@ interactions.")
 (define-public ruby-rspec
   (package
     (name "ruby-rspec")
-    (version "3.8.0")
+    (version "3.12.0")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "rspec" version))
               (sha256
                (base32
-                "15ppasvb9qrscwlyjz67ppw1lnxiqnkzx5vkx1bd8x5n3dhikxc3"))))
+                "171rc90vcgjl8p1bdrqa92ymrj8a87qf6w20x05xq29mljcigi6c"))))
     (build-system ruby-build-system)
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
@@ -922,18 +1107,49 @@ expectations and mocks frameworks.")
     (propagated-inputs
      (list ruby-rspec-core-2 ruby-rspec-mocks-2 ruby-rspec-expectations-2))))
 
+(define-public ruby-rspec-debug
+  (package
+    (name "ruby-rspec-debug")
+    (version "0.2.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ko1/rspec-debug")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "125p1zxjznkk765nyqvkksw8x1nbm7xk4sjc1wza2fyp5hvyiddn"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "spec"
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'extract-gemspec 'relax-dependencies
+                          (lambda _
+                            (substitute* "Gemfile"
+                              (("~>") ">=")))))))
+    (native-inputs (list ruby-rspec))
+    (propagated-inputs (list ruby-debug))
+    (synopsis "Invoke Ruby debugger when spec fails")
+    (description "This package can be used to have the execution stopped for
+inspection in the Ruby debugger upon encountering a failure.  To use it, set
+the @env{RSPEC_DEBUG} environment variable to @samp{true} then invoke the
+@command{rspec} command as usual.")
+    (home-page "https://github.com/ko1/rspec-debug")
+    (license license:expat)))
+
 ;; Bundler is yet another source of circular dependencies, so we must disable
 ;; its test suite as well.
 (define-public bundler
   (package
     (name "bundler")
-    (version "2.1.4")
+    (version "2.4.10")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "bundler" version))
               (sha256
                (base32
-                "12glbb1357x91fvd004jgkw7ihlkpc9dwr349pd7j83isqhls0ah"))))
+                "08d1nj2h4yl6c1bnrwl2pk1kcskpgi6fvyd8fs36lfh68jlnz05r"))))
     (build-system ruby-build-system)
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
@@ -1213,14 +1429,14 @@ under the hood.")
 (define-public ruby-slim
   (package
     (name "ruby-slim")
-    (version "4.1.0")
+    (version "5.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "slim" version))
        (sha256
         (base32
-         "0gjx30g84c82qzg32bd7giscvb4206v7mvg56kc839w9wjagn36n"))))
+         "1rp437r8hr9kdgabb7c96yw4z2wyrajl4cxiij038y10f8i6hbn4"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
@@ -1234,18 +1450,16 @@ under the hood.")
                 "def skipped_test_render_with_markdown"))
              (substitute* "test/translator/test_translator.rb"
                (("raise (\"Missing test for.*)" _ tail)
-                (string-append "print " tail)))
-             #t))
+                (string-append "print " tail)))))
          ;; See: https://salsa.debian.org/ruby-team/ruby-slim/-/commit/
          ;; 824862bd99d1675bc699d8fc71ba965a785c1f44.
          (add-after 'unpack 'prevent-bundler-interference
            (lambda _
              (substitute* "Rakefile"
                (("require 'bundler/setup'") "nil")
-               (("Bundler::GemHelper\\.install_tasks") "nil"))
-             #t)))))
+               (("Bundler::GemHelper\\.install_tasks") "nil")))))))
     (native-inputs
-     (list ruby-rack-test ruby-sinatra))
+     (list ruby-rack-test ruby-rspec-core ruby-sinatra))
     (propagated-inputs
      (list ruby-temple ruby-tilt))
     (synopsis "Minimalist template language for Ruby")
@@ -1407,15 +1621,19 @@ Style Sheets (CSS) rule sets in Ruby.")
          "0mbxzw7r7hv43db9422flc24ib9d8bdy1nasbni2h998jc5a5lb6"))))
     (build-system ruby-build-system)
     (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'do-not-use-bundler
-                    (lambda _
-                      (substitute* "spec/spec_helper.rb"
-                        ((".*[Bb]undler.*") ""))))
-                  (replace 'check
-                    (lambda* (#:key tests? #:allow-other-keys)
-                      (when tests?
-                        (invoke "rspec" "-Ilib" "-rprawn-svg")))))))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'do-not-use-bundler
+                 (lambda _
+                   (substitute* "spec/spec_helper.rb"
+                     ((".*[Bb]undler.*") ""))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     ;; This test fails due to the recent rspec 3.12 used
+                     ;; (see: https://github.com/mogest/prawn-svg/issues/151).
+                     (delete-file "spec/prawn/svg/interface_spec.rb")
+                     (invoke "rspec" "-Ilib" "-rprawn-svg")))))))
     (native-inputs (list ruby-rspec))
     (propagated-inputs (list ruby-css-parser ruby-prawn))
     (synopsis "SVG renderer for the Prawn PDF library")
@@ -1536,64 +1754,139 @@ logic.")
     (home-page "https://github.com/typhoeus/typhoeus")
     (license license:expat)))
 
-(define-public ruby-rubocop-rspec
+;;; A minimal variant used to build ruby-rubocop itself.
+(define ruby-rubocop-capybara-minimal
   (package
-    (name "ruby-rubocop-rspec")
-    (version "2.2.0")
-    (source
-      (origin
-        (method git-fetch)
-        (uri (git-reference
-               (url "https://github.com/rubocop-hq/rubocop-rspec")
-               (commit (string-append "v" version))))
-        (file-name (git-file-name name version))
-        (sha256
-         (base32
-          "0gdpjpympb6qc77bang759z7z6lckf14ghkx8v6614agxg8l3g5y"))))
+    (name "ruby-rubocop-capybara")
+    (version "2.17.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/rubocop/rubocop-capybara")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "137y21b6g0kj1001zp95gwchx2cvgz8pglw2ik1cw647lh77qdsp"))))
     (build-system ruby-build-system)
+    (arguments (list #:tests? #f))
+    (synopsis "Capybara plugin for RuboCop")
+    (description "This package provides a RuboCop plugin that can be used for
+code style checking of Capybara test files (RSpec, Cucumber, Minitest).")
+    (home-page "https://github.com/rubocop/rubocop-capybara")
+    (license license:expat)))
+
+(define-public ruby-rubocop-capybara
+  (package
+    (inherit ruby-rubocop-capybara-minimal)
     (arguments
-     '(#:test-target "internal_investigation"
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'set-HOME
-           (lambda _
-             (setenv "HOME" "/tmp")
-             #t)))))
-    (propagated-inputs
-     (list ruby-rubocop ruby-rubocop-ast))
+     (list #:test-target "spec"
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'relax-requirements
+                          (lambda _
+                            (substitute* "Gemfile"
+                              (("gem 'rubocop-rspec', '~> 2.16.0'")
+                               "gem 'rubocop-rspec', '>= 2.16.0'")))))))
     (native-inputs
-     (list ruby-rack ruby-rspec ruby-rubocop-performance ruby-simplecov
-           ruby-yard))
+     (list ruby-bump
+           ruby-rack
+           ruby-rake
+           ruby-rspec
+           ruby-rubocop
+           ruby-rubocop-performance-minimal
+           ruby-rubocop-rake-minimal
+           ruby-rubocop-rspec-minimal
+           ruby-simplecov
+           ruby-yard))))
+
+;;; A minimal variant used to build ruby-rubocop itself.
+(define ruby-rubocop-rake-minimal
+  (package
+    (name "ruby-rubocop-rake")
+    (version "0.6.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/rubocop/rubocop-rake")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1r53szwglikbir1fvpz4i51p915khrrkl6rp61zcx3dcrclkr3ld"))))
+    (build-system ruby-build-system)
+    (arguments (list #:tests? #f))      ;avoid extra dependencies
+    (synopsis "RuboCop plugin for Rake")
+    (description "This package provides a RuboCop plugin for Rake.")
+    (home-page "https://github.com/rubocop/rubocop-rake")
+    (license license:expat)))
+
+(define-public ruby-rubocop-rake
+  (package
+    (inherit ruby-rubocop-rake-minimal)
+    (arguments
+     (list #:test-target "spec"))
+    (native-inputs
+     (list ruby-rake
+           ruby-rspec
+           ruby-rubocop
+           ruby-rubocop-rspec))
+    (propagated-inputs
+     (list ruby-rubocop))))
+
+;;; A minimal variant used to build ruby-rubocop itself.
+(define ruby-rubocop-rspec-minimal
+  (package
+    (name "ruby-rubocop-rspec")
+    (version "2.19.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rubocop/rubocop-rspec")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0mgjyrzi8r44v3gb8xscdwspirz9kqkaf7zlsjhhlxr0di0rlj2r"))))
+    (build-system ruby-build-system)
+    (arguments (list #:tests? #f))      ;avoid extra dependencies
     (synopsis "Code style checking for RSpec files")
     (description "This package provides a plugin for the RuboCop code style
 enforcing & linting tool.")
-    (home-page "https://github.com/rubocop-hq/rubocop-rspec")
+    (home-page "https://github.com/rubocop/rubocop-rspec")
     (license license:expat)))
 
-(define-public ruby-rubocop-rspec-minimal
-  (hidden-package
-   (package
-     (inherit ruby-rubocop-rspec)
-     (arguments
-      (substitute-keyword-arguments (package-arguments ruby-rubocop-rspec)
-        ((#:tests? _ #f) #f)))
-     (propagated-inputs '())
-     (native-inputs '()))))
+(define-public ruby-rubocop-rspec
+  (package
+    (inherit ruby-rubocop-rspec-minimal)
+    (arguments '(#:test-target "spec"))
+    (native-inputs
+     (list ruby-bump
+           ruby-rack
+           ruby-rspec
+           ruby-rubocop-performance-minimal
+           ruby-rubocop-rake-minimal
+           ruby-simplecov
+           ruby-yard))
+    (propagated-inputs
+     (list ruby-rubocop
+           ruby-rubocop-ast
+           ruby-rubocop-capybara))))
 
 (define-public ruby-rubocop-performance
   (package
     (name "ruby-rubocop-performance")
-    (version "1.9.2")
+    (version "1.16.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-              (url "https://github.com/rubocop-hq/rubocop-performance")
+              (url "https://github.com/rubocop/rubocop-performance")
               (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "04lmkmz6c0ccs5miikrww7lakp7y6xz00g7b47ay7rn7sx5j6qyf"))))
+         "1axafki2mpdz38y7i0afmnxcan5wj54l8crp8pbs7h1cip7y4s49"))))
     (build-system ruby-build-system)
     (arguments
      `(#:tests? #f  ; tests require a git checkout of rubocop's source code.
@@ -1603,12 +1896,11 @@ enforcing & linting tool.")
            (lambda _
              (substitute* "rubocop-performance.gemspec"
                (("`git ls-files -z config lib LICENSE.txt README.md`")
-                "`find config lib LICENSE.txt README.md -type f -print0 |sort -z`"))
-             #t))
+                "`find config lib LICENSE.txt README.md \
+-type f -print0 |sort -z`"))))
          (add-before 'check 'set-HOME
            (lambda _
-             (setenv "HOME" "/tmp")
-             #t)))))
+             (setenv "HOME" "/tmp"))))))
     (propagated-inputs
      (list ruby-rubocop ruby-rubocop-ast))
     (native-inputs
@@ -1689,10 +1981,47 @@ only what they care about.")
       (home-page "https://github.com/searls/gimme")
       (license license:expat))))
 
+(define-public ruby-stud
+  (package
+    (name "ruby-stud")
+    (version "0.0.23")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "stud" version))
+              (sha256
+               (base32
+                "0qpb57cbpm9rwgsygqxifca0zma87drnlacv49cqs2n5iyi6z8kb"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-rspec))
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        ;; No Rakefile is included, so run rspec directly.
+                        (replace 'check
+                          (lambda* (#:key tests? #:allow-other-keys)
+                            (when tests?
+                              (invoke "rspec")))))))
+    (synopsis "Retries, worker supervision, resource pools and more for Ruby")
+    (description "The Stud Ruby library adds a few things missing from the
+standard Ruby library such as:
+@table @code
+@item {Stud::Try}
+Retry on failure, with back-off, where failure is any exception.
+@item {Stud::Pool}
+Generic resource pools.
+@item {Stud::Task}
+Tasks (threads that can return values, exceptions, etc.)
+@item {Stud.interval}
+Interval execution (do X every N seconds).
+@item {Stud::Buffer}
+Batch and flush behavior.
+@end itemize")
+    (home-page "https://github.com/jordansissel/ruby-stud")
+    (license license:asl2.0)))
+
 (define-public ruby-standard
   (package
     (name "ruby-standard")
-    (version "0.4.7")
+    (version "1.25.3")
     (source
      (origin
        (method git-fetch)               ;no test suite in distributed gem
@@ -1702,22 +2031,38 @@ only what they care about.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0ylx0lm2pbbgr5h7fban592w96bl3wxmvfcpcdfrhkxnpg5kiwgv"))))
+         "0q42gv7wgrc818a5hm599sy07vjq69hbijzpkpgh6jws6x7wzyh3"))))
     (build-system ruby-build-system)
     (arguments
-     ;; TODO: the tests are currently broken due to using a newer Rubocop.
-     `(#:tests? #f
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'relax-version-requiremens
+         (add-after 'unpack 'set-HOME
            (lambda _
-             (delete-file "Gemfile")
-             (delete-file "Gemfile.lock")
-             #t)))))
+             ;; Some tests fail otherwise.
+             (setenv "HOME" "/tmp")))
+         (add-after 'unpack 'relax-requirements
+           (lambda _
+             (substitute* "standard.gemspec"
+               (("\"rubocop\", \"1.44.1\"")
+                "\"rubocop\", \">= 1.44.1\"")
+               (("\"rubocop-performance\", \"1.15.2\"")
+                "\"rubocop-performance\", \">= 1.15.2\""))))
+         (add-after 'unpack 'delete-problematic-tests
+           ;; These tests fail for unknown reasons (see:
+           ;; https://github.com/testdouble/standard/issues/532).
+           (lambda _
+             (for-each
+              delete-file
+              '("test/standard_test.rb"
+                "test/standard/cop/block_single_line_braces_test.rb")))))))
     (native-inputs
-     (list ruby-gimme ruby-pry ruby-simplecov))
+     (list ruby-gimme
+           ruby-pry
+           ruby-simplecov))
     (propagated-inputs
-     (list ruby-rubocop ruby-rubocop-performance))
+     (list ruby-language-server-protocol
+           ruby-rubocop
+           ruby-rubocop-performance))
     (synopsis "Ruby Style Guide, with linter & automatic code fixer")
     (description "Standard is a port of StandardJS.  Like StandardJS, it aims
 to save time in the following ways:
@@ -2023,6 +2368,34 @@ format.")
     (home-page "https://github.com/nicksieger/ci_reporter")
     (license license:expat)))
 
+(define-public ruby-console
+  (package
+    (name "ruby-console")
+    (version "1.16.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "console" version))
+              (sha256
+               (base32
+                "0y1bv3kd1l9p0k5n3anvvjxdrcq113pyngz2g29i9mvdgbbx7kq2"))))
+    (build-system ruby-build-system)
+    ;; XXX: Disable test suite to avoid dependency cycles with ruby-samovar.
+    (arguments (list #:tests? #f))
+    (propagated-inputs (list ruby-fiber-local))
+    (synopsis "Console logging library for Ruby")
+    (description "This gem provides beautiful console logging for Ruby
+applications.  It implements fast, buffered log output and has the following
+features:
+@itemize
+@item Thread safe global logger with per-fiber context
+@item Carry along context with nested loggers
+@item Enable/disable log levels per class
+@item Detailed logging of exceptions
+@item Beautiful logging to the terminal or structured logging using JSON.
+@end itemize")
+    (home-page "https://github.com/socketry/console")
+    (license license:expat)))
+
 (define-public ruby-contracts
   (package
     (name "ruby-contracts")
@@ -2087,6 +2460,34 @@ code in Merb and Rails.")
     (home-page "https://github.com/jnunemaker/crack")
     (license license:expat)))
 
+(define-public ruby-clamp
+  (package
+    (name "ruby-clamp")
+    (version "1.3.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "clamp" version))
+              (sha256
+               (base32
+                "08m0syh06bhx8dqn560ivjg96l5cs5s3l9jh2szsnlcdcyl9jsjg"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "spec"
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'do-not-require-rubocop
+                          (lambda _
+                            (substitute* "Rakefile"
+                              (("require \"rubocop/rake_task\"")
+                               "")
+                              (("RuboCop::RakeTask.new")
+                               "")))))))
+    (native-inputs (list ruby-rspec))
+    (synopsis "Command-line parsing library for Ruby")
+    (description "Clamp provides an object-model for command-line utilities.
+It handles parsing of command-line options, and generation of usage help.")
+    (home-page "https://github.com/mdub/clamp")
+    (license license:expat)))
+
 (define-public ruby-cliver
   (package
     (name "ruby-cliver")
@@ -2224,19 +2625,48 @@ complexity.")
 (define-public ruby-oauth2
   (package
     (name "ruby-oauth2")
-    (version "1.4.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "oauth2" version))
-       (sha256
-        (base32 "15i9z4j5pcjkr30lkcd79xzbr4kpmy0bqgwa436fqyqk646fv036"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f))                    ; no included tests
+    (version "2.0.9")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://gitlab.com/oauth-xx/oauth2")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "191j1f4gjw8wij1jy2fvddgi8cv1mm0ki7v0b0795clix1avnj29"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'relax-requirements
+                          (lambda _
+                            (substitute* "Gemfile"
+                              (("^linting = .*")
+                               "linting = false\n")
+                              (("^coverage = .*")
+                               "coverage = false\n")
+                              (("^debug = .*")
+                               "debug = false\n"))
+                            (substitute* "spec/spec_helper.rb"
+                              (("^RUN_COVERAGE = .*")
+                               "RUN_COVERAGE = false\n")
+                              (("^ALL_FORMATTERS = .*")
+                               "ALL_FORMATTERS = false\n")))))))
+    (native-inputs
+     (list ruby-addressable
+           ruby-backports
+           ruby-rexml
+           ruby-rspec-block-is-expected
+           ruby-rspec-pending-for
+           ruby-rspec-stubbed-env
+           ruby-silent-stream))
     (propagated-inputs
-     (list ruby-faraday ruby-jwt ruby-multi-json ruby-multi-xml
-           ruby-rack))
+     (list ruby-faraday
+           ruby-jwt
+           ruby-multi-json
+           ruby-multi-xml
+           ruby-rack
+           ruby-snaky-hash))
     (synopsis "Ruby wrapper for the OAuth 2.0")
     (description
      "This package provides a Ruby wrapper for the OAuth 2.0 protocol built
@@ -2247,18 +2677,32 @@ with a similar style to the original OAuth spec.")
 (define-public ruby-omniauth
   (package
     (name "ruby-omniauth")
-    (version "2.0.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "omniauth" version))
-       (sha256
-        (base32 "105mzgvmn2kjaacxw01h4wqv33r7hfn5z8fxlkk3jcjar14j71bh"))))
+    (version "2.1.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/omniauth/omniauth")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1mm7a4ll7ymamrbsl63yi6i34qpwmh2nh5a9kj961gja1iz2gyd1"))))
     (build-system ruby-build-system)
-    (propagated-inputs
-     (list ruby-hashie ruby-rack ruby-rack-protection))
-    (native-inputs
-     (list ruby-rspec))
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'relax-requirements
+                 (lambda _
+                   (substitute* "spec/helper.rb"
+                     ;; This condition is used to require coveralls and
+                     ;; simplecov; override it to avoid these extraneous
+                     ;; requirements.
+                     (("RUBY_VERSION >= '1.9'")
+                      "false")
+                     (("require 'rack/freeze'") "")))))))
+    (native-inputs (list ruby-rspec))
+    (propagated-inputs (list ruby-hashie ruby-rack ruby-rack-test
+                             ruby-rack-protection))
     (synopsis "Generalized Rack framework for multiple-provider authentication")
     (description
      "This package provides a generalized Rack framework for multiple-provider
@@ -2269,32 +2713,28 @@ authentication.")
 (define-public ruby-omniauth-oauth2
   (package
     (name "ruby-omniauth-oauth2")
-    (version "1.7.1")
+    (version "1.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "omniauth-oauth2" version))
        (sha256
         (base32
-         "10fr2b58sp7l6nfdvxpbi67374hkrvsf507cvda89jjs0jacy319"))))
+         "0y4y122xm8zgrxn5nnzwg6w39dnjss8pcq2ppbpx9qn7kiayky5j"))))
     (build-system ruby-build-system)
     (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'remove-unnecessary-dependencies
-           (lambda _
-             ;; The coveralls gem submits coverage information to an online
-             ;; service, and is unnecessary when running the tests
-             (substitute* "Gemfile"
-               ((".*coveralls\"") ""))
-             (substitute* "spec/helper.rb"
-               (("require \"coveralls\"") "")
-               (("Coveralls::SimpleCov::Formatter") ""))
-             #t)))))
-    (propagated-inputs
-     (list ruby-oauth2 ruby-omniauth))
-    (native-inputs
-     (list bundler ruby-rspec ruby-simplecov ruby-rack-test ruby-webmock))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'relax-requirements
+                 (lambda _
+                   (substitute* "spec/helper.rb"
+                     ;; This condition is used to require coveralls and
+                     ;; simplecov; override it to avoid these extraneous
+                     ;; requirements.
+                     (("RUBY_VERSION >= \"1.9\"")
+                      "false")))))))
+    (propagated-inputs (list ruby-oauth2 ruby-omniauth))
+    (native-inputs (list ruby-rspec ruby-rack-test ruby-webmock))
     (synopsis "Abstract OAuth2 strategy for OmniAuth")
     (description
      "This library provides a generic OAuth2 strategy for OmniAuth.  It
@@ -2597,72 +3037,73 @@ Ruby.")
     (home-page "https://github.com/maik/xml-simple")
     (license license:ruby)))
 
+(define-public ruby-xpath
+  (package
+    (name "ruby-xpath")
+    (version "3.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "xpath" version))
+              (sha256
+               (base32
+                "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd"))))
+    (build-system ruby-build-system)
+    (arguments (list #:phases #~(modify-phases %standard-phases
+                                  (replace 'check
+                                    (lambda* (#:key tests? #:allow-other-keys)
+                                      (when tests?
+                                        (invoke "rspec" "spec" )))))))
+    (native-inputs (list ruby-pry ruby-rspec))
+    (propagated-inputs (list ruby-nokogiri))
+    (synopsis "Ruby DSL for generating XPath expressions")
+    (description "XPath is a Ruby domain-specific language (DSL) for
+generating XPath expressions.")
+    (home-page "https://github.com/teamcapybara/xpath")
+    (license license:expat)))
+
 (define-public ruby-thor
   (package
     (name "ruby-thor")
-    (version "1.0.1")
+    (version "1.2.1")
     (source (origin
               ;; Pull from git because the gem has no tests.
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/erikhuda/thor")
+                    (url "https://github.com/rails/thor")
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1anrx5vynk57hn5c8ig5pgkmcsbj9q5mvckd5rviw1jid7n89k57"))))
+                "1vjm628ks5kw8q6dskh38dqyz2j8c3n694wsqkj4jb4jrn6rkfzx"))))
     (build-system ruby-build-system)
     (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'fix-readline-tests
-                    (lambda _
-                      ;; Ensure Readline is initialized before running the
-                      ;; test to avoid a type clash with the mock ::Readline.
-                      ;; See <https://github.com/erikhuda/thor/pull/717>.
-                      (substitute* "spec/line_editor/readline_spec.rb"
-                        (("unless defined\\? ::Readline" all)
-                         (string-append "Thor::LineEditor::Readline.available?\n"
-                                        all)))
-                      #t))
-                  (add-after 'unpack 'remove-coveralls-dependency
-                    (lambda _
-                      ;; Do not hook the test suite into the online
-                      ;; coveralls service.
-                      (substitute* "Gemfile"
-                        ((".*coveralls.*") ""))
-                      (substitute* "spec/helper.rb"
-                        (("require \"coveralls\"") "")
-                        (("Coveralls::SimpleCov::Formatter") "")
-                        ;; Also drop the WebMock dependency which is only
-                        ;; present to allow a coveralls.io connection, and
-                        ;; would otherwise introduce a circular dependency.
-                        (("require \"webmock/rspec\"") "")
-                        (("WebMock\\.disable_net_connect.*") ""))
-                      #t))
-                  (add-after 'unpack 'disable-network-tests
-                    (lambda _
-                      ;; These tests attempt to look up example.com.
-                      (substitute* "spec/actions/file_manipulation_spec.rb"
-                        (("it \"accepts (https?) remote sources" _ proto)
-                         (string-append "xit \"accepts " proto " remote sources")))
-                      #t))
-                  (add-after 'unpack 'disable-quality-tests
-                    (lambda _
-                      ;; These tests attempt to check the git repository for
-                      ;; tabs vs spaces, double vs single quotes, etc, and
-                      ;; depend on the git checkout.
-                      (delete-file "spec/quality_spec.rb")
-                      #t))
-                  (add-before 'check 'make-files-writable
-                    (lambda _
-                      ;; The tests needs rw access to the test suite.
-                      (for-each make-file-writable (find-files "spec"))
-                      #t))
-                  (replace 'check
-                    (lambda _
-                      (invoke "rspec" "spec"))))))
-    (native-inputs
-     (list ruby-rspec ruby-simplecov))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'remove-coveralls-dependency
+            (lambda _
+              ;; Do not hook the test suite into the online coveralls service.
+              (substitute* "Gemfile"
+                ((".*coveralls.*") ""))
+              (substitute* "spec/helper.rb"
+                (("require \"coveralls\"") "")
+                (("Coveralls::SimpleCov::Formatter") ""))))
+          (add-after 'unpack 'disable-problematic-tests
+            (lambda _
+              ;; These tests attempt to check the git repository for
+              ;; tabs vs spaces, double vs single quotes, etc, and
+              ;; depend on the git checkout.
+              (delete-file "spec/quality_spec.rb")
+              (substitute* "spec/parser/options_spec.rb"
+                ;; This test fails for unknown reasons (see:
+                ;; https://github.com/rails/thor/issues/814).
+                (("it \"raises an error for unknown switches" all)
+                 (string-append "x" all)))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "rspec" "spec" )))))))
+    (native-inputs (list ruby-rspec ruby-simplecov ruby-webmock))
     (synopsis "Ruby toolkit for building command-line interfaces")
     (description "Thor is a toolkit for building powerful command-line
 interfaces.")
@@ -3229,46 +3670,75 @@ Ruby Gems.")
 
 (define-public ruby-rubyzip
   (package
-  (name "ruby-rubyzip")
-  (version "1.2.1")
-  (source
-    (origin
-      (method url-fetch)
-      (uri (rubygems-uri "rubyzip" version))
-      (sha256
-        (base32
-          "06js4gznzgh8ac2ldvmjcmg9v1vg9llm357yckkpylaj6z456zqz"))))
-  (build-system ruby-build-system)
-  (arguments
-   '(#:phases
-     (modify-phases %standard-phases
-       (add-before 'check 'patch-tests
-         (lambda* (#:key inputs #:allow-other-keys)
-           (substitute* "test/gentestfiles.rb"
-             (("/usr/bin/zip")
-              (string-append
-               (assoc-ref inputs "zip") "/bin/zip")))
-           (substitute* "test/input_stream_test.rb"
-             (("/usr/bin/env ruby") (which "ruby")))
-           #t)))))
-  (native-inputs
-   (list bundler ruby-simplecov zip unzip))
-  (synopsis "Ruby module is for reading and writing zip files")
-  (description
-    "The rubyzip module provides ways to read from and create zip files.")
-  (home-page "https://github.com/rubyzip/rubyzip")
-  (license license:bsd-2)))
+    (name "ruby-rubyzip")
+    (version "2.3.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rubyzip/rubyzip")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "03p8c990n6c1r4g64w0vv7z2iaswisl07l2f1lbh1s78cvmlmfxx"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-rubocop
+           (lambda _
+             (substitute* "Rakefile"
+               (("require 'rubocop/rake_task'") "")
+               (("RuboCop::RakeTask.new") ""))))
+         (add-before 'check 'patch-tests
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "test/gentestfiles.rb"
+               (("/usr/bin/zip") (which "zip")))))
+         (add-after 'patch-source-shebangs 'unpatch-some-source-shebangs
+           (lambda _
+             ;; The tests compare zipped files with data test files; since the
+             ;; zip files do not have their shebangs patched, the data files
+             ;; compared with their extracted version must also be left
+             ;; un-patched.
+             (substitute* (find-files "test/data" "\\.(txt|rb)$")
+               (((which "ruby"))
+                "/usr/bin/env ruby")))))))
+    (native-inputs
+     (list bundler ruby-simplecov zip unzip))
+    (synopsis "Ruby module is for reading and writing zip files")
+    (description
+     "The rubyzip module provides ways to read from and create zip files.")
+    (home-page "https://github.com/rubyzip/rubyzip")
+    (license license:bsd-2)))
+
+(define-public ruby-silent-stream
+  (package
+    (name "ruby-silent-stream")
+    (version "1.0.6")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "silent_stream" version))
+              (sha256
+               (base32
+                "10381fpvjzfjvhgfyv700607fpa29firgf52w5w5536m4fh6x63m"))))
+    (build-system ruby-build-system)
+    (synopsis "ActiveSupport stream silencing without ActiveSupport")
+    (description "SilentStream is an extraction of some parts of
+ActiveSupport's Kernel Reporting Core Extentions around silencing IO
+streams.")
+    (home-page "https://github.com/pboling/silent_stream")
+    (license license:expat)))
 
 (define-public ruby-simplecov-html
   (package
     (name "ruby-simplecov-html")
-    (version "0.10.2")
+    (version "0.12.3")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "simplecov-html" version))
               (sha256
                (base32
-                "1lihraa4rgxk8wbfl77fy9sf0ypk31iivly8vl3w04srd7i0clzn"))))
+                "0yx01bxa8pbf9ip4hagqkp5m0mqfnwnw2xk8kjraiywz4lrss6jb"))))
     (build-system ruby-build-system)
     (arguments `(#:tests? #f)) ; there are no tests
     (native-inputs
@@ -3276,32 +3746,124 @@ Ruby Gems.")
     (synopsis "Default HTML formatter for SimpleCov code coverage tool")
     (description "This package provides the default HTML formatter for
 the SimpleCov code coverage tool for Ruby version 1.9 and above.")
-    (home-page "https://github.com/colszowka/simplecov-html")
+    (home-page "https://github.com/simplecov-ruby/simplecov-html")
+    (license license:expat)))
+
+(define-public ruby-simplecov-json-formatter
+  (package
+    (name "ruby-simplecov-json-formatter")
+    (version "0.1.4")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "simplecov_json_formatter" version))
+              (sha256
+               (base32
+                "0a5l0733hj7sk51j81ykfmlk2vd5vaijlq9d5fn165yyx3xii52j"))))
+    (build-system ruby-build-system)
+    ;; The test suite is disabled because it requires simplecov, which
+    ;; requires this, introducing a dependency cycle.
+    (arguments (list #:tests? #f))
+    (synopsis "JSON formatter for SimpleCov")
+    (description "This package provides a JSON formatter for SimpleCov, the
+Ruby code coverage tool.")
+    (home-page
+     "https://github.com/codeclimate-community/simplecov_json_formatter")
     (license license:expat)))
 
 (define-public ruby-simplecov
   (package
     (name "ruby-simplecov")
-    (version "0.17.1")
+    (version "0.22.0")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "simplecov" version))
               (sha256
                (base32
-                "1135k46nik05sdab30yxb8264lqiz01c8v000g16cl9pjc4mxrdw"))))
+                "198kcbrjxhhzca19yrdcd6jjj9sb51aaic3b0sc3pwjghg3j49py"))))
     (build-system ruby-build-system)
     ;; Simplecov depends on rubocop for code style checking at build time.
     ;; Rubocop needs simplecov at build time.
     (arguments `(#:tests? #f))
     (propagated-inputs
-     (list ruby-json ruby-docile ruby-simplecov-html))
-    (native-inputs
-     (list bundler))
+     (list ruby-json
+           ruby-docile
+           ruby-simplecov-html
+           ruby-simplecov-json-formatter))
     (synopsis "Code coverage framework for Ruby")
     (description "SimpleCov is a code coverage framework for Ruby with a
 powerful configuration library and automatic merging of coverage across test
 suites.")
-    (home-page "https://github.com/colszowka/simplecov")
+    (home-page "https://github.com/simplecov-ruby/simplecov")
+    (license license:expat)))
+
+(define-public ruby-simplecov-lcov
+  (package
+    (name "ruby-simplecov-lcov")
+    (version "0.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "simplecov-lcov" version))
+              (sha256
+               (base32
+                "1h8kswnshgb9zidvc88f4zjy4gflgz3854sx9wrw8ppgnwfg6581"))))
+    (build-system ruby-build-system)
+    ;; The test suite fails half of its tests; it seems to rely on older
+    ;; versions of simplecov, rspec, possibly others (see:
+    ;; https://github.com/fortissimo1997/simplecov-lcov/issues/29).
+    (arguments (list #:tests? #f
+                     #:test-target "spec"))
+    (native-inputs
+     (list ruby-activesupport
+           ruby-coveralls
+           ruby-rspec
+           ruby-simplecov))
+    (synopsis "SimpleCov formatter to generate a lcov style coverage")
+    (description "This package provides a SimpleCov formatter to generate a
+lcov-style coverage report.")
+    (home-page "https://github.com/fortissimo1997/simplecov-lcov")
+    (license license:expat)))
+
+(define-public ruby-snaky-hash
+  (package
+    (name "ruby-snaky-hash")
+    (version "2.0.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference       ;for tests
+                    (url "https://gitlab.com/oauth-xx/snaky_hash")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0zmixxzi2g2d75zii65bq037j4g67p25l6aqddbmmwizspsp5az6"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'relax-requirements
+                          (lambda _
+                            (substitute* "Gemfile"
+                              (("^linting = .*")
+                               "linting = false\n")
+                              (("^coverage = .*")
+                               "coverage = false\n")
+                              (("^debug = .*")
+                               "debug = false\n"))
+                            (substitute* "spec/spec_helper.rb"
+                              (("^RUN_COVERAGE = .*")
+                               "RUN_COVERAGE = false\n")
+                              (("^ALL_FORMATTERS = .*")
+                               "ALL_FORMATTERS = false\n"))))
+                        (add-before 'build 'drop-signing-key-requirement
+                          (lambda _
+                            (substitute* "snaky_hash.gemspec"
+                              (("spec.signing_key =.*")
+                               "spec.signing_key = nil")))))))
+    (native-inputs (list ruby-rspec ruby-rspec-block-is-expected))
+    (propagated-inputs (list ruby-hashie ruby-version-gem))
+    (synopsis "Hash keys and look-ups normalization Ruby library")
+    (description "The SnakyHash Ruby library provides classes for normalizing
+hash keys and look-ups, and a pseudo-object interface.")
+    (home-page "https://gitlab.com/oauth-xx/snaky_hash")
     (license license:expat)))
 
 (define-public ruby-useragent
@@ -3412,6 +3974,94 @@ output.")
     (home-page "https://github.com/whitequark/bacon-colored_output")
     (license license:expat)))
 
+(define-public ruby-bake
+  (package
+    (name "ruby-bake")
+    (version "0.18.2")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ioquatix/bake")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "19yi1fxzz9n580gig3p3j6nxbgcfcassa6b0q07jkqrzxdqn7xhn"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'sanitize-dependencies
+                 (lambda _
+                   ;; These dependencies are not needed to build and run tests
+                   ;; and contain circular dependencies.
+                   (substitute* "gems.rb"
+                     ((".*'bake-modernize'.*") "")
+                     ((".*'bake-gem'.*") "")
+                     ((".*'bake-github-pages'.*") "")
+                     ((".*'utopia-project'.*") ""))))
+               (add-before 'build 'drop-signing-key-requirement
+                 (lambda _
+                   (substitute* "bake.gemspec"
+                     (("spec.signing_key =.*")
+                      "spec.signing_key = nil"))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "rspec")))))))
+    (native-inputs (list ruby-covered ruby-rspec))
+    (propagated-inputs (list ruby-samovar))
+    (synopsis "Replacement for rake with a simpler syntax")
+    (description "Bake is a task execution tool, inspired by Rake, but
+codifying many of the use cases which are typically implemented in an ad-hoc
+manner.")
+    (home-page "https://github.com/ioquatix/bake")
+    (license license:expat)))
+
+(define-public ruby-bake-test
+  (package
+    (name "ruby-bake-test")
+    (version "0.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "bake-test" version))
+              (sha256
+               (base32
+                "1p6kfpncj0s4zyynrrq6c735jvh0dnwyv7kfqym4rpyka4f85qdp"))))
+    (build-system ruby-build-system)
+    ;; XXX: Disable the test suite to avoid a circular dependency with
+    ;; ruby-sus.
+    (arguments (list #:tests? #f))
+    (propagated-inputs (list ruby-bake))
+    (synopsis "Test suite automatic runner for Ruby")
+    (description "@command{bake-test} automatically discovers how to run local
+test suites for Ruby projects.  It supports @command{rspec}, @command{sus}, as
+well as @samp{rake}.")
+    (home-page "https://github.com/ioquatix/bake-test")
+    (license license:expat)))
+
+(define-public ruby-bake-test-external
+  (package
+    (name "ruby-bake-test-external")
+    (version "0.3.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "bake-test-external" version))
+              (sha256
+               (base32
+                "0749xc7jkz1c5gsq1giwhrqy6s6xqm48bdvs414372881wki2jmh"))))
+    (build-system ruby-build-system)
+    ;; The test suite relies on git and network access to clone external
+    ;; repositories.
+    (arguments (list #:tests? #f))
+    (propagated-inputs (list ruby-bake))
+    (synopsis "Continuous integration extension for Bake")
+    (description "Bake Test External adds a @samp{test:external} action to the
+@command{bake} command to run the test suites of dependent projects to check
+for breakage.")
+    (home-page "https://github.com/ioquatix/bake-test-external")
+    (license license:expat)))
+
 (define-public ruby-connection-pool
   (package
     (name "ruby-connection-pool")
@@ -3490,6 +4140,68 @@ interface for Ruby programs.")
     ;; Some parts are covered by the Ruby license, see file headers.
     (license (list license:expat license:ruby))))
 
+(define-public ruby-fiber-local
+  (package
+    (name "ruby-fiber-local")
+    (version "1.0.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/socketry/fiber-local")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0pp5b81h0lysdnphgprkixh1az0fkrgir5sbcp0mm8arxf3f8m90"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'extract-gemspec 'sanitize-dependencies
+                 (lambda _
+                   ;; This pulls in extraneous maintenance dependencies.
+                   (delete-file "gems.rb")
+                   ;; Depending on ruby-covered would introduce a dependency
+                   ;; cycle with it.
+                   (substitute* '("fiber-local.gemspec" "spec/spec_helper.rb")
+                     ((".*covered.*") ""))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "rspec")))))))
+    (native-inputs (list ruby-rspec))
+    (synopsis "Ruby module to simplify fiber-local state management")
+    (description "This package provides a class-level mixin to make managing
+fiber-local state easy.  It provides easy access to a fiber-local state from a
+fiber, and defaults to a shared thread-local state.")
+    (home-page "https://github.com/socketry/fiber-local")
+    (license license:expat)))
+
+(define-public ruby-flores
+  (package
+    (name "ruby-flores")
+    (version "0.0.8")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "flores" version))
+              (sha256
+               (base32
+                "0pd8gqgy67rp1baq5r7himl0r9jzv5kqlhdmqh8wngynv548w2ai"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "rspec")))))))
+    (native-inputs (list ruby-rspec ruby-simplecov))
+    (synopsis "Fuzzing, randomization, and stress testing library")
+    (description "Flores is a fuzzing, randomization, and stress library to
+help tests uncover more bugs.")
+    (home-page "https://github.com/jordansissel/ruby-flores")
+    (license license:asl2.0)))
+
 (define-public ruby-net-http-persistent
   (package
     (name "ruby-net-http-persistent")
@@ -3509,6 +4221,127 @@ using Net::HTTP, supporting reconnection and retry according to RFC 2616.")
     (home-page "https://github.com/drbrain/net-http-persistent")
     (license license:expat)))
 
+(define-public ruby-net-imap
+  (package
+    (name "ruby-net-imap")
+    (version "0.3.4")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/net-imap")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0nx49i1n9q1wpancqaac2srrpb8mb43mc8wryyqyhpgki2grwyxw"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; The test suite appears to rely on RFCs it tries fetching from the
+     ;; network (see: https://github.com/ruby/net-imap/issues/136).
+     (list #:tests? #f
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'replace-git-ls-files 'adjust-for-git-ls-files
+                 (lambda _
+                   ;; Adjust the git ls-files invocation so that it matches
+                   ;; the expected pattern.
+                   (substitute* "net-imap.gemspec"
+                     (("`git ls-files -z 2>/dev/null`")
+                      "`git ls-files -z`")))))))
+    (propagated-inputs (list ruby-date ruby-net-protocol))
+    (synopsis "Ruby client api for Internet Message Access Protocol")
+    (description "@code{Net::IMAP} implements Internet Message Access
+Protocol (IMAP) client functionality.  The protocol is described in
+@url{https://tools.ietf.org/html/rfc3501, IMAP}.")
+    (home-page "https://github.com/ruby/net-imap")
+    (license license:bsd-2)))
+
+(define-public ruby-net-pop
+  (package
+    (name "ruby-net-pop")
+    (version "0.1.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ruby/net-pop")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "05vz6a56va2rbr7ld78gdzwy1j5mzs98cz82ax5aqa83pzzk6jld"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-net-protocol))
+    (synopsis "Ruby client library for POP3")
+    (description "This library provides functionality for retrieving email via
+POP3, the Post Office Protocol version 3, as specified by
+@url{http://www.ietf.org/rfc/rfc1939.txt, RFC1939}.")
+    (home-page "https://github.com/ruby/net-pop")
+    (license license:bsd-2)))
+
+(define-public ruby-net-smtp
+  (package
+    (name "ruby-net-smtp")
+    (version "0.3.3")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/net-smtp")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ca2wh45xvc09rv6v6sz3vbnkzrjzk5c4l6dk50zk4dwxvghma8r"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-net-protocol))
+    (synopsis "Simple Mail Transfer Protocol client library for Ruby")
+    (description "This library provides functionality to send Internet mail
+via SMTP, the Simple Mail Transfer Protocol.  The SMTP protocol specification
+is known as @url{http://www.ietf.org/rfc/rfc2821.txt, RFC2821}.")
+    (home-page "https://github.com/ruby/net-smtp")
+    (license license:bsd-2)))
+
+(define-public ruby-pleaserun
+  (package
+    (name "ruby-pleaserun")
+    (version "0.0.32")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "pleaserun" version))
+              (sha256
+               (base32
+                "1aykf0l8327bqkkf5xd9jcglsib973zpy37cfnlf4j0vp0cdpn2d"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'extract-gemspec 'relax-requirements
+                 (lambda _
+                   (substitute* "pleaserun.gemspec"
+                     ;; Mustache is pinned at 0.99.8, for portability with
+                     ;; older Rubies.
+                     (("dependency\\(%q<mustache>.freeze.*")
+                      "dependency(%q<mustache>.freeze)\n"))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     ;; The cli_spec.rb test fails non-deterministically with
+                     ;; a Errno::EISDIR error (see:
+                     ;; https://github.com/jordansissel/pleaserun/issues/155)
+                     (invoke "rspec" "--exclude-pattern" "cli_spec.rb")))))))
+    (native-inputs (list ruby-flores ruby-rspec))
+    (propagated-inputs (list ruby-cabin
+                             ruby-clamp
+                             ruby-dotenv
+                             ruby-insist
+                             ruby-mustache
+                             ruby-stud))
+    (synopsis "Init scripts and service definitions generation tool")
+    (description "Pleaserun is a tool to generate startup scripts and service
+definitions.  It targets service managers such as systemd, Upstart, launchd,
+sysv init, and runit.")
+    (home-page "https://github.com/jordansissel/pleaserun")
+    (license license:asl2.0)))
+
 (define-public ruby-power-assert
   (package
     (name "ruby-power-assert")
@@ -3581,21 +4414,38 @@ localization.")
 (define-public ruby-temple
   (package
     (name "ruby-temple")
-    (version "0.8.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "temple" version))
-       (sha256
-        (base32
-         "060zzj7c2kicdfk6cpnn40n9yjnhfrr13d0rsbdhdij68chp2861"))))
+    (version "0.10.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/judofyr/temple")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0rr9fnlcgj9nm3b6hzzjsvcw8x3y7z48j7slk7xxff2mh8s7y3y0"))))
     (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-tilt ruby-bacon ruby-erubis))
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'replace-git-ls-files 'replace-more-git-ls-files
+                 (lambda _
+                   (substitute* "temple.gemspec"
+                     ;; There no longer are test, spec or features
+                     ;; directories.
+                     ((".*`git ls-files -- \\{test,spec,features}/\\*`.*")
+                      "")
+                     ;; There isn't any bin directory either.
+                     ((".*`git ls-files -- bin/\\*`.*")
+                      ""))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "rspec")))))))
+    (native-inputs (list ruby-bacon ruby-erubi ruby-rspec ruby-tilt))
     (synopsis "Template compilation framework in Ruby")
-    (description
-     "Temple is an abstraction and framework for compiling templates to pure
-Ruby.")
+    (description "Temple is an abstraction and framework for compiling
+templates to pure Ruby.")
     (home-page "https://github.com/judofyr/temple")
     (license license:expat)))
 
@@ -3712,6 +4562,30 @@ It allows writing tests, checking results and automated testing in Ruby.")
     (home-page "https://test-unit.github.io/")
     (license (list license:psfl license:ruby))))
 
+(define-public ruby-mapping
+  (package
+    (name "ruby-mapping")
+    (version "1.1.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ioquatix/mapping")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0yhmqp8mprjqf9m7wzc4hhi50qbfax86r89w852csns0ijaffjjs"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "spec"))
+    (native-inputs (list ruby-rspec))
+    (synopsis "Map model objects based on their class to a given output model")
+    (description "The @code{mapping} gem maps model objects based on their
+class to a given output model.  It is useful for versioning external
+interfaces (e.g. JSON APIs) or processing structured data from one format to
+another.")
+    (home-page "https://github.com/ioquatix/mapping")
+    (license license:expat)))
+
 (define-public ruby-markaby
   (package
     (name "ruby-markaby")
@@ -3835,6 +4709,33 @@ to check for the presence of header files, constants, and so on.")
     (home-page "https://github.com/djberg96/mkmf-lite")
     (license license:asl2.0)))
 
+(define-public ruby-msgpack
+  (package
+    (name "ruby-msgpack")
+    (version "1.6.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/msgpack/msgpack-ruby")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "08wi853nv02clrdwx8s6dg9lmcyzq5fk84l4rb94pglps76rlvz7"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "spec"))
+    (native-inputs
+     (list ruby-rake-compiler
+           ruby-ruby-memcheck
+           ruby-rspec
+           ruby-yard))
+    (synopsis "Efficient object serialization library for Ruby")
+    (description "MessagePack is a binary-based efficient object serialization
+library.  It enables to exchange structured objects between many languages
+like JSON.  Unlike JSON, it is very fast and small.")
+    (home-page "https://msgpack.org/")
+    (license license:asl2.0)))
+
 (define-public ruby-mspec
   (package
     (name "ruby-mspec")
@@ -4036,6 +4937,29 @@ encoded form.")
     (home-page "https://github.com/deepfryed/idn-ruby")
     (license license:asl2.0)))
 
+(define-public ruby-insist
+  (package
+    (name "ruby-insist")
+    (version "1.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "insist" version))
+              (sha256
+               (base32
+                "0bw3bdwns14mapbgb8cbjmr0amvwz8y72gyclq04xp43wpp5jrvg"))))
+    (build-system ruby-build-system)
+    (arguments (list #:phases #~(modify-phases %standard-phases
+                                  (replace 'check
+                                    (lambda* (#:key tests? #:allow-other-keys)
+                                      (when tests?
+                                        (invoke "ruby" "test/testing.rb")))))))
+    (synopsis "Testing tool for Ruby")
+    (description "This package provides a simple block-driven assertion
+library for both testing and for production code that attempts to make test
+definitions more readable.")
+    (home-page "https://github.com/jordansissel/ruby-insist/")
+    (license license:asl2.0)))
+
 (define-public ruby-instantiator
   (package
     (name "ruby-instantiator")
@@ -4138,6 +5062,27 @@ conversion to (X)HTML.")
     (home-page "https://github.com/vmg/redcarpet")
     (license license:expat)))
 
+(define-public ruby-reline
+  (package
+    (name "ruby-reline")
+    (version "0.3.3")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/reline")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1papa4f4prjml9qk6yydi4k5a4zgbzmxmbhd8fz9kfg1i34s35cw"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-io-console))
+    (synopsis "GNU Readline or Editline implementation in Ruby")
+    (description "Reline is a pure Ruby alternative GNU Readline or Editline
+implementation.")
+    (home-page "https://github.com/ruby/reline")
+    (license (list license:bsd-2 license:ruby)))) ;dual license
+
 (define-public ruby-rerun
   (package
   (name "ruby-rerun")
@@ -4165,7 +5110,7 @@ Ruby, but can be used for all programs.")
 (define-public ruby-maxitest
   (package
     (name "ruby-maxitest")
-    (version "3.6.0")
+    (version "4.4.1")
     (home-page "https://github.com/grosser/maxitest")
     (source (origin
               ;; Pull from git because the gem does not contain tests.
@@ -4176,7 +5121,7 @@ Ruby, but can be used for all programs.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "07b3j0bv3dx5j42jlvpvl07aaxplyi6wq688y3jl8y528ww2hjz8"))))
+                "0l646lgrgsfgg9qh05b8a3jd43kgrmr6xzbdvyspmdlhchk1qszg"))))
     (build-system ruby-build-system)
     (arguments
      '(#:test-target "default"
@@ -4185,27 +5130,24 @@ Ruby, but can be used for all programs.")
                     (lambda _
                       (substitute* "maxitest.gemspec"
                         (("`git ls-files lib/ bin/ MIT-LICENSE Readme.md`")
-                         "`find lib/ bin/ MIT-LICENSE Readme.md -type f | sort`"))
-                      #t))
+                         "`find lib/ bin/ MIT-LICENSE Readme.md -type f | sort`"))))
                   (add-before 'check 'remove-version-constraints
                     (lambda _
                       ;; Don't use specific versions of dependencies, instead
                       ;; take whatever is available in Guix.
-                      (delete-file "Gemfile.lock")
-                      #t))
+                      (delete-file "Gemfile.lock")))
                   (add-before 'check 'add-mtest-on-PATH
                     (lambda _
                       ;; Tests use 'mtest' which is not automatically added on
                       ;; PATH.
                       (setenv "PATH" (string-append (getcwd) "/bin:"
-                                                    (getenv "PATH")))
-                      #t)))))
+                                                    (getenv "PATH"))))))))
     (native-inputs
-     `(("ps" ,procps)
-       ("ruby-bump" ,ruby-bump)
-       ("ruby-byebug" ,ruby-byebug)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-wwtd" ,ruby-wwtd)))
+     (list procps
+           ruby-bump
+           ruby-byebug
+           ruby-rspec
+           ruby-wwtd))
     (propagated-inputs
      (list ruby-minitest))
     (synopsis "Minitest with extra features")
@@ -4294,8 +5236,7 @@ with processes on remote servers, via SSH2.")
 (define-public ruby-net-scp
   (package
     (name "ruby-net-scp")
-    ;; The 1.2.1 release would be incompatible with ruby-net-ssh >= 4.
-    (version "1.2.2.rc2")
+    (version "4.0.0")
     (source
      (origin
        (method git-fetch)
@@ -4304,7 +5245,7 @@ with processes on remote servers, via SSH2.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1nyn17sy71fn7zs3y6wbgcn35318c10flqgc0582409095x4h0sx"))))
+        (base32 "1mdxh81z2hkcc359g6z96fywbr57azlv2yj4zq76adn5lyqq4hgw"))))
     (build-system ruby-build-system)
     (native-inputs
      (list bundler ruby-test-unit ruby-mocha))
@@ -4319,32 +5260,31 @@ client protocol.")
 (define-public ruby-minitest
   (package
     (name "ruby-minitest")
-    (version "5.17.0")
+    (version "5.18.0")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "minitest" version))
               (sha256
                (base32
-                "1kjy67qajw4rnkbjs5jyk7kc3lyhz5613fwj1i8f6ppdk4zampy0"))))
+                "0ic7i5z88zcaqnpzprf7saimq2f6sad57g5mkkqsrqrcd6h3mx06"))))
     (build-system ruby-build-system)
     (native-inputs (list ruby-hoe))
-    (home-page "https://github.com/seattlerb/minitest")
+    (home-page "https://github.com/minitest/minitest")
     (synopsis "Small test suite library for Ruby")
     (description "Minitest provides a complete suite of Ruby testing
 facilities supporting TDD, BDD, mocking, and benchmarking.")
     (license license:expat)))
 
-(define-public ruby-minitest-5.14
+(define-public ruby-minitest-5.15
   (package
     (inherit ruby-minitest)
-    (name "ruby-minitest-5.14")
-    (version "")
+    (version "5.15.0")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "minitest" version))
               (sha256
                (base32
-                "19z7wkhg59y8abginfrm2wzplz7py3va8fyngiigngqvsws6cwgl"))))))
+                "06xf558gid4w8lwx13jwfdafsch9maz8m0g85wnfymqj63x5nbbd"))))))
 
 ;; This is the last release of Minitest 4, which is used by some packages.
 (define-public ruby-minitest-4
@@ -4401,6 +5341,24 @@ written using either the unit test or spec style.")
     (home-page "https://github.com/splattael/minitest-around")
     (license license:expat)))
 
+(define-public ruby-minitest-retry
+  (package
+    (name "ruby-minitest-retry")
+    (version "0.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "minitest-retry" version))
+              (sha256
+               (base32
+                "1c1zq0b1a9y0hbqphq4ybijnjldlis1g6kyhx92q2ynnqfmzhfga"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-minitest))
+    (synopsis "Minitest extension to re-run failing tests")
+    (description "This package provides the @code{Minitest::Retry} class,
+which extends Minitest to allow retrying tests when they fail.")
+    (home-page "https://github.com/y-yagi/minitest-retry")
+    (license license:expat)))
+
 (define-public ruby-minitest-sprint
   (package
     (name "ruby-minitest-sprint")
@@ -4420,6 +5378,26 @@ easier to re-run individual failing tests.")
     (home-page "https://github.com/seattlerb/minitest-sprint")
     (license license:expat)))
 
+(define-public ruby-minitest-stub-const
+  (package
+    (name "ruby-minitest-stub-const")
+    (version "0.6")                     ;for Rakefile
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/adammck/minitest-stub-const")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0cz4r9fxplx94c7wakx0998n2gv7l21prn8pfpw6z2c33k3g2xar"))))
+    (build-system ruby-build-system)
+    (synopsis "Stub constants for the duration of a block in MiniTest")
+    (description "This package provides a MiniTest extension to stub constants
+for the duration of a block in MiniTest.")
+    (home-page "https://github.com/adammck/minitest-stub-const")
+    (license license:expat)))
+
 (define-public ruby-minitest-bacon
   (package
     (name "ruby-minitest-bacon")
@@ -4466,6 +5444,41 @@ is to be run.")
     (home-page "https://github.com/seattlerb/minitest-focus")
     (license license:expat)))
 
+(define-public ruby-minitest-power-assert
+  (package
+    (name "ruby-minitest-power-assert")
+    (version "0.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "minitest-power_assert" version))
+              (sha256
+               (base32
+                "1dazl6nbxjvvmi5jamrsygkz396s29b7cd841ni6qy4izk8jd9b7"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-minitest ruby-power-assert))
+    (synopsis "Power Assert implementation for Minitest")
+    (description "This gem provides a Power Assert implementation for
+Minitest.  It is inspired by the @code{test-unit-power_assert} gem.")
+    (home-page "https://github.com/hsbt/minitest-power_assert")
+    (license license:bsd-2)))
+
+(define-public ruby-minitest-profile
+  (package
+    (name "ruby-minitest-profile")
+    (version "0.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "minitest-profile" version))
+              (sha256
+               (base32
+                "13h4nwbq6yv7hsaa7dpj90lry4rc5qqnpzvm9n2s57mm2xi31xfa"))))
+    (build-system ruby-build-system)
+    (synopsis "Display the slowest tests in a MiniTest suite")
+    (description "This package provides a MiniTest plugin for displaying the
+slowest tests in a minitest suite.")
+    (home-page "https://github.com/nmeans/minitest-profile")
+    (license license:expat)))
+
 (define-public ruby-minitest-pretty-diff
   ;; Use git reference because gem is out of date and does not contain testing
   ;; script.  There are no releases on GitHub.
@@ -4501,6 +5514,26 @@ structures when tests fail.")
       (home-page "https://github.com/adammck/minitest-pretty_diff")
       (license license:expat))))
 
+(define-public ruby-minitest-proveit
+  (package
+    (name "ruby-minitest-proveit")
+    (version "1.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "minitest-proveit" version))
+              (sha256
+               (base32
+                "0k1hpr8lgkgygfivgcsnnib7xjlf9ribgpn7yidvb4q0l0q2yfmr"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-hoe))
+    (propagated-inputs (list ruby-minitest))
+    (synopsis "Assertion-based tests extension for MiniTest")
+    (description "The @code{minitest-proveit} MiniTest extension ensures all
+tests to prove success (via at least one assertion) rather than rely on the
+absence of failure.")
+    (home-page "https://github.com/seattlerb/minitest-proveit")
+    (license license:expat)))
+
 (define-public ruby-minitest-moar
   (package
     (name "ruby-minitest-moar")
@@ -4706,6 +5739,41 @@ run as a daemon and to be controlled by simple start/stop/restart commands.")
     (home-page "https://github.com/thuehlinger/daemons")
     (license license:expat)))
 
+(define-public ruby-dalli
+  (package
+    (name "ruby-dalli")
+    (version "3.2.4")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/petergoldstein/dalli")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1hhqqv1j3zd2y0vr6maaabsflrvkf1x0i6z8n725mhqydp3f9gwp"))))
+    (build-system ruby-build-system)
+    ;; Disable tests to avoid a dependency cycle with ruby-activesupport,
+    ;; through ruby-ruby-prof.
+    (arguments (list #:tests? #f))
+    (synopsis "High performance memcached client for Ruby")
+    (description "Dalli is a high performance pure Ruby client for accessing
+memcached servers.  Dalli supports:
+
+@itemize
+@item Simple and complex memcached configurations
+@item Fail-over between memcached instances
+@item Fine-grained control of data serialization and compression
+@item Thread-safe operation
+@item SSL/TLS connections to memcached
+@item SASL authentication.
+@end itemize
+
+The name is a variant of Salvador Dali for his famous painting The Persistence
+of Memory.")
+    (home-page "https://github.com/petergoldstein/dalli")
+    (license license:expat)))
+
 (define-public ruby-data_uri
   (package
     (name "ruby-data_uri")
@@ -4726,6 +5794,27 @@ URIs using the normal URI.parse method.")
     (home-page "https://github.com/dball/data_uri")
     (license license:expat)))
 
+(define-public ruby-debug
+  (package
+    (name "ruby-debug")
+    (version "1.7.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "debug" version))
+              (sha256
+               (base32
+                "0x59508j69w9p275gabysv521n210pd3n060gqfgsiqjms1h0ldf"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "test_all"))
+    (propagated-inputs (list ruby-irb ruby-reline))
+    (synopsis "Debugging functionality for Ruby")
+    (description "Debugging functionality for Ruby.  This is completely
+rewritten debug.rb which was contained by the ancient Ruby versions.  It is
+included with Ruby itself, but this package is made available so that the
+latest version can be made available independently from Ruby.")
+    (home-page "https://github.com/ruby/debug")
+    (license license:bsd-2)))
+
 (define-public ruby-deep-merge
   (package
     (name "ruby-deep-merge")
@@ -4748,6 +5837,53 @@ URIs using the normal URI.parse method.")
 you to merge elements inside a hash together recursively.")
     (license license:expat)))
 
+(define-public ruby-delayed-job
+  (package
+    (name "ruby-delayed-job")
+    (version "4.1.11")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "delayed_job" version))
+              (sha256
+               (base32
+                "0s2xg72ljg4cwmr05zi67vcyz8zib46gvvf7rmrdhsyq387m2qcq"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'disable-bundler
+                 (lambda _
+                   (substitute* "Rakefile"
+                     (("require 'bundler/setup'") "")
+                     (("Bundler::GemHelper\\.install_tasks") ""))))
+               (add-after 'unpack 'disable-rubocop
+                 (lambda _
+                   (substitute* "Rakefile"
+                     (("require 'rubocop/rake_task'") "")
+                     (("RuboCop::RakeTask.new") ""))))
+               (add-after 'extract-gemspec 'remove-dependency-on-actionmailer
+                 (lambda _
+                   (substitute* "spec/helper.rb"
+                     (("require 'action_mailer'") ""))
+                   (substitute* "delayed_job.gemspec"
+                     (("\"spec/performable_mailer_spec.rb\".freeze, ") ""))
+                   (delete-file "spec/performable_mailer_spec.rb"))))))
+    (native-inputs
+     (list ruby-activerecord
+           ruby-rspec
+           ruby-simplecov
+           ruby-simplecov-lcov
+           ruby-zeitwerk))
+    (propagated-inputs
+     (list ruby-activesupport))
+    (synopsis "Asynchronous background tasks execution library")
+    (description "Delayed_job (or DJ) encapsulates the common pattern of
+asynchronously executing longer tasks in the background.  It is a direct
+extraction from Shopify where the job table is responsible for a multitude of
+core tasks.")
+    (home-page "https://github.com/collectiveidea/delayed_job")
+    (license license:expat)))
+
 (define-public ruby-git
   (package
     (name "ruby-git")
@@ -4864,6 +6000,41 @@ Nokogiri, Ox, or REXML.")
     (home-page "https://github.com/sferik/multi_xml")
     (license license:expat)))
 
+(define-public ruby-multipart-parser
+  (package
+    (name "ruby-multipart-parser")
+    (version "0.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "multipart-parser" version))
+              (sha256
+               (base32
+                "0xb4p475yrfm883h9kn80a021myn17dvs50wpa1djzcmlq7p0882"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases #~(modify-phases %standard-phases
+                   (add-after 'unpack 'skip-failing-test
+                     ;; One test fails for unknown reasons (see:
+                     ;; https://github.com/danabr/multipart-parser/issues/7).
+                     (lambda _
+                       (substitute* "test/multipart_parser/reader_test.rb"
+                         (("def test_long" all)
+                          (string-append all "\n      return true"))))))))
+    (synopsis "Parser for multipart MIME messages")
+    (description "@code{multipart-parser} is a simple parser for multipart
+MIME messages, written in Ruby, based on felixge/node-formidable's parser.  It
+has the following characteristics:
+@itemize
+@item Pure Ruby
+@item Event-driven API
+@item Only supports one level of multipart parsing
+@item Does not perform I/O
+@item Does not depend on any other library.
+@end itemize")
+    (home-page "https://github.com/danabr/multipart-parser")
+    (license license:expat)))
+
 (define-public ruby-multipart-post
   (package
     (name "ruby-multipart-post")
@@ -4943,6 +6114,33 @@ rogue test/unit/autorun requires.")
     (home-page "https://github.com/cucumber/multi_test")
     (license license:expat)))
 
+(define-public ruby-arr-pm
+  (package
+    (name "ruby-arr-pm")
+    (version "0.0.12")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "arr-pm" version))
+              (sha256
+               (base32
+                "0fddw0vwdrr7v3a0lfqbmnd664j48a9psrjd3wh3k4i3flplizzx"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "rspec")))))))
+    (native-inputs (list ruby-flores ruby-insist ruby-rspec ruby-stud))
+    (synopsis "RPM reader/writer library written in Ruby")
+    (description "This library allows reading and writing RPM packages.  It is
+used by the @command{fpm} tool.  It is written in pure Ruby because
+@code{librpm} is not available on all systems and requires many
+dependencies.")
+    (home-page "https://github.com/jordansissel/ruby-arr-pm")
+    (license license:asl2.0)))
+
 (define-public ruby-arel
   (package
     (name "ruby-arel")
@@ -4962,30 +6160,6 @@ Ruby.  It simplifies the generation of complex SQL queries and adapts to
 various relational database implementations.")
     (license license:expat)))
 
-(define-public ruby-marcel
-  (package
-    (name "ruby-marcel")
-    (version "0.3.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "marcel" version))
-       (sha256
-        (base32
-         "1nxbjmcyg8vlw6zwagf17l9y2mwkagmmkg95xybpn4bmf3rfnksx"))))
-    (build-system ruby-build-system)
-    (arguments
-     '(;; No included tests
-       #:tests? #f))
-    (propagated-inputs
-     (list ruby-mimemagic))
-    (synopsis "MIME type detection using magic numbers, filenames and extensions")
-    (description
-     "@code{marcel} provides @acronym{MIME, Multipurpose Internet Mail
-Extensions} type detection using magic numbers, filenames, and extensions")
-    (home-page "https://github.com/basecamp/marcel")
-    (license license:expat)))
-
 (define-public ruby-minitar
   ;; We package from the GitHub source to fix the security issue reported at
   ;; https://github.com/halostatue/minitar/issues/16.
@@ -5069,8 +6243,9 @@ to reproduce user environments.")
       #~(modify-phases %standard-phases
           (add-after 'install 'delete-mkmf.log
             (lambda _
-              ;; This build log captures non-deterministic file names (see:
-              ;; https://github.com/sparklemotion/nokogiri/issues/2755).
+              ;; Rubygems installs build log files that embed volatile file
+              ;; names (see:
+              ;; https://github.com/rubygems/rubygems/issues/6259).
               (for-each delete-file (find-files #$output "^mkmf\\.log$")))))))
     (native-inputs (list ruby-hoe))
     (inputs (list zlib libxml2 libxslt))
@@ -5134,18 +6309,52 @@ for select languages.")
 (define-public ruby-cuke-modeler
   (package
     (name "ruby-cuke-modeler")
-    (version "3.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "cuke_modeler" version))
-       (sha256
-        (base32
-         "19smj3g3wvz0203l549sadpcxgh0ir350a6k78gq0bmlv9cchmjb"))))
+    (version "3.19.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/enkessler/cuke_modeler")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0bizla3k124lj4r7f2k5cdfm2sawzd6rdmb6rgbkbng2fygxsjib"))))
     (build-system ruby-build-system)
-    (arguments `(#:tests? #f))          ;no test suite in gem
-    (propagated-inputs
-     (list ruby-gherkin))
+    (arguments
+     (list #:test-target "default"
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'relax-requirements
+                 (lambda _
+                   (substitute* "Gemfile"
+                     ;; Cucumber appears pinned to an older version for no
+                     ;; particular reason (see:
+                     ;; https://github.com/enkessler/cuke_modeler/issues/14).
+                     (("'cucumber', '2.2.0'")
+                      "'cucumber', '>= 2.2.0'"))
+                   ;; Disable Bundler.
+                   (substitute* "bin/console"
+                     (("require 'bundler/setup'") ""))
+                   (substitute* "rakefiles/testing_tasks.rb"
+                     (("'bundle', 'exec', ") ""))
+                   ;; Remove extraneous dependencies.
+                   (substitute* "cuke_modeler.gemspec"
+                     ((".*bundler.*") "")
+                     ((".*rubocop.*") "")
+                     ((".*yard.*") ""))
+                   (substitute* "Rakefile"
+                     (("Rainbow.enabled = true") "")
+                     (("require_relative 'rakefiles/documentation_tasks'") "")
+                     (("require_relative 'rakefiles/other_tasks'") "")
+                     (("require_relative 'rakefiles/release_tasks'") "")))))))
+    (native-inputs
+     (list ruby-childprocess
+           ruby-cucumber
+           ruby-rainbow
+           ruby-rspec
+           ruby-simplecov
+           ruby-simplecov-lcov))
+    (propagated-inputs (list ruby-cucumber-gherkin))
     (synopsis "Gherkin test suite analysis tool")
     (description "CukeModeler facilitates modeling a test suite that is
 written in Gherkin (e.g.  Cucumber, SpecFlow, Lettuce, etc.).  It does this by
@@ -5160,7 +6369,7 @@ then be analyzed or manipulated more easily than the underlying AST layer.")
 (define-public ruby-parallel-tests
   (package
     (name "ruby-parallel-tests")
-    (version "3.0.0")
+    (version "4.2.0")
     (home-page "https://github.com/grosser/parallel_tests")
     (source (origin
               (method git-fetch)
@@ -5170,19 +6379,18 @@ then be analyzed or manipulated more easily than the underlying AST layer.")
               (file-name (string-append name version))
               (sha256
                (base32
-                "08a6ndqn2dqacmc7yg48k0dh2rfrynvhkd5hiay16dl9m1r9q8pz"))))
+                "00gbg5q36ayspkzd6r0kg4gk46lsw9s6misx14rczxaf9kqcdrmv"))))
     (build-system ruby-build-system)
     (arguments
-     '(#:test-target "default"
+     '(#:test-target "spec"             ;avoid rubocop dependency
        #:phases (modify-phases %standard-phases
                   (add-after 'patch-source-shebangs 'patch-shell-invokations
                     (lambda _
                       (substitute* '("lib/parallel_tests/tasks.rb"
                                      "spec/parallel_tests/tasks_spec.rb")
                         (("/bin/sh") (which "sh"))
-                        (("/bin/bash") (which "bash")))
-                      #t))
-                  (add-before 'check 'remove-version-constraints
+                        (("/bin/bash") (which "bash")))))
+                  (add-before 'check 'relax-requirements
                     (lambda _
                       ;; Remove hard coded version constraints, instead just
                       ;; use whatever versions are available in Guix.
@@ -5191,20 +6399,27 @@ then be analyzed or manipulated more easily than the underlying AST layer.")
                         (("'minitest',.*")
                          "'minitest'\n")
                         (("'cucumber',.*")
-                         "'cucumber'\n"))
-                      #t))
+                         "'cucumber'\n")
+                        ;; Do not depend on a git-fetched spinach version.
+                        (("gem 'spinach',.*")
+                         "gem 'spinach'\n")
+                        ((".*rubocop.*") ""))))
                   (add-before 'check 'disable-rails-test
                     (lambda _
                       ;; XXX: This test attempts to download and run the test
                       ;; suites of multiple Rails versions(!) directly.
-                      (delete-file "spec/rails_spec.rb")
-                      #t))
+                      (delete-file "spec/rails_spec.rb")))
+                  (add-before 'check 'disable-problematic-tests
+                    (lambda _
+                      ;; This test fails, probably because of the newer
+                      ;; Cucumber version used here.
+                      (delete-file "spec/parallel_tests/cucumber/\
+failure_logger_spec.rb")                      ))
                   (add-before 'check 'set-HOME
                     (lambda _
                       ;; Some tests check the output of Bundler, and fail when
                       ;; Bundler warns that /homeless-shelter does not exist.
-                      (setenv "HOME" "/tmp")
-                      #t)))))
+                      (setenv "HOME" "/tmp"))))))
     (native-inputs
      (list ruby-bump
            ruby-cucumber
@@ -5225,23 +6440,19 @@ across multiple CPU cores.")
 (define-public ruby-parser
   (package
     (name "ruby-parser")
-    (version "3.1.0.0")
+    (version "3.2.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "parser" version))
        (sha256
         (base32
-         "08q20ckhn58m49lccf93p0yv7pkc7hymmcz3di762kb658d5fd38"))))
+         "0s5afi89p76k8vpwiqvh343pm5l23ijqlpszhz65afym3zpkxhzx"))))
     (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f)) ; tests not included in gem
-    (native-inputs
-     (list bundler ruby-cliver ruby-simplecov ruby-racc))
-    (inputs
-     (list ragel))
-    (propagated-inputs
-     (list ruby-ast))
+    (arguments '(#:tests? #f))          ; tests not included in gem
+    (native-inputs (list bundler ruby-cliver ruby-simplecov ruby-racc))
+    (inputs (list ragel))
+    (propagated-inputs (list ruby-ast))
     (synopsis "Ruby parser written in pure Ruby")
     (description
      "This package provides a Ruby parser written in pure Ruby.")
@@ -5294,6 +6505,46 @@ in pure Ruby.  It outputs S-expressions which can be manipulated and converted
 back to Ruby via the @code{ruby2ruby} library.")
     (license license:expat)))
 
+(define-public ruby-ruby-version
+  (package
+    (name "ruby-ruby-version")
+    (version "1.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "ruby_version" version))
+              (sha256
+               (base32
+                "0lvc7bd5ps3w2vq2wb02i0pi3vfcx2rnckx2ix4rjym1qf52kb2j"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'extract-gemspec 'delete-gem-files
+                 ;; There are some pre-built files in the source, and
+                 ;; registered in the .gemspec (see:
+                 ;; https://github.com/janlelis/ruby_version/issues/1).
+                 (lambda _
+                   (delete-file-recursively "pkg")
+                   (substitute* "ruby_version.gemspec"
+                     (("\"pkg/ruby_version-1.0.0.gem\".freeze, ")
+                      "")
+                     (("\"pkg/ruby_version-1.0.1.gem\".freeze, ")
+                      ""))))
+               (add-after 'extract-gemspec 'relax-requirements
+                 (lambda _
+                   (delete-file "Gemfile.lock")
+                   (substitute* "ruby_version.gemspec"
+                     (("\"Gemfile.lock\".freeze, ") "")
+                     ;; Allow a newers versions of development dependencies.
+                     (("~>") ">=")))))))
+    (native-inputs (list ruby-rdoc ruby-rubygems-tasks ruby-rspec))
+    (synopsis "Ruby class for checking the Ruby version")
+    (description "This package provides a @code{RubyVersion} class which
+offers a convenient Domain Specific Language (DSL) for checking for the right
+Ruby version.")
+    (home-page "https://github.com/janlelis/ruby_version")
+    (license license:expat)))
+
 (define-public ruby-prawn-manual-builder
   (package
     (name "ruby-prawn-manual-builder")
@@ -5460,7 +6711,7 @@ classes implemented in C.")
 (define-public ruby-single-cov
   (package
     (name "ruby-single-cov")
-    (version "1.3.2")
+    (version "1.9.1")
     (home-page "https://github.com/grosser/single_cov")
     (source (origin
               (method git-fetch)
@@ -5469,28 +6720,29 @@ classes implemented in C.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "05qdzpcai1p23a120gb9bxkfl4y73k9hicx34ch2lsk31lgi9bl7"))))
+                "1w4k81f2mdg620m6pwkrqayddnz9mr8qx0myqn33mw8k6imfip05"))))
     (build-system ruby-build-system)
     (arguments
-     '(#:test-target "default"
+     '(#:test-target "spec"             ;to avoid rubocop requirement
        #:phases (modify-phases %standard-phases
                   (replace 'replace-git-ls-files
                     (lambda _
                       (substitute* "single_cov.gemspec"
                         (("`git ls-files lib/ bin/ MIT-LICENSE`")
-                         "`find lib/ bin/ MIT-LICENSE -type f | sort`"))
-                      #t))
+                         ;; There no longer appear to be a 'bin'
+                         ;; sub-directory.
+                         "`find lib/ MIT-LICENSE -type f | sort`"))))
                   (add-before 'check 'remove-version-constraints
                     (lambda _
-                      (delete-file "Gemfile.lock")
-                      #t))
-                  (add-before 'check 'make-files-writable
+                      (delete-file "Gemfile.lock")))
+                  (add-before 'check 'relax-requirements
                     (lambda _
-                      ;; Tests need to create local directories and open files
-                      ;; with write permissions.
-                      (for-each make-file-writable
-                                (find-files "specs" #:directories? #t))
-                      #t))
+                      ;; Remove extraneous requirements.
+                      (substitute* "Rakefile"
+                        ((".*require.*bump.*") ""))
+                      (substitute* "Gemfile"
+                        ((".*gem \"bump\".*") "")
+                        ((".*gem \"rubocop\".*") ""))))
                   (add-before 'check 'disable-failing-test
                     (lambda _
                       ;; XXX: This test copies assets from minitest, but can
@@ -5498,10 +6750,8 @@ classes implemented in C.")
                       ;; it for now.
                       (substitute* "specs/single_cov_spec.rb"
                         (("it \"complains when coverage is bad\"")
-                         "xit \"complains when coverage is bad\""))
-                      #t)))))
-    (native-inputs
-     (list ruby-bump ruby-minitest ruby-rspec ruby-simplecov))
+                         "xit \"complains when coverage is bad\"")))))))
+    (native-inputs (list ruby-minitest ruby-rspec ruby-simplecov))
     (synopsis "Code coverage reporting tool")
     (description
      "This package provides actionable code coverage reports for Ruby
@@ -5512,25 +6762,24 @@ development tools to catch coverage problems early.")
 (define-public ruby-oedipus-lex
   (package
     (name "ruby-oedipus-lex")
-    (version "2.5.2")
+    (version "2.6.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "oedipus_lex" version))
-        (sha256
-         (base32
-          "1v1rk78khwq87ar300lwll570zxpkq9rjnpgc9mgsyd6mm9qjz4w"))))
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "oedipus_lex" version))
+       (sha256
+        (base32
+         "094nd7jd3klv45mvprfn2ivcgw8cckq3jhlly77j903vlamfi0df"))))
     (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-hoe))
+    (native-inputs (list ruby-hoe))
     (synopsis "Ruby lexer")
     (description
      "Oedipus Lex is a lexer generator in the same family as Rexical and Rex.
 It is based primarily on generating code much like you would a hand-written
 lexer.  It uses StrScanner within a multi-level case statement.  As such,
 Oedipus matches on the first match, not the longest.")
-      (home-page "https://github.com/seattlerb/oedipus_lex")
-      (license license:expat)))
+    (home-page "https://github.com/seattlerb/oedipus_lex")
+    (license license:expat)))
 
 (define-public ruby-guard
   (package
@@ -5606,6 +6855,52 @@ framework that leverages the expressive @code{Gherkin} language to help you
 define executable specifications of your code.")
     (license license:expat)))
 
+(define-public ruby-timers
+  (package
+    (name "ruby-timers")
+    (version "4.3.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/socketry/timers")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1vvahlhk6i1xks1bsha6s64pjjxhagmzvvf1q9h6z3lpcba43rpx"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'build 'prune-gems.rb
+                 (lambda _
+                   (substitute* "gems.rb"
+                     ;; These are only required for maintenance.
+                     ((".*gem \"bake-modernize\".*") "")
+                     ((".*gem \"bake-gem\".*") "")
+                     ;; Not actually required by the tests.
+                     ((".*gem 'benchmark-ips'.*") "")
+                     ((".*gem \"ruby-prof\".*") ""))))
+               (add-before 'build 'remove-missing-signing-key
+                 (lambda _
+                   ;; Otherwise, the build fails with ENOENT.
+                   (substitute* "timers.gemspec"
+                     ((".*spec.signing_key.*") ""))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "bake" "test")))))))
+    (native-inputs
+     (list ruby-covered
+           ruby-bake-test
+           ruby-bake-test-external
+           ruby-sus))
+    (synopsis "Collection of Ruby timer classes")
+    (description "Timers offers a collections of one-shot and periodic timers,
+intended for use with event loops such as async.")
+    (home-page "https://github.com/socketry/timers")
+    (license license:expat)))
+
 (define-public ruby-tilt
   (package
     (name "ruby-tilt")
@@ -6301,39 +7596,6 @@ you about the changes.")
 documents and fragments.  It's built on top of Nokogiri and libxml2.")
     (license license:expat)))
 
-(define-public ruby-activesupport
-  (package
-    (name "ruby-activesupport")
-    (version "6.1.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "activesupport" version))
-       (sha256
-        (base32
-         "00a4db64g8w5yyk6hzak2nqrmdfvyh5zc9cvnm9gglwbi87ss28h"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda _
-             ;; There are no tests, instead attempt to load the library.
-             (invoke "ruby" "-Ilib" "-r" "active_support"))))))
-    (propagated-inputs
-     (list ruby-concurrent
-           ruby-i18n
-           ruby-minitest
-           ruby-tzinfo
-           ruby-tzinfo-data
-           ruby-zeitwerk))
-    (synopsis "Ruby on Rails utility library")
-    (description "ActiveSupport is a toolkit of support libraries and Ruby
-core extensions extracted from the Rails framework.  It includes support for
-multibyte strings, internationalization, time zones, and testing.")
-    (home-page "https://www.rubyonrails.org")
-    (license license:expat)))
-
 (define-public ruby-crass
   (package
     (name "ruby-crass")
@@ -6359,6 +7621,30 @@ multibyte strings, internationalization, time zones, and testing.")
 (define-public ruby-nokogumbo
   (deprecated-package "ruby-nokogumbo" ruby-nokogiri))
 
+(define-public ruby-samovar
+  (package
+    (name "ruby-samovar")
+    (version "2.1.4")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ioquatix/samovar")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "05pc5xlbv44anx0sfqssh0xhxg297bvl5slsl7k1vnka4k5fhax6"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-covered ruby-rspec))
+    (propagated-inputs (list ruby-console ruby-mapping))
+    (synopsis "Flexible option parser for Ruby")
+    (description "Samovar is a modern framework for building command-line
+tools and applications.  It provides a declarative class-based DSL for
+building command-line parsers that include automatic documentation generation.
+It helps you keep your functionality clean and isolated where possible.")
+    (home-page "https://github.com/ioquatix/samovar")
+    (license license:expat)))
+
 (define-public ruby-sanitize
   (package
     (name "ruby-sanitize")
@@ -6496,7 +7782,7 @@ alternative to Marshal for Object serialization.")
 (define-public ruby-pg
   (package
     (name "ruby-pg")
-    (version "1.3.5")
+    (version "1.4.6")
     (home-page "https://github.com/ged/ruby-pg")
     (source
      (origin
@@ -6507,23 +7793,13 @@ alternative to Marshal for Object serialization.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0c2k2cibd5wwdhva68j5hhfpybm3wmvn2ym4ppn5mqmddwkjkvnk"))))
+         "0k7jgx7x7p6gbsbrv2l5rq27nff2nphnls1sdq525d82b068qnfm"))))
     (build-system ruby-build-system)
     (arguments
      (list
       #:test-target "spec"
       #:phases
       #~(modify-phases %standard-phases
-          (add-after 'unpack 'disable-failing-tests
-            (lambda _
-              ;; These tests fail because DNS is unavailable, giving an
-              ;; unexpected fallback executable in the connection string.
-              (substitute* "spec/pg/connection_spec.rb"
-                (("it (\"accepts an URI and adds( proper)? hostaddr\")" test)
-                 (string-append "xit " test))
-                (("it \"can create a connection option string from an option\
- string and a hash\"" test)
-                 (string-append "xit " test)))))
                (add-before 'build 'compile
                  (lambda _
                    (invoke "rake" "compile")))
@@ -6539,13 +7815,11 @@ alternative to Marshal for Object serialization.")
                              (string-append (getenv "GEM_PATH") ":" new-gem))
                      (when tests?
                        (invoke "rspec"))))))))
-    (native-inputs
-     (list ruby-rake-compiler ruby-hoe ruby-rspec))
-    (inputs
-     (list postgresql))
+    (native-inputs (list ruby-rake-compiler ruby-hoe ruby-rspec))
+    (inputs (list postgresql))
     (synopsis "Ruby interface to PostgreSQL")
     (description "Pg is the Ruby interface to the PostgreSQL RDBMS.  It works
-with PostgreSQL 9.0 and later.")
+with PostgreSQL 9.3 and later.")
     (license license:ruby)))
 
 (define-public ruby-byebug
@@ -6577,6 +7851,10 @@ with PostgreSQL 9.0 and later.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'sanitize-dependencies
+           (lambda _
+             (substitute* "Rakefile"
+               ((".*chandler/tasks.*") ""))))
          (add-after 'unpack 'skip-tmp-path-sensitive-test
            (lambda _
              (substitute* "test/commands/where_test.rb"
@@ -6596,12 +7874,11 @@ with PostgreSQL 9.0 and later.")
              (setenv "HOME" (getcwd)))))))
     (native-inputs
      (list bundler
-           ruby-chandler
            ;; Using minitest 5.17 would cause 5 new bug failures.  This is
            ;; probably related to
            ;; https://github.com/deivid-rodriguez/byebug/pull/837.  Use
-           ;; minitest 5.14 until this is resolved and released.
-           ruby-minitest-5.14
+           ;; minitest 5.15 until this is resolved and released.
+           ruby-minitest-5.15
            ruby-pry
            ruby-rake-compiler
            ruby-rubocop
@@ -6652,13 +7929,13 @@ including comments and whitespace.")
 (define-public ruby-unf-ext
   (package
     (name "ruby-unf-ext")
-    (version "0.0.7.6")
+    (version "0.0.8.2")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "unf_ext" version))
               (sha256
                (base32
-                "1ll6w64ibh81qwvjx19h8nj7mngxgffg7aigjx11klvf5k2g4nxf"))))
+                "1yj2nz2l101vr1x9w2k83a0fag1xgnmjwp8w8rw4ik2rwcz65fch"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
@@ -6670,8 +7947,7 @@ including comments and whitespace.")
              ;; rake-compiler-dock is listed in the gemspec, but only
              ;; required when cross-compiling.
              (substitute* "unf_ext.gemspec"
-               ((".*rake-compiler-dock.*") ""))
-             #t)))))
+               ((".*rake-compiler-dock.*") "")))))))
     (native-inputs
      (list bundler ruby-rake-compiler ruby-test-unit))
     (synopsis "Unicode normalization form support library")
@@ -6763,69 +8039,127 @@ generates Ruby program.")
 (define-public ruby-rack
   (package
     (name "ruby-rack")
-    (version "2.2.3")
+    ;; Do not upgrade to version 3, as Rails doesn't support it yet.
+    (version "2.2.6.3")
     (source
      (origin
-       (method git-fetch)
-       ;; Download from GitHub so that the snippet can be applied and tests run.
+       (method git-fetch)               ;for tests
        (uri (git-reference
-              (url "https://github.com/rack/rack")
-              (commit version)))
+             (url "https://github.com/rack/rack")
+             (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1qrm5z5v586738bnkr9188dvz0s25nryw6sgvx18jjlkizayw1g4"))
-       ;; Ignore test which fails inside the build environment but works
-       ;; outside.
-       (modules '((guix build utils)))
-       (snippet
-        '(begin (substitute* "test/spec_files.rb"
-                  (("res.body.must_equal expected_body") ""))
-                #t))))
+         "19n33q0v15qjh7kbp2painyzyqg16kkf0mp68vcnlswghmmjcyzq"))))
     (build-system ruby-build-system)
     (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'fix-tests
-           (lambda _
-             ;; A few of the tests use the length of a file on disk for
-             ;; Content-Length and Content-Range headers.  However, this file
-             ;; has a shebang in it which an earlier phase patches, growing
-             ;; the file size from 193 to 239 bytes when the store prefix is
-             ;; "/gnu/store".
-             (let ((size-diff (- (string-length (which "ruby"))
-                                 (string-length "/usr/bin/env ruby"))))
-               (substitute* '("test/spec_files.rb")
-                 (("208" bytes)
-                  (number->string (+ (string->number bytes) size-diff)))
-                 (("bytes(.)22-33" all delimiter)
-                  (string-append "bytes"
-                                 delimiter
-                                 (number->string (+ 22 size-diff))
-                                 "-"
-                                 (number->string (+ 33 size-diff))))))
-             #t)))))
-    (native-inputs
-     (list ruby-minitest ruby-minitest-global-expectations))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'fix-tests
+            (lambda _
+              ;; This test fails in the build environment (and passes outside
+              ;; of it).
+              (substitute* "test/spec_files.rb"
+                (("res.body.must_equal expected_body") ""))
+              ;; A few of the tests use the length of a file on disk for
+              ;; Content-Length and Content-Range headers.  However, this file
+              ;; has a shebang in it which an earlier phase patches, growing
+              ;; the file size from 193 to 239 bytes when the store prefix is
+              ;; "/gnu/store".
+              (let ((size-diff (- (string-length (which "ruby"))
+                                  (string-length "/usr/bin/env ruby"))))
+                (substitute* '("test/spec_files.rb")
+                  (("208" bytes)
+                   (number->string (+ (string->number bytes) size-diff)))
+                  (("bytes(.)22-33" all delimiter)
+                   (string-append "bytes"
+                                  delimiter
+                                  (number->string (+ 22 size-diff))
+                                  "-"
+                                  (number->string (+ 33 size-diff)))))))))))
+    (native-inputs (list ruby-minitest ruby-minitest-global-expectations))
     (synopsis "Unified web application interface for Ruby")
     (description "Rack provides a minimal, modular and adaptable interface for
 developing web applications in Ruby.  By wrapping HTTP requests and responses,
 it unifies the API for web servers, web frameworks, and software in between
 into a single method call.")
-    (home-page "https://rack.github.io/")
+    (home-page "https://github.com/rack/rack")
+    (license license:expat)))
+
+(define-public ruby-rack-next
+  (package
+    (inherit ruby-rack)
+    (name "ruby-rack")
+    (version "3.0.7")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/rack/rack")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0msf14655nfcq1kgmib6932lgzm9nw3nb0m3c7nh6nj4sx30yxfr"))))
+    (arguments '())))
+
+(define-public ruby-rackup
+  (package
+    (name "ruby-rackup")
+    (version "2.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rack/rackup")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "19b7sy700zjwaw7x47qpxvhnnz5hrp5bhrxfyljgagrli824dajy"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-minitest-global-expectations))
+    (inputs (list ruby-rack-next ruby-webrick))
+    (synopsis "Command line interface (CLI) for running for Rack applications")
+    (description "This package provides a command line interface for running
+for Rack applications.")
+    (home-page "https://github.com/rack/rackup")
+    (license license:expat)))
+
+(define-public ruby-rack-cache
+  (package
+    (name "ruby-rack-cache")
+    (version "1.13.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "rack-cache" version))
+              (sha256
+               (base32
+                "1cqpax628h2mhnsjfg91c3klxwx2pkvaj061cisb0saqa99b0jgm"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      ;; The test suite depends on ruby-memcached, which is not available in
+      ;; Guix and bundles a very dated copy of memcached (undesirable).
+      #:tests? #f))
+    (propagated-inputs (list ruby-rack))
+    (synopsis "Component to enable HTTP caching for Rack-based applications")
+    (description "Rack::Cache is suitable as a drop-in component to enable
+HTTP caching for Rack-based applications that produce freshness (Expires,
+Cache-Control) and/or validation (Last-Modified, ETag) information.")
+    (home-page "https://github.com/rtomayko/rack-cache")
     (license license:expat)))
 
 (define-public ruby-rack-test
   (package
     (name "ruby-rack-test")
-    (version "0.8.3")
+    (version "2.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "rack-test" version))
        (sha256
         (base32
-         "14ij39zywvr1i9f6jsixfg4zxi2q1m1n1nydvf47f0b6sfc9mv1g"))))
+         "1ysx29gk9k14a14zsp5a8czys140wacvp91fja8xcja0j1hzqq8c"))))
     (build-system ruby-build-system)
     (arguments
      ;; Disable tests because of circular dependencies: requires sinatra,
@@ -6834,8 +8168,9 @@ into a single method call.")
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             (invoke "ruby" "-Ilib" "-r" "rack/test"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "ruby" "-Ilib" "-r" "rack/test")))))))
     (propagated-inputs
      (list ruby-rack))
     (synopsis "Testing API for Rack applications")
@@ -6843,20 +8178,47 @@ into a single method call.")
      "Rack::Test is a small, simple testing API for Rack applications.  It can
 be used on its own or as a reusable starting point for Web frameworks and
 testing libraries to build on.")
-    (home-page "https://github.com/rack-test/rack-test")
+    (home-page "https://github.com/rack/rack-test")
+    (license license:expat)))
+
+(define-public ruby-rack-session
+  (package
+    (name "ruby-rack-session")
+    ;; Stay on version 1 until all the rack users such as Rails can use rack 3
+    ;; (rack-session 2 requires rack 3).
+    (version "1.0.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/rack/rack-session")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0rv955wd7ckp5jgy5c229wmajh48jpcy8s0iv5i8ma61wf7qw0i1"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     (list ruby-minitest-global-expectations
+           ruby-minitest-sprint))
+    (propagated-inputs
+     (list ruby-rack))
+    (synopsis "Session management for Rack")
+    (description "This package provides a session management implementation
+for Rack.")
+    (home-page "https://github.com/rack/rack-session")
     (license license:expat)))
 
 (define-public ruby-rack-protection
   (package
     (name "ruby-rack-protection")
-    (version "2.0.8.1")
+    (version "3.0.5")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "rack-protection" version))
        (sha256
         (base32
-         "1zyj97bfr1shfgwk4ddmdbw0mdkm4qdyh9s1hl0k7accf3kxx1yi"))))
+         "1a12m1mv8dc0g90fs1myvis8vsgr427k1arg1q4a9qlfw6fqyhis"))))
     (build-system ruby-build-system)
     (arguments
      '(;; Tests missing from the gem.
@@ -6974,21 +8336,26 @@ inspired by the Sinatra microframework style of specifying actions:
 (define-public ruby-rubocop-ast
   (package
     (name "ruby-rubocop-ast")
-    (version "1.4.1")
+    (version "1.28.0")
     (source
      (origin
        (method git-fetch)               ;no test suite in distributed gem
        (uri (git-reference
-             (url "https://github.com/rubocop-hq/rubocop-ast")
+             (url "https://github.com/rubocop/rubocop-ast")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1x2m7k4bn4zvvwmj7imzmv0dav6xnrbcvssad1m5lkprx7h5lzkq"))))
+         "1dp09gcmahmdfi3s6xsksr3ka9dddjpy9ymhr9wjwv67y1falffr"))))
     (build-system ruby-build-system)
     (arguments
      `(#:test-target "spec"
        #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'relax-dependencies
+                    (lambda _
+                      (substitute* "Gemfile"
+                        (("gem 'simplecov', '~> 0.10', '< 0.18'")
+                         "gem 'simplecov', '~> 0.10'"))))
                   (add-before 'build 'generate-lexer
                     (lambda _
                       (setenv "RUBOCOP_VERSION" "none")
@@ -6997,8 +8364,7 @@ inspired by the Sinatra microframework style of specifying actions:
                     (lambda _
                       (substitute* "rubocop-ast.gemspec"
                         (("`git ls-files(.*)`" _ files)
-                         (format #f "`find ~a -type f| sort`" files)))
-                      #t)))))
+                         (format #f "`find ~a -type f| sort`" files))))))))
     (native-inputs
      (list ruby-bump
            ruby-oedipus-lex
@@ -7207,17 +8573,17 @@ run.")
 (define-public ruby-rubocop
   (package
     (name "ruby-rubocop")
-    (version "1.10.0")
+    (version "1.48.1")
     (source
      (origin
        (method git-fetch)               ;no tests in distributed gem
        (uri (git-reference
-             (url "https://github.com/rubocop-hq/rubocop")
+             (url "https://github.com/rubocop/rubocop")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0wjw9vpzr4f3nf1zf010bag71w4hdi0haybdn7r5rlmw45pmim29"))))
+         "1l4j99mbrdjy2bzcnky30pjgjv8sxjr187jzliyqmldvpf7dizbp"))))
     (build-system ruby-build-system)
     (arguments
      `(#:test-target "default"
@@ -7228,8 +8594,7 @@ run.")
        (modify-phases %standard-phases
          (add-before 'check 'set-home
            (lambda _
-             (setenv "HOME" (getcwd))
-             #t))
+             (setenv "HOME" (getcwd))))
          ;; Rubocop depends on itself for tests, directly and indirectly. By
          ;; regenerating the TODO list we test rubocop against itself and
          ;; forgo adjusting the test suite to our environment each release.
@@ -7237,40 +8602,37 @@ run.")
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
                (make-file-writable ".rubocop_todo.yml")
-               (invoke "./exe/rubocop" "--auto-gen-config"))
-             #t))
-         (add-before 'check 'make-adoc-files-writable
-           (lambda _
-             (let ((adoc-files (find-files "docs/modules/ROOT/pages"
-                                           "\\.adoc$")))
-               (for-each make-file-writable adoc-files))
-             #t)))))
+               (invoke "./exe/rubocop" "--auto-gen-config")))))))
     (native-inputs
-     `(("ruby-bump" ,ruby-bump)
-       ("ruby-pry" ,ruby-pry)
-       ("ruby-rake" ,ruby-rake)
-       ("ruby-rspec" ,ruby-rspec)
-       ("ruby-rubocop-minimal" ,ruby-rubocop-minimal)
-       ("ruby-rubocop-performance-minimal" ,ruby-rubocop-performance-minimal)
-       ("ruby-rubocop-rspec-minimal" ,ruby-rubocop-rspec-minimal)
-       ("ruby-simplecov" ,ruby-simplecov)
-       ("ruby-stackprof" ,ruby-stackprof)
-       ("ruby-test-queue" ,ruby-test-queue)
-       ("ruby-webmock" ,ruby-webmock)
-       ("ruby-yard" ,ruby-yard)))
+     (list ruby-pry
+           ruby-rake
+           ruby-rspec
+           ruby-rubocop-ast
+           ruby-rubocop-capybara-minimal
+           ruby-rubocop-minimal
+           ruby-rubocop-performance-minimal
+           ruby-rubocop-rake-minimal
+           ruby-rubocop-rspec-minimal
+           ruby-simplecov
+           ruby-stackprof
+           ruby-test-queue
+           ruby-webmock
+           ruby-yard))
     (propagated-inputs
-     (list ruby-parallel
+     (list ruby-json
+           ruby-parallel
            ruby-parser
+           ruby-progressbar
            ruby-rainbow
            ruby-regexp-parser
+           ruby-rexml
            ruby-rubocop-ast
-           ruby-progressbar
            ruby-unicode-display-width))
     (synopsis "Ruby code style checking tool")
     (description
      "@code{rubocop} is a Ruby code style checking tool.  It aims to enforce
 the community-driven Ruby Style Guide.")
-    (home-page "https://github.com/rubocop-hq/rubocop")
+    (home-page "https://github.com/rubocop/rubocop")
     (license license:expat)))
 
 (define-public ruby-rubocop-minimal
@@ -7453,14 +8815,14 @@ for FFI.")
 (define-public ruby-sawyer
   (package
     (name "ruby-sawyer")
-    (version "0.8.2")
+    (version "0.9.2")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "sawyer" version))
        (sha256
         (base32
-         "0yrdchs3psh583rjapkv33mljdivggqn99wkydkjdckcjn43j3cz"))))
+         "1jks1qjbmqm8f9kvwa81vqj39avaj9wdnzc531xm29a55bb74fps"))))
     (build-system ruby-build-system)
     (propagated-inputs
      (list ruby-addressable ruby-faraday))
@@ -7473,51 +8835,40 @@ top of Faraday.")
 (define-public ruby-octokit
   (package
     (name "ruby-octokit")
-    (version "4.18.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "octokit" version))
-       (sha256
-        (base32
-         "0zvfr9njmj5svi39fcsi2b0g7pcxb0vamw9dlyas8bg814jlzhi6"))))
+    (version "6.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/octokit/octokit.rb")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "01njrd17bz28mlsa8hi9gad7s6d1d0vpyn0g66p3d42zgplr9qkq"))))
     (build-system ruby-build-system)
-    (arguments '(#:tests? #f))          ;no test suite in the gem release
-    (propagated-inputs
-     (list ruby-faraday ruby-sawyer))
+    (native-inputs
+     (list ruby-faraday-multipart
+           ruby-jwt
+           ruby-mime-types
+           ruby-multi-json
+           ruby-netrc
+           ruby-pry-byebug
+           ruby-rbnacl
+           ruby-rspec
+           ruby-simplecov
+           ruby-webmock
+           ruby-vcr-expat))
+    (propagated-inputs (list ruby-faraday ruby-sawyer))
     (synopsis "Ruby toolkit for the GitHub API")
     (description "Octokit wraps the GitHub API in a flat API client that
 follows Ruby conventions and requires little knowledge of REST.")
     (home-page "https://github.com/octokit/octokit.rb")
     (license license:expat)))
 
-(define-public ruby-chandler
-  (package
-    (name "ruby-chandler")
-    (version "0.9.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "chandler" version))
-       (sha256
-        (base32
-         "1n8a4mr2jkcz5vaaps45g2rxa2pzy1wb7cylgw85xmmyyp14lnrr"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-rubocop))
-    (propagated-inputs
-     (list ruby-netrc ruby-octokit))
-    (synopsis "Sync CHANGELOG entries to GitHub's release notes")
-    (description "Chandler syncs a project's CHANGELOG file entries to
-GitHub's release notes to remove the need of manually entering release
-notes.")
-    (home-page "https://github.com/mattbrictson/chandler")
-    (license license:expat)))
-
 (define-public ruby-pry-byebug
   (package
     (name "ruby-pry-byebug")
-    (version "3.9.0")
+    (version "3.10.1")
     (source
      (origin
        (method git-fetch)
@@ -7527,18 +8878,19 @@ notes.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1kchrwccai92068p50zyd6mh524ywqnm0jw5g3lks7iwmf0xkmgc"))))
+         "0z8rhvmr9qmlbk8c8h6jbig5qd5xbdg9qihvx3g0cv1whqzbfikq"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'sanitize-dependencies
+                    (lambda _
+                      (substitute* "Rakefile"
+                        ((".*chandler/tasks.*") ""))))
                   (add-before 'check 'set-home
                     (lambda _
-                      (setenv "HOME" (getcwd))
-                      #t)))))
-    (native-inputs
-     (list ruby-chandler ruby-rubocop ruby-simplecov))
-    (propagated-inputs
-     (list ruby-byebug ruby-pry))
+                      (setenv "HOME" (getcwd)))))))
+    (native-inputs (list ruby-rubocop ruby-simplecov))
+    (propagated-inputs (list ruby-byebug ruby-pry))
     (synopsis "Step-by-step debugging and stack navigation in Pry")
     (description "This package adds step-by-step debugging and stack
 navigation capabilities to @code{pry}, using @code{byebug}.")
@@ -7646,6 +8998,89 @@ variable length integers (varint) in Ruby Protocol Buffers.")
     (home-page "https://github.com/liquidm/varint")
     (license license:bsd-3)))
 
+(define-public ruby-version-gem
+  (package
+    (name "ruby-version-gem")
+    (version "1.1.2")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://gitlab.com/oauth-xx/version_gem")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "17y4dydlczd5xvvwfy94x63d5wi14cdkfhi6g94fm1sgsxxzzmq0"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'relax-requirements
+                          (lambda _
+                            (substitute* "Gemfile"
+                              (("^linting = .*")
+                               "linting = false\n")
+                              (("^coverage = .*")
+                               "coverage = false\n")
+                              (("^debug = .*")
+                               "debug = false\n"))
+                            (substitute* "spec/spec_helper.rb"
+                              (("^RUN_COVERAGE = .*")
+                               "RUN_COVERAGE = false\n")
+                              (("^ALL_FORMATTERS = .*")
+                               "ALL_FORMATTERS = false\n"))))
+                        (add-before 'build 'drop-signing-key-requirement
+                          (lambda _
+                            (substitute* "version_gem.gemspec"
+                              (("spec.signing_key =.*")
+                               "spec.signing_key = nil"))))
+                        (add-before 'check 'disable-problematic-tests
+                          (lambda _
+                            (substitute* "spec/version_gem/ruby_spec.rb"
+                              ;; The test validates the minimum version of
+                              ;; Ruby to be 2.7.7, but because our Ruby is
+                              ;; 2.7.4 grafted with 2.7.7, the version seen is
+                              ;; 2.7.4 and it fails.
+                              (("it 'returns true when current ruby greater \
+than minimum'" all)
+                               (string-append "x" all))))))))
+    (native-inputs (list ruby-rspec ruby-rspec-block-is-expected))
+    (synopsis "Improved @code{Version} module for Ruby")
+    (description "VersionGem aims to provide introspection of a @code{Version}
+module based on a @code{Version::VERSION} constant string wile not interfering
+with gemspec parsing where the @code{VERSION} string is traditionally used.")
+    (home-page "https://gitlab.com/oauth-xx/version_gem")
+    (license license:expat)))
+
+;;; Note: Do NOT update to a newer version; this is the last commit that is
+;;; still licensed as free software, the project having switched to the
+;;; Hippocratic license afterward (see:
+;;; https://github.com/vcr/vcr/issues/959).
+(define-public ruby-vcr-expat
+  (let ((revision "0")
+        (commit-dont-touch "842b2bf89099dc91f2c643d0d85d1abd54eb7e85")) ;
+    (package
+      (name "ruby-vcr-expat")
+      (version (git-version "5.0.0" revision commit-dont-touch))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/vcr/vcr")
+                      (commit commit-dont-touch)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "02mzifd2655kjh35bbry01n66jjcjrsw6ncqlybfkjcaqrw2zalv"))))
+      (build-system ruby-build-system)
+      (arguments (list #:tests? #f))    ;avoid all dependencies
+      (home-page "https://github.com/vcr/vcr")
+      (synopsis "HTTP interaction recorder [old version]")
+      (description "Record your test suite's HTTP interactions and replay them
+during future test runs for fast, deterministic, accurate tests.  This is an
+older version of VCR that is free software under the Expat license.  The
+project later switched to the Hippocratic license, which is non-free.
+@emph{Do not use it in new free software projects}.")
+      (license license:expat))))
+
 (define-public ruby-ruby-prof
   (package
     (name "ruby-ruby-prof")
@@ -7692,6 +9127,46 @@ Profiling multiple threads simultaneously is supported.
     (home-page "https://github.com/ruby-prof/ruby-prof")
     (license license:bsd-2)))
 
+(define-public ruby-ruby-memcheck
+  (package
+    (name "ruby-ruby-memcheck")
+    (version "1.2.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/Shopify/ruby_memcheck")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1sx8nhx7w4z5s5vj6kq6caqsfznswqzwca372j82cd80hf9iznra"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-valgrind-path
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "lib/ruby_memcheck/configuration.rb"
+                (("DEFAULT_VALGRIND = \"valgrind\"")
+                 (format #f "DEFAULT_VALGRIND = ~s"
+                         (search-input-file inputs "bin/valgrind"))))))
+          (add-before 'replace-git-ls-files 'standardize-git-ls-files
+            (lambda _
+              (substitute* "ruby_memcheck.gemspec"
+                (("%x\\(git ls-files -z)")
+                 "`git ls-files -z`")))))))
+    (native-inputs (list ruby-rake-compiler ruby-rspec))
+    (inputs (list valgrind/interactive))
+    (propagated-inputs (list ruby-nokogiri))
+    (synopsis "Valgrind memcheck tool for Ruby")
+    (description "The @code{ruby_memcheck} gem provides a sane way to use
+Valgrind's memcheck on your native extension gem, that filters out all the
+false positives caused by Ruby not freeing all of the memory it allocates
+during shutdown.")
+    (home-page "https://github.com/Shopify/ruby_memcheck")
+    (license license:expat)))
+
 (define-public ruby-memory-profiler
   (package
     (name "ruby-memory-profiler")
@@ -7713,74 +9188,100 @@ Profiling multiple threads simultaneously is supported.
     (home-page "https://github.com/SamSaffron/memory_profiler")
     (license license:expat)))
 
+(define-public ruby-cucumber-compatibility-kit
+  (package
+    (name "ruby-cucumber-compatibility-kit")
+    (version "11.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "cucumber-compatibility-kit" version))
+              (sha256
+               (base32
+                "17c8zx0yn68rcpfbw4nb1gzvh9fzpwsi1y0qivb99ahdlgzcdp8q"))))
+    (build-system ruby-build-system)
+    (arguments (list #:phases #~(modify-phases %standard-phases
+                                  (replace 'check
+                                    (lambda* (#:key tests? #:allow-other-keys)
+                                      (when tests?
+                                        (invoke "rspec")))))))
+    (propagated-inputs (list ruby-cucumber-messages ruby-rake ruby-rspec))
+    (synopsis "Cucumber compatibility verification utility")
+    (description "The Cucumber Compatibility Kit (CCK) aims to validate a
+Cucumber implementation's support for the Cucumber Messages protocol.")
+    (home-page "https://github.com/cucumber/compatibility-kit")
+    (license license:expat)))
+
+;;; Variant package to break a cycle with ruby-cucumber-messages.
+(define ruby-cucumber-compatibility-kit-bootstrap
+  (package/inherit ruby-cucumber-compatibility-kit
+    (arguments (list #:tests? #f))
+    (propagated-inputs (modify-inputs (package-propagated-inputs
+                                       ruby-cucumber-compatibility-kit)
+                         (delete "ruby-cucumber-messages")))))
+
 (define-public ruby-cucumber-messages
   (package
     (name "ruby-cucumber-messages")
-    (version "12.2.0")
+    (version "21.0.1")
     (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/cucumber/messages-ruby")
-                    (commit "12cd07eac87bce7843fd1bb0bf64bc4da09f097c")))
-              (file-name (git-file-name name version))
+              (method url-fetch)
+              (uri (rubygems-uri "cucumber-messages" version))
               (sha256
                (base32
-                "16wwqfpsq7crvxc3q08lphgyh12cl2d83p1c79p312q4jmy9cn5a"))))
+                "0482a63y7my0arn2bv208g401dq8525f0gwhnwaa11mhv6ph0q5i"))))
     (build-system ruby-build-system)
     (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'patch-protobuf.rb
-                    (lambda _
-                      (substitute* "rake/protobuf.rb"
-                        (("load 'protobuf/tasks/compile.rake'")
-                         "require 'protobuf/tasks'"))
-                      #t))
-                  (add-before 'build 'compile
-                    (lambda _
-                      (substitute* "Makefile"
-                        (("bundle exec ") "")
-                        (("include default.mk.*" all)
-                         (string-append "#" all)))
-                      (invoke "make")))
-                  (replace 'check
-                    (lambda _
-                      (invoke "rspec"))))))
-    (propagated-inputs
-     `(("ruby-protobuf" ,ruby-protobuf-cucumber)))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               ;; The test suite requires the gem to be installed, so move it
+               ;; after the install phase.
+               (delete 'check)
+               (add-after 'install 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (setenv "GEM_PATH" (string-append
+                                       (getenv "GEM_PATH") ":"
+                                       #$output "/lib/ruby/vendor_ruby"))
+                   (when tests?
+                     (invoke "rspec")))))))
     (native-inputs
-     (list ruby-rspec))
-    (home-page "https://github.com/cucumber/messages-ruby")
+     (list ruby-cucumber-compatibility-kit-bootstrap ruby-rspec))
+    (home-page "https://github.com/cucumber/messages/")
     (synopsis "Cucumber Messages for Ruby (Protocol Buffers)")
     (description "Cucumber Messages for Ruby is a library which allows
 serialization and deserialization of the protocol buffer messages used in
 Cucumber.")
     (license license:expat)))
 
-(define-public ruby-gherkin
+(define-public ruby-cucumber-gherkin
   (package
-    (name "ruby-gherkin")
-    (version "14.0.1")
+    (name "ruby-cucumber-gherkin")
+    (version "26.1.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/cucumber/gherkin-ruby")
+                    (url "https://github.com/cucumber/gherkin")
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1dwa8632nc6kijv8p257jl64rsjmc0fimlaqvxlkdi2h9n1nympb"))))
+                "1rsannfcg5rqh5a3d3paw10kf6mmqjrgbq3k235px4swbyqysmgn"))))
     (build-system ruby-build-system)
-    (native-inputs
-     (list ruby-cucumber-messages ruby-rspec))
-    (arguments
-     `(#:test-target "spec"))
+    (arguments (list #:test-target "spec"
+                     #:phases #~(modify-phases %standard-phases
+                                  (add-after 'unpack 'chdir
+                                    (lambda _
+                                      (chdir "ruby"))))))
+    (native-inputs (list ruby-rspec))
+    (propagated-inputs (list ruby-cucumber-messages))
     (synopsis "Gherkin parser for Ruby")
     (description "Gherkin is a parser and compiler for the Gherkin language.
 It is intended be used by all Cucumber implementations to parse
 @file{.feature} files.")
-    (home-page "https://github.com/cucumber/gherkin-ruby")
+    (home-page "https://github.com/cucumber/gherkin")
     (license license:expat)))
 
+(define-deprecated ruby-gherkin ruby-cucumber-gherkin)
+
 (define-public ruby-gherkin-ruby
   (package
     (name "ruby-gherkin-ruby")
@@ -7803,62 +9304,71 @@ It is intended be used by all Cucumber implementations to parse
 (define-public ruby-aruba
   (package
     (name "ruby-aruba")
-    (version "0.14.14")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "aruba" version))
-       (sha256
-        (base32
-         "0l2mfpdxc03gdrbwc2hv4vdhjhqhfcdp6d02j05j64ncpi9srlqn"))))
+    (version "2.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/cucumber/aruba")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1mmlgqhi6yww3z34hmrrnha2rygkv6kx0q962z31dqxjkcv23yfd"))))
     (build-system ruby-build-system)
     (arguments
-     '(#:test-target "spec"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch
-           (lambda _
-             (substitute* "spec/aruba/api_spec.rb"
-               ;; This resolves some errors in the specs
-               ;;
-               ;; undefined method `parse' for Time:Class
-               (("require 'spec_helper'")
-                "require 'spec_helper'\nrequire 'time'"))
-             ;; Avoid shebang issues in this spec file
-             (substitute* "spec/aruba/matchers/command_spec.rb"
-               (("/usr/bin/env bash")
-                (which "bash")))
-             #t))
-         (add-before 'check 'remove-unnecessary-dependencies
-           (lambda _
-             (substitute* "Gemfile"
-               ((".*byebug.*") "\n")
-               ((".*pry.*") "\n")
-               ((".*yaml.*") "\n")
-               ((".*bcat.*") "\n")
-               ((".*kramdown.*") "\n")
-               ((".*rubocop.*") "\n")
-               ((".*cucumber-pro.*") "\n")
-               ((".*cucumber.*") "\n")
-               ((".*license_finder.*") "\n")
-               ((".*rake.*") "gem 'rake'\n")
-               ((".*relish.*") "\n"))
-             (substitute* "aruba.gemspec"
-               (("spec\\.add\\_runtime\\_dependency 'cucumber'.*")
-                "spec.add_runtime_dependency 'cucumber'"))
-             #t))
-         (add-before 'check 'set-home
-           (lambda _ (setenv "HOME" "/tmp") #t)))))
+     (list
+      ;; XXX: Only run the "spec" target and not the "cucumber" one, as it is
+      ;; slow and has multiple unexplained test failures.
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-paths
+            (lambda _
+              ;; This test file relies on a dynamically generated script;
+              ;; patch its #!/bin/bash shebang.
+              (substitute* "spec/aruba/api/commands_spec.rb"
+                (("/bin/bash")
+                 (which "bash")))))
+          (add-before 'check 'relax-requirements
+            ;; Many development requirements are not actually needed.
+            (lambda _
+              (substitute* "aruba.gemspec"
+                (("\\[\">= 0.18.0\", \"< 0.22.0\"]") ;simplecov
+                 "\">= 0.18.0\"")
+                ((".*appraisal.*") "")
+                ((".*pry.*") "")
+                ((".*kramdown.*") "")
+                ((".*rubocop.*") "")
+                ((".*yard-junk.*") ""))
+              (substitute* "Rakefile"
+                ((".*require \"rubocop/rake_task\".*") "")
+                ((".*require \"yard-junk/rake\".*") "")
+                ((".*RuboCop::RakeTask.new.*") "")
+                ((".*YardJunk::Rake.define_task.*") ""))))
+          ;; The tests rely on the Gem being installed, so move the check
+          ;; phase after the install phase.
+          (delete 'check)
+          (add-after 'install 'check
+            (assoc-ref %standard-phases 'check))
+          (add-before 'check 'set-GEM_PATH
+            (lambda _
+              (setenv "GEM_PATH" (string-append
+                                  (getenv "GEM_PATH") ":"
+                                  #$output "/lib/ruby/vendor_ruby"))))
+          (add-before 'check 'set-home
+            (lambda _
+              (setenv "HOME" "/tmp"))))))
     (native-inputs
-     (list bundler ruby-rspec ruby-fuubar ruby-simplecov))
+     (list ruby-rake-manifest
+           ruby-rspec
+           ruby-simplecov))
     (propagated-inputs
-     (list ruby-childprocess
+     (list bundler
+           ruby-childprocess
            ruby-contracts
            ruby-cucumber
-           ruby-ffi
            ruby-rspec-expectations
-           ruby-thor
-           ruby-yard))
+           ruby-thor))
     (synopsis "Test command-line applications with Cucumber, RSpec or Minitest")
     (description
      "Aruba is an extension for Cucumber, RSpec and Minitest for testing
@@ -7867,18 +9377,6 @@ language.")
     (home-page "https://github.com/cucumber/aruba")
     (license license:expat)))
 
-;; A version of ruby-aruba without tests run so that circular dependencies can
-;; be avoided.
-(define ruby-aruba-without-tests
-  (package
-    (inherit ruby-aruba)
-    (arguments '(#:tests? #f))
-    (propagated-inputs
-     `(("ruby-cucumber" ,ruby-cucumber-without-tests)
-       ,@(alist-delete "ruby-cucumber"
-                       (package-propagated-inputs ruby-aruba))))
-    (native-inputs '())))
-
 (define-public ruby-sys-uname
   (package
   (name "ruby-sys-uname")
@@ -7902,73 +9400,65 @@ such as the OS name, OS version, system name, etc.")
   (home-page "https://github.com/djberg96/sys-uname")
   (license license:asl2.0)))
 
-(define-public ruby-cucumber-create-meta
-  (package
-    (name "ruby-cucumber-create-meta")
-    (version "1.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "cucumber-create-meta" version))
-       (sha256
-        (base32
-         "0i0i3arymjrnjk72mg79w1a11607x4d0lrqafm9sz2gq9l52zasw"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-after 'extract-gemspec 'relax-version-requirements
-                    (lambda _
-                      (substitute* ".gemspec"
-                        ((" 12\\.2")
-                         " 12.1"))
-                      #t))
-                  (replace 'check
-                    (lambda _
-                      (invoke "rspec"))))))
-    (native-inputs
-     (list ruby-rspec))
-    (propagated-inputs
-     (list ruby-cucumber-messages ruby-sys-uname))
-    (synopsis "Function to create @code{Meta} messages for Cucumber Ruby")
-    (description "The @code{createMeta} utility function allows generating
-system-specific @code{Meta} messages for Cucumber Ruby.")
-    (home-page "https://github.com/cucumber/cucumber/tree/master/create-meta/ruby")
-    (license license:expat)))
-
 (define-public ruby-cucumber-html-formatter
   (package
     (name "ruby-cucumber-html-formatter")
-    (version "7.0.0")
+    (version "20.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "cucumber-html-formatter" version))
        (sha256
         (base32
-         "0lshj4sw9jw7687wrhknyb9kffblai3l843zgrznyqij3ga0bc62"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (replace 'check
-                    (lambda _
-                      (invoke "rspec"))))))
-    (native-inputs
-     (list ruby-rspec))
-    (propagated-inputs
-     (list ruby-cucumber-messages))
+         "0c7r9mfmph4c6yzc7y3dkr92rhwvpyksr0mdhpqp67xmmr8z1br4"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'extract-gemspec 'relax-requirements
+                          (lambda _
+                            (substitute* ".gemspec"
+                              (("~> 18.0") "~> 21.0")))) ;cucumber-messages
+                        (replace 'check
+                          (lambda* (#:key tests? #:allow-other-keys)
+                            (when tests?
+                              (invoke "rspec")))))))
+    (native-inputs (list ruby-cucumber-compatibility-kit ruby-rspec))
+    (propagated-inputs (list ruby-cucumber-messages))
     (synopsis "HTML formatter for Cucumber")
     (description "Cucumber HTML Formatter produces a HTML report for Cucumber
 runs.  It is built on top of cucumber-react and works with any Cucumber
 implementation with a protocol buffer formatter that outputs Cucumber
 messages.")
-    (home-page "https://github.com/cucumber/cucumber/tree/\
-master/html-formatter/ruby")
+    (home-page "https://github.com/cucumber/html-formatter")
+    (license license:expat)))
+
+(define-public ruby-cucumber-ci-environment
+  (package
+    (name "ruby-cucumber-ci-environment")
+    (version "9.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "cucumber-ci-environment" version))
+              (sha256
+               (base32
+                "1nmn2hfrjlbazgcryr3hwvsa5v4csfbjqxb4q7wbjhaxl9xxn0k7"))))
+    (build-system ruby-build-system)
+    (arguments (list #:phases #~(modify-phases %standard-phases
+                                  (replace 'check
+                                    (lambda* (#:key tests? #:allow-other-keys)
+                                      (when tests?
+                                        (invoke "rspec")))))))
+    (native-inputs (list ruby-rspec))
+    (synopsis "Detect CI Environment from environment variables")
+    (description "This is a Ruby utility library for Cucumber that detects a
+CI environment from environment variables.")
+    (home-page "https://github.com/cucumber/ci-environment")
     (license license:expat)))
 
 (define-public ruby-cucumber
   (package
     (name "ruby-cucumber")
-    (version "4.1.0")
+    (version "8.0.0")
     (source
      (origin
        (method git-fetch)
@@ -7978,49 +9468,50 @@ master/html-formatter/ruby")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0g9rqfslbzkkrq2kvl14fgknrhfbji3bjjpjxff5nc9wzd3hd549"))))
+         "1dz880fdz6rfbh1nwwcq21v65byik46jnf9gppnrqf3p5k61i55r"))))
     (build-system ruby-build-system)
     (arguments
-     '(#:test-target "default"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'disable-rubocop
-           ;; Rubocop lint check fails with our more recent version.
-           (lambda _
-             (substitute* "Rakefile"
-               (("spec cucumber rubocop")
-                "spec cucumber"))
-             #t))
-         (add-after 'extract-gemspec 'strip-version-requirements
-           (lambda _
-             (delete-file "Gemfile")    ;do not use Bundler
-             (substitute* "cucumber.gemspec"
-               (("(.*add_.*dependency '[_A-Za-z0-9-]+').*" _ stripped)
-                (string-append stripped "\n")))
-             #t))
-         (add-before 'check 'set-home
-           (lambda _
-             (setenv "HOME" (getcwd))
-             #t)))))
+     (list #:test-target "spec"
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'disable-rubocop
+                 ;; Remove extraneous Lint checks.
+                 (lambda _
+                   (substitute* "Rakefile"
+                     (("require 'rubocop/rake_task'")
+                      "")
+                     (("RuboCop::RakeTask.new")
+                      ""))))
+               (add-after 'extract-gemspec 'strip-version-requirements
+                 (lambda _
+                   (delete-file "Gemfile") ;do not use Bundler
+                   (substitute* "cucumber.gemspec"
+                     ;; The dependency specifications are often trailing
+                     ;; behind and appear stricter than necessary, since the
+                     ;; test suite passes with the newer component versions.
+                     (("(.*add_.*dependency '[_A-Za-z0-9-]+')(.*)"
+                       _ stripped rest)
+                      (string-append stripped "   # " rest "\n")))))
+               (add-before 'check 'set-home
+                 (lambda _
+                   (setenv "HOME" (getcwd)))))))
     (propagated-inputs
      (list ruby-builder
+           ruby-cucumber-ci-environment
            ruby-cucumber-core
-           ruby-cucumber-create-meta
+           ruby-cucumber-gherkin
            ruby-cucumber-html-formatter
            ruby-cucumber-messages
            ruby-cucumber-wire
            ruby-diff-lcs
-           ruby-gherkin
-           ruby-multi-json
-           ruby-multi-test))
+           ruby-mime-types
+           ruby-multi-test
+           ruby-sys-uname))
     (native-inputs
-     (list ;; Use a untested version of aruba, to avoid a circular dependency, as
-           ;; ruby-aruba depends on ruby-cucumber.
-           ruby-aruba-without-tests
-           ruby-rspec
-           ruby-pry
+     (list ruby-cucumber-compatibility-kit
            ruby-nokogiri
-           ruby-rubocop))
+           ruby-pry
+           ruby-rspec))
     (synopsis "Describe automated tests in plain language")
     (description "Cucumber is a tool for running automated tests written in
 plain language.  It's designed to support a Behaviour Driven Development (BDD)
@@ -8035,6 +9526,48 @@ software development workflow.")
     (native-inputs
      '())))
 
+(define-public ruby-covered
+  (package
+    (name "ruby-covered")
+    (version "0.20.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "covered" version))
+              (sha256
+               (base32
+                "04fpj493jn23ah5fq93956a5h2xj3z0hrckvc26fxcfsg5pbwypa"))))
+    (build-system ruby-build-system)
+    (arguments
+    ;; XXX: The test suite is disabled to avoid dependency cycles with
+    ;; ruby-samovar, through ruby-bake.
+     (list #:tests? #f
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'extract-gemspec 'relax-requirements
+                 (lambda _
+                   (substitute* ".gemspec"
+                     (("\">= 3.2\"")
+                      "\">= 2.7\"")))))))
+    (propagated-inputs (list ruby-console ruby-msgpack))
+    (synopsis "Modern approach to code coverage in Ruby")
+    (description "Covered uses modern Ruby features to generate comprehensive
+coverage, including support for templates which are compiled into Ruby.  It
+has the following features:
+@itemize
+@item
+Incremental coverage -- if you run your full test suite, and the run a subset,
+it will still report the correct coverage - so you can incrementally work on
+improving coverage.
+@item
+Integration with RSpec, Minitest, Travis & Coveralls - no need to configure
+anything - out of the box support for these platforms.
+@item
+It supports coverage of views -- templates compiled to Ruby code can be
+tracked for coverage reporting.
+@end itemize")
+    (home-page "https://github.com/ioquatix/covered")
+    (license license:expat)))
+
 (define-public ruby-coveralls
   (package
     (name "ruby-coveralls")
@@ -8047,23 +9580,40 @@ software development workflow.")
         (base32
          "1mv4fn5lfxhy7bc2f1lpnc5yp9mvv97az77j4r7jgrxcqwn8fqxc"))))
     (build-system ruby-build-system)
-    ;; The test suite depends on ruby-vcr, which cannot be included in Guix
-    ;; because of its nonfree, Hippocratic-derived license.
     (arguments
-     `(#:tests? #f
-       #:phases (modify-phases %standard-phases
-                  (add-after 'extract-gemspec 'strip-version-requirements
-                    ;; Keeping strict version requirements can cause problems
-                    ;; to users of the library, such as: Gem::ConflictError:
-                    ;; Unable to activate coveralls-0.8.23, because
-                    ;; simplecov-0.17.1 conflicts with simplecov (~> 0.16.1).
-                    (lambda _
-                      (substitute* "coveralls-ruby.gemspec"
-                        (("(.*add_.*dependency\\([^,]+), .*" _ stripped)
-                         (string-append stripped ")\n")))
-                      #t)))))
+     (list #:test-target "default"
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'extract-gemspec 'disable-problematic-tests
+                          (lambda _
+                            (substitute* "spec/coveralls/coveralls_spec.rb"
+                              ;; This test fails for unknown reasons (perhaps
+                              ;; networking); skip it.
+                              (("it \"sends existing test results\"" all)
+                               (string-append "x" all)))
+                            ;; 3 simplecov tests fail, perhaps due to using a
+                            ;; newer simplecov version.
+                            (delete-file "spec/coveralls/simplecov_spec.rb")
+                            (substitute* "coveralls-ruby.gemspec"
+                              (("\"spec/coveralls/simplecov_spec.rb\".freeze, ")
+                               ""))))
+                        (add-after 'extract-gemspec 'relax-requirements
+                          (lambda _
+                            (substitute* "coveralls-ruby.gemspec"
+                              (("%q<simplecov>.freeze, \\[\"~> 0.16.1\"]")
+                               "%q<simplecov>.freeze")))))))
+    (native-inputs
+     (list git-minimal/pinned
+           ruby-pry
+           ruby-rspec
+           ruby-truthy
+           ruby-vcr-expat
+           ruby-webmock))
     (propagated-inputs
-     (list ruby-json ruby-term-ansicolor ruby-thor ruby-tins))
+     (list ruby-json
+           ruby-term-ansicolor
+           ruby-thor
+           ruby-tins
+           ruby-simplecov))
     (synopsis "Ruby implementation of the Coveralls API")
     (description "This package provides a Ruby implementation of the Coveralls
 API.")
@@ -8092,7 +9642,7 @@ in already-indented code.")
 (define-public ruby-cucumber-core
   (package
     (name "ruby-cucumber-core")
-    (version "7.1.0")
+    (version "11.1.0")
     (source
      (origin
        (method git-fetch)
@@ -8102,23 +9652,25 @@ in already-indented code.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1p5wb6wbggbw37ariyag4kxpiczznvgm3c8cnz1744dmbj79q1rn"))))
-    (build-system ruby-build-system)
-    (arguments
-     `(#:test-target "spec"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'extract-gemspec 'relax-version-requirements
-           (lambda _
-             (substitute* "cucumber-core.gemspec"
-               (("'cucumber-tag-expressions',.*")
-                 "'cucumber-tag-expressions', '>=2.0.0'\n"))
-             #t)))))
+         "0lf2inlam0951djc2qz81x0nkffmw2dpj44iadw1fw31m7r8wqvh"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "spec"
+                     #:phases
+                     #~(modify-phases %standard-phases
+                         (add-after 'extract-gemspec 'relax-version-requirements
+                           (lambda _
+                             (substitute* "cucumber-core.gemspec"
+                               (("'cucumber-tag-expressions',.*")
+                                "'cucumber-tag-expressions', '>=4.1.0'\n")))))))
     (native-inputs
-     (list ruby-rspec ruby-coveralls ruby-rubocop ruby-simplecov
+     (list ruby-rspec
+           ruby-coveralls
+           ruby-rubocop
+           ruby-simplecov
            ruby-unindent))
     (propagated-inputs
-     (list ruby-cucumber-messages ruby-gherkin
+     (list ruby-cucumber-gherkin
+           ruby-cucumber-messages
            ruby-cucumber-tag-expressions))
     (synopsis "Core library for the Cucumber BDD app")
     (description "Cucumber is a tool for running automated tests
@@ -8132,50 +9684,46 @@ and trust on your team.")
 (define-public ruby-cucumber-expressions
   (package
     (name "ruby-cucumber-expressions")
-    (version "10.2.0")
+    (version "16.1.2")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/cucumber/cucumber-expressions-ruby")
+             (url "https://github.com/cucumber/cucumber-expressions")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1aivhcpjrmbvp9bg0y7g6zxh2swfvylvg0sapq5jc4i1y74k8npd"))))
+         "1dhq88k9x2x8svam5bc7rrcd166fqymda8wxryqkbkffhnzla0id"))))
     (build-system ruby-build-system)
     (arguments
-     '(#:test-target "spec"))
-    (native-inputs
-     (list ruby-rspec ruby-simplecov))
+     (list #:test-target "spec"
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'chdir
+                          (lambda _
+                            (chdir "ruby"))))))
+    (native-inputs (list ruby-rspec ruby-simplecov))
     (synopsis "Simpler alternative to Regular Expressions")
     (description "Cucumber Expressions offer similar functionality to Regular
 Expressions, with a syntax that is easier to read and write.  Cucumber
 Expressions are extensible with parameter types.")
-    (home-page "https://github.com/cucumber/cucumber-expressions-ruby")
+    (home-page "https://github.com/cucumber/cucumber-expressions/")
     (license license:expat)))
 
 (define-public ruby-cucumber-wire
   (package
     (name "ruby-cucumber-wire")
-    (version "3.1.0")
+    (version "6.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "cucumber-wire" version))
        (sha256
         (base32
-         "0z1n13lqv70zb2lcrvs2263lm0gsb3gz8gbv890kxzwp8cvd433k"))))
+         "1pmydrh9lcckj7p0cn67jw7msxdkgr9zir86cs19h3mf2zlcv7b9"))))
     (build-system ruby-build-system)
     (arguments
-     '(#:tests? #f                      ;tests use cucumber, causing a cycle
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'extract-gemspec 'relax-version-requirements
-           (lambda _
-             (substitute* ".gemspec"
-               ((" 10\\.1") " 10.2"))
-             #t)))))
+     (list #:tests? #f))                ;tests use cucumber, causing a cycle
     (propagated-inputs
      (list ruby-cucumber-core ruby-cucumber-expressions
            ruby-cucumber-messages))
@@ -8188,26 +9736,29 @@ implemented and invoked on any platform.")
 (define-public ruby-cucumber-tag-expressions
   (package
     (name "ruby-cucumber-tag-expressions")
-    (version "3.0.0")
+    (version "5.0.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/cucumber/tag-expressions-ruby")
+             (url "https://github.com/cucumber/tag-expressions")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "15dw4w0npd4m6aw7zhqkjxxzngp42kswrkwfygxkxcxnhy5zl1vx"))))
+         "1ziq30szn8m5y29hsdpx4dn1a8sy29h01nvcldm8nr1mx4b7dj1w"))))
     (build-system ruby-build-system)
     (arguments
-     `(#:test-target "spec"))
-    (native-inputs
-     (list ruby-rspec))
+     (list #:test-target "spec"
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'chdir
+                          (lambda _
+                            (chdir "ruby"))))))
+    (native-inputs (list ruby-rspec))
     (synopsis "Cucumber tag expressions for Ruby")
     (description "Cucumber tag expression parser for Ruby.  A tag expression
 is an infix boolean expression used by Cucumber.")
-    (home-page "https://github.com/cucumber/tag-expressions-ruby")
+    (home-page "https://github.com/cucumber/tag-expressions")
     (license license:expat)))
 
 (define-public ruby-bindex
@@ -8520,6 +10071,29 @@ application.")
     (home-page "https://github.com/djanowski/pygmentize")
     (license license:expat)))
 
+(define-public ruby-event-emitter
+  (package
+    (name "ruby-event-emitter")
+    (version "0.2.6")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "event_emitter" version))
+              (sha256
+               (base32
+                "148k9qv8102l3m6klc24dwip79f9y4bjr5z19dckd7ffbjyrf9n7"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'extract-gemspec 'relax-requirements
+                          (lambda _
+                            (substitute* "event_emitter.gemspec"
+                              (("~> 1.15") ">= 1.15")))))))
+    (synopsis "Ruby port of EventEmitter from Node.js")
+    (description
+     "This package provides a Ruby port of EventEmitter from Node.js.")
+    (home-page "https://shokai.github.io/event_emitter/")
+    (license license:expat)))
+
 (define-public ruby-eventmachine
   (package
     (name "ruby-eventmachine")
@@ -8711,20 +10285,56 @@ definitions.")
 (define-public ruby-mini-mime
   (package
     (name "ruby-mini-mime")
-    (version "1.0.2")
+    (version "1.1.2")
     (source
       (origin
         (method url-fetch)
         (uri (rubygems-uri "mini_mime" version))
         (sha256
          (base32
-          "1axm0rxyx3ss93wbmfkm78a6x03l8y4qy60rhkkiq0aza0vwq3ha"))))
+          "0lbim375gw2dk6383qirz13hgdmxlan0vc5da2l072j3qw6fqjm5"))))
     (build-system ruby-build-system)
     (synopsis "Lightweight mime type lookup toy")
     (description "This package provides a lightweight mime type lookup toy.")
     (home-page "https://github.com/discourse/mini_mime")
     (license license:expat)))
 
+(define-public ruby-fileutils
+  (package
+    (name "ruby-fileutils")
+    (version "1.7.0")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/fileutils")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0m68gaqclnc2wflilmrnr19kky2gr6fjf6k3yq02sf9scs281kid"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'disable-problematic-tests
+            (lambda _
+              (substitute* "test/fileutils/test_fileutils.rb"
+                ;; The 'test_chown' tests depends on /etc/groups, which
+                ;; doesn't exist in the build environment.
+                (("def test_chown.*" all)
+                 (string-append all "    return true\n"))
+                ;; The 'test_cp_r_dev' expects a RuntimeError to be raised
+                ;; when copying a char device to a directory, but this is not
+                ;; triggered in the build environment, for reasons unknown.
+                (("def test_cp_r_dev.*" all)
+                 (string-append all "    return true\n"))))))))
+    (synopsis "Ruby utility libray to manipulate files")
+    (description "The FileUtils Ruby library includes Several file utility
+methods for copying, moving, removing, etc.")
+    (home-page "https://github.com/ruby/fileutils")
+    (license license:bsd-2)))
+
 (define-public ruby-fivemat
   (package
     (name "ruby-fivemat")
@@ -8780,23 +10390,24 @@ engine.")
 (define-public ruby-shoulda-context
   (package
     (name "ruby-shoulda-context")
-    (version "1.2.2")
+    (version "2.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "shoulda-context" version))
        (sha256
         (base32
-         "1l0ncsxycb4s8n47dml97kdnixw4mizljbkwqc3rh05r70csq9bc"))))
+         "0d1clcp92jv8756h09kbc55qiqncn666alx0s83za06q5hs4bpvs"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             ;; Do not run tests to avoid circular dependence with rails.
-             ;; Instead just import the library to test.
-             (invoke "ruby" "-Ilib" "-r" "shoulda-context"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Do not run tests to avoid circular dependence with rails.
+               ;; Instead just import the library to test.
+               (invoke "ruby" "-Ilib" "-r" "shoulda-context")))))))
     (synopsis "Test::Unit context framework extracted from Shoulda")
     (description
      "@code{shoulda-context} is the context framework extracted from Shoulda.
@@ -8809,23 +10420,24 @@ names.")
 (define-public ruby-shoulda-matchers
   (package
     (name "ruby-shoulda-matchers")
-    (version "3.1.2")
+    (version "5.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "shoulda-matchers" version))
        (sha256
         (base32
-         "1zvv94pqk5b5my3w1shdz7h34xf2ldhg5k4qfdpbwi2iy0j9zw2a"))))
+         "11igjgh16dl5pwqizdmclzlzpv7mbmnh8fx7m9b5kfsjhwxqdfpn"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
-             ;; Do not run tests to avoid circular dependence with rails.  Instead
-             ;; just import the library to test.
-             (invoke "ruby" "-Ilib" "-r" "shoulda-matchers"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Do not run tests to avoid circular dependence with rails.  Instead
+               ;; just import the library to test.
+               (invoke "ruby" "-Ilib" "-r" "shoulda-matchers")))))))
     (propagated-inputs
      (list ruby-activesupport))
     (synopsis "Collection of testing matchers extracted from Shoulda")
@@ -8836,38 +10448,37 @@ more complex, and error-prone.")
     (home-page "https://github.com/thoughtbot/shoulda-matchers")
     (license license:expat)))
 
-(define-public ruby-shoulda-matchers-2
-  (package
-    (inherit ruby-shoulda-matchers)
-    (version "2.8.0")
-    (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "shoulda-matchers" version))
-              (sha256
-               (base32
-                "0d3ryqcsk1n9y35bx5wxnqbgw4m8b3c79isazdjnnbg8crdp72d0"))))))
-
 (define-public ruby-shoulda
   (package
     (name "ruby-shoulda")
-    (version "3.5.0")
+    (version "4.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "shoulda" version))
        (sha256
         (base32
-         "0csmf15a7mcinfq54lfa4arp0f4b2jmwva55m0p94hdf3pxnjymy"))))
+         "02lww34kn1g6lidp4rx4rs6bqvirrzxlfw1y2wm11aif8f622xz6"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           ;; Don't run tests to avoid circular dependence with rails.  Instead
-           ;; just import the library to test.
-           (lambda _ (invoke "ruby" "-Ilib" "-r" "shoulda"))))))
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Don't run tests to avoid circular dependence with rails.
+               ;; Instead just import the library to test.
+               (invoke "ruby" "-Ilib" "-r" "shoulda"))))
+         (add-after 'extract-gemspec 'relax-requirements
+           (lambda _
+             (substitute* "shoulda.gemspec"
+               ;; An older version of shoulda-matchers (4.0) is used, out of
+               ;; little maintenance rather than because of an real
+               ;; incompatibility (see:
+               ;; https://github.com/thoughtbot/shoulda/issues/275).
+               ((", \\[\"~> 4.0\"]") "")))))))
     (propagated-inputs
-     (list ruby-shoulda-context ruby-shoulda-matchers-2))
+     (list ruby-shoulda-context ruby-shoulda-matchers))
     (synopsis "Context framework and matchers for testing")
     (description
      "@code{shoulda} is a meta-package combining @code{shoulda-context} and
@@ -9018,14 +10629,14 @@ requests.  This is useful when testing software.")
 (define-public ruby-unicode-display-width
   (package
     (name "ruby-unicode-display-width")
-    (version "1.6.0")
+    (version "2.4.2")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "unicode-display_width" version))
        (sha256
         (base32
-         "08kfiniak1pvg3gn5k6snpigzvhvhyg7slmm0s2qx5zkj62c1z2w"))))
+         "1gi82k102q7bkmfi7ggn9ciypn897ylln1jk9q67kjhr39fj043a"))))
     (build-system ruby-build-system)
     (arguments
      '(;; Test data not included.
@@ -9078,6 +10689,94 @@ checking for the right Ruby version in software.")
     (home-page "https://github.com/janlelis/ruby_version")
     (license license:expat)))
 
+(define-public ruby-websocket-client-simple
+  (package
+    (name "ruby-websocket-client-simple")
+    (version "0.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "websocket-client-simple" version))
+              (sha256
+               (base32
+                "1ypl4xvlh5c99zbn20sifv7gv04zi20ly464vsgikfrpn5f37bid"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "default"))
+    (native-inputs (list ruby-eventmachine ruby-websocket-eventmachine-server))
+    (propagated-inputs (list ruby-event-emitter ruby-websocket))
+    (synopsis "Simple WebSocket client for Ruby")
+    (description "This package provides a simple WebSocket client for Ruby.")
+    (home-page "https://github.com/ruby-jp/websocket-client-simple")
+    (license license:expat)))
+
+(define-public ruby-websocket-eventmachine-base
+  (package
+    (name "ruby-websocket-eventmachine-base")
+    (version "1.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "websocket-eventmachine-base" version))
+              (sha256
+               (base32
+                "0wiz61mcwgs3k21cdr5l9b4jpg29gl6mflfampww2v525yc3hr1r"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:tests? #f)) ;no test suite
+    (propagated-inputs (list ruby-eventmachine ruby-websocket
+                             ruby-websocket-native))
+    (synopsis "WebSocket base for Ruby client and server")
+    (description "This package provides a WebSocket base for a Ruby client and
+server.")
+    (home-page "https://github.com/imanel/websocket-eventmachine-base")
+    (license license:expat)))
+
+(define-public ruby-websocket-eventmachine-server
+  (package
+    (name "ruby-websocket-eventmachine-server")
+    (version "1.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "websocket-eventmachine-server" version))
+              (sha256
+               (base32
+                "0iqpzc8s028nck1flqaj784gvyn64wy1h3svpa4y2847wklg8sms"))))
+    (build-system ruby-build-system)
+    ;; TODO: The test suite requires Autobahn, not yet packaged in Guix.
+    (arguments (list #:tests? #f))
+    (propagated-inputs (list ruby-websocket-eventmachine-base))
+    (synopsis "WebSocket server for Ruby")
+    (description "This package provides a WebSocket server for Ruby.")
+    (home-page "https://github.com/imanel/websocket-eventmachine-server")
+    (license license:expat)))
+
+(define-public ruby-websocket-native
+  (package
+    (name "ruby-websocket-native")
+    (version "1.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "websocket-native" version))
+              (sha256
+               (base32
+                "1kgvd3gyzh7hk0ddzn85jrs4csxm54qnvla95ldyn6rzgfbjchdn"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "spec"
+           #:phases #~(modify-phases %standard-phases
+                        (add-before 'check 'disable-problematic-tests
+                          (lambda _
+                            (substitute* "spec/websocket_spec.rb"
+                              (("it \"should have mask_native defined\"" all)
+                               (string-append "x" all)))))
+                        (add-after 'build 'compile
+                          (lambda _
+                            (invoke "rake" "compile"))))))
+    (native-inputs (list ruby-rake-compiler ruby-rspec))
+    (synopsis "Native Ruby extension for the WebSocket gem")
+    (description "This package provides a native extension that can increase
+performance by about 25% compared to the pure Ruby WebSocket implementation.")
+    (home-page "https://github.com/imanel/websocket-ruby-native")
+    (license license:expat)))
+
 (define-public ruby-websocket-driver
   (package
    (name "ruby-websocket-driver")
@@ -9159,6 +10858,87 @@ Suffix List.")
     (home-page "https://github.com/knu/ruby-domain_name")
     (license license:bsd-2)))
 
+(define-public ruby-dotenv
+  (package
+    (name "ruby-dotenv")
+    (version "2.8.1")
+    (source (origin
+              (method git-fetch)        ;for the tests
+              (uri (git-reference
+                    (url "https://github.com/bkeepers/dotenv")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0s1a71jxppa20fsm2rd1vym099ib48m039rmhggmz99hc3z1fvvr"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "spec"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'do-not-build-dotenv-rails
+            (lambda _
+              ;; The repository includes the definitions of two packages,
+              ;; 'dotenv' and 'dotenv-rails'.  Since we want to package them
+              ;; separately, remove the dotenv-rails and associated Rake
+              ;; tasks.
+              (delete-file "dotenv-rails.gemspec")
+              (delete-file "spec/dotenv/rails_spec.rb")
+              (substitute* "Rakefile"
+                (("DotenvRailsGemHelper.install_tasks name: \"dotenv-rails\"")
+                 "")
+                ((", \"dotenv-rails:.*\"")
+                 ""))))
+          (replace 'replace-git-ls-files
+            (lambda _
+              (substitute* "dotenv.gemspec"
+                (("`git ls-files README.md LICENSE lib bin \\| grep -v rails`")
+                 "`find README.md LICENSE lib bin -type f | sort | \
+grep -v rails`")))))))
+    (native-inputs (list ruby-standard ruby-rspec))
+    (synopsis "Ruby library for setting environment variables")
+    (description "Dotenv is a Ruby library for setting environment variables
+defined in a @file{.env} file.")
+    (home-page "https://github.com/bkeepers/dotenv")
+    (license license:expat)))
+
+(define-public ruby-dotenv-rails
+  (package
+    (inherit ruby-dotenv)
+    (name "ruby-dotenv-rails")
+    (arguments
+     (substitute-keyword-arguments (package-arguments ruby-dotenv)
+       ((#:phases phases '%standard-phases)
+        #~(modify-phases #$phases
+            (delete 'do-not-build-dotenv-rails)
+            (add-after 'unpack 'delete-Gemfile
+              (lambda _
+                ;; It defines extraneous dependencies; remove it.
+                (delete-file "Gemfile")))
+            (add-after 'unpack 'remove-extraneous-gemspec
+              (lambda _
+                (delete-file "dotenv.gemspec")
+                (substitute* "Gemfile"
+                  ((".*\"dotenv\".*") ""))
+                (substitute* "Rakefile"
+                  ;; Remove the dotenv-related Rake tasks.
+                  (("Bundler::GemHelper.install_tasks name: \"dotenv\"")
+                   "")
+                  (("\"dotenv:[^\"]*\", ")
+                   ""))))
+            (replace 'replace-git-ls-files
+              (lambda _
+                (substitute* "dotenv-rails.gemspec"
+                  (("`git ls-files lib \\| grep rails`")
+                   "`find lib -type f | sort | grep rails`"))))))))
+    (native-inputs (list ruby-rspec ruby-spring ruby-standard))
+    (propagated-inputs (list ruby-dotenv ruby-railties))
+    (synopsis "Ruby library for setting environment variables in Rails project")
+    (description "Dotenv is a Ruby library for setting environment variables
+defined in a @file{.env} file.  This is the Rails variant, adapted for use
+with Ruby on Rails projects.")))
+
 (define-public ruby-http-cookie
   (package
     (name "ruby-http-cookie")
@@ -9318,6 +11098,26 @@ subprocess.")
     (home-page "https://github.com/ahoward/systemu")
     (license license:ruby)))
 
+(define-public ruby-bcrypt
+  (package
+    (name "ruby-bcrypt")
+    (version "3.1.18")
+    ;; FIXME: Unbundle the bcrypt library used.
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "bcrypt" version))
+              (sha256
+               (base32
+                "048z3fvcknqx7ikkhrcrykxlqmf9bzc7l0y5h1cnvrc9n2qf0k8m"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "default")) ;compile + spec
+    (native-inputs (list ruby-rake-compiler ruby-rspec))
+    (synopsis  "Ruby bcrypt wrapper")
+    (description "This Ruby library provides a simple wrapper to bcrypt, a
+secure hash algorithm for hashing passwords.")
+    (home-page "https://github.com/bcrypt-ruby/bcrypt-ruby")
+    (license license:expat)))
+
 (define-public ruby-bio-commandeer
   (package
     (name "ruby-bio-commandeer")
@@ -9464,6 +11264,28 @@ and locking between worker processes.")
     (home-page "https://github.com/chanks/que")
     (license license:expat)))
 
+(define-public ruby-queue-classic
+  (package
+    (name "ruby-queue-classic")
+    (version "4.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "queue_classic" version))
+              (sha256
+               (base32
+                "0npyhajf2fc80apkw9s2kj0n254w5lcl4xpjidg5d5w1fb19abh6"))))
+    (build-system ruby-build-system)
+    (arguments (list #:tests? #f))      ;tests require a postgresql server
+    (native-inputs (list ruby-activerecord ruby-minitest-reporters))
+    (propagated-inputs (list ruby-pg))
+    (synopsis "Queuing library for Ruby")
+    (description "@code{queue_classic} is a queuing library for Ruby
+applications (Rails, Sinatra, etc.)  @code{queue_classic} features
+asynchronous job polling, database maintained locks and has a single
+dependency, @code{pg}.")
+    (home-page "https://github.com/QueueClassic/queue_classic")
+    (license license:expat)))
+
 (define-public ruby-ae
   (package
     (name "ruby-ae")
@@ -9699,28 +11521,116 @@ part of the Prawn PDF generator.")
 (define-public ruby-puma
   (package
     (name "ruby-puma")
-    (version "3.9.1")
+    (version "6.2.0")
     (source
      (origin
-       (method git-fetch)
-       ;; Fetch from GitHub because distributed gem does not contain tests.
+       (method git-fetch)               ;for tests
        (uri (git-reference
-              (url "https://github.com/puma/puma")
-              (commit (string-append "v" version))))
+             (url "https://github.com/puma/puma")
+             (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1kj75k81iik3aj73pkc9ixj9rwf95ipkyma65n28m64dgw02qi1f"))))
+         "0d71h5ggvfgnxq9msd1hmcz3s8mspzf7kqas1hzr0w9pfafddyv3"))))
     (build-system ruby-build-system)
     (arguments
-     `(#:tests? #f ; Tests require an out-dated version of minitest.
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'fix-gemspec
-           (lambda _
-             (substitute* "puma.gemspec"
-               (("git ls-files") "find * |sort"))
-             #t)))))
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'disable-rubocop
+            (lambda _
+              (setenv "PUMA_NO_RUBOCOP" "1")))
+          (add-after 'unpack 'use-rack-2
+            (lambda _
+              (setenv "PUMA_CI_RACK_2" "1")))
+          (add-before 'build 'increase-resource-limits
+            (lambda _
+              ;; The test suite requires a higher number of open files.  Try
+              ;; increasing the soft resource limit of max open files to 2048,
+              ;; or equal to the hard limit, whichever is lower.
+              (call-with-values (lambda () (getrlimit 'nofile))
+                (lambda (soft hard)
+                  (when (and soft (< soft 2048))
+                    (if hard
+                        (setrlimit 'nofile (min hard 2048) hard)
+                        (setrlimit 'nofile 2048 #f))
+                    (format
+                     #t "increased maximum number of open files from ~d to ~d~%"
+                     soft (if hard (min hard 2048) 2048)))))))
+          (add-before 'build 'fix-gemspec
+            (lambda _
+              (substitute* "puma.gemspec"
+                (("`git ls-files -- bin docs ext lib tools`")
+                 "`find bin docs ext lib tools -type f |sort`"))))
+          (delete 'check)               ;moved after install
+          (add-after 'install 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "bundle" "exec" "rake" "test"))))
+          (add-after 'install 'delete-mkmf.log
+            (lambda _
+              ;; Rubygems installs build log files that embed volatile file
+              ;; names (see:
+              ;; https://github.com/rubygems/rubygems/issues/6259).
+              (for-each delete-file (find-files #$output "^mkmf\\.log$"))))
+          (add-before 'check 'disable-problematic-tests
+            (lambda _
+              (let-syntax ((skip-tests
+                            (syntax-rules ()
+                              ((_ file test ...)
+                               (substitute* file
+                                 (((string-append "def " test ".*") all)
+                                  (string-append
+                                   all "    skip('fails on guix')\n")) ...)))))
+                ;; The test failures were reported at:
+                ;; https://github.com/puma/puma/issues/3093, but appear to be
+                ;; caused by the Guix build container, perhaps the lack of
+                ;; zombie process reaping (see:
+                ;; https://issues.guix.gnu.org/30948).
+                ;;  All the tests in the 'test_worker_gem_independence.rb'
+                ;;  module fail with "Expected false to be truthy.".
+                (delete-file "test/test_worker_gem_independence.rb")
+                (skip-tests "test/test_integration_ssl_session.rb"
+                            ;; The TLS 1.2 test fails for unknown reasons.
+                            "test_off_tls1_2")
+                (skip-tests "test/test_integration_cluster.rb"
+                            "test_fork_worker_on_refork"
+                            "test_hot_restart_does_not_drop_connections"
+                            "test_culling_strategy_oldest_fork_worker"
+                            "test_usr1_fork_worker")
+                (skip-tests "test/test_integration_pumactl.rb"
+                            "test_refork_cluster"))))
+          (add-before 'check 'relax-test-case-timeout
+            (lambda _
+              ;; The default value is 45 s and easily causes timeouts.
+              (setenv "TEST_CASE_TIMEOUT" "600")))
+          (add-before 'check 'set-home
+            (lambda _
+              ;; Some tests fail if the cannot write to HOME.
+              (setenv "HOME" "/tmp")))
+          (add-before 'check 'set-paths
+            (lambda _
+              ;; The test suite requires the 'puma' command to be on PATH.
+              (setenv "PATH" (string-append (getenv "PATH") ":"
+                                            #$output "/bin"))
+              (setenv "GEM_PATH" (string-append
+                                  (getenv "GEM_PATH") ":"
+                                  #$output "/lib/ruby/vendor_ruby")))))))
+    (native-inputs
+     (list bundler
+           curl
+           ruby-json
+           ruby-localhost
+           ruby-m
+           ruby-minitest-proveit
+           ruby-minitest-retry
+           ruby-minitest-stub-const
+           ruby-rack
+           ruby-rake-compiler
+           ruby-webrick))
+    (inputs
+     (list openssl
+           ruby-nio4r))
     (synopsis "Simple, concurrent HTTP server for Ruby/Rack")
     (description
      "Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server
@@ -9839,77 +11749,110 @@ call.")
     (home-page "https://github.com/travisjeffery/timecop")
     (license license:expat)))
 
-(define-public ruby-concurrent
+(define-public ruby-concurrent-ruby
   (package
-    (name "ruby-concurrent")
-    (version "1.1.5")
-    (source
-     (origin
-       (method git-fetch)
-       ;; Download from GitHub because the rubygems version does not contain
-       ;; Rakefile.
-       (uri (git-reference
-             (url "https://github.com/ruby-concurrency/concurrent-ruby")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "193q2k47vk7qdvv9hlhmmdxgy91xl4imapyk1ijdg9vgf46knyzj"))))
+    (name "ruby-concurrent-ruby")
+    (version "1.2.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference       ;for tests
+                    (url "https://github.com/ruby-concurrency/concurrent-ruby")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1vz4rl0nplq14dk9nx45g59i1sk2h53w1mjlrdiyjf780q4a1i38"))))
     (build-system ruby-build-system)
     (arguments
-     `(#:test-target "ci"
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'replace-git-ls-files 'remove-extra-gemspecs
-           (lambda _
-             ;; Delete extra gemspec files so 'first-gemspec' chooses the
-             ;; correct one.
-             (delete-file "concurrent-ruby-edge.gemspec")
-             (delete-file "concurrent-ruby-ext.gemspec")
-             #t))
-         (replace 'replace-git-ls-files
-           (lambda _
-             ;; XXX: The default substitution made by this phase is not fully
-             ;; compatible with "git ls-files".  The latter produces file names
-             ;; such as "lib/foo", whereas ruby-build-system uses "find . [...]"
-             ;; which gives "./lib/foo".  That difference in turn breaks the
-             ;; comparison against a glob pattern in this script.
-             (substitute* "concurrent-ruby.gemspec"
-               (("git ls-files") "find * -type f | sort"))
-             #t))
-         (add-before 'build 'remove-jar-from-gemspec
-           (lambda _
-             ;; The gemspec wants to include a JAR file that we do not build
-             ;; nor need.
-             (substitute* "concurrent-ruby.gemspec"
-               (("'lib/concurrent/concurrent_ruby.jar'")
-                ""))
-             #t))
-         (add-before 'build 'remove-rake_compiler_dock-dependency
-           (lambda _
-             ;; This library is only used when building for non-MRI targets.
-             (substitute* "Rakefile"
-               (("require 'rake_compiler_dock'")
-                ""))
-             #t))
-         (add-before 'check 'remove-timecop-dependency
-           ;; Remove timecop-dependent tests as having timecop as a depedency
-           ;; causes circular depedencies.
-           (lambda _
-             (delete-file "spec/concurrent/executor/timer_set_spec.rb")
-             (delete-file "spec/concurrent/scheduled_task_spec.rb")
-             #t)))))
-    (native-inputs
-     (list ruby-rake-compiler ruby-rspec))
-    (synopsis "Concurrency tools for Ruby")
-    (description
-     "This library provides modern concurrency tools including agents,
+     (list
+      #:tests? #f  ;the test suite is run in ruby-concurrent-ruby-edge
+      #:phases #~(modify-phases %standard-phases
+                   (add-after 'unpack 'delete-unwanted-gemspecs
+                     (lambda _
+                       (for-each delete-file
+                                 '("concurrent-ruby-ext.gemspec"
+                                   "concurrent-ruby-edge.gemspec"))))
+                   (add-after 'unpack 'do-not-install-concurrent_ruby.jar
+                     (lambda _
+                       ;; This file is only built when building the Java
+                       ;; extension.
+                       (substitute* "concurrent-ruby.gemspec"
+                         (("'lib/concurrent-ruby/concurrent/concurrent_ruby.jar'")
+                          "")))))))
+    (synopsis "Concurrency library for Ruby")
+    (description "Concurrent Ruby includes concurrency tools such as agents,
 futures, promises, thread pools, actors, supervisors, and more.  It is
-inspired by Erlang, Clojure, Go, JavaScript, actors and classic concurrency
+inspired by Erlang, Clojure, Go, JavaScript, actors, and classic concurrency
 patterns.")
-    (home-page "http://www.concurrent-ruby.com")
+    (home-page "https://github.com/ruby-concurrency/concurrent-ruby")
     (license license:expat)))
 
+;;; The 'gem' is called 'concurrent-ruby'; reversing its name was confusing
+;;; and failed to be picked by the gem importer (which led to this newer
+;;; package).
+(define-public ruby-concurrent
+  (deprecated-package "ruby-concurrent" ruby-concurrent-ruby))
+
+(define-public ruby-concurrent-ruby-ext
+  (package
+    (inherit ruby-concurrent-ruby)
+    (name "ruby-concurrent-ruby-ext")
+    (arguments
+     (list
+      #:tests? #f                      ;tested as part of concurrent-ruby-edge
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'delete-unwanted-gemspecs
+            (lambda _
+              (for-each delete-file
+                        '("concurrent-ruby.gemspec"
+                          "concurrent-ruby-edge.gemspec")))))))
+    (native-inputs (list ruby-rake-compiler))
+    (propagated-inputs (list ruby-concurrent-ruby))
+    (synopsis "C extensions for concurrent-ruby")
+    (description "This package provides C extensions to optimize the
+concurrent-ruby gem when running under the Matz's Ruby Interpreter (MRI, also
+known as CRuby).")))
+
+(define-public ruby-concurrent-ruby-edge
+  (package
+    (inherit ruby-concurrent-ruby)
+    (name "ruby-concurrent-ruby-edge")
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'delete-unwanted-gemspecs
+            (lambda _
+              (for-each delete-file
+                        '("concurrent-ruby.gemspec"
+                          "concurrent-ruby-ext.gemspec"))))
+          ;; The tests rely on the Gem being installed, so move the check
+          ;; phase after the install phase.
+          (delete 'check)
+          (add-after 'install 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (setenv "GEM_PATH" (string-append
+                                  (getenv "GEM_PATH") ":"
+                                  #$output "/lib/ruby/vendor_ruby"))
+              (when tests?
+                (invoke "rake" "ci")))))))
+    (native-inputs
+     (list ruby-rake-compiler
+           ruby-rake-compiler-dock
+           ruby-rspec
+           ruby-timecop
+           ruby-yard))
+    (propagated-inputs
+     (list ruby-concurrent-ruby ruby-concurrent-ruby-ext))
+    (synopsis "Edge features and additions to the @code{concurrent-ruby} gem")
+    (description "The @code{concurrent-ruby-edge} gem includes
+@code{concurrent-ruby} features that are under active development and may
+change frequently.  They are expected not to keep backward
+compatibility (there may also lack tests and documentation), although semantic
+versions are obeyed though.  Features developed in @code{concurrent-ruby-edge}
+are expected to move to @code{concurrent-ruby} when final.")))
+
 (define-public ruby-pkg-config
   (package
     (name "ruby-pkg-config")
@@ -9984,6 +11927,27 @@ are doing, you can fiddle with every last bit of your email directly.")
     (home-page "https://github.com/mikel/mail")
     (license license:expat)))
 
+(define-public ruby-net-protocol
+  (package
+    (name "ruby-net-protocol")
+    (version "0.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ruby/net-protocol")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0niivmjx7bc6vsylc1ag17mw6mnvjxw02s7cin1f0422xyr8msq9"))))
+    (build-system ruby-build-system)
+    (propagated-inputs (list ruby-timeout))
+    (synopsis "Abstract interface for Ruby network clients")
+    (description "This Ruby library provides an abstract interface for network
+clients.")
+    (home-page "https://github.com/ruby/net-protocol")
+    (license (list license:bsd-2))))
+
 (define-public ruby-email-reply-trimmer
   (package
     (name "ruby-email-reply-trimmer")
@@ -10045,6 +12009,41 @@ more robust and work for non rails projects.")
     (home-page "https://github.com/danmayer/code_statistics")
     (license license:expat)))
 
+(define-public ruby-ruby2-keywords
+  (package
+    (name "ruby-ruby2-keywords")
+    (version "0.0.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ruby/ruby2_keywords")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1jhqb152zfr2yrxj6j8rzakkwdkg5viggwnnqrrfxwwy63msdi97"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'delete-extraneous-rake-files
+            (lambda _
+              (for-each delete-file '("rakelib/changelogs.rake"
+                                      "rakelib/epoch.rake"
+                                      "rakelib/version.rake"))))
+          (add-after 'extract-gemspec 'adjust-files
+            (lambda _
+              (substitute* "ruby2_keywords.gemspec"
+                ;; This file is not present in the git checkout.
+                ((".*\"ChangeLog\",.*") "")))))))
+    (synopsis "Shim library for Module#ruby2_keywords")
+    (description "Provides empty @code{Module#ruby2_keywords} method, for the
+forward source-level compatibility against @command{ruby2.7} and
+@command{ruby3}.")
+    (home-page "https://github.com/ruby/ruby2_keywords")
+    (license license:bsd-2)))
+
 (define-public ruby-rubypants
   (package
     (name "ruby-rubypants")
@@ -10093,14 +12092,17 @@ Markdown.")
 (define-public ruby-rake
   (package
     (name "ruby-rake")
-    (version "13.0.1")
+    (version "13.0.6")
     (source
      (origin
-       (method url-fetch)
-       (uri (rubygems-uri "rake" version))
+       (method git-fetch)               ;for tests
+       (uri (git-reference
+             (url "https://github.com/ruby/rake")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "0w6qza25bq1s825faaglkx1k6d59aiyjjk3yw3ip5sb463mhhai9"))))
+         "0c77xyl677s966f8yvk8yv7l31c1ffa1yl4kcwiram219h0s76in"))))
     (build-system ruby-build-system)
     (native-inputs
      (list bundler))
@@ -10111,6 +12113,40 @@ in standard Ruby syntax.")
     (home-page "https://github.com/ruby/rake")
     (license license:expat)))
 
+(define-public ruby-rake-manifest
+  (package
+    (name "ruby-rake-manifest")
+    (version "0.2.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mvz/rake-manifest")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "16k2yvg773c25kp2vhzhp01rhf53k0nhrcmpv34k1fridw90r2k8"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:test-target "default"
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'check)               ;moved after the install phase
+          (add-after 'install 'check
+            (assoc-ref %standard-phases 'check))
+          (add-before 'check 'set-GEM_PATH
+            (lambda _
+              (setenv "GEM_PATH" (string-append
+                                  (getenv "GEM_PATH") ":"
+                                  #$output "/lib/ruby/vendor_ruby")))))))
+    (native-inputs (list ruby-rspec ruby-simplecov))
+    (synopsis "Rake tasks to generate and check a manifest file")
+    (description "This package provides Rake tasks to generate and check a
+manifest file.")
+    (home-page "https://github.com/mvz/rake-manifest")
+    (license license:expat)))
+
 (define-public ruby-childprocess
   (package
     (name "ruby-childprocess")
@@ -10172,38 +12208,40 @@ all known public suffixes.")
 (define-public ruby-addressable
   (package
     (name "ruby-addressable")
-    (version "2.7.0")
+    (version "2.8.1")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "addressable" version))
               (sha256
                (base32
-                "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy"))))
+                "1ypdmpdn20hxp5vwxz3zc04r5xcwqc25qszdlg41h8ghdqbllwmw"))))
     (build-system ruby-build-system)
     (arguments
      '(#:test-target "spec"
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'disable-bundler
+           (lambda _
+             (substitute* "spec/spec_helper.rb"
+               (("require 'bundler/setup'") ""))))
          (add-after 'unpack 'remove-unnecessary-dependencies-from-Gemfile
-          (lambda _
-            (substitute* "Gemfile"
-              (("git: 'https://github.com/sporkmonger/rack-mount.git',") "")
-              ((".*launchy.*") "")
-              ((".*rake.*") "gem 'rake'\n")
-              ((".*redcarpet.*") ""))
-            #t))
+           (lambda _
+             (substitute* "Gemfile"
+               (("git: 'https://github.com/sporkmonger/rack-mount.git',") "")
+               ((".*launchy.*") "")
+               ((".*rake.*") "gem 'rake'\n")
+               ((".*redcarpet.*") ""))))
          (add-before 'check 'delete-network-dependent-test
            (lambda _
-             (delete-file "spec/addressable/net_http_compat_spec.rb")
-             #t)))))
+             (delete-file "spec/addressable/net_http_compat_spec.rb"))))))
     (native-inputs
-     (list ruby-rspec
-           bundler
+     (list bundler
            ruby-idn-ruby
-           ruby-sporkmonger-rack-mount
+           ruby-rspec
            ruby-rspec-its-minimal
-           ruby-yard
-           ruby-simplecov))
+           ruby-simplecov
+           ruby-sporkmonger-rack-mount
+           ruby-yard))
     (propagated-inputs
      (list ruby-public-suffix))
     (home-page "https://github.com/sporkmonger/addressable")
@@ -10685,6 +12723,70 @@ interface.  It allows Jekyll to rebuild your site when a file changes.")
 suited for map-reduce or e.g. parallel downloads/uploads.")
     (license license:expat)))
 
+(define-public ruby-cabin
+  (package
+    (name "ruby-cabin")
+    (version "0.9.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "cabin" version))
+              (sha256
+               (base32
+                "0b3b8j3iqnagjfn1261b9ncaac9g44zrx1kcg81yg4z9i513kici"))))
+    (build-system ruby-build-system)
+    (arguments (list #:tests? #f))      ;no Rakefile in released gem
+    (synopsis "Structured and contextual logging experiments in Ruby")
+    (description "This Ruby library provides an experimental logging system
+that tries to make logging more flexible and more consumable than plain-text
+logging.")
+    (home-page "https://github.com/jordansissel/ruby-cabin")
+    (license license:asl2.0)))
+
+(define-public ruby-capybara
+  (package
+    (name "ruby-capybara")
+    (version "3.38.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "capybara" version))
+              (sha256
+               (base32
+                "123198zk2ak8mziwa5jc3ckgpmsg08zn064n3aywnqm9s1bwjv3v"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:tests? #f                ;sinatra is currently broken with rack 3
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'extract-gemspec 'remove-extraneous-requirements
+                 (lambda _
+                   (substitute* "spec/spec_helper.rb"
+                     ((".*require 'selenium_statistics'.*") "")
+                     ((".*SeleniumStatistics.print_results.*") ""))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (invoke "rspec" "spec")))))))
+    (native-inputs
+     (list ruby-puma
+           ruby-rspec
+           ruby-selenium-webdriver
+           ruby-sinatra))
+    (propagated-inputs
+     (list ruby-addressable
+           ruby-launchy
+           ruby-matrix
+           ruby-mini-mime
+           ruby-nokogiri
+           ruby-rack
+           ruby-rack-test
+           ruby-regexp-parser
+           ruby-xpath))
+    (synopsis "Integration testing tool for rack-based web applications")
+    (description "Capybara is an integration testing tool for rack based web
+applications.  It simulates how a user would interact with a website.")
+    (home-page "https://github.com/teamcapybara/capybara")
+    (license license:expat)))
+
 (define-public ruby-cane
   (package
     (name "ruby-cane")
@@ -11068,18 +13170,37 @@ is compatible with stylesheets designed for pygments.")
 (define-public ruby-hashie
   (package
     (name "ruby-hashie")
-    (version "3.6.0")
+    (version "5.0.0")
     (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "hashie" version))
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/hashie/hashie")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "13bdzfp25c8k51ayzxqkbzag3wj5gc1jd8h7d985nsq6pn57g5xh"))))
-    (build-system ruby-build-system)
-    (native-inputs
-     (list bundler))
-    (arguments `(#:tests? #f)); FIXME: Could not locate Gemfile or .bundle/ directory
-    (home-page "https://github.com/intridea/hashie")
+                "0ihami0cdn71cvwzwgr3vxqvqi0ifqsna0vlyqiqlhsnf93w0cm8"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:test-target "spec"
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'disable-bundler
+                          (lambda _
+                            (substitute* "Rakefile"
+                              ((".*require 'bundler'.*") "")
+                              ((".*Bundler.setup.*") "")
+                              (("Bundler::GemHelper\\.install_tasks") ""))))
+                        (add-after 'unpack 'disable-rubocop
+                          (lambda _
+                            (substitute* "Rakefile"
+                              (("require 'rubocop/rake_task'") "")
+                              (("RuboCop::RakeTask.new") ""))))
+                        (add-after 'unpack 'relax-requirements
+                          (lambda _
+                            ;; Contains multiple extraneous dependencies.
+                            (delete-file "Gemfile"))))))
+    (native-inputs (list ruby-json ruby-pry ruby-rspec ruby-rspec-pending-for))
+    (home-page "https://github.com/hashie/hashie")
     (synopsis "Extensions to Ruby Hashes")
     (description "Hashie is a collection of classes and mixins that make Ruby
 hashes more powerful.")
@@ -11203,6 +13324,68 @@ own right, and also constitutes a row or column of a @code{Matrix}.")
     (home-page "https://github.com/ruby/matrix")
     (license license:bsd-2)))
 
+(define-public ruby-m
+  (package
+    (name "ruby-m")
+    (version "1.6.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/qrush/m")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1aycfc8l1bsln1y300fv75fknn4amjcvc4rm2kd8hb6cqivjq5rg"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'sanitize-dependencies
+            (lambda _
+              (delete-file "Gemfile")
+              (delete-file "Gemfile.lock")
+              ;; Rocco is unmaintained as of 2023/01/08; avoid depending on
+              ;; it.
+              (substitute* "m.gemspec"
+                ;; The rdiscount and rocco dependencies are used for
+                ;; generating the documentation.
+                ((".*rdiscount.*") "")
+                ((".*rocco.*") "")
+                ((".*appraisal.*") "")
+                ((".*coveralls.*") ""))
+              (substitute* "Rakefile"
+                ;; ruby-appraisal is not packaged, and is used to test against
+                ;; various dependencies; circumvent its use.
+                ((".*require 'appraisal'.*") "")
+                ((".*require 'coveralls'.*") "")
+                (("appraisal [:graphic:]+ rake")
+                 "rake")
+                (("Coveralls.push!") ""))))
+          (add-before 'replace-git-ls-files 'pre-replace-git-ls-files
+            (lambda _
+              (substitute* "m.gemspec"
+                (("git ls-files -- bin/\\*")
+                 "find bin -type f -not -regex '.*\\.gem$' | sort")
+                (("git ls-files -- \\{test,spec,features}/\\*")
+                 "find test -type f -not -regex '.*\\.gem$' | sort"))))
+          (delete 'check)
+          (add-after 'install 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (setenv "GEM_PATH" (string-append
+                                  (getenv "GEM_PATH") ":"
+                                  #$output "/lib/ruby/vendor_ruby"))
+              (when tests?
+                (invoke "rake" "test")))))))
+    (native-inputs (list ruby-activesupport))
+    (propagated-inputs (list ruby-method-source ruby-rake))
+    (synopsis "Ruby test runner that can run tests by line number")
+    (description "@code{m} stands for metal, a better test/unit and
+@code{minitest} test runner that can run tests by line number.")
+    (home-page "https://github.com/qrush/m")
+    (license license:expat)))
+
 (define-public ruby-mercenary
   (package
     (name "ruby-mercenary")
@@ -11223,24 +13406,168 @@ own right, and also constitutes a row or column of a @code{Matrix}.")
 command-line apps in Ruby.")
     (license license:expat)))
 
+(define-public ruby-launchy
+  (package
+    (name "ruby-launchy")
+    (version "2.5.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "launchy" version))
+              (sha256
+               (base32
+                "06r43899384das2bkbrpsdxsafyyqa94il7111053idfalb4984a"))))
+    (build-system ruby-build-system)
+    (native-inputs (list curl links ruby-simplecov))
+    (propagated-inputs (list ruby-addressable))
+    (synopsis "Ruby helper class for launching applications")
+    (description
+     "Launchy is helper class for launching applications in a fire and forget
+manner.  The aim of Launchy is to provide a common approach to launching
+external applications from within Ruby programs.")
+    (home-page "https://github.com/copiousfreetime/launchy")
+    (license license:isc)))
+
 (define-public ruby-liquid
   (package
     (name "ruby-liquid")
-    (version "4.0.0")
+    (version "5.4.0")
     (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "liquid" version))
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/Shopify/liquid")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "17fa0jgwm9a935fyvzy8bysz7j5n1vf1x2wzqkdfd5k08dbw3x2y"))))
+                "1qdnvd1f9zs6wyilcgxyh93wis7ikbpimjxfpbkpk2ngr1m2c8la"))))
     (build-system ruby-build-system)
-    (arguments `(#:tests? #f)); No rakefile
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (delete 'check)               ;moved after the install phase
+          (add-after 'install 'check
+            (assoc-ref %standard-phases 'check))
+          (add-before 'check 'set-GEM_PATH
+            (lambda _
+              (setenv "GEM_PATH" (string-append
+                                  (getenv "GEM_PATH") ":"
+                                  #$output "/lib/ruby/vendor_ruby"))))
+          (add-before 'check 'delete-problematic-tests
+            (lambda _
+              ;; The following test fails with 'Unknown tag' errors (see:
+              ;; https://github.com/Shopify/liquid/issues/1699).
+              (delete-file "test/integration/tags/inline_comment_test.rb"))))))
+    (native-inputs (list ruby-liquid-c-bootstrap ruby-rspec ruby-stackprof))
     (home-page "https://shopify.github.io/liquid/")
     (synopsis "Template language")
     (description "Liquid is a template language written in Ruby.  It is used
 to load dynamic content on storefronts.")
     (license license:expat)))
 
+(define-public ruby-liquid-4
+  (package
+    (inherit ruby-liquid)
+    (name "ruby-liquid")
+    (version "4.0.4")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/Shopify/liquid")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0cr321nd0zkbxirgdfmz37xx7j26zfnicjh585fi20vx60frry83"))))
+    (arguments (list #:tests? #f))))    ;avoid required an older ruby-liquid-c
+
+;;; This variant is purposefully incomplete, lacking ruby-liquid so that it
+;;; can be used for ruby-liquid's test suite.
+(define ruby-liquid-c-bootstrap
+  (package
+    (name "ruby-liquid-c-bootstrap")
+    (version "4.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "liquid-c" version))
+              (sha256
+               (base32
+                "0jl37jz9hbfbhknryx4myxqx4n1f5dzyzmf1sapkcbw93xyrmkch"))))
+    (build-system ruby-build-system)
+    (arguments (list #:tests? #f))
+    (native-inputs (list ruby-rake-compiler))
+    (synopsis "Liquid performance extension in C")
+    (description "This package provides a Partial native implementation of the
+liquid ruby gem in C that makes it operate about three times faster.")
+    (home-page "https://github.com/shopify/liquid-c")
+    (license license:expat)))
+
+(define-public ruby-liquid-c
+  (package/inherit ruby-liquid-c-bootstrap
+    (name "ruby-liquid-c")
+    (arguments
+     (list
+      ;; Only run the unit tests, because the test:integration target fails
+      ;; with "File does not exist: test_helper" (see:
+      ;; https://github.com/Shopify/liquid-c/issues/188).
+      #:test-target "test:unit"
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'extract-gemspec 'relax-requirements
+            (lambda _
+              (substitute* "Gemfile"
+                ;; Do not attempt to fetch a gem from git.
+                (("git_source\\(:github) do \\|repo_name\\|")
+                 "if false")
+                ((", github: \"Shopify/liquid\", ref: \"master\"")
+                 "")
+                ;; Remove extraneous dependencies.
+                ((".*byebug.*") "")
+                ((".*rubocop.*") "")
+                ;; Relax spy version specification.
+                (("gem \"spy\", \"0.4.1\"")
+                 "gem \"spy\", \">= 0.4.1\"")))))))
+    (native-inputs
+     (list ruby-benchmark-ips
+           ruby-rake-compiler
+           ruby-ruby-memcheck
+           ruby-spy
+           ruby-stackprof))
+    (propagated-inputs
+     (list ruby-liquid))))
+
+(define-public ruby-localhost
+  (package
+    (name "ruby-localhost")
+    (version "1.1.10")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/socketry/localhost")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1yp70w15wpfk613ap5f4y15yx4n2qqwa67vqc2f4lv7npf3llcz0"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; XXX: The test suite requires sus-fixtures-async, which requires async,
+     ;; only available for Ruby 3.0.
+     (list #:tests? #f
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'build 'remove-missing-signing-key
+                 (lambda _
+                   ;; Otherwise, the build fails with ENOENT.
+                   (substitute* "localhost.gemspec"
+                     ((".*spec.signing_key.*") "")))))))
+    (synopsis "API for generating per-user self-signed root certificates")
+    (description "This package provides @code{localhost}, a Ruby library for
+Managing a local certificate authority for self-signed, localhost development
+servers.")
+    (home-page "https://github.com/socketry/localhost")
+    (license license:expat)))
+
 (define-public ruby-forwardable-extended
   (package
     (name "ruby-forwardable-extended")
@@ -11286,20 +13613,19 @@ Pathname.")
 (define-public ruby-terminal-table
   (package
     (name "ruby-terminal-table")
-    (version "2.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "terminal-table" version))
-       (sha256
-        (base32
-         "18rbrh464ysqbdv53iwj0r8frshn65566kyj044cp3x9c2754jwh"))))
+    (version "3.0.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/tj/terminal-table")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1c3f7ng3lxq962n8sbmlsvjx6srh5i801wzsyhxmfz2g880f5jps"))))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'remove-gemfile-lock
-           (lambda _
-             (delete-file "Gemfile.lock")))
          (add-before 'check 'remove-unnecessary-dependencies
            (lambda _
              (substitute* "terminal-table.gemspec"
@@ -11315,7 +13641,7 @@ Pathname.")
     (propagated-inputs
      (list ruby-unicode-display-width))
     (native-inputs
-     (list ruby-rspec))
+     (list ruby-rspec ruby-term-ansicolor))
     (home-page "https://github.com/tj/terminal-table")
     (synopsis "Simple, feature rich ASCII table generation library")
     (description
@@ -11327,40 +13653,110 @@ Unicode formatted tables.")
 (define-public jekyll
   (package
     (name "jekyll")
-    (version "4.2.0")
+    (version "4.3.2")
     (source (origin
-              (method url-fetch)
-              (uri (rubygems-uri "jekyll" version))
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/jekyll/jekyll")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "0cqkh78jw8scrajyx5nla0vwm9fvp2qql3kdcvvplcq9mazy8snq"))))
+                "1d588d7zhp526r21f9mnm204m8qy0c8h3lq3ghyg6qp8mj6hnwj4"))))
     (build-system ruby-build-system)
     (arguments
-     ;; No rakefile, but a test subdirectory.
-     `(#:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'fix-i18n
-           (lambda _
-             (substitute* ".gemspec"
-               (("~> 0.7") ">= 0.7")
-               (("~> 1.14") ">= 1.14"))
-             #t)))))
+     (list #:modules '((guix build ruby-build-system)
+                       (guix build utils)
+                       (ice-9 ftw)
+                       (srfi srfi-26))
+           ;; The cucumber acceptance suite is not run as it depends on an old
+           ;; version (5).
+           #:test-target "spec"
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'check 'disable-problematic-tests
+                 ;; TODO: Package the missing test inputs.
+                 (lambda _
+                   (with-directory-excursion "test"
+                     ;; Requires 'jekyll-coffeescript'.
+                     (delete-file "test_coffeescript.rb")
+                     ;; Requires 'tomlrb'.
+                     (delete-file "test_configuration.rb")
+                     (substitute* "test_filters.rb"
+                       ;; The sassify tests fail due to white space
+                       ;; differences (see:
+                       ;; https://github.com/jekyll/jekyll/issues/9322).
+                       ((".*s?ssify with simple string.*" all)
+                        (string-append all
+                                       "      skip('fails on guix')\n")))
+                     ;; Requires kramdown-syntax-coderay.
+                     (delete-file "test_kramdown.rb")
+                     ;; Requires 'test-theme', usually made available from the
+                     ;; local checkout via Bundler (not used here).
+                     (delete-file "test_layout_reader.rb")
+                     ;; Requires a large amount of un-packaged dependencies.
+                     (delete-file "test_plugin_manager.rb")
+                     ;; Requires 'classifier-reborn'.
+                     (delete-file "test_related_posts.rb")
+                     ;; This one causes a test failure similar to the ones for
+                     ;; sassify above.
+                     (delete-file "test_sass.rb")
+                     ;; This would require running the tests via 'bundle
+                     ;; exec', but the Gemfile contains too many (extraneous)
+                     ;; dependencies.
+                     (delete-file "test_site.rb")
+                     ;; Delete the theme tests, as they require 'test-theme',
+                     ;; usually made available from the local checkout via the
+                     ;; Gemfile/bundler (not used here).
+                     (for-each delete-file
+                               (scandir
+                                "." (cut string-prefix? "test_theme" <>)))
+                     ;; This one also relies on 'test-theme'.
+                     (delete-file "test_liquid_renderer.rb")
+                     ;; This test assumes internet connectivity, negate it, as
+                     ;; there's no Internet in the build container.
+                     (substitute* "test_utils.rb"
+                       (("assert Utils::Internet\\.connected\\?")
+                        "refute Utils::Internet.connected?"))
+                     ;; These tests fail non-deterministically (see:
+                     ;; https://github.com/jekyll/jekyll/issues/9323).
+                     (delete-file "test_new_command.rb")
+                     (delete-file "test_collections.rb"))))
+               (replace 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     ;; Invoke the test scripts manually, as 'rake test'
+                     ;; doesn't show any failure details, making debugging
+                     ;; needlessly difficult.
+                     (for-each (lambda (f)
+                                 (invoke "ruby" "-I" "test" f))
+                               (find-files "test" "^test_.*\\.rb$"))))))))
+    (native-inputs
+     (list bundler
+           ruby-httpclient
+           ruby-minitest-profile
+           ruby-minitest-reporters
+           ruby-nokogiri
+           ruby-rspec
+           ruby-rspec-mocks
+           ruby-shoulda
+           ruby-simplecov))
     (propagated-inputs
-     `(("ruby-addressable" ,ruby-addressable)
-       ("ruby-colorator" ,ruby-colorator)
-       ("ruby-em-websocket" ,ruby-em-websocket)
-       ("ruby-i18n" ,ruby-i18n)
-       ("ruby-jekyll-sass-converter" ,ruby-jekyll-sass-converter)
-       ("ruby-jekyll-watch" ,ruby-jekyll-watch)
-       ("ruby-kramdown" ,ruby-kramdown-parser-gfm)
-       ("ruby-liquid" ,ruby-liquid)
-       ("ruby-mercenary" ,ruby-mercenary)
-       ("ruby-pathutil" ,ruby-pathutil)
-       ("ruby-rouge" ,ruby-rouge)
-       ("ruby-safe-yaml" ,ruby-safe-yaml)
-       ("ruby-sassc" ,ruby-sassc)
-       ("ruby-terminal-table" ,ruby-terminal-table)))
+     (list ruby-addressable
+           ruby-colorator
+           ruby-em-websocket
+           ruby-i18n
+           ruby-jekyll-sass-converter
+           ruby-jekyll-watch
+           ruby-kramdown-parser-gfm
+           ruby-liquid-4
+           ruby-mercenary
+           ruby-pathutil
+           ruby-rouge
+           ruby-safe-yaml
+           ruby-sassc
+           ruby-terminal-table
+           ruby-webrick))
     (home-page "https://jekyllrb.com/")
     (synopsis "Static site generator")
     (description "Jekyll is a simple, blog aware, static site generator.")
@@ -11385,26 +13781,55 @@ Unicode formatted tables.")
 logic in Jekyll.  It calculates and generates the pagination pages.")
     (license license:expat)))
 
+(define-public ruby-faraday-net-http
+  (package
+    (name "ruby-faraday-net-http")
+    (version "3.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "faraday-net_http" version))
+              (sha256
+               (base32
+                "13byv3mp1gsjyv8k0ih4612y6vw5kqva6i03wcg4w2fqpsd950k8"))))
+    (build-system ruby-build-system)
+    ;; Do not run the test suite here as it would introduce a dependency cycle
+    ;; with ruby-faraday, which uses it as part of its test suite.
+    (arguments (list #:tests? #f))
+    (synopsis "Faraday adapter for Net::HTTP")
+    (description "This gem is a Faraday adapter for the @code{Net::HTTP}
+library.  Faraday is an HTTP client library that provides a common interface
+over many adapters.")
+    (home-page "https://github.com/lostisland/faraday-net_http")
+    (license license:expat)))
+
 (define-public ruby-faraday
   (package
     (name "ruby-faraday")
-    (version "0.15.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "faraday" version))
-       (sha256
-        (base32
-         "0s72m05jvzc1pd6cw1i289chas399q0a14xrwg4rvkdwy7bgzrh0"))))
+    (version "2.7.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/lostisland/faraday")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ya6jqa7ryr4i62mmzjjxzd8i8y0pyw0cbhifd758rs6lvkzmxa3"))))
     (build-system ruby-build-system)
-    (arguments
-     '(#:tests? #f))
-    (propagated-inputs
-     (list ruby-multipart-post))
+    (arguments (list #:test-target "spec"))
+    (native-inputs
+     (list ruby-coveralls
+           ruby-pry
+           ruby-rack
+           ruby-rspec
+           ruby-simplecov
+           ruby-webmock))
+    ;; Propagate faraday-net-http as this is the default adapter used, and
+    ;; many Ruby projects assumes it is available.
+    (propagated-inputs (list ruby-ruby2-keywords ruby-faraday-net-http))
     (synopsis "Ruby HTTP/REST API client library")
-    (description
-     "Faraday is a HTTP/REST API client library which provides a common
-interface over different adapters.")
+    (description "Faraday is a HTTP/REST API client library which provides a
+common interface over different adapters.")
     (home-page "https://github.com/lostisland/faraday")
     (license license:expat)))
 
@@ -11454,54 +13879,236 @@ for scalable network clients and servers.")
    (home-page "https://github.com/socketry/nio4r")
    (license license:expat)))
 
-(define-public ruby-globalid
+(define-public ruby-language-server-protocol
   (package
-   (name "ruby-globalid")
-   (version "0.4.2")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (rubygems-uri "globalid" version))
-     (sha256
-      (base32
-       "1zkxndvck72bfw235bd9nl2ii0lvs5z88q14706cmn702ww2mxv1"))))
-   (build-system ruby-build-system)
-   (arguments
-    '(;; No included tests
-      #:tests? #f))
-   (propagated-inputs
-    (list ruby-activesupport))
-   (synopsis "Generate URIs idenfitying model instances in Ruby")
-   (description
-    "@code{GlobalID} provides a way to generate URIs from a model in Ruby that
-uniquely identify it.")
-   (home-page "https://rubyonrails.org/")
-   (license license:expat)))
+    (name "ruby-language-server-protocol")
+    (version "3.17.0.3")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/mtsmfm/language_server-protocol-ruby")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0f2g301fz99c6nkca39s9227brlycznv8a9r4b4i99rg25m91lc6"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (replace 'replace-git-ls-files
+            (lambda _
+              (substitute* "language_server-protocol.gemspec"
+                (("git ls-files -z([^`]*)" _ files)
+                 (string-append "find " files
+                                " -type f -not -regex '.*\\.gem$'"
+                                " -print0 | sort -z"))))))))
+    (native-inputs
+     (list ruby-activesupport
+           ruby-benchmark-ips
+           ruby-m
+           ruby-minitest
+           ruby-minitest-power-assert
+           ruby-pry-byebug))
+    (synopsis "Language Server Protocol (LSP) development kit for Ruby")
+    (description "This package provides a Language Server Protocol (LSP)
+development kit for Ruby.")
+    (home-page "https://github.com/mtsmfm/language_server-protocol-ruby")
+    (license license:expat)))
 
-(define-public ruby-sprockets
+(define-public ruby-spy
   (package
-    (name "ruby-sprockets")
-    (version "3.7.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (rubygems-uri "sprockets" version))
-       (sha256
-        (base32
-         "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay"))))
+    (name "ruby-spy")
+    (version "1.0.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "spy" version))
+              (sha256
+               (base32
+                "0g2mma8q17m26k5s864ndlvvqllhcivwg2wdigjvb7z06iw17gds"))))
     (build-system ruby-build-system)
     (arguments
-     '(;; No included tests
-       #:tests? #f))
-    (propagated-inputs
-     (list ruby-concurrent ruby-rack))
-    (synopsis "Sprockets is a Rack-based asset packaging system")
-    (description
-     "Sprockets is a Rack-based asset packaging system that concatenates and
-serves JavaScript, CoffeeScript, CSS, LESS, Sass, and SCSS.")
-    (home-page "https://github.com/rails/sprockets")
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'extract-gemspec 'relax-requirements
+                          (lambda _
+                            (substitute* "Gemfile"
+                              ((".*redcarpet.*") "")
+                              ((".*yard.*") "")))))))
+    (native-inputs
+     (list ruby-coveralls
+           ruby-minitest-reporters
+           ruby-pry
+           ruby-pry-byebug
+           ruby-rspec-core
+           ruby-rspec-expectations))
+    (synopsis "Mocking library for Ruby")
+    (description "Spy is a mocking library.  By default, it will raise an
+error if you attempt to stub a method that doesn't exist or call the stubbed
+method with the wrong arity.")
+    (home-page "https://github.com/ryanong/spy")
     (license license:expat)))
 
+(define-public ruby-subprocess
+  (package
+    (name "ruby-subprocess")
+    (version "1.5.6")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "subprocess" version))
+              (sha256
+               (base32
+                "0v49ahfx9b75qg42sl8a3l367g2vihc16g8z5f2raxpxjl1wh2s2"))))
+    (build-system ruby-build-system)
+    ;; Do not run the test suite, as there its test dependency ruby-sord would
+    ;; introduce a cycle with ruby-sorbet-runtime.
+    (arguments (list #:tests? #f))
+    (native-inputs (list ruby-minitest ruby-pry))
+    (synopsis "Ruby library to control and communicate with spawned processes")
+    (description "This Ruby library is controlling and communicating with
+spawned processes.  It is designed after Python's @code{subprocess} module.")
+    (home-page "https://github.com/stripe/subprocess")
+    (license license:expat)))
+
+(define-public ruby-sus
+  (package
+    (name "ruby-sus")
+    (version "0.20.3")
+    (source (origin
+              (method git-fetch)        ;for gems.rb
+              (uri (git-reference
+                    (url "https://github.com/ioquatix/sus")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0j4rkh9li79674h3lfkxlcdygscmb22l77i7hwhxl3gw103gkpdr"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'build 'prune-gems.rb
+                 (lambda _
+                   (substitute* "gems.rb"
+                     (("gem \"bake-modernize\"") "")
+                     (("gem \"bake-gem\"") "")
+                     (("gem \"utopia-project\"") ""))))
+               (add-before 'build 'remove-missing-signing-key
+                 (lambda _
+                   ;; Otherwise, the build fails with ENOENT.
+                   (substitute* "sus.gemspec"
+                     ((".*spec.signing_key.*") ""))))
+               (delete 'check)          ;moved after install
+               (add-after 'install 'check
+                 (lambda* (#:key tests? #:allow-other-keys)
+                   (when tests?
+                     (setenv "CONSOLE_LEVEL" "debug")
+                     (setenv "HOME" "/tmp")
+                     ;; 'bundle exec' must be used to workaround a problem
+                     ;; when using bake test and GEM_PATH (see:
+                     ;; https://github.com/ioquatix/bake/issues/11).
+                     (invoke "bundle" "exec" "bake" "test"))))
+               (add-before 'check 'set-paths
+                 (lambda _
+                   (setenv "PATH" (string-append (getenv "PATH") ":"
+                                                 #$output "/bin"))
+                   (setenv "GEM_PATH" (string-append
+                                       (getenv "GEM_PATH") ":"
+                                       #$output "/lib/ruby/vendor_ruby")))))))
+    (native-inputs (list ruby-bake-test ruby-bake-test-external ruby-covered))
+    (synopsis "Fast and scalable test runner for Ruby")
+    (description "This package provides a fast and scalable test runner for Ruby.")
+    (home-page "https://github.com/ioquatix/sus")
+    (license license:expat)))
+
+(define-public ruby-syntax-tree
+  (package
+    (name "ruby-syntax-tree")
+    (version "6.1.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby-syntax-tree/syntax_tree")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0356lgvqp22nkqlrgszf7myfdg4arclg278awh34zyby1cx6hb2k"))))
+    (build-system ruby-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; The tests rely on the Gem being installed, so move the check
+          ;; phase after the install phase.
+          (delete 'check)
+          (add-after 'install 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (setenv "GEM_PATH" (string-append
+                                  #$output "/lib/ruby/vendor_ruby:"
+                                  (getenv "GEM_PATH")))
+              (when tests?
+                (invoke "rake" "test")))))))
+    (native-inputs (list ruby-rubocop-ast ruby-simplecov))
+    (propagated-inputs (list ruby-prettier-print))
+    (synopsis "Fast Ruby parser and formatter")
+    (description "Syntax Tree is a suite of tools built on top of the internal
+CRuby parser.  It provides the ability to generate a syntax tree from source,
+as well as the tools necessary to inspect and manipulate that syntax tree.  It
+can be used to build formatters, linters, language servers, and more.")
+    (home-page "https://github.com/ruby-syntax-tree/syntax_tree")
+    (license license:expat)))
+
+(define sorbet-version "0.5.10610.20230106174520-1fa668010")
+
+(define sorbet-monorepo
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://github.com/sorbet/sorbet")
+          (commit sorbet-version)))
+    (file-name (string-append "sorbet-" sorbet-version "-checkout"))
+    (sha256
+     (base32
+      "0f21dl06alxwn6xgdxyrkd58plmmsv04z2bcls9ld4cfzsrs5537"))))
+
+(define (make-sorbet-gem-source gem)
+  "Return the source of GEM, a sub-directory."
+  (computed-file
+   (string-append "ruby-sorbet-" gem "-" sorbet-version "-checkout")
+   (with-imported-modules (source-module-closure '((guix build utils)))
+     #~(begin
+         (use-modules (guix build utils))
+         (copy-recursively (string-append #$sorbet-monorepo
+                                          "/gems/sorbet-" #$gem)
+                           #$output)))))
+
+(define-public ruby-sorbet-runtime
+  (package
+    (name "ruby-sorbet-runtime")
+    (version sorbet-version)
+    (source (make-sorbet-gem-source "runtime"))
+    (build-system ruby-build-system)
+    ;; 25 out of 841 tests currently fail, seemingly due to invalid
+    ;; assumptions about file names in the build environment (see:
+    ;; https://github.com/sorbet/sorbet/issues/6650).
+    (arguments (list #:tests? #f))
+    (native-inputs
+     (list ruby-minitest
+           ruby-mocha
+           ruby-rubocop
+           ruby-rubocop-performance
+           ruby-concurrent-ruby
+           ruby-pry
+           ruby-pry-byebug
+           ruby-parser
+           ruby-subprocess))
+    (synopsis "Runtime type checking component for Sorbet")
+    (description "Sorbet's runtime type checking component.  Sorbet is a
+powerful type checker for Ruby.")
+    (home-page "https://sorbet.org")
+    (license license:asl2.0)))
+
 (define-public ruby-mustache
   (package
     (name "ruby-mustache")
@@ -11537,14 +14144,14 @@ template.")
 (define-public ruby-mustermann
   (package
     (name "ruby-mustermann")
-    (version "1.0.3")
+    (version "3.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "mustermann" version))
        (sha256
         (base32
-         "0lycgkmnyy0bf29nnd2zql5a6pcf8sp69g9v4xw0gcfcxgpwp7i1"))))
+         "0rwbq20s2gdh8dljjsgj5s6wqqfmnbclhvv2c2608brv7jm6jdbd"))))
     (build-system ruby-build-system)
     (arguments
      ;; No tests.
@@ -11556,6 +14163,27 @@ characteristics.")
     (home-page "https://github.com/sinatra/mustermann")
     (license license:expat)))
 
+(define-public ruby-prettier-print
+  (package
+    (name "ruby-prettier-print")
+    (version "1.2.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby-syntax-tree/prettier_print")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "00cg40jc0il1hpsrpsrqwhsxmx7day9lxp1ksrm08zxzsrz9ykqz"))))
+    (build-system ruby-build-system)
+    (native-inputs (list ruby-simplecov))
+    (synopsis "Compatible and featureful implementation of @code{prettyprint}")
+    (description "This package provides a drop-in replacement for the
+@code{prettyprint} gem, with more functionality.")
+    (home-page "https://github.com/ruby-syntax-tree/prettier_print")
+    (license license:expat)))
+
 (define-public ruby-html-proofer
   (package
     (name "ruby-html-proofer")
@@ -11638,28 +14266,20 @@ entities.")
     (home-page "https://github.com/threedaymonk/htmlentities")
     (license license:expat)))
 
+;;; FIXME: Currently broken with rack 3, awaiting the merge for
+;;; https://github.com/sinatra/sinatra/pull/1857 and a new release.
 (define-public ruby-sinatra
   (package
     (name "ruby-sinatra")
-    (version "2.0.8.1")
+    (version "3.0.5")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "sinatra" version))
        (sha256
         (base32
-         "0riy3hwjab1mr73jcqx3brmbmwspnw3d193j06a5f0fy1w35z15q"))))
+         "1ryfja9yd3fq8n1p5yi3qnd0pjk7bkycmxxmbb1bj0axlr1pdv20"))))
     (build-system ruby-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; See: https://github.com/sinatra/sinatra/issues/1578.
-         (add-after 'extract-gemspec 'fix-slow-doc-generation
-           (lambda _
-             (substitute* "sinatra.gemspec"
-               (("\"README.rdoc\"\\.freeze," all)
-                (string-append all " \"--exclude=.*\\.md\".freeze,")))
-             #t)))))
     (propagated-inputs
      (list ruby-mustermann ruby-rack ruby-rack-protection ruby-tilt))
     (synopsis "DSL for quick web applications creation in Ruby")
@@ -11669,6 +14289,26 @@ minimal effort.")
     (home-page "https://sinatrarb.com/")
     (license license:expat)))
 
+(define-public ruby-timeout
+  (package
+    (name "ruby-timeout")
+    (version "0.3.2")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/timeout")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0lzhs2c4znzg781w146dhvczhbx7h3wkb90i4v6h68zvm2zfylgj"))))
+    (build-system ruby-build-system)
+    (synopsis "Timeout library for Ruby")
+    (description "Timeout provides a way to auto-terminate a potentially
+long-running operation if it hasn't finished in a fixed amount of time.")
+    (home-page "https://github.com/ruby/timeout")
+    (license (list license:bsd-2))))
+
 (define-public ruby-thin
   (package
     (name "ruby-thin")
@@ -11697,6 +14337,32 @@ and stability,
     (home-page "https://github.com/macournoyer/thin")
     (license license:ruby)))
 
+(define-public ruby-truthy
+  (package
+    (name "ruby-truthy")
+    (version "1.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "truthy" version))
+              (sha256
+               (base32
+                "19silgd65j3qwfk5w891p9wcmzdmi9ddm2kg5zbvvqn2h9lkfzmd"))))
+    (build-system ruby-build-system)
+    (arguments (list #:phases #~(modify-phases %standard-phases
+                                  (replace 'check
+                                    (lambda* (#:key tests? #:allow-other-keys)
+                                      (when tests?
+                                        (substitute* "spec/spec_helper.rb"
+                                          (("require 'spec'")
+                                           "require 'rspec'"))
+                                        (invoke "rspec")))))))
+    (native-inputs (list ruby-rspec))
+    (synopsis "Object truthiness-related Ruby library")
+    (description "This library makes it easier to discover the truth values of
+various Ruby objects.")
+    (home-page "https://github.com/ymendel/truthy")
+    (license license:expat)))
+
 (define-public ruby-skinny
   (package
     (name "ruby-skinny")
@@ -12019,21 +14685,23 @@ which snapshots to consider and what files to include.")
 (define-public ruby-zeitwerk
   (package
     (name "ruby-zeitwerk")
-    (version "2.4.2")
+    (version "2.6.7")
     (source
       (origin
-        (method git-fetch)
+        (method git-fetch)              ;for tests
         (uri (git-reference
-               ;; No tests in the released gem.
                (url "https://github.com/fxn/zeitwerk")
                (commit (string-append "v" version))))
         (file-name (git-file-name name version))
         (sha256
          (base32
-          "119fgdyb57gmss2yvfwfr47wcy8nny38sai72446krpihyavpizw"))))
+          "10p1ycv72yas1fdqrmdyz1aiqf8axj6q1kyllni2wknhk059jvi0"))))
     (build-system ruby-build-system)
     (native-inputs
-     (list ruby-minitest ruby-minitest-focus ruby-minitest-reporters))
+     (list ruby-minitest
+           ruby-minitest-focus
+           ruby-minitest-proveit
+           ruby-minitest-reporters))
     (synopsis "Efficient and thread-safe code loader for Ruby")
     (description
      "Zeitwerk implements constant autoloading with Ruby semantics.  Each gem
@@ -12824,57 +15492,103 @@ ripped from Merb.  It supports pluggable parsers and ships with both REXML and
 Nokogiri implementations.")
     (license license:expat)))
 
+;; This package is deprecated per upstream and should be phased out.
 (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"))))
+     (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))
+    (arguments `(#: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-faraday-multipart
+  (package
+    (name "ruby-faraday-multipart")
+    (version "1.0.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/lostisland/faraday-multipart")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ywxhff40a688n50lxrn4d8y096l8sbrwp1jfz4zd3kdiiygclka"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "spec"))
+    (native-inputs (list ruby-faraday ruby-multipart-parser ruby-rspec))
+    (propagated-inputs (list ruby-multipart-post))
+    (synopsis "Multipart-post requests extension for Faraday")
+    (description "This Ruby gem extends Faraday to perform multipart-post
+requests.")
+    (home-page "https://github.com/lostisland/faraday-multipart")
+    (license license:expat)))
+
 (define-public ruby-bandwidth-iris
   (package
     (name "ruby-bandwidth-iris")
-    (version "5.1.0")
+    (version "7.0.0")
     (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "ruby-bandwidth-iris" version))
-        (sha256
-          (base32 "1hmrxs0dif6fw5npyzcshk4nq9qr2kbmnx7mdjr5v1nhzlfr0678"))))
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "ruby-bandwidth-iris" version))
+       (sha256
+        (base32 "131c4jhyvnrwbhizkks17fi9g85cwsq5f1p8zi408zyf63n7230d"))))
     (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))
+           ruby-yard))
     (propagated-inputs
      (list ruby-activesupport
-            ruby-builder
-            ruby-faraday
-            ruby-faraday-middleware
-            ruby-nori))
+           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)))
 
+(define-public ruby-selenium-webdriver
+  (package
+    (name "ruby-selenium-webdriver")
+    (version "4.8.5")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "selenium-webdriver" version))
+              (sha256
+               (base32
+                "0wh44vpsyz4mgyq4h482prgiv7hqa5jsj4i7i5hnvv39jb0rfiwm"))))
+    (build-system ruby-build-system)
+    ;; FIXME: The gem release lacks test files, and the git checkout lacks
+    ;; JavaScript source that is generated using Bazel, which isn't available
+    ;; in Guix yet, so disable the test suite for now.
+    (arguments (list #:tests? #f))
+    (propagated-inputs (list ruby-rexml ruby-rubyzip ruby-websocket))
+    (synopsis "Selenium browser automation bindings for Ruby")
+    (description "Selenium implements the W3C WebDriver protocol to automate
+popular browsers.  It aims to mimic the behaviour of a real user as it
+interacts with the application's HTML.  It's primarily intended for web
+application testing, but any web-based task can be automated.  This package
+provides the Ruby bindings of Selenium.")
+    (home-page "https://www.selenium.dev/")
+    (license license:asl2.0)))
+
 (define-public ruby-sentry-core
   (package
     (name "ruby-sentry-core")
@@ -12925,20 +15639,57 @@ interface for the Sentry error logger.")
 (define-public ruby-webrick
   (package
     (name "ruby-webrick")
-    (version "1.7.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (rubygems-uri "webrick" version))
-        (sha256
-          (base32 "1d4cvgmxhfczxiq5fr534lmizkhigd15bsx5719r5ds7k7ivisc7"))))
+    (version "1.8.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/ruby/webrick")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1xb0mk3cghdir65nmj0mblprbf21blli7267b6yyvxclh307yp6s"))))
     (build-system ruby-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'extract-gemspec 'delete-problematic-tests
+                 (lambda _
+                   ;; The httresponse tests fail for
+                   ;; unknown reasons (see:
+                   ;; https://github.com/ruby/webrick/issues/112).
+                   (delete-file "test/webrick/test_httpresponse.rb"))))))
     (home-page "https://github.com/ruby/webrick")
     (synopsis "HTTP server toolkit")
     (description "WEBrick is an HTTP server toolkit that can be configured as an
 HTTPS server, a proxy server, and a virtual-host server.")
     (license license:bsd-2)))
 
+(define-public ruby-websocket
+  (package
+    (name "ruby-websocket")
+    (version "1.2.9")
+    (source (origin
+              (method url-fetch)
+              (uri (rubygems-uri "websocket" version))
+              (sha256
+               (base32
+                "0dib6p55sl606qb4vpwrvj5wh881kk4aqn2zpfapf8ckx7g14jw8"))))
+    (build-system ruby-build-system)
+    (arguments (list #:test-target "spec"
+                     #:phases #~(modify-phases %standard-phases
+                                  (add-after 'unpack 'disable-rubocop
+                                    (lambda _
+                                      (substitute* "Rakefile"
+                                        (("require 'rubocop/rake_task'") "")
+                                        (("RuboCop::RakeTask.new") "")))))))
+    (native-inputs (list ruby-rspec))
+    (synopsis "WebSocket protocol Ruby library")
+    (description "This package provides a Ruby library to handle the WebSocket
+protocol.")
+    (home-page "https://github.com/imanel/websocket-ruby")
+    (license license:expat)))
+
 (define-public ruby-interception
   (package
     (name "ruby-interception")
@@ -12991,42 +15742,45 @@ any unhandled exceptions.")
 (define-public ruby-braintree
   (package
     (name "ruby-braintree")
-    (version "4.7.0")
+    (version "4.10.0")
     (source
      (origin
-       (method git-fetch)
-       ;; Download from GitHub because the rubygems version does not contain
-       ;; Rakefile.
+       (method git-fetch)               ;for tests
        (uri (git-reference
              (url "https://github.com/braintree/braintree_ruby")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1gixqf9vsjsyrk45lf9xcz0ggdydpgsk8ahknd27bbigz1j4pdf6"))))
+        (base32 "01b5bp8q038ray5wwg3qhg4hj3r5a48vnfzs3gxkdjm5ky6bmn4p"))))
     (build-system ruby-build-system)
     (arguments
      `(#:test-target "test:unit"
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'less-strict-dependencies
+         (add-after 'unpack 'disable-rubocop
+           (lambda _
+             (substitute* "Rakefile"
+               (("sh \"rubocop\"") ""))))
+         (add-after 'unpack 'relax-requirements
            (lambda _
              (substitute* "Gemfile"
-              (("gem \"libxml-ruby\", \"3.2.0\"")
+               (("gem \"libxml-ruby\", \"3.2.0\"")
                 "gem \"libxml-ruby\", \"~> 3.0.0\"")
                (("gem \"rspec\", \"3.9.0\"")
-                 "gem \"rspec\", \"~> 3.8.0\"")
-               (("gem \"rubocop\", \"~>1.12.0\"")
-                 "gem \"rubocop\", \"~> 1.10.0\"")))))))
+                "gem \"rspec\", \">= 3.9.0\"")
+               (("gem \"webrick\", \"~>1.7.0\"")
+                "gem \"webrick\", \">=1.7.0\"")
+               ((".*gem \"rubocop\".*") "")
+               ((".*gem \"rspec_junit_formatter\".*") "")))))))
     (native-inputs
      (list ruby-libxml
-            ruby-pry
-            ruby-rake
-            ruby-rspec
-            ruby-rubocop
-            ruby-webrick))
+           ruby-pry
+           ruby-rake
+           ruby-rspec
+           ruby-webrick))
     (propagated-inputs
      (list ruby-builder
-            ruby-rexml))
+           ruby-rexml))
     (home-page "https://www.braintreepayments.com/")
     (synopsis "Integration access to the Braintree Gateway")
     (description "Braintree provides resources and tools for developers to
@@ -13339,6 +16093,28 @@ implemented in pure Ruby.")
 Resource Description Framework} vocabularies.")
     (license license:unlicense)))
 
+(define-public ruby-rdiscount
+  (package
+    (name "ruby-rdiscount")
+    (version "2.2.7")
+    (source (origin
+              (method git-fetch)        ;for the full test suite
+              (uri (git-reference
+                    (url "https://github.com/davidfstr/rdiscount")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1lpfxq3gv0dgmnki9jgfnc8n9k4x9vyq9miqdxv6g4kp90qyfifc"))))
+    (build-system ruby-build-system)
+    (native-inputs (list perl))
+    (synopsis "Discount Markdown Processor for Ruby")
+    (description "Discount is an implementation of John Gruber's Markdown
+markup language in C.  It implements all of the language described in the
+markdown syntax document and passes the Markdown 1.0 test suite.")
+    (home-page "https://dafoster.net/projects/rdiscount/")
+    (license license:bsd-3)))
+
 (define-public ruby-bibtex-ruby
   (package
     (name "ruby-bibtex-ruby")
diff --git a/gnu/packages/rust-apps.scm b/gnu/packages/rust-apps.scm
index 5ec82009af..5c012168ca 100644
--- a/gnu/packages/rust-apps.scm
+++ b/gnu/packages/rust-apps.scm
@@ -12,7 +12,7 @@
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.ccom>
 ;;; Copyright © 2021, 2022 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro>
-;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021, 2022 Petr Hodina <phodina@protonmail.com>
 ;;; Copyright © 2021 jgart <jgart@dismail.de>
 ;;; Copyright © 2021 Nicolas Graves <ngraves@ngraves.fr>
@@ -1075,6 +1075,19 @@ rebase.")
               (base32
                "006rn3fn4njayjxr2vd24g1awssr9i3894nbmfzkybx07j728vav"))))))
 
+(define-public rust-cbindgen-0.20
+  (package
+    (inherit rust-cbindgen-0.24)
+    (name "rust-cbindgen")
+    (version "0.20.0")
+    (source (origin
+              (method url-fetch)
+              (uri (crate-uri "cbindgen" version))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1p67vvjkxh07yfizfkvm6bjlv2bywrnl57hshcsz9h2x2qxrgqsi"))))))
+
 (define-public rust-cbindgen-0.19
   (package
     (inherit rust-cbindgen)
@@ -1276,41 +1289,6 @@ are parsed concurrently using a thread pool to utilize all cpu cores.  A goal
 of the project is to be runnable on untrusted networks without crashing.")
     (license license:gpl3)))
 
-(define-public spotify-tui-0.25
-  (package
-    (name "spotify-tui")
-    (version "0.25.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "spotify-tui" version))
-        (file-name (string-append name "-" version ".tar.gz"))
-        (sha256
-          (base32 "08bpihkdv3rmcksnxp4cz04kawjs6spmwa3wr2k27b30x3q9cd4r"))))
-    (build-system cargo-build-system)
-    (arguments
-      `(#:cargo-inputs
-        (("rust-anyhow" ,rust-anyhow-1)
-         ("rust-arboard" ,rust-arboard-1)
-         ("rust-backtrace" ,rust-backtrace-0.3)
-         ("rust-clap" ,rust-clap-2)
-         ("rust-crossterm" ,rust-crossterm-0.20)
-         ("rust-dirs" ,rust-dirs-3)
-         ("rust-rand" ,rust-rand-0.8)
-         ("rust-rspotify" ,rust-rspotify-0.10)
-         ("rust-serde" ,rust-serde-1)
-         ("rust-serde-json" ,rust-serde-json-1)
-         ("rust-serde-yaml" ,rust-serde-yaml-0.8)
-         ("rust-tokio" ,rust-tokio-0.2)
-         ("rust-tui" ,rust-tui-0.16)
-         ("rust-unicode-width" ,rust-unicode-width-0.1))))
-    (native-inputs (list pkg-config))
-    (inputs (list openssl))
-    (home-page "https://github.com/Rigellute/spotify-tui")
-    (synopsis "Terminal user interface for Spotify")
-    (description "This package provides a terminal user interface for Spotify")
-    (license (list license:expat license:asl2.0))))
-
 (define-public tectonic
   (package
     (name "tectonic")
@@ -1858,10 +1836,11 @@ language.  It is a part of a larger rls-2.0 effort to create excellent IDE
 support for Rust.")
     (license (list license:expat license:asl2.0))))
 
+;;; Note: keep in sync with our current Rust/Cargo version.
 (define-public rust-cargo-c
   (package
     (name "rust-cargo-c")
-    (version "0.8.1+cargo-0.53")
+    (version "0.9.8+cargo-0.60")
     (source
       (origin
         (method url-fetch)
@@ -1870,12 +1849,12 @@ support for Rust.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "0fwdxhdj2963xr6xfqr56i7hikhsdv562vgxq2dj3h2mi3dil1k6"))))
+          "1zdzs3drjr9p6chg32inyi05rfv1c12nkk4bi7qpha12m6rsn26d"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-cbindgen" ,rust-cbindgen-0.19)
-        ("rust-cargo" ,rust-cargo-0.53) ;
+       (("rust-cbindgen" ,rust-cbindgen-0.20)
+        ("rust-cargo" ,rust-cargo-0.60)
         ("rust-anyhow" ,rust-anyhow-1)
         ("rust-pretty-env-logger" ,rust-pretty-env-logger-0.4)
         ("rust-structopt" ,rust-structopt-0.3)
diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm
index e6a9ef1db0..8a510d840b 100644
--- a/gnu/packages/scheme.scm
+++ b/gnu/packages/scheme.scm
@@ -21,6 +21,7 @@
 ;;; Copyright © 2022 jgart <jgart@dismail.de>
 ;;; Copyright © 2022 Robby Zambito <contact@robbyzambito.me>
 ;;; Copyright © 2023 Andrew Whatson <whatson@tailcall.au>
+;;; Copyright © 2023 Juliana Sims <jtsims@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1113,94 +1114,100 @@ a Common Lisp environment.")
 (define-public gerbil
   (package
     (name "gerbil")
-    (version "0.16")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/vyzo/gerbil")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0vng0kxpnwsg8jbjdpyn4sdww36jz7zfpfbzayg9sdpz6bjxjy0f"))))
+    (version "0.17.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/vyzo/gerbil")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0c0nspm659ybgmqlppdv7sxzll4hwkvcp9qmcsip6d0kz0p8r9c3"))))
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (delete 'bootstrap)
-         (add-before 'configure 'chdir
-           (lambda _
-             (chdir "src")
-             #t))
-         (replace 'configure
-           (lambda* (#:key outputs inputs #:allow-other-keys)
-             (invoke "chmod" "755" "-R" ".")
-             ;; Otherwise fails when editing an r--r--r-- file.
-             (invoke "gsi-script" "configure"
-                     "--prefix" (assoc-ref outputs "out")
-                     "--with-gambit" (assoc-ref inputs "gambit-c"))))
-         (add-before 'patch-generated-file-shebangs 'fix-gxi-shebangs
-           (lambda _
-             ;; Some .ss files refer to gxi using /usr/bin/env gxi
-             ;; and 'patch-generated-file-shebangs can't fix that
-             ;; because gxi has not been compiled yet.
-             ;; We know where gxi is going to end up so we
-             ;; Doctor Who our fix here before the problem
-             ;; happens towards the end of the build.sh script.
-             (let ((abs-srcdir (getcwd)))
-               (for-each
-                (lambda (f)
-                   (substitute* f
-                     (("#!/usr/bin/env gxi")
-                      (string-append "#!" abs-srcdir "/../bin/gxi"))))
-                 '("./gerbil/gxc"
-                   "./lang/build.ss"
-                   "./misc/http-perf/build.ss"
-                   "./misc/rpc-perf/build.ss"
-                   "./misc/scripts/docsnarf.ss"
-                   "./misc/scripts/docstub.ss"
-                   "./misc/scripts/docsyms.ss"
-                   "./r7rs-large/build.ss"
-                   "./release.ss"
-                   "./std/build.ss"
-                   "./std/run-tests.ss"
-                   "./std/web/fastcgi-test.ss"
-                   "./std/web/rack-test.ss"
-                   "./tools/build.ss"
-                   "./tutorial/httpd/build.ss"
-                   "./tutorial/kvstore/build.ss"
-                   "./tutorial/lang/build.ss"
-                   "./tutorial/proxy/build-static.ss"
-                   "./tutorial/proxy/build.ss")))
-             #t))
-         (replace
-          'build
-          (lambda*
-           (#:key inputs #:allow-other-keys)
-           (setenv "HOME" (getcwd))
-             (invoke
-              ;; The build script needs a tty or it'll crash on an ioctl
-              ;; trying to find the width of the terminal it's running on.
-              ;; Calling in script prevents that.
-              "script"
-              "-qefc"
-              "./build.sh")))
-         (delete 'check)
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin"))
-                    (lib (string-append out "/lib")))
-               (mkdir-p bin)
-               (mkdir-p lib)
-               (copy-recursively "../bin" bin)
-               (copy-recursively "../lib" lib)))))))
-    (native-inputs
-     (list coreutils util-linux))
-    (propagated-inputs
-     (list gambit-c zlib openssl sqlite))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (delete 'bootstrap)
+               (add-before 'configure 'chdir
+                 (lambda _
+                   (chdir "src")))
+               (replace 'configure
+                 (lambda _
+                   (invoke "chmod" "755" "-R" ".")
+                   ;; Otherwise fails when editing an r--r--r-- file.
+                   (invoke "gsi-script"
+                           "configure"
+                           "--prefix"
+                           #$output
+                           "--with-gambit"
+                           #$gambit-c)))
+               (add-before 'patch-generated-file-shebangs 'fix-gxi-shebangs
+                 (lambda _
+                   ;; Some .ss files refer to gxi using /usr/bin/env gxi
+                   ;; and 'patch-generated-file-shebangs can't fix that
+                   ;; because gxi has not been compiled yet.
+                   ;; We know where gxi is going to end up so we
+                   ;; Doctor Who our fix here before the problem
+                   ;; happens towards the end of the build.sh script.
+                   (let ((abs-srcdir (getcwd)))
+                     (for-each (lambda (f)
+                                 (substitute* f
+                                   (("#!/usr/bin/env gxi")
+                                    (string-append "#!" abs-srcdir
+                                                   "/../bin/gxi"))))
+                               '("./gerbil/gxc" "./lang/build.ss"
+                                 "./misc/http-perf/build.ss"
+                                 "./misc/rpc-perf/build.ss"
+                                 "./misc/scripts/docsnarf.ss"
+                                 "./misc/scripts/docstub.ss"
+                                 "./misc/scripts/docsyms.ss"
+                                 "./r7rs-large/build.ss"
+                                 "./release.ss"
+                                 "./std/build.ss"
+                                 "./std/run-tests.ss"
+                                 "./std/web/fastcgi-test.ss"
+                                 "./std/web/rack-test.ss"
+                                 "./tools/build.ss"
+                                 "./tutorial/httpd/build.ss"
+                                 "./tutorial/kvstore/build.ss"
+                                 "./tutorial/lang/build.ss"
+                                 "./tutorial/proxy/build-static.ss"
+                                 "./tutorial/proxy/build.ss")))))
+               (add-after 'configure 'create-gx-version.scm
+                 (lambda _
+                   (with-output-to-file (string-append (getcwd)
+                                                       "/gerbil/runtime/gx-version.scm")
+                     (lambda _
+                       (write `(define (gerbil-version-string)
+                                 ,(string-append "v"
+                                                 #$(version-major+minor
+                                                    version))))))))
+               (replace 'build
+                 (lambda _
+                   (setenv "HOME"
+                           (getcwd))
+                   (invoke
+                    ;; The build script needs a tty or it'll crash on an ioctl
+                    ;; trying to find the width of the terminal it's running on.
+                    ;; Calling in script prevents that.
+                    "script"
+                    "-qefc"
+                    "./build.sh")))
+               (replace 'install
+                 (lambda _
+                   (let* ((bin (string-append #$output "/bin"))
+                          (lib (string-append #$output "/lib")))
+                     (mkdir-p bin)
+                     (mkdir-p lib)
+                     (copy-recursively "../bin" bin)
+                     (copy-recursively "../lib" lib)))))
+           #:tests? #f))
+    (native-inputs (list coreutils gambit-c util-linux))
+    (propagated-inputs (list gambit-c openssl sqlite zlib))
     (build-system gnu-build-system)
     (synopsis "Meta-dialect of Scheme with post-modern features")
-    (description "Gerbil is an opinionated dialect of Scheme designed for Systems
+    (description
+     "Gerbil is an opinionated dialect of Scheme designed for Systems
 Programming, with a state of the art macro and module system on top of the Gambit
 runtime.  The macro system is based on quote-syntax, and provides the full meta-syntactic
 tower with a native implementation of syntax-case.  It also provides a full-blown module
diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index b37ab08642..a373f20d69 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -9,7 +9,7 @@
 ;;; Copyright © 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
-;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2020 Timotej Lazar <timotej.lazar@araneo.si>
 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
@@ -115,7 +115,7 @@ joystick, and graphics hardware.")
   (package
     (inherit sdl)
     (name "sdl2")
-    (version "2.24.0")
+    (version "2.26.2")
     (source (origin
               (method url-fetch)
               (uri
@@ -123,7 +123,7 @@ joystick, and graphics hardware.")
                               version ".tar.gz"))
               (sha256
                (base32
-                "15vd9najhjh6s9z9hhx7zp51iby690a1g3h7kcwjvyb82x5w7r4i"))))
+                "1q4r1camsr17mnpv00d6h3qy93b481rp68r6fbxbszq3vv1rplwm"))))
     (arguments
      (substitute-keyword-arguments (package-arguments sdl)
        ((#:configure-flags flags)
@@ -468,7 +468,7 @@ directory.")
 (define-public sdl2-image
   (package (inherit sdl-image)
     (name "sdl2-image")
-    (version "2.0.5")
+    (version "2.6.2")
     (source
      (origin
        (method url-fetch)
@@ -476,14 +476,15 @@ directory.")
         (string-append "https://www.libsdl.org/projects/SDL_image/release/"
                        "SDL2_image-" version ".tar.gz"))
        (sha256
-        (base32 "1l0864kas9cwpp2d32yxl81g98lx40dhbdp03dz7sbv84vhgdmdx"))))
+        (base32 "0xs7h5cp0sz082rn1bqjqbrgwjhwcskz9i6ikiisq2yhv2s5yda8"))))
     (propagated-inputs
-     (propagated-inputs-with-sdl2 sdl-image))))
+     (propagated-inputs-with-sdl2 sdl-image))
+    (properties '((upstream-name . "SDL2_image")))))
 
 (define-public sdl2-mixer
   (package (inherit sdl-mixer)
     (name "sdl2-mixer")
-    (version "2.0.4")
+    (version "2.6.2")
     (source
      (origin
        (method url-fetch)
@@ -496,32 +497,37 @@ directory.")
                    (delete-file-recursively "external")
                    #t))
        (sha256
-        (base32 "0694vsz5bjkcdgfdra6x9fq8vpzrl8m6q96gh58df7065hw5mkxl"))))
+        (base32 "0wd35a9fcj1bv534k9cr4jdk076dpiqq0ayk6cybmv3d6q8aiplc"))))
     (arguments
-      (substitute-keyword-arguments (package-arguments sdl-mixer)
-         ((#:configure-flags flags)
-          `(cons*
-            "--disable-music-opus-shared"
-            ;; These options were renamed in SDL2 mixer. Keeping the inherited
-            ;; variants produces a harmless warning.
-            "--disable-music-mod-modplug-shared"
-            "--disable-music-midi-fluidsynth-shared"
-            ,flags))))
-    (inputs
-     (modify-inputs (package-inputs sdl-mixer)
-       (delete "libmikmod")
-       (prepend opusfile
-                ;; The default MOD library changed in SDL2 mixer.
-                libmodplug)))
+     (list #:tests? #f                     ;no tests
+           #:configure-flags
+           #~'(;; Prefer system libraries to bundled codecs.
+               "--enable-music-flac-libflac"
+               "--enable-music-midi-fluidsynth"
+               "--enable-music-mod-modplug"
+               "--enable-music-mp3-mpg123"
+               "--enable-music-ogg-vorbis"
+               "--enable-music-opus"
+               ;; Link the libraries instead of dlopening them.
+               "--enable-music-flac-libflac-shared=no"
+               "--enable-music-midi-fluidsynth-shared=no"
+               "--enable-music-mod-modplug-shared=no"
+               "--enable-music-mp3-mpg123-shared=no"
+               "--enable-music-ogg-vorbis-shared=no"
+               "--enable-music-opus-shared=no")))
     (native-inputs
-     `(("pkgconfig" ,pkg-config))) ; Needed to find the opus library.
+     (list pkg-config))
+    (inputs '())
     (propagated-inputs
-     (propagated-inputs-with-sdl2 sdl-mixer))))
+     (modify-inputs (propagated-inputs-with-sdl2 sdl-mixer)
+       ;; In Requires.private of SDL2_mixer.pc.
+       (append flac fluidsynth libmodplug libvorbis mpg123 opusfile)))
+    (properties '((upstream-name . "SDL2_mixer")))))
 
 (define-public sdl2-net
   (package (inherit sdl-net)
     (name "sdl2-net")
-    (version "2.0.1")
+    (version "2.2.0")
     (source
      (origin
        (method url-fetch)
@@ -530,29 +536,35 @@ directory.")
                        "SDL2_net-" version ".tar.gz"))
        (sha256
         (base32
-         "08cxc1bicmyk89kiks7izw1rlx5ng5n6xpy8fy0zxni3b9z8mkhm"))))
+         "1svzhpf7k48jfga8ph127l99lwpgs5g5isgl9ybp2qiii0cqjjjf"))))
     (propagated-inputs
-     (propagated-inputs-with-sdl2 sdl-net))))
+     (propagated-inputs-with-sdl2 sdl-net))
+    (properties '((upstream-name . "SDL2_net")))))
 
 (define-public sdl2-ttf
   (package (inherit sdl-ttf)
     (name "sdl2-ttf")
-    (version "2.0.15")
+    (version "2.20.1")
     (source (origin
              (method url-fetch)
              (uri
               (string-append "https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-"
                              version ".tar.gz"))
              (modules '((guix build utils)))
-             (snippet (begin
-                        ;; Remove bundled libraries.
-                        '(delete-file-recursively "external")
-                        #t))
+             (snippet
+              ;; Remove bundled libraries.
+              '(delete-file-recursively "external"))
              (sha256
               (base32
-               "0cyd48dipc0m399qy8s03lci8b0bpiy8xlkvrm2ia7wcv0dfpv59"))))
+               "0mqcgpcvzp927xv1gs51f2wqly9k9f8nxfxi69lxlfncyd8svkbq"))))
+    (arguments
+     (list #:configure-flags #~'("--enable-freetype-builtin=no"
+                                 "--enable-harfbuzz-builtin=no")))
     (propagated-inputs
-     (propagated-inputs-with-sdl2 sdl-ttf))))
+     (modify-inputs (propagated-inputs-with-sdl2 sdl-ttf)
+       ;; In Requires.private of SDL2_ttf.pc.
+       (prepend harfbuzz freetype)))
+    (properties '((upstream-name . "SDL2_ttf")))))
 
 (define-public guile-sdl
   (package
diff --git a/gnu/packages/search.scm b/gnu/packages/search.scm
index fe69fd3775..c8c3ff45d0 100644
--- a/gnu/packages/search.scm
+++ b/gnu/packages/search.scm
@@ -675,14 +675,14 @@ bibliographic data and simple document and bibtex retrieval.")
 (define-public ugrep
   (package
     (name "ugrep")
-    (version "3.9.6")
+    (version "3.11.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/Genivia/ugrep")
                     (commit (string-append "v" version))))
               (sha256
-               (base32 "1nlxmrw0w21iwcbnir04bccb3z8hj9i4hj6gd2bk0qhdbrk2adh7"))
+               (base32 "1sibd44ky7xqfmrfvi09h5ignn7i3v1fjxnfvybp3cjfm08yxacy"))
               (file-name (git-file-name name version))
               (modules '((guix build utils)))
               (snippet
diff --git a/gnu/packages/security-token.scm b/gnu/packages/security-token.scm
index 9fe4242268..0dad9ec42b 100644
--- a/gnu/packages/security-token.scm
+++ b/gnu/packages/security-token.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
 ;;; Copyright © 2022 Petr Hodina <phodina@protonmail.com>
 ;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
+;;; Copyright © 2023 Jake Leporte <jakeleporte@outlook.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -48,6 +49,7 @@
   #:use-module (guix build-system python)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
@@ -255,6 +257,62 @@ from a client application and provide access to the desired reader.")
                    license:isc                  ; src/strlcat.c src/strlcpy.c
                    license:gpl3+))))            ; src/spy/*
 
+(define-public pcsc-tools
+  (package
+    (name "pcsc-tools")
+    (version "1.6.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://salsa.debian.org/rousseau/pcsc-tools.git/")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "16kvw8y5289fp6y3z8l5w61gfrk872kd500a27sgr5k5dpr9vfbk"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'patch-data-paths
+                 (lambda _
+                   (substitute* "ATR_analysis"
+                     (((string-append
+                        "\"/usr/local/pcsc/smartcard_list.txt\", "
+                        "\"/usr/share/pcsc/smartcard_list.txt\", "
+                        "\"/usr/local/share/pcsc/smartcard_list.txt\""))
+                      (string-append "\"" #$output
+                                     "/share/pcsc/smartcard_list.txt\"")))
+                   (substitute* "ATR_analysis.1p"
+                     (("^(\\.IR \\./) ,\n$" _ cwd)
+                      (string-append cwd "\n"))
+                     (("^\\.I /usr/local/pcsc/\n$")
+                      "")
+                     (("/usr/share/pcsc/\n$")
+                      (string-append #$output "/share/pcsc/\n")))))
+               (add-after 'patch-shebangs 'wrap-programs
+                 (lambda _
+                   (for-each
+                    (lambda (prog)
+                      (wrap-program (string-append #$output "/bin/" prog)
+                        `("PERL5LIB" = (,(getenv "PERL5LIB")))))
+                    '("ATR_analysis" "gscriptor" "scriptor"))
+                   (wrap-program (string-append #$output "/bin/gscriptor")
+                     `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))))))
+    (native-inputs (list autoconf automake libtool gnu-gettext pkg-config))
+    (inputs (list bash-minimal          ;for wrap-program
+                  perl
+                  perl-gtk3
+                  pcsc-lite
+                  perl-pcsc))
+    (synopsis "Smart cards and PC/SC tools")
+    (description "This package provides the @command{pcsc_scan},
+@command{ATR_analysis}, @command{scriptor}, and @command{gscriptor} commands,
+which are useful tools to test a PC/SC driver, card or reader or send commands
+in a friendly environment (text or graphical user interface).")
+    (home-page "https://pcsc-tools.apdu.fr/")
+    (license license:gpl2+)))
+
 (define-public ykclient
   (package
     (name "ykclient")
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index 26cbbe67dd..a2a4b70bce 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -20,6 +20,7 @@
 ;;; Copyright © 2021, 2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2021, 2022 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2022 Andrew Tropin <andrew@trop.in>
+;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -398,7 +399,10 @@ written by Paul Haahr and Byron Rakitzis.")
               (patch-flags '("-p0"))))
     (build-system gnu-build-system)
     (native-inputs
-     (list autoconf perl))
+     (append (if (target-riscv64?)
+                 (list config)
+                 '())
+             (list autoconf perl)))
     (inputs
      (list ncurses))
     (arguments
@@ -846,7 +850,7 @@ Shell (pdksh).")
 (define-public oil
   (package
     (name "oil")
-    (version "0.12.9")
+    (version "0.14.2")
     (source
      ;; oil's sources contain a modified version of CPython 2.7.13.
      ;; According to https://www.oilshell.org/blog/2017/05/05.html
@@ -859,7 +863,7 @@ Shell (pdksh).")
        (uri (string-append "https://www.oilshell.org/download/oil-"
                            version ".tar.gz"))
        (sha256
-        (base32 "047gjar5lkbms4gdp3063njnqc6fl6p0dcx8bbpi1cdn1956yh1s"))))
+        (base32 "0qsfkav6a70nvp27ilab7zilmihw4ygga48a0dkxa14q9giwlgwr"))))
     (build-system gnu-build-system)
     (arguments
      (list #:strip-binaries? #f         ; strip breaks the binary
diff --git a/gnu/packages/shellutils.scm b/gnu/packages/shellutils.scm
index 64cc818d65..20d246be52 100644
--- a/gnu/packages/shellutils.scm
+++ b/gnu/packages/shellutils.scm
@@ -15,6 +15,7 @@
 ;;; 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>
+;;; Copyright © 2023 Timo Wilken <guix@twilken.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -102,7 +103,7 @@ chart.")
 (define-public boxes
   (package
     (name "boxes")
-    (version "2.1.1")
+    (version "2.2.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -111,7 +112,7 @@ chart.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1bf5rnfiw04ffs1l17zhbg4wvq2vfn2qbz1xmd250xqj15lysw88"))))
+                "0vv2gaav1m4z2xdk0k3ragmv4kcnzv7p3v97lkjl1wbfmk5nhz07"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -221,6 +222,60 @@ in Zsh intelligently.")
 as you type.")
     (license license:expat)))
 
+(define-public zsh-completions
+  (package
+    (name "zsh-completions")
+    (version "0.34.0")
+    (home-page "https://github.com/zsh-users/zsh-completions")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0jjgvzj3v31yibjmq50s80s3sqi4d91yin45pvn3fpnihcrinam9"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan '(("src/" "share/zsh/site-functions/")
+                        ("README.md" "share/doc/zsh-completions/"))))
+    (synopsis "Additional completion definitions for Zsh")
+    (description
+     "This projects aims at gathering/developing new completion scripts that
+are not available in Zsh yet.  The scripts may be contributed to the Zsh
+project when stable enough.")
+    (license (license:non-copyleft "file://LICENSE"
+              "Custom BSD-like, permissive, non-copyleft license."))))
+
+(define-public zsh-history-substring-search
+  (package
+    (name "zsh-history-substring-search")
+    (version "1.0.2")
+    (home-page "https://github.com/zsh-users/zsh-history-substring-search")
+    (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
+                "0y8va5kc2ram38hbk2cibkk64ffrabfv1sh4xm7pjspsba9n5p1y"))))
+    (build-system copy-build-system)
+    (arguments
+     '(#:install-plan '(("zsh-history-substring-search.plugin.zsh"
+                         "share/zsh/plugins/zsh-history-substring-search/")
+                        ("zsh-history-substring-search.zsh"
+                         "share/zsh/plugins/zsh-history-substring-search/")
+                        ("README.md" "share/doc/zsh-history-substring-search/"))))
+    (synopsis "ZSH port of Fish history search (up arrow)")
+    (description
+     "This is a clean-room implementation of the Fish shell's history search
+feature, where you can type in any part of any command from history and then
+press chosen keys, such as the UP and DOWN arrows, to cycle through matches.")
+    (license license:bsd-3)))
+
 (define-public zsh-syntax-highlighting
   (package
     (name "zsh-syntax-highlighting")
diff --git a/gnu/packages/skarnet.scm b/gnu/packages/skarnet.scm
index 5b70a1e042..2c7b0f9c23 100644
--- a/gnu/packages/skarnet.scm
+++ b/gnu/packages/skarnet.scm
@@ -30,14 +30,14 @@
 (define-public skalibs
   (package
     (name "skalibs")
-    (version "2.12.0.1")
+    (version "2.13.1.1")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "https://skarnet.org/software/skalibs/skalibs-"
                           version ".tar.gz"))
       (sha256
-       (base32 "1182ldnz5dj266gqhzkygd17jdvd3n46c2jfdizw324dy5r8y8iy"))))
+       (base32 "0cwy37cc92409dsmj8c8whpnnqd9g375myxlp52aqzwzg6ms2wmj"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f                      ; no tests exist
@@ -61,14 +61,14 @@ and file system operations.  It is used by all skarnet.org software.")
 (define-public execline
   (package
     (name "execline")
-    (version "2.9.0.1")
+    (version "2.9.3.0")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "https://skarnet.org/software/execline/execline-"
                           version ".tar.gz"))
       (sha256
-       (base32 "1xiijn3r2rqji2pwhm9v0frkk7pv9m3ylmdajhmcmyqgz350y9h1"))))
+       (base32 "1393xka069n3rvc3dlg6c3ckzl1qgqkhvhlcxv6igl9216kpy0n8"))))
     (build-system gnu-build-system)
     (inputs (list skalibs))
     (arguments
@@ -103,14 +103,14 @@ complexity.")))
 (define-public s6
   (package
    (name "s6")
-   (version "2.11.1.2")
+   (version "2.11.3.2")
    (source
     (origin
      (method url-fetch)
      (uri (string-append "https://skarnet.org/software/s6/s6-"
                          version ".tar.gz"))
      (sha256
-      (base32 "18h38piz117ilx7ch9f7hl6bxm2w06z7lc7f5hwsr7c87sz7853c"))))
+      (base32 "0x6zjc3126fjhj8accyxgrw7r7ysrb7d13dfs87bxzzhsa5165kw"))))
    (build-system gnu-build-system)
    (inputs (list skalibs execline))
    (arguments
@@ -147,14 +147,14 @@ functionality with a very small amount of code.")))
 (define-public s6-dns
   (package
    (name "s6-dns")
-   (version "2.3.5.4")
+   (version "2.3.5.5")
    (source
     (origin
      (method url-fetch)
      (uri (string-append "https://skarnet.org/software/s6-dns/s6-dns-"
                          version ".tar.gz"))
      (sha256
-      (base32 "0hyvyi8qwgs6529hafl3yvkb3qaw4mad76n5rn1lyxf4f8j25bvn"))))
+      (base32 "1s0yzrzpjgbf1d0s4qxq5g2sgcm6skq3sphbm1qq1hr5a5frp5sn"))))
     (build-system gnu-build-system)
     (inputs (list skalibs))
     (arguments
@@ -176,14 +176,14 @@ as an alternative to the BIND, djbdns or other DNS clients.")))
 (define-public s6-networking
   (package
    (name "s6-networking")
-   (version "2.5.1.1")
+   (version "2.5.1.3")
    (source
     (origin
      (method url-fetch)
      (uri (string-append "https://skarnet.org/software/s6-networking/"
                          "s6-networking-" version ".tar.gz"))
      (sha256
-      (base32 "0624ls5d9iwx9nc05m99fbxd0jp0qjbp9as4whr3bhfrwd6rvivs"))))
+      (base32 "0xz98pzgx6kc9v1dka04gzw5f3rwww42c07liym0r7pzb74l77m0"))))
     (build-system gnu-build-system)
     (inputs (list skalibs execline s6 s6-dns))
     (arguments
@@ -216,14 +216,14 @@ clock synchronization.")))
 (define-public s6-rc
   (package
    (name "s6-rc")
-   (version "0.5.3.2")
+   (version "0.5.4.1")
    (source
     (origin
      (method url-fetch)
      (uri (string-append "https://skarnet.org/software/s6-rc/s6-rc-"
                          version ".tar.gz"))
      (sha256
-      (base32 "0f70sswqcmihynks3cs6kk97nywcp2lzr2hspp9578sadaba892g"))))
+      (base32 "1xjqc6vqqny8g47whgibjlas7f6szka372jrz5f308slgjmqq9np"))))
     (build-system gnu-build-system)
     (inputs (list skalibs execline s6))
     (arguments
@@ -255,7 +255,7 @@ environment.")))
 (define-public s6-portable-utils
   (package
    (name "s6-portable-utils")
-   (version "2.2.5.0")
+   (version "2.3.0.2")
    (source
     (origin
      (method url-fetch)
@@ -263,7 +263,7 @@ environment.")))
            "https://skarnet.org/software/s6-portable-utils/s6-portable-utils-"
            version ".tar.gz"))
      (sha256
-      (base32 "0dkfj6ymi5pxs981hh84kwg2ph2dv6xn2bim65fz4dpx6j4rzczb"))))
+      (base32 "1s6iqjz2mfq3rakqj3cwidjsbpkjcdjfah60m86na4ph6j8jc547"))))
     (build-system gnu-build-system)
     (inputs (list skalibs))
     (arguments
@@ -287,7 +287,7 @@ systems and other constrained environments, but they work everywhere.")))
 (define-public s6-linux-init
   (package
    (name "s6-linux-init")
-   (version "1.0.8.0")
+   (version "1.1.1.0")
    (source
     (origin
      (method url-fetch)
@@ -295,7 +295,7 @@ systems and other constrained environments, but they work everywhere.")))
            "https://skarnet.org/software/s6-linux-init/s6-linux-init-"
            version ".tar.gz"))
      (sha256
-      (base32 "1iixih6iwd618qqy06w2cig7rvlj4cn4m5mdcr060rngciwml1cj"))))
+      (base32 "1vm8aqlh8jkqrm3irhf53vvylxqizpqvjg3yb9z00yb568skyj5d"))))
     (build-system gnu-build-system)
     (inputs
      (list execline s6 skalibs))
@@ -331,7 +331,7 @@ all the details.")))
 (define-public s6-linux-utils
   (package
    (name "s6-linux-utils")
-   (version "2.6.0.0")
+   (version "2.6.1.2")
    (source
     (origin
      (method url-fetch)
@@ -339,7 +339,7 @@ all the details.")))
            "https://skarnet.org/software/s6-linux-utils/s6-linux-utils-"
            version ".tar.gz"))
      (sha256
-      (base32 "0ngd8ckak2xg6c63q0m8cvbrfnhpkx30r4g65q08g0hc99rk4wbc"))))
+      (base32 "1ncwkm5cpc0y6iysc5q64mk0pfvxnn7ihia1a137xrrdg1fxqqyq"))))
     (build-system gnu-build-system)
     (inputs (list skalibs))
     (arguments
diff --git a/gnu/packages/sphinx.scm b/gnu/packages/sphinx.scm
index 160ca8a04d..203a4172dc 100644
--- a/gnu/packages/sphinx.scm
+++ b/gnu/packages/sphinx.scm
@@ -804,18 +804,27 @@ scientific documentation.")
 (define-public python-breathe
   (package
     (name "python-breathe")
-    (version "4.34.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "breathe" version))
-       (sha256
-        (base32
-         "18fvphs1cb2cns9q82195fx7lmlwfikzwa10cczavpaax2jnh1xc"))))
+    (version "4.35.0")
+    (source (origin
+              (method git-fetch) ;git repo has tests
+              (uri (git-reference
+                    (url "https://github.com/breathe-doc/breathe")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1hlcrhr533yjkz9ds83xnmn8h6z3r6vfzz7qrpy14n9j4ysyz59c"))))
     (build-system python-build-system)
-    (propagated-inputs
-     (list python-docutils python-sphinx))
-    (home-page "https://github.com/michaeljones/breathe")
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (replace 'check
+                          (lambda* (#:key tests? #:allow-other-keys)
+                            (when tests?
+                              (with-directory-excursion "tests"
+                                (invoke "python" "-m" "pytest" "-v"))))))))
+    (native-inputs (list python-pytest))
+    (propagated-inputs (list python-docutils python-sphinx))
+    (home-page "https://www.breathe-doc.org")
     (synopsis "ReStructuredText and Sphinx bridge to Doxygen")
     (description "This package is an extension to reStructuredText and Sphinx
 to be able to read and render the Doxygen xml output.")
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index 6b4fd47c0c..4b107834aa 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -198,7 +198,7 @@ a server that supports the SSH-2 protocol.")
 (define-public openssh
   (package
    (name "openssh")
-   (version "9.2p1")
+   (version "9.3p1")
    (source (origin
              (method url-fetch)
              (uri (string-append "mirror://openbsd/OpenSSH/portable/"
@@ -207,7 +207,7 @@ a server that supports the SSH-2 protocol.")
                                       "openssh-trust-guix-store-directory.patch"))
              (sha256
               (base32
-               "0ingf6fxzg2fcf6k68bvh0lc460jn0macvf5w585zd2zcpqxnriz"))))
+               "1a7qia3c255igny5kf00m5zxkp69lf1w6qjsv3rm2sm705vvmfp9"))))
    (build-system gnu-build-system)
    (native-inputs (list groff pkg-config))
    (inputs `(("libedit" ,libedit)
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index 3588cb459a..9acc16e359 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
 ;;; Copyright © 2021 Frank Pursel <frank.pursel@gmail.com>
 ;;; Copyright © 2022 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2023 gemmaro <gemmaro.dev@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -48,6 +49,7 @@
   #:use-module (guix build-system pyproject)
   #:use-module (guix build-system python)
   #:use-module (guix build-system trivial)
+  #:use-module (guix build-system ruby)
   #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
@@ -82,6 +84,7 @@
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
+  #:use-module (gnu packages ruby)
   #:use-module (gnu packages shells)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages ssh)
@@ -636,13 +639,13 @@ estimation) corresponding to the book: Wand, M.P. and Jones, M.C. (1995)
 (define-public r-lattice
   (package
     (name "r-lattice")
-    (version "0.20-45")
+    (version "0.21-8")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "lattice" version))
               (sha256
                (base32
-                "1b87fmyjzbg854vpi03my1p25n3d0bchhwsdm2frblxppn98sf12"))))
+                "0af3c0mk0s3gnpmg7xmd4hjjynwv4ym3iv4grjvcmrk28abxdlwa"))))
     (build-system r-build-system)
     (home-page "https://lattice.r-forge.r-project.org/")
     (synopsis "High-level data visualization system")
@@ -656,14 +659,14 @@ also flexible enough to handle most nonstandard requirements.")
 (define-public r-matrix
   (package
     (name "r-matrix")
-    (version "1.5-3")
+    (version "1.5-4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Matrix" version))
        (sha256
         (base32
-         "03g0zqkbaa1k52i0d0yyn7vclmg93hdqaid48sbc1ccpvi70ywjf"))))
+         "01kgnsx3m19varjfn7n0g48ml6yrwr3bnjhhd0h486ynjccvdkhm"))))
     (properties `((upstream-name . "Matrix")))
     (build-system r-build-system)
     (propagated-inputs
@@ -1235,13 +1238,13 @@ using just two functions: melt and dcast (or acast).")
 (define-public r-ggplot2
   (package
     (name "r-ggplot2")
-    (version "3.4.1")
+    (version "3.4.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggplot2" version))
        (sha256
-        (base32 "113d5khg0lswrbwasavl2l5jgpcd3h519mcb5iq2cq0dz4rw66q4"))))
+        (base32 "1jl3a9z668zjb2p2c01rxpgmjs5gc9gkxn8xqi7q8vrc1akhl8vh"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-cli
@@ -1299,14 +1302,14 @@ agnes cluster diagrams.")
 (define-public r-gdtools
   (package
     (name "r-gdtools")
-    (version "0.3.2")
+    (version "0.3.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gdtools" version))
        (sha256
         (base32
-         "0dji1iyf6x9vg6gjklzkb3x9vfydfi95idkvckj6208b1rwgwsj4"))))
+         "10rlx1ciyvh0ayic03kckv360idl9s1zyc2ar5lisns786c1hnns"))))
     (build-system r-build-system)
     (native-inputs
      (list pkg-config))
@@ -1317,7 +1320,6 @@ agnes cluster diagrams.")
            r-fontquiver
            r-gfonts
            r-htmltools
-           r-memoise
            r-rcpp
            r-systemfonts))
     (home-page "https://cran.r-project.org/web/packages/gdtools")
@@ -1787,14 +1789,14 @@ like tidy evaluation.")
 (define-public r-tibble
   (package
     (name "r-tibble")
-    (version "3.2.0")
+    (version "3.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tibble" version))
        (sha256
         (base32
-         "12i9cshnj2lygadh03zjw1zn5dr13wspcrq2dprl5qrrr95z2bwg"))))
+         "0c916wl19wbhncv05hjzs2vmvvbcxlswjl6i232ygmkzal62v9v5"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-fansi
@@ -1816,13 +1818,13 @@ and printing capabilities than traditional data frames.")
 (define-public r-dplyr
   (package
     (name "r-dplyr")
-    (version "1.1.0")
+    (version "1.1.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "dplyr" version))
               (sha256
                (base32
-                "1msfp29lbddwdv8ibc2nkan0g1g4y4w5fws6802v6h6x95g57c4c"))))
+                "1xxvspk1nyns39dp2fqvxbvvnkkz4rcgmhrcrznr3h1qpayj9p6z"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-cli
@@ -1853,14 +1855,14 @@ database.")
 (define-public r-dbplyr
   (package
     (name "r-dbplyr")
-    (version "2.3.1")
+    (version "2.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "dbplyr" version))
        (sha256
         (base32
-         "0a5cnh0fr81mak9ccqr91nsjqlxsnf6a2lmwrsgv7g1sjag0b4p1"))))
+         "1b3zf2ai4kp96wd6i4jg9b3n37bwbw7lfvxvs1i1kcn6brch1p0d"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-blob
@@ -2649,17 +2651,17 @@ were originally a part of the r-devtools package.")
 (define-public r-hms
   (package
     (name "r-hms")
-    (version "1.1.2")
+    (version "1.1.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "hms" version))
        (sha256
         (base32
-         "1vdx08irnh8q5232hriv47hh88hc55nbbrff7y6zbainff2akrhy"))))
+         "10h2k5j97fggq3hc0qzxv1q9821y21m326v3x99zsvpl1b3g89p6"))))
     (build-system r-build-system)
     (propagated-inputs
-     (list r-ellipsis r-lifecycle r-pkgconfig r-rlang r-vctrs))
+     (list r-lifecycle r-pkgconfig r-rlang r-vctrs))
     (home-page "https://github.com/rstats-db/hms")
     (synopsis "Pretty time of day")
     (description
@@ -2765,13 +2767,13 @@ well as additional utilities such as panel and axis annotation functions.")
 (define-public r-rcpparmadillo
   (package
     (name "r-rcpparmadillo")
-    (version "0.12.0.1.0")
+    (version "0.12.2.0.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "RcppArmadillo" version))
               (sha256
                (base32
-                "1spvsfzkzfw4l0igj2cx9ba3l2hwzqj180vndn4imdy0g4xibikk"))))
+                "1dvq5ng39ypz8vhqfzjnqhibvryshnxdfcsfy2jjyn0j7x0yi74g"))))
     (properties `((upstream-name . "RcppArmadillo")))
     (build-system r-build-system)
     (propagated-inputs
@@ -2857,18 +2859,19 @@ certain criterion, e.g., it contains a certain regular file.")
 (define-public r-rmarkdown
   (package
     (name "r-rmarkdown")
-    (version "2.20")
+    (version "2.21")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "rmarkdown" version))
         (sha256
-          (base32 "178mc3dqm11y58k8jdhm1yi11bbl1h7bls9d8f94ngmlzjdhbxyp"))))
+          (base32 "0a5czn18clfnw0a9nd5v98ah4h47i32423s6jdf126ni4aj20ny2"))))
     (properties `((upstream-name . "rmarkdown")))
     (build-system r-build-system)
     (propagated-inputs
      (list r-bslib
            r-evaluate
+           r-fontawesome
            r-htmltools
            r-jquerylib
            r-jsonlite
@@ -2890,13 +2893,13 @@ variety of formats.")
 (define-public r-gtable
   (package
     (name "r-gtable")
-    (version "0.3.2")
+    (version "0.3.3")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "gtable" version))
               (sha256
                (base32
-                "1j162vkyvkyyz61smw36crgmd76jic17n9qfmn0cyvafzdyqyiwd"))))
+                "0fkv19h64cyxsadplvyzbpjliy9wlfg56hc8znvqg972g3cmi6ig"))))
     (properties `((upstream-name . "gtable")))
     (build-system r-build-system)
     (propagated-inputs
@@ -2979,13 +2982,13 @@ a column in data frame.")
 (define-public r-rsqlite
   (package
     (name "r-rsqlite")
-    (version "2.3.0")
+    (version "2.3.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "RSQLite" version))
               (sha256
                (base32
-                "0csx2zz4zlr11nrzcas1lzhzjb4ygv6nijg2jpkp5l4fs2hijbj4"))))
+                "1jil3wgfh1asfb9c4cr9qyr74wb9f87r7sa03kj187201hb3xlly"))))
     (properties `((upstream-name . "RSQLite")))
     (build-system r-build-system)
     (propagated-inputs
@@ -3009,13 +3012,13 @@ engine (version 3.8.8.2) is included.")
 (define-public r-rcurl
   (package
     (name "r-rcurl")
-    (version "1.98-1.10")
+    (version "1.98-1.12")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "RCurl" version))
               (sha256
                (base32
-                "1m7i0q9scrh2bfr0nqs029052kznhlv3siz9055pzdvgig7jnqjs"))))
+                "1ci6lsxm0f13yzw712gcbq23syl54x5llvhs2w1b8wwm9vqgx0qs"))))
     (properties `((upstream-name . "RCurl")))
     (build-system r-build-system)
     (arguments
@@ -3032,7 +3035,7 @@ if (certs != \"\") { .opts = merge.list(.opts, list(cainfo=certs)) }
     (native-inputs
      (list libxml2))
     (inputs
-     (list curl zlib))
+     (list curl))
     (propagated-inputs
      (list r-bitops))
     (home-page "https://www.omegahat.net/RCurl")
@@ -3172,14 +3175,14 @@ statements.")
 (define-public r-segmented
   (package
     (name "r-segmented")
-    (version "1.6-2")
+    (version "1.6-3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "segmented" version))
        (sha256
         (base32
-         "0livckkhci3w1x9xai2m0a30fj06qsks2qds7y5jr9vwx03jqg21"))))
+         "0x7k5ycbvnfqsygrcyaaxnl0060x6869b345xc697hhr9sfxb4ai"))))
     (build-system r-build-system)
     (propagated-inputs (list r-mass r-nlme))
     (home-page "https://cran.r-project.org/web/packages/segmented")
@@ -3801,13 +3804,13 @@ analysis of large sparse or dense matrices.")
 (define-public r-glmnet
   (package
    (name "r-glmnet")
-   (version "4.1-6")
+   (version "4.1-7")
    (source
     (origin
      (method url-fetch)
      (uri (cran-uri "glmnet" version))
      (sha256
-      (base32 "0c3y9g3k0f0yclcffxzgfhfylb3py0iydhyspcjdrl44lb7cdi5y"))))
+      (base32 "1a7af2658z9fmx0rcdx401lj86q73qkvsvlfnrp2bw4xv43bd85k"))))
    (build-system r-build-system)
    (native-inputs
     (list gfortran r-knitr))
@@ -4307,14 +4310,14 @@ and tidyr provides no margins or aggregation.")
 (define-public r-hexbin
   (package
     (name "r-hexbin")
-    (version "1.28.2")
+    (version "1.28.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "hexbin" version))
        (sha256
         (base32
-         "0bbhs5pwxh474w62sq6gqvih7habancxng9wd4f2rgn6lv9zhhb2"))))
+         "0pyy97bh9xf9hijg3iw1z4ri01571r1fx7xqm3fjkzx4q48kbcqf"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-lattice))
@@ -5392,14 +5395,14 @@ can be efficiently implemented directly in the R language.")
 (define-public r-robustbase
   (package
     (name "r-robustbase")
-    (version "0.95-0")
+    (version "0.95-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "robustbase" version))
        (sha256
         (base32
-         "094pxwp78bmqyn6vncyzrazqxnn8abqsbzhlcq44avfz8qffmyjw"))))
+         "1sm37gqs35cvkacigsla8kzvpzjzsrgkabf58ymk9pzcndnx4b46"))))
     (build-system r-build-system)
     (native-inputs
      (list gfortran))
@@ -5840,13 +5843,13 @@ Companion to Applied Regression, Third Edition, Sage.")
 (define-public r-car
   (package
     (name "r-car")
-    (version "3.1-1")
+    (version "3.1-2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "car" version))
        (sha256
-        (base32 "1g6jdcxl2aig6zirdn3k5l48sjmpljzy1aadnlr6mr6pxqamiicg"))))
+        (base32 "1j3l8r3j05769gdfrqz0n38xviq6pww1cjrgdd0fkj3sjy8k89l9"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-abind
@@ -5964,17 +5967,18 @@ first and second order derivatives.")
 (define-public r-sn
   (package
     (name "r-sn")
-    (version "2.1.0")
+    (version "2.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sn" version))
        (sha256
         (base32
-         "12s4g9rfrnijdil7bqw66ikj5k3w6bdnz6fsgqsp0bkfsap9nps9"))))
+         "1g92vwbg0kqnqpsgianid2r91334p5shi39hr26v2z6wj5nvbxpr"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-mnormt r-numderiv r-quantreg))
+    (native-inputs (list r-r-rsp))
     (home-page "http://azzalini.stat.unipd.it/SN")
     (synopsis "The skew-normal and skew-t distributions")
     (description
@@ -5988,14 +5992,14 @@ multivariate case.")
 (define-public r-tclust
   (package
     (name "r-tclust")
-    (version "1.5-2")
+    (version "1.5-4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tclust" version))
        (sha256
         (base32
-         "12vg9q35srddjidrn3q955xybn6ldraya35s4955ypj61arp89j9"))))
+         "1a3i6kvfzc2d6rdf75w03n5172jihhqa8mvzcb4m8l0w6mgdlm9b"))))
     (build-system r-build-system)
     ;; These are all suggested packages, not build dependencies.
     (propagated-inputs
@@ -6011,14 +6015,14 @@ diagnostic tools (@code{ctlcurves} and @code{DiscrFact}).")
 (define-public r-ranger
   (package
     (name "r-ranger")
-    (version "0.14.1")
+    (version "0.15.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ranger" version))
        (sha256
         (base32
-         "06zf5mi6yfgb68m6m83k01r4ikj5nldrvrbh3jqwz8axalfl16ax"))))
+         "0bibv9xf6w8k8nsc13f2yd4kx99aq0i758h3wfh089szgkpdjrad"))))
     (build-system r-build-system)
     (propagated-inputs
      (list r-rcpp r-matrix r-rcppeigen))
@@ -7356,16 +7360,16 @@ Neyman, 1936; cf.  Spiller et al., 2012), etc.")
 (define-public r-mumin
   (package
     (name "r-mumin")
-    (version "1.47.1")
+    (version "1.47.5")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "MuMIn" version))
               (sha256
                (base32
-                "1xhsc9hmx2b3zqyvpjs64rs90ccrfcsglrq2mhh85mgplsnva8qj"))))
+                "0xqasb79lmdhff25zalzrpjwv6qs9qnxr54ypnqjjgshi96mbwvg"))))
     (properties `((upstream-name . "MuMIn")))
     (build-system r-build-system)
-    (propagated-inputs (list r-matrix r-nlme))
+    (propagated-inputs (list r-insight r-matrix r-nlme))
     (home-page "https://cran.r-project.org/package=MuMIn")
     (synopsis "Multi-Model Inference")
     (description
@@ -7375,3 +7379,40 @@ model inclusion.  Model parameter and prediction averaging based on model
 weights derived from information criteria (AICc and alike) or custom model
 weighting schemes.")
     (license license:gpl2)))
+
+(define-public ruby-enumerable-statistics
+  (package
+    (name "ruby-enumerable-statistics")
+    (version "2.0.7")
+    ;; Source at RubyGems.org doesn't have tests.
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mrkn/enumerable-statistics.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1a8k2dvm1v0g6hcrbnzy0f7d63hdmpmldfdkl8wr32nbl05xnifa"))
+              (modules '((guix build utils)))
+              (snippet `(begin
+                          (substitute* "enumerable-statistics.gemspec"
+                            ;; benchmark-driver gem is used for
+                            ;; performance benchmarking, and isn't
+                            ;; needed for tests.
+                            (("spec.add_development_dependency \"benchmark-driver\"\n")
+                             ""))))))
+    (build-system ruby-build-system)
+    (native-inputs (list bundler
+                         ruby-rake
+                         ruby-rake-compiler
+                         ruby-rspec
+                         ruby-test-unit
+                         ruby-fuubar
+                         ruby-yard))
+    (synopsis "Library which provides statistics features for Enumerable")
+    (description
+     "@code{Enumerable::Statistics} provides some methods to calculate
+statistical summary in arrays and enumerables.")
+    (home-page "https://github.com/mrkn/enumerable-statistics")
+    (license license:expat)))
diff --git a/gnu/packages/sync.scm b/gnu/packages/sync.scm
index b0d8b4274e..75cd67fd2d 100644
--- a/gnu/packages/sync.scm
+++ b/gnu/packages/sync.scm
@@ -408,7 +408,7 @@ silently and reliably flow across to every other.")
      (list pkg-config))
     (inputs
      (list bash-minimal
-           curl-minimal
+           curl
            ldc
            libnotify
            sqlite))
diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm
index 5f98cb56b0..c4204f32fe 100644
--- a/gnu/packages/syncthing.scm
+++ b/gnu/packages/syncthing.scm
@@ -46,7 +46,7 @@
 (define-public syncthing
   (package
     (name "syncthing")
-    (version "1.23.0")
+    (version "1.23.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/syncthing/syncthing"
@@ -54,7 +54,7 @@
                                   "/syncthing-source-v" version ".tar.gz"))
               (sha256
                (base32
-                "0n7438vppr8yrq8k4lsacjr48m1l0bfc2wv7rbrsc5br5bfx6rhg"))))
+                "1yi9adlp30myizlmv7a118cwrm6w1qfv09b0z7x1b7n4i8pqi8h6"))))
     (build-system go-build-system)
     ;; The primary Syncthing executable goes to "out", while the auxiliary
     ;; server programs and utility tools go to "utils".  This reduces the size
diff --git a/gnu/packages/syndication.scm b/gnu/packages/syndication.scm
index 6224f58efc..e11e6ae960 100644
--- a/gnu/packages/syndication.scm
+++ b/gnu/packages/syndication.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019-2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
@@ -223,14 +223,14 @@ cards.")
 (define-public newsboat
   (package
     (name "newsboat")
-    (version "2.29")
+    (version "2.30.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://newsboat.org/releases/" version
                            "/newsboat-" version ".tar.xz"))
        (sha256
-        (base32 "0szx4pivkaja8v399m6v7ycp1xprm4cz7n5z929g4j191hg81f8q"))))
+        (base32 "0bv0al3inay6jsggaz2zja4j9jp1ffn8bp4i4jr8wd1c9asgsgs1"))))
     (build-system cargo-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm
index a93709a469..7666176908 100644
--- a/gnu/packages/telephony.scm
+++ b/gnu/packages/telephony.scm
@@ -17,7 +17,7 @@
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020, 2022 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
-;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 LibreMiami <packaging-guix@libremiami.org>
 ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
@@ -732,7 +732,7 @@ your calls and messages.")
 (define-public pjproject
   (package
     (name "pjproject")
-    (version "2.12.1")
+    (version "2.13")
     (source
      (origin
        (method git-fetch)
@@ -742,7 +742,7 @@ your calls and messages.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0xrj4sznbaip22y9hclff6y81l285bzkkj1smzifskpk3kiwp00w"))
+         "0ld0adp9y2ydnz2ldwdzig3hpk4ayx1va6aqc3nja8zfdnd36fyb"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -823,7 +823,10 @@ your calls and messages.")
                  "#define INCLUDE_TCP_TEST 0\n")
                 ;; The TSX tests takes a very long time to run; skip them.
                 (("#define INCLUDE_TSX_GROUP.*")
-                 "#define INCLUDE_TSX_GROUP 0\n"))
+                 "#define INCLUDE_TSX_GROUP 0\n")
+                ;; The resolve test requires a working domain name resolver.
+                (("#define INCLUDE_RESOLVE_TEST.*")
+                 "#define INCLUDE_RESOLVE_TEST 0\n"))
               (substitute* "pjsip/src/test/dns_test.c"
                 ;; The round_robin_test fails non-deterministically (depending
                 ;; on load); skip it (see:
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index 7abf7f93da..e755b8d715 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2016 Thomas Danckaert <post@thomasdanckaert.be>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016-2023 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017, 2020-2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -24,6 +24,8 @@
 ;;; Copyright © 2022 Jack Hill <jackhill@jackhill.us>
 ;;; Copyright © 2022 Fabio Natali <me@fabionatali.com>
 ;;; Copyright © 2022 Philip McGrath <philip@philipmcgrath.com>
+;;; Copyright © 2023 Thomas Albers Raviola <thomas@thomaslabs.org>
+;;; Copyright © 2023 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -64,6 +66,8 @@
   #:use-module (gnu packages bash)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages cpp)
+  #:use-module (gnu packages digest)
   #:use-module (gnu packages lisp)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
@@ -746,6 +750,37 @@ the autogenerated files @file{language.dat} and @file{language.def} (and
 default versions of those), etc.")
     (license license:knuth)))
 
+(define-public texlive-dvipdfmx
+  (let ((template (simple-texlive-package
+                   "texlive-dvipdfmx"
+                   (list "doc/dvipdfm/"
+                         "doc/dvipdfmx/"
+                         "doc/man/man1/"
+                         "dvipdfmx/"
+                         "fonts/cmap/dvipdfmx/"
+                         "fonts/map/dvipdfmx/")
+                   (base32
+                    "04x93w777l9qzdzglwanb14k8cmq74kjcsgyanvp3bsmnn5zfrgz")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (source
+       (origin
+         (inherit (package-source template))
+         ;; This map file is supposed to be generated in a profile hook.
+         (snippet '(delete-file "fonts/map/dvipdfmx/updmap/kanjix.map"))))
+      (propagated-inputs (list texlive-glyphlist))
+      (home-page "https://www.tug.org/texlive/")
+      (synopsis "Extended version of dvipdfm")
+      (description
+       "Dvipdfmx (formerly dvipdfm-cjk) is a development of dvipdfm created to
+support multi-byte character encodings and large character sets for East Asian
+languages.  Dvipdfmx, if \"called\" with the name dvipdfm, operates in a
+\"dvipdfm compatibility\" mode, so that users of the both packages need only
+keep one executable.  A secondary design goal is to support as many \"PDF\"
+features as does pdfTeX.")
+      (license license:gpl3+))))
+
 (define-public texlive-dvips
   (package
     (inherit (simple-texlive-package
@@ -1629,6 +1664,60 @@ described in the TeXbook, together with various supporting files (some also
 discussed in the book).")
     (license license:knuth)))
 
+(define-public texlive-halloweenmath
+  (let ((template (simple-texlive-package
+                   "texlive-halloweenmath"
+                   (list "doc/latex/halloweenmath/"
+                         "source/latex/halloweenmath/"
+                         "tex/latex/halloweenmath/")
+                   (base32
+                    "1xq72k1p820b5q3haxf936g69p6gv34hr30870l96jnxa3ad7y05"))))
+    (package
+      (inherit template)
+      (outputs '("out" "doc"))
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t) "latex/halloweenmath")
+         ((#:build-targets _ '()) '(list "halloweenmath.ins"))
+         ((#:phases phases)
+          #~(modify-phases #$phases
+              (add-after 'unpack 'chdir
+                (lambda _ (chdir "source/latex/halloweenmath/")))
+              (add-after 'chdir 'non-interactive-build
+                ;; When it realizes it cannot employ the usedir directive, the
+                ;; build process stops and waits for an input before inserting
+                ;; generated files in the working directory.  Do not ask for
+                ;; an input.
+                (lambda _
+                  (substitute* "halloweenmath.ins"
+                    (("\\Ask.*") "")
+                    (("\\(your .*? will be ignored\\).*") ""))))
+              (replace 'copy-files
+                (lambda* (#:key inputs #:allow-other-keys)
+                  (let ((origin (assoc-ref inputs "source"))
+                        (source (string-append #$output
+                                               "/share/texmf-dist/source"))
+                        (doc (string-append #$output:doc
+                                            "/share/texmf-dist/doc")))
+                    (copy-recursively (string-append origin "/source") source)
+                    (copy-recursively (string-append origin "/doc") doc))))))))
+      (native-inputs
+       (list texlive-bin
+             texlive-kpathsea
+             (texlive-updmap.cfg)))     ;for psfonts.map
+      (propagated-inputs
+       (list texlive-amsmath texlive-pict2e))
+      (home-page "https://ctan.org/pkg/halloweenmath")
+      (synopsis "Scary and creepy math symbols with AMS-LaTeX integration")
+      (description
+       "The package defines a handful of commands for typesetting mathematical
+symbols of various kinds, ranging from large operators to extensible
+arrow-like relations and growing arrow-like math accents that all draw from
+the classic Halloween-related iconography (pumpkins, witches, ghosts, cats,
+and so on) while being, at the same time, seamlessly integrated within the
+rest of the mathematics produced by (AmS-)LaTeX.")
+      (license license:lppl1.3+))))
+
 (define-public texlive-hardwrap
   (package
     (inherit (simple-texlive-package
@@ -3248,6 +3337,22 @@ verbatim source).")
 
 (define-deprecated-package texlive-latex-fancyvrb texlive-fancyvrb)
 
+(define-public texlive-glyphlist
+  (package
+    (inherit (simple-texlive-package
+              "texlive-glyphlist"
+              (list "fonts/map/glyphlist/")
+              (base32
+               "12nmmyh77vr2622lzi11nm1z1k2bxs7jz018yl4rwjlpg0sxg1ja")
+              #:trivial? #t))
+    (home-page "https://www.tug.org/texlive/")
+    (synopsis "Adobe glyph list and TeX extensions")
+    (description
+     "This package provides a map between traditional Adobe glyph names and
+Unicode points; it is maintained by Adobe.  The additional
+@file{texglyphlist.txt} is maintained as part of lcdf-typetools.")
+    (license license:asl2.0)))
+
 (define-public texlive-graphics-def
   (package
     (inherit (simple-texlive-package
@@ -4581,6 +4686,55 @@ T2* and X2 encodings. These encodings cover (between them) pretty much every
 language that is written in a Cyrillic alphabet.")
     (license license:lppl1.3c+)))
 
+(define-public texlive-pict2e
+  (let ((template (simple-texlive-package
+                   "texlive-pict2e"
+                   (list "doc/latex/pict2e/"
+                         "source/latex/pict2e/"
+                         "tex/latex/pict2e/")
+                   (base32
+                    "0pazv1khsgjhxc673qrhjrbzlkgmcj53qccb9hw7ygdajxrjc2ba"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t) "latex/pict2e")
+         ((#:build-targets _ '()) '(list "pict2e.ins"))
+         ((#:phases phases)
+          #~(modify-phases #$phases
+              (add-after 'unpack 'chdir
+                (lambda _ (chdir "source/latex/pict2e/")))
+              (add-after 'build 'build-doc
+                (lambda _
+                  (copy-file "p2e-drivers.dtx" "build/p2e-drivers.dtx")
+                  (with-directory-excursion "build"
+                    (invoke "pdflatex" "p2e-drivers.dtx")
+                    (delete-file "p2e-drivers.dtx")
+                    ;; texlive.tlpbd expects a "pict2e.cfg" configuration file
+                    ;; instead of "pict2e-example.cfg".  Please it.
+                    (rename-file "pict2e-example.cfg" "pict2e.cfg"))))
+              (replace 'copy-files
+                (lambda* (#:key inputs #:allow-other-keys)
+                  (let ((origin (assoc-ref inputs "source"))
+                        (source (string-append #$output
+                                               "/share/texmf-dist/source"))
+                        (doc (string-append #$output:doc
+                                            "/share/texmf-dist/doc")))
+                    (copy-recursively (string-append origin "/source") source)
+                    (copy-recursively (string-append origin "/doc") doc))))))))
+      (home-page "https://ctan.org/pkg/pict2e")
+      (native-inputs
+       (list (texlive-updmap.cfg)))
+      (synopsis "New implementation of picture commands")
+      (description
+       "This package extends the existing LaTeX @code{picture} environment,
+using the familiar technique (the @code{graphics} and @code{color} packages)
+of driver files (at present, drivers for dvips, pdfTeX, LuaTeX, XeTeX, VTeX,
+dvipdfm, and dvipdfmx are available).  The package documentation has a fair
+number of examples of use, showing where things are improved by comparison
+with the LaTeX @code{picture} environment.")
+      (license license:lppl1.3+))))
+
 (define-public texlive-psnfss
   (let ((template (simple-texlive-package
                    "texlive-psnfss"
@@ -5227,6 +5381,44 @@ corresponding italics: light, regular, medium, bold, ...")
     (license (list license:lppl
                    license:silofl1.1))))
 
+(define-public texlive-firstaid
+  (let ((template (simple-texlive-package
+                   "texlive-firstaid"
+                   (list "/doc/latex/firstaid/"
+                         "/source/latex/firstaid/"
+                         "/tex/latex/firstaid/")
+                   (base32
+                    "1ahn47kz8a2qdmzdfdgjanf6h5bn8f2rzp1zvwgjpk1plcix8k90"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t) "tex/latex/firstaid")
+         ((#:build-targets _ '()) '(list "firstaid.ins"))
+         ((#:phases phases)
+          #~(modify-phases #$phases
+              (add-after 'unpack 'chdir
+                (lambda _ (chdir "source/latex/firstaid/")))
+              (replace 'copy-files
+                (lambda* (#:key inputs #:allow-other-keys)
+                  (let ((origin (assoc-ref inputs "source"))
+                        (source (string-append #$output
+                                               "/share/texmf-dist/source"))
+                        (doc (string-append #$output:doc
+                                            "/share/texmf-dist/doc")))
+                    (copy-recursively (string-append origin "/source") source)
+                    (copy-recursively (string-append origin "/doc") doc))))))))
+      (home-page "https://ctan.org/macros/latex/required/firstaid")
+      (synopsis
+       "First aid for external LaTeX files and packages that need updating")
+      (description
+       "This package contains some first aid for LaTeX packages or classes
+that require updates because of internal changes to the LaTeX kernel that are
+not yet reflected in the package's or class's code.  The file
+@file{latex2e-first-aid-for-external-files.ltx} provided by this package is
+meant to be loaded during format generation and not by the user.")
+      (license license:lppl1.3c))))
+
 (define-public texlive-latex-ifplatform
   (package
     (name "texlive-latex-ifplatform")
@@ -5654,6 +5846,31 @@ in LaTeX documents; a jiffy to create slashed characters for physicists.")
        "Catchfile catches the contents of a file and puts it in a macro.")
       (license license:lppl1.3+))))
 
+(define-public texlive-ddphonism
+  (package
+    (inherit (simple-texlive-package
+              "texlive-ddphonism"
+              (list "doc/latex/ddphonism/"
+                    "tex/latex/ddphonism/")
+              (base32 "1p02ai76nnh6042pnmqv4n30z6yxsvyyk2nb9jk7xlyyc87zzbdd")
+              #:trivial? #t))
+    (propagated-inputs
+     (list texlive-etoolbox
+           texlive-hyperref
+           texlive-latex-l3packages
+           texlive-listings
+           texlive-pgf
+           texlive-latex-tools
+           texlive-xstring))
+    (home-page "https://www.ctan.org/pkg/ddphonism")
+    (synopsis "Dodecaphonic diagrams for LaTeX")
+    (description
+     "This is a music-related package which is focused on notation from the
+twelve-tone system, also called dodecaphonism.  It provides LaTeX algorithms
+that produce typical dodecaphonic notation based off a musical series, or row
+sequence, of variable length.")
+    (license license:lppl1.3c)))
+
 (define-public texlive-doi
   (package
     (inherit (simple-texlive-package
@@ -8722,6 +8939,47 @@ PDF documents.")
 develop documents with LaTeX, in a single application.")
     (license license:gpl2+)))
 
+(define-public dvisvgm
+  (package
+    (name "dvisvgm")
+    (version "3.0.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mgieseki/dvisvgm")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "11r401yqbw61n1mwsfk5qmwx2c92djwpl0q756qkds5kh25l9ci8"))))
+    (native-inputs (list pkg-config
+                         autoconf
+                         autoconf-archive
+                         automake
+                         python-wrapper
+                         libtool))
+    (inputs (list texlive-libkpathsea
+                  freetype
+                  fontforge
+                  clipper
+                  ghostscript
+                  xxhash
+                  google-brotli
+                  woff2
+                  zlib))
+    (build-system gnu-build-system)
+    (synopsis "Command-line utility for generating SVG from DVI, EPS and PDF
+files")
+    (description
+     "Dvisvgm converts TeX DVI, EPS and PDF files into an
+SVG (Scalable Vector Graphics) image.  It provides full font support including
+virtual fonts, font maps and sub-fonts.  The embedded SVG fonts can optionally
+be replaced with graphics paths for applications that do not support SVG
+fonts.  Dvisvgm supports also colors, emTeX, tpic, papersize, PDF mapfile
+and PostScript specials.  A working TeX installation is needed.")
+    (home-page "https://dvisvgm.de/")
+    (license license:gpl3+)))
+
 (define-public teximpatient
   ;; The homepage seems to be distributing this version which is currently the
   ;; most recent commit
@@ -11867,6 +12125,24 @@ family and SGML-based languages.  Xindy is highly configurable, both in markup
 terms and in terms of the collating order of the text being processed.")
     (license license:gpl2+)))
 
+(define-public texlive-nth
+  (package
+    (inherit (simple-texlive-package
+              "texlive-nth"
+              (list "tex/generic/nth/")
+              (base32
+               "0716sd99xjdkplm7jdmg4lx8lpfnnx6mxjp1l1sp2bfqcg73p4hm")
+              #:trivial? #t))
+    (home-page "https://ctan.org/macros/generic/misc/nth.sty")
+    (synopsis "Generate English ordinal numbers")
+    (description
+     "The command @code{\\nth{<number>}} generates English ordinal numbers of
+the form 1st, 2nd, 3rd, 4th, etc.  LaTeX package options may specify that the
+ordinal mark be superscripted, and that negative numbers may be treated; Plain
+TeX users have no access to package options, so need to redefine macros for
+these changes.")
+    (license license:public-domain)))
+
 (define-public texlive-fmtcount
   (package
     (inherit (simple-texlive-package
@@ -12843,6 +13119,46 @@ syllable.  The package itself does not support UTF-8 input in ordinary
 
 (define-deprecated-package texlive-generic-soul texlive-soul)
 
+(define-public texlive-soulutf8
+  (let ((template (simple-texlive-package
+                   "texlive-soulutf8"
+                   (list "doc/latex/soulutf8/"
+                         "source/latex/soulutf8/"
+                         "tex/generic/soulutf8/")
+                   (base32
+                    "0d9lv3xsads8ms642ys3pghxnsa2hlzafkcx66d2hbq224bz1phc"))))
+    (package
+      (inherit template)
+      (outputs '("out" "doc"))
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ #t) "generic/soulutf8")
+         ((#:build-targets _ '()) '(list "soulutf8.dtx"))
+         ((#:phases phases)
+          #~(modify-phases #$phases
+              (add-after 'unpack 'chdir
+                (lambda _ (chdir "source/latex/soulutf8/")))
+              (replace 'copy-files
+                (lambda* (#:key inputs #:allow-other-keys)
+                  (let ((origin (assoc-ref inputs "source"))
+                        (source (string-append #$output
+                                               "/share/texmf-dist/source"))
+                        (doc (string-append #$output:doc
+                                            "/share/texmf-dist/doc")))
+                    (copy-recursively (string-append origin "/source") source)
+                    (copy-recursively (string-append origin "/doc") doc))))))))
+      (propagated-inputs
+       (list texlive-generic-etexcmds
+             texlive-generic-infwarerr
+             texlive-soul))
+      (home-page "https://ctan.org/pkg/soulutf8")
+      (synopsis "Permit use of UTF-8 characters in @code{soul}")
+      (description
+       "This package extends package @code{soul} and adds some support for
+UTF-8.  Namely the input encodings in @file{utf8.def} from package
+@code{inputenc} and @file{utf8x.def} from package @code{ucs} are supported.")
+      (license license:lppl1.3+))))
+
 (define-public texlive-xstring
   (let ((template (simple-texlive-package
                    "texlive-xstring"
@@ -12905,6 +13221,50 @@ interest.  Since most such counters are simply incremented when they are
 changed, the recorded value will usually be the maximum value.")
     (license license:lppl1.3c+)))
 
+(define-public texlive-xetex
+  (package
+    (inherit (simple-texlive-package
+              "texlive-xetex"
+              (list "/doc/man/man1/xetex.1"
+                    "/doc/man/man1/xelatex.1"
+                    "/doc/xetex/base/"
+                    "/fonts/misc/xetex/fontmapping/base/"
+                    "/tex/xelatex/xetexconfig/")
+              (base32
+               "1gmgagvsv2qknrjzjk840ca3wging8wfc20rgq7bnhphm9n87m6q")
+              #:trivial? #t))
+    (propagated-inputs
+     (list texlive-generic-atbegshi
+           texlive-latex-atveryend
+           texlive-babel
+           texlive-cm
+           texlive-dvipdfmx
+           texlive-etex
+           texlive-everyshi
+           texlive-firstaid
+           texlive-hyphen-base
+           texlive-latex-base
+           texlive-fonts-latex
+           texlive-latex-l3backend
+           texlive-latex-l3kernel
+           texlive-latex-l3packages
+           texlive-lm
+           texlive-tex-ini-files
+           texlive-tex-plain
+           texlive-unicode-data))
+    (home-page "https://www.tug.org/texlive/")
+    (synopsis "Extended variant of TeX for use with Unicode sources")
+    (description
+     "XeTeX is a TeX typesetting engine using Unicode and supporting modern font
+technologies such as OpenType, TrueType or Apple Advanced Typography (AAT),
+including OpenType mathematics fonts.  XeTeX supports many extensions that
+reflect its origins in linguistic research; it also supports micro-typography
+(as available in pdfTeX).  XeTeX was developed by the SIL (the first version
+was specifically developed for those studying linguistics, and using Macintosh
+computers).  XeTeX's immediate output is an extended variant of DVI format,
+which is ordinarily processed by a tightly bound processor (called
+@code{xdvipdfmx}), that produces PDF.")
+    (license license:x11)))
 ;;;
 ;;; Avoid adding new packages to the end of this file. To reduce the chances
 ;;; of a merge conflict, place them above by existing packages with similar
diff --git a/gnu/packages/texinfo.scm b/gnu/packages/texinfo.scm
index bd0b22176e..3296c468c1 100644
--- a/gnu/packages/texinfo.scm
+++ b/gnu/packages/texinfo.scm
@@ -105,14 +105,14 @@ is on expressing the content semantically, avoiding physical markup commands.")
 (define-public texinfo-7
   (package
     (inherit texinfo)
-    (version "7.0.2")
+    (version "7.0.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/texinfo/texinfo-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "1balvbkdlwa8zwnzp4irkixq1zhps2wr6njmwj4ilgiqc4rfq4gj"))))
+                "1gq7i01iblgfcwby1977adh8mab9vpq318vsz628wlkzkp821d3l"))))
     (inputs (modify-inputs (package-inputs texinfo)
               (append perl-archive-zip)))        ;needed for 'tex2any --epub3'
     (arguments
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index 0dbdbbde89..fcb7a8db1d 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -56,6 +56,7 @@
   #:use-module (gnu packages aspell)
   #:use-module (gnu packages assembly)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages base)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages code)
@@ -64,6 +65,7 @@
   #:use-module (gnu packages curl)
   #:use-module (gnu packages datastructures)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages enchant)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
@@ -709,7 +711,7 @@ environment with Markdown markup.")
 (define-public manuskript
   (package
     (name "manuskript")
-    (version "0.14.0")
+    (version "0.15.0")
     (source
      (origin
        (method git-fetch)
@@ -718,7 +720,7 @@ environment with Markdown markup.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0qhr9bkq4yl2qjainpsv7blzcji2q9ic9zcynawmhfqy3rmf8qlr"))))
+        (base32 "0d1r62s1qidspck0b1zf8dibyjn9g72agbkjcica4bvfylnbqz9z"))))
     (build-system python-build-system)
     (arguments
      (list
@@ -773,7 +775,13 @@ environment with Markdown markup.")
                    #:icon "manuskript"
                    #:categories "Office;WordProcessor;"))))))))
     (inputs
-     (list pandoc python-lxml python-markdown python-pyqt qtsvg-5))
+     (list bash-minimal
+           pandoc
+           python-lxml
+           python-markdown
+           python-pyenchant
+           python-pyqt
+           qtsvg-5))
     (home-page "http://www.theologeek.ch/manuskript/")
     (synopsis "Tool for writers")
     (description "Manuskript provides a rich environment to help
@@ -993,14 +1001,14 @@ The basic features of Text Pieces are:
 (define-public scintilla
   (package
     (name "scintilla")
-    (version "5.3.3")
+    (version "5.3.4")
     (source
      (origin
        (method url-fetch)
        (uri (let ((v (apply string-append (string-split version #\.))))
               (string-append "https://www.scintilla.org/scintilla" v ".tgz")))
        (sha256
-        (base32 "138yr6al4dn5mhw88shf1b19knwyj288mh5zrhwn8f7c6k6ldfy4"))))
+        (base32 "0inbhzqdikisvnbdzn8153p1apbghxjzkkzji9i8zsdpyapb209z"))))
     (build-system gnu-build-system)
     (arguments
      (list
diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm
index e5d3a0efc0..d7cb217e17 100644
--- a/gnu/packages/textutils.scm
+++ b/gnu/packages/textutils.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2015 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016 Jelle Licht <jlicht@fsfe.org>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
-;;; Copyright © 2016, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2018, 2019, 2020, 2023 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Nikita <nikita@n0.is>
 ;;; Copyright © 2016, 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
@@ -527,6 +527,20 @@ character-by-character.
                (base32
                 "1rqynfxl1zxwk4b42sniz9xlw285aidcrsfih51p8dy0rbb6clal"))))
     (build-system gnu-build-system)
+    (arguments
+     (list
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-after 'unpack 'update-config-scripts
+             (lambda* (#:key native-inputs inputs #:allow-other-keys)
+               (for-each (lambda (file)
+                           (install-file
+                             (search-input-file
+                               (or native-inputs inputs)
+                               (string-append "/bin/" file)) "aux-build"))
+                         '("config.guess" "config.sub")))))))
+    (native-inputs
+     (list config))
     (synopsis "C/C++ configuration file library")
     (description
      "Libconfig is a simple library for manipulating structured configuration
@@ -711,7 +725,8 @@ in a portable way.")
                            "dbacl-" version ".tar.gz"))
        (sha256
         (base32 "1gas0112wqjvwn9qg3hxnawk7h3prr0w9b2h68f3p1ifd1kzn3gz"))
-       (patches (search-patches "dbacl-include-locale.h.patch"))))
+       (patches (search-patches "dbacl-include-locale.h.patch"
+                                "dbacl-icheck-multiple-definitions.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
diff --git a/gnu/packages/time.scm b/gnu/packages/time.scm
index 9128056f78..c0bcb848b3 100644
--- a/gnu/packages/time.scm
+++ b/gnu/packages/time.scm
@@ -319,14 +319,14 @@ under several distributions that's hard or impossible to figure out.")
 (define-public python-isodate
   (package
     (name "python-isodate")
-    (version "0.6.0")
+    (version "0.6.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "isodate" version))
        (sha256
         (base32
-         "1n7jkz68kk5pwni540pr5zdh99bf6ywydk1p5pdrqisrawylldif"))))
+         "1sdx4z0x6kv1qxjfi0gd82wfg16wca04q0nb93ba1c78wwfqiia8"))))
     (build-system python-build-system)
     (native-inputs
      (list python-six))
diff --git a/gnu/packages/toolkits.scm b/gnu/packages/toolkits.scm
index 3030e3aa49..aee6c22e2d 100644
--- a/gnu/packages/toolkits.scm
+++ b/gnu/packages/toolkits.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
 ;;;
@@ -32,7 +32,7 @@
 (define-public imgui
   (package
     (name "imgui")
-    (version "1.88")
+    (version "1.89.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -41,7 +41,7 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "13cw4hx55y5z678r558hv7znfz666wh0w849c5padnj4nkpbihdi"))
+                "1j79gsg9i969slygrwm0dp5mkzagglawxxagjpi3009wyp6lj6l8"))
               (modules '((guix build utils)))
               (snippet
                ;; Remove bundled fonts.
@@ -66,7 +66,12 @@
           (replace 'build
             (lambda* (#:key inputs #:allow-other-keys)
               ;; Build main library.
-              (apply invoke #$(cc-for-target) "-I" (getcwd)
+              (apply invoke #$(cc-for-target)
+                     ;; This option is necessary at least for OpenBoardView,
+                     ;; otherwise it would fail with the "Too many vertices in
+                     ;; ImDrawList using 16-bit indices".
+                     "-DImDrawIdx=unsigned int"
+                     "-I" (getcwd)
                      "-I" (search-input-directory inputs "include/freetype2")
                      "-g" "-O2" "-fPIC" "-shared"
                      "-lGL" "-lSDL2" "-lglfw"
@@ -77,39 +82,42 @@
                      "imgui_widgets.cpp"
                      ;; Include the supported backends.
                      "backends/imgui_impl_glfw.cpp"
-                     "backends/imgui_impl_sdl.cpp"
+                     (if (file-exists? "backends/imgui_impl_sdl2.cpp")
+                         "backends/imgui_impl_sdl2.cpp"
+                         "backends/imgui_impl_sdl.cpp")
                      "backends/imgui_impl_opengl2.cpp"
                      "backends/imgui_impl_opengl3.cpp"
                      ;; Include wrappers for C++ standard library (STL) and
                      ;; fontconfig.
                      (find-files "misc" "\\.cpp$"))))
           (replace 'install
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let* ((out (assoc-ref outputs "out"))
-                     (doc (assoc-ref outputs "doc"))
-                     (header? (cut string-suffix? ".h" <>))
+            (lambda _
+              (let* ((header? (cut string-suffix? ".h" <>))
                      (imgui-headers (scandir "." header?))
                      (backend-headers (find-files
                                        "backends"
                                        "(glfw|opengl|sdl|vulkan).*\\.h$"))
                      (misc-headers (find-files "misc" "\\.h$")))
-                (install-file "libimgui.so" (string-append out "/lib"))
+                (install-file "libimgui.so" (string-append #$output "/lib"))
                 ;; Install headers.
                 (for-each (lambda (f)
-                            (install-file f (string-append out "/include/imgui")))
+                            (install-file f (string-append #$output
+                                                           "/include/imgui")))
                           imgui-headers)
                 (for-each (lambda (f)
                             (install-file f (string-append
-                                             out "/include/imgui/backends")))
+                                             #$output
+                                             "/include/imgui/backends")))
                           backend-headers)
                 (for-each (lambda (f)
-                            (install-file f (string-append
-                                             out "/include/imgui/" (dirname f))))
+                            (install-file f (string-append #$output
+                                                           "/include/imgui/"
+                                                           (dirname f))))
                           misc-headers)
                 ;; Install examples.
-                (copy-recursively
-                 "examples" (string-append
-                             doc "/share/imgui/examples"))))))))
+                (copy-recursively "examples"
+                                  (string-append #$output:doc
+                                                 "/share/imgui/examples"))))))))
     (inputs (list fontconfig glfw mesa sdl2))
     (home-page "https://github.com/ocornut/imgui")
     (synopsis "Immediate-mode C++ GUI library with minimal dependencies")
@@ -126,6 +134,22 @@ applications, full-screen applications, and embedded platforms without
 standard operating system features.")
     (license license:expat)))
 
+(define-public imgui-1.87
+  (package
+    (inherit imgui)
+    (name "imgui")
+    (version "1.87")
+    (source (origin
+              (inherit (package-source imgui))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ocornut/imgui")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "10qil22s5qak3as41787iz273sibpq1bq66bakgn7yvhj5fym6hz"))))))
+
 (define-public imgui-1.86
   (package
     (inherit imgui)
diff --git a/gnu/packages/tree-sitter.scm b/gnu/packages/tree-sitter.scm
index 8dda7737ca..b91345bb36 100644
--- a/gnu/packages/tree-sitter.scm
+++ b/gnu/packages/tree-sitter.scm
@@ -301,6 +301,13 @@ will be used in description and synopsis."
        #:commit commit
        #:license (list license:asl2.0 license:expat))))
 
+(define-public tree-sitter-heex
+  (tree-sitter-grammar
+   "heex" "Heex"
+   "00330rgg67fq0d9gk1yswj78d9mn1jvvjmmy1k7cxpvm5993p3sw"
+   "0.6.0"
+   #:repository-url "https://github.com/phoenixframework/tree-sitter-heex"))
+
 (define-public tree-sitter-bash
   (tree-sitter-grammar
    "bash" "Bash"
diff --git a/gnu/packages/tryton.scm b/gnu/packages/tryton.scm
index 8e561cad45..0b367675ae 100644
--- a/gnu/packages/tryton.scm
+++ b/gnu/packages/tryton.scm
@@ -100,9 +100,6 @@ core base of a complete business solution providing modularity, scalability
 and security.")
     (license license:gpl3+)))
 
-(define-public python-trytond
-  (deprecated-package "python-trytond" trytond))
-
 (define-public tryton
   (package
     (name "tryton")
diff --git a/gnu/packages/unicode.scm b/gnu/packages/unicode.scm
index afb9546966..23f08a2aab 100644
--- a/gnu/packages/unicode.scm
+++ b/gnu/packages/unicode.scm
@@ -77,14 +77,14 @@ renderer.")
 (define-public ucd
   (package
     (name "ucd")
-    (version "14.0.0")
+    (version "15.0.0")
     (source
      (origin
        (method url-fetch/zipbomb)
        (uri (string-append "https://www.unicode.org/Public/zipped/" version
                            "/UCD.zip"))
        (sha256
-        (base32 "001nq9w52ijma0vps40xwy2q6ylpyf1393lzb128ibypnmv54fh3"))))
+        (base32 "133inqn33hcfvylmps63yjr6rrqrfq6x7a5hr5fd51z6yc0f9gaz"))))
     (build-system copy-build-system)
     (arguments
      '(#:install-plan
@@ -97,20 +97,6 @@ files listing Unicode character properties and related data.  It also includes
 test data for conformance to several important Unicode algorithms.")
     (license unicode)))
 
-(define-public ucd-next
-  (package
-    (inherit ucd)
-    (name "ucd")
-    (version "15.0.0")
-    (source
-     (origin
-       (method url-fetch/zipbomb)
-       (uri (string-append "https://www.unicode.org/Public/zipped/" version
-                           "/UCD.zip"))
-       (sha256
-        (base32
-         "133inqn33hcfvylmps63yjr6rrqrfq6x7a5hr5fd51z6yc0f9gaz"))))))
-
 (define (unicode-emoji-file name version hash)
   (origin
     (method url-fetch)
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index c270b4257b..8f67a945a1 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -29,11 +29,11 @@
 ;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2020 John D. Boy <jboy@bius.moe>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021, 2022, 2023 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2020, 2021, 2022 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
-;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2021 Léo Le Bouter <lle-bout@zaclys.net>
 ;;; Copyright © 2021 LibreMiami <packaging-guix@libremiami.org>
@@ -1666,7 +1666,7 @@ visualize your public Git repositories on a web interface.")
 (define-public pre-commit
   (package
     (name "pre-commit") ;formerly known as python-pre-commit
-    (version "3.1.1")
+    (version "3.2.2")
     (source
      (origin
        (method git-fetch)               ; no tests in PyPI release
@@ -1675,7 +1675,7 @@ visualize your public Git repositories on a web interface.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1rngcq1vd2phk45wp1cc5jz02wpi53fif0qwk633smfjcjj1kp41"))
+        (base32 "11zbnl08bqyl8s12i58szn5gcali4p6dwwbzln8bk92kb721s52r"))
        (modules '((guix build utils)))
        (snippet '(substitute* "setup.cfg"
                    (("virtualenv>=20.10.0") ;our virtualenv (20.3.1) is fine
@@ -2007,76 +2007,72 @@ following features:
 (define-public subversion
   (package
     (name "subversion")
-    (version "1.14.1")
+    (version "1.14.2")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://apache/subversion/"
-                                 "subversion-" version ".tar.bz2"))
-             (sha256
-              (base32
-               "1ag1hvcm9q92kgalzbbgcsq9clxnzmbj9nciz9lmabjx4lyajp9c"))))
+              (method url-fetch)
+              (uri (string-append "mirror://apache/subversion/"
+                                  "subversion-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "0a6csc84hfymm8b5cnvq1n1p3rjjf33qy0z7y1k8lwkm1f6hw4y9"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:parallel-tests? #f             ; TODO Seems to cause test failures on
-                                        ; i686-linux
-       #:configure-flags '("--enable-static=no")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'configure 'patch-libtool-wrapper-ls
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; This substitution allows tests svnauthz_tests and svnlook_tests
-             ;; to pass.  These tests execute svnauthz and svnlook through
-             ;; their libtool wrapper scripts from svn hooks, whose empty
-             ;; environments cause "ls: command not found" errors.  It would be
-             ;; nice if this fix ultimately made its way into libtool.
-             (let ((coreutils (assoc-ref inputs "coreutils")))
-               (substitute* "libtool"
-                 (("\\\\`ls") (string-append "\\`" coreutils "/bin/ls")))
-               #t)))
-         (add-before 'build 'patch-test-sh
-           (lambda _
-             (substitute* "subversion/tests/libsvn_repos/repos-test.c"
-               (("#!/bin/sh") (string-append "#!" (which "sh"))))
-             #t))
-         (add-before 'check 'set-PARALLEL
-           (lambda* (#:key parallel-tests? #:allow-other-keys)
-             (if parallel-tests?
-                 (setenv "PARALLEL" (number->string (parallel-job-count)))
-                 (simple-format #t "parallel-tests? are disabled\n"))
-             #t))
-         (add-after 'install 'install-perl-bindings
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Follow the instructions from 'subversion/bindings/swig/INSTALL'.
-             (let ((out (assoc-ref outputs "out")))
-               (invoke "make" "swig-pl-lib")
-               ;; FIXME: Test failures.
-               ;; (invoke "make" "check-swig-pl")
-               (invoke "make" "install-swig-pl-lib")
-
-               ;; Set the right installation prefix.
-               (with-directory-excursion
-                   "subversion/bindings/swig/perl/native"
-                 (invoke "perl" "Makefile.PL"
-                         "NO_PERLLOCAL=1"
-                         (string-append "PREFIX=" out))
-                 (invoke "make" "install"
-                         (string-append "OTHERLDFLAGS="
-                                        "-Wl,-rpath="
-                                        out "/lib")))))))))
+     (list
+      ;; Running the tests in parallel causes test failures on i686-linux.
+      ;; The issue was reported to users@subversion.apache.org, as suggested
+      ;; at https://subversion.apache.org/reporting-issues.
+      #:parallel-tests? #f
+      #:configure-flags #~(list "--enable-static=no")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'configure 'patch-libtool-wrapper-ls
+            (lambda* (#:key inputs #:allow-other-keys)
+              ;; This substitution allows tests svnauthz_tests and svnlook_tests
+              ;; to pass.  These tests execute svnauthz and svnlook through
+              ;; their libtool wrapper scripts from svn hooks, whose empty
+              ;; environments cause "ls: command not found" errors.  It would be
+              ;; nice if this fix ultimately made its way into libtool.
+              (substitute* "libtool"
+                (("\\\\`ls")
+                 (string-append "\\`" (search-input-file inputs "bin/ls"))))))
+          (add-before 'build 'patch-test-sh
+            (lambda _
+              (substitute* "subversion/tests/libsvn_repos/repos-test.c"
+                (("#!/bin/sh") (string-append "#!" (which "sh"))))))
+          (add-before 'check 'set-PARALLEL
+            (lambda* (#:key parallel-tests? #:allow-other-keys)
+              (if parallel-tests?
+                  (setenv "PARALLEL" (number->string (parallel-job-count)))
+                  (simple-format #t "parallel-tests? are disabled\n"))))
+          (add-after 'install 'install-perl-bindings
+            (lambda _
+              ;; Follow the instructions from 'subversion/bindings/swig/INSTALL'.
+              (invoke "make" "swig-pl-lib")
+              ;; FIXME: Test failures.
+              ;; (invoke "make" "check-swig-pl")
+              (invoke "make" "install-swig-pl-lib")
+
+              ;; Set the right installation prefix.
+              (with-directory-excursion "subversion/bindings/swig/perl/native"
+                (invoke "perl" "Makefile.PL" "NO_PERLLOCAL=1"
+                        (string-append "PREFIX=" #$output))
+                (invoke "make" "install"
+                        (string-append "OTHERLDFLAGS=-Wl,-rpath="
+                                       #$output "/lib"))))))))
     (native-inputs
-      (list pkg-config
-            ;; For the Perl bindings.
-            swig))
+     (list pkg-config
+           ;; For the Perl bindings.
+           swig))
     (inputs
-      `(("apr" ,apr)
-        ("apr-util" ,apr-util)
-        ("lz4" ,lz4)
-        ("serf" ,serf)
-        ("perl" ,perl)
-        ("python" ,python-wrapper)
-        ("sqlite" ,sqlite)
-        ("utf8proc" ,utf8proc)
-        ("zlib" ,zlib)))
+     (list apr
+           apr-util
+           lz4
+           perl
+           python-wrapper
+           serf
+           sqlite
+           utf8proc
+           zlib))
     (home-page "https://subversion.apache.org/")
     (synopsis "Revision control system")
     (description
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 9dbcdc72c1..240730844a 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -41,7 +41,7 @@
 ;;; Copyright © 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2020 Alex McGrath <amk@amk.ie>
 ;;; Copyright © 2020, 2021, 2022 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021, 2022, 2023 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@posteo.ro>
 ;;; Copyright © 2020 Ivan Kozlov <kanichos@yandex.ru>
@@ -849,7 +849,7 @@ television and DVD.  It is also known as AC-3.")
 (define-public libaom
   (package
     (name "libaom")
-    (version "3.3.0")
+    (version "3.5.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -858,7 +858,7 @@ television and DVD.  It is also known as AC-3.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "024vhsx7bw9kajk65hhh5vmqrja0h33rmlcpngsj3yg4p8l29943"))))
+                "0arn8a88jz4mj69n8cs4qmrdjwhbvzsqgnx20wr9mq01b06kqich"))))
     (build-system cmake-build-system)
     (native-inputs
      (list perl pkg-config python)) ; to detect the version
@@ -866,7 +866,6 @@ television and DVD.  It is also known as AC-3.")
      `(#:tests? #f                      ; downloads many video clips
        #:configure-flags
        (list "-DBUILD_SHARED_LIBS=YES"
-             "-DENABLE_PIC=TRUE"
              "-DAOM_TARGET_CPU=generic"
              (string-append "-DCMAKE_INSTALL_PREFIX="
                             (assoc-ref %outputs "out")))
@@ -916,8 +915,8 @@ shared library and encoder and decoder command-line executables.")
 (define-public libx264
   ;; There are no tags in the repository, so we take the version number from
   ;; the X264_BUILD variable defined in x264.h.
-  (let ((version "161")
-        (commit "4c2aafd864dd201832ec2be0fef4484925146650")
+  (let ((version "164")
+        (commit "b093bbe7d9bc642c8f24067cbdcc73bb43562eab")
         (revision "0"))
     (package
       (name "libx264")
@@ -930,7 +929,7 @@ shared library and encoder and decoder command-line executables.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1i6v9h3xx9pi0zmlj3anwwjxqa63sbhy9crrif8dphipwfn9hyg5"))))
+                  "095pv8y6fqjg8mdvsfk12d0jqgyhip536a6vxhzm7qz8hfp96qhq"))))
       (build-system gnu-build-system)
       (native-inputs
        (list pkg-config nasm))
@@ -980,27 +979,6 @@ H.264 (MPEG-4 AVC) video streams.")
                       "file://extras/cl.h"
                       "See extras/cl.h in the distribution."))))))
 
-;;; TODO: Merge into libx264 on staging.
-(define-public libx264-next
-  ;; There are no tags in the repository, so we take the version number from
-  ;; the X264_BUILD variable defined in x264.h.
-  (let ((version "164")
-        (commit "b093bbe7d9bc642c8f24067cbdcc73bb43562eab")
-        (revision "0"))
-    (package
-      (inherit libx264)
-      (name "libx264")
-      (version (git-version version revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://code.videolan.org/videolan/x264.git")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "095pv8y6fqjg8mdvsfk12d0jqgyhip536a6vxhzm7qz8hfp96qhq")))))))
-
 (define-public mkvtoolnix
   (package
     (name "mkvtoolnix")
@@ -1606,17 +1584,18 @@ These tools require a supported graphics chip, driver, and VA-API back end to
 operate properly.")
     (license license:expat)))
 
-(define-public ffmpeg-5
+(define-public ffmpeg
   (package
     (name "ffmpeg")
-    (version "5.1.2")
+    (version "6.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://ffmpeg.org/releases/ffmpeg-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "1p7kxr0f9f9d0pyyxq9ciaj9ch2drmcw5p9jk22j111ccrnp17k1"))))
+                "10kh2f4y4isfqj4xpcqqnzk611jh89ywcjyjnq9c2jcv5p18ggjp"))))
+    (outputs '("out" "debug"))
     (build-system gnu-build-system)
     (inputs
      (append
@@ -1757,9 +1736,11 @@ operate properly.")
          ;; The static libraries are 23 MiB
          "--disable-static"
 
+         "--disable-stripping"
+
          #$@(if (target-riscv64?)
-              '("--extra-cflags=-fPIC")
-              '())
+                '("--extra-cflags=-fPIC")
+                '())
 
          ;; Runtime cpu detection is not implemented on
          ;; MIPS, so we disable some features.
@@ -1800,6 +1781,18 @@ convert and stream audio and video.  It includes the libavcodec
 audio/video codec library.")
     (license license:gpl2+)))
 
+(define-public ffmpeg-5
+  (package
+    (inherit ffmpeg)
+    (version "5.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://ffmpeg.org/releases/ffmpeg-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "1p7kxr0f9f9d0pyyxq9ciaj9ch2drmcw5p9jk22j111ccrnp17k1"))))))
+
 (define-public ffmpeg-4
   (package
     (inherit ffmpeg-5)
@@ -1811,10 +1804,10 @@ audio/video codec library.")
              (sha256
               (base32
                "14xadxm1yaamp216nq09xwasxg5g133v86dbb33mdg5di1zrlhdg"))))
-    (inputs (modify-inputs (package-inputs ffmpeg-5)
+    (inputs (modify-inputs (package-inputs ffmpeg)
               (replace "sdl2" sdl2-2.0)))
     (arguments
-     (substitute-keyword-arguments (package-arguments ffmpeg-5)
+     (substitute-keyword-arguments (package-arguments ffmpeg)
        ((#:configure-flags flags ''())
         #~(cons "--enable-avresample" #$flags))))))
 
@@ -1893,8 +1886,6 @@ audio/video codec library.")
     (inputs (modify-inputs (package-inputs ffmpeg-3.4)
               (delete "libwebp")))))
 
-(define-public ffmpeg ffmpeg-5)
-
 (define-public ffmpeg-for-stepmania
   (hidden-package
    (package
@@ -2342,7 +2333,7 @@ the last played position, etc.")
 (define-public gallery-dl
   (package
     (name "gallery-dl")
-    (version "1.23.0")
+    (version "1.25.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/mikf/gallery-dl"
@@ -2350,7 +2341,7 @@ the last played position, etc.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "12rhzf8cwsvlg0vxzydgc7x04gmccxkjk8ghb5s8lk0gjp7ysqkh"))))
+                "1zhcd5qnnlmr0qp72rj4bfw0lz4gz1bl65wfn7w21c2xr36nbkxs"))))
     (build-system python-build-system)
     (inputs (list python-requests ffmpeg))
     (home-page "https://github.com/mikf/gallery-dl")
@@ -2361,9 +2352,6 @@ can use youtube-dl or yt-dlp packages to download videos, the focus is more on
 images and image hosting sites.")
     (license license:gpl2)))
 
-(define-public gnome-mpv
-  (deprecated-package "gnome-mpv" celluloid))
-
 (define-public mpv-mpris
   (package
     (name "mpv-mpris")
@@ -2406,7 +2394,7 @@ To load this plugin, specify the following option when starting mpv:
 (define-public libvpx
   (package
     (name "libvpx")
-    (version "1.11.0")
+    (version "1.12.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2415,7 +2403,7 @@ To load this plugin, specify the following option when starting mpv:
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "00f1jrclai2b6ys78dpsg6r1mvcyxlna93vxcz8zjyia24c2pjsb"))
+                "1x12f2bd4jqd532rnixmwvcx8d29yxiacpcxqqh86qczc49la8gm"))
               (patches (search-patches "libvpx-CVE-2016-2818.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -2445,22 +2433,6 @@ To load this plugin, specify the following option when starting mpv:
     (license license:bsd-3)
     (home-page "https://www.webmproject.org/")))
 
-;;; TODO: Merge into libvpx on staging.
-(define-public libvpx-next
-  (package
-    (inherit libvpx)
-    (name "libvpx")
-    (version "1.12.0")
-    (source (origin
-              (inherit (package-source libvpx))
-              (uri (git-reference
-                    (url "https://chromium.googlesource.com/webm/libvpx")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1x12f2bd4jqd532rnixmwvcx8d29yxiacpcxqqh86qczc49la8gm"))))))
-
 (define-public orf-dl
   (let ((commit "2dbbe7ef4e0efe0f3c1d59c503108e22d9065999")
         (revision "1"))
@@ -3247,7 +3219,7 @@ from sites like Twitch.tv and pipes them into a video player of choice.")
 (define-public mlt
   (package
     (name "mlt")
-    (version "7.12.0")
+    (version "7.14.0")
     (source
      (origin
        (method git-fetch)
@@ -3256,7 +3228,7 @@ from sites like Twitch.tv and pipes them into a video player of choice.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "182i6fgn9aiskj62kj10cxf5wh233a241n7qvh0l95il01zmpfb3"))))
+        (base32 "0qiy346dx41a2n94lwsa9p9vsprsrzah7f9wlm6n507k7w7f0sq6"))))
     (build-system cmake-build-system)
     (arguments
      (list
@@ -3413,7 +3385,7 @@ be used for realtime video capture via Linux-specific APIs.")
 (define-public obs
   (package
     (name "obs")
-    (version "29.0.0")
+    (version "29.0.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3423,7 +3395,7 @@ be used for realtime video capture via Linux-specific APIs.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "15nvvlpryvlbf76918jvygg1985glz38cndfgnc2c0009vdb9qbk"))
+                "1ijn19wy52fa7ahr29v1rzvh6j0qr7i5xl129m6s9c644f7i51ac"))
               (patches
                (search-patches "obs-modules-location.patch"))))
     (build-system cmake-build-system)
@@ -5335,12 +5307,7 @@ result in several formats:
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "006bfcmjwg0phg8gc25b1sl2ngjrb2bh1b3fd0s5gbf9nlkr8qsn"))
-       (modules '((guix build utils)))
-       (snippet
-        '(substitute* "Cargo.toml"
-           (("\\[package\\]" m)
-            (string-append "cargo-features = [\"rust-version\"]\n" m))))))
+         "006bfcmjwg0phg8gc25b1sl2ngjrb2bh1b3fd0s5gbf9nlkr8qsn"))))
     (build-system cargo-build-system)
     (arguments
      `(;; Strip the '--release' flag to work around the doctest failures with
@@ -5403,14 +5370,8 @@ result in several formats:
          (add-after 'unpack 'relax-versions
            (lambda _
              (substitute* "Cargo.toml"
-               ;; Allow using more recent versions of
+               ;; Allow using more recent versions of system-deps.
                (("~3.1.2") "~3"))))
-         (add-after 'configure 'force-rust-edition-2018
-           (lambda* (#:key vendor-dir #:allow-other-keys)
-             ;; Force all the dependencies to not be higher than edition 2018.
-             (with-fluids ((%default-port-encoding #f))
-               (substitute* (find-files vendor-dir "Cargo.toml")
-                 (("edition = \\\"2021\\\"") "edition = \"2018\"")))))
          (replace 'build
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
diff --git a/gnu/packages/vulkan.scm b/gnu/packages/vulkan.scm
index 218a7b21ea..dfc073b379 100644
--- a/gnu/packages/vulkan.scm
+++ b/gnu/packages/vulkan.scm
@@ -2,8 +2,10 @@
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020, 2023 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2021 Mathieu Othacehe <othacehe@gnu.org>
+;;; Copyright © 2022 Kaelyn Takata <kaelyn.alexi@protonmail.com>
+;;; Copyright © 2022 dan <i@dan.games>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -41,10 +43,13 @@
   #:use-module (gnu packages wine)
   #:use-module (gnu packages xorg))
 
+;; Note: Remember to change vulkan-loader version when bumping this.
+(define %vulkan-sdk-version "sdk-1.3.231.1")
+
 (define-public spirv-headers
   (package
     (name "spirv-headers")
-    (version "1.5.3")
+    (version %vulkan-sdk-version)
     (source
      (origin
        (method git-fetch)
@@ -53,7 +58,7 @@
              (commit version)))
        (sha256
         (base32
-         "069sivqajp7z4p44lmrz23lvf237xpkjxd4lzrg27836pwqcz9bj"))
+         "0z8b485hryya2g0jxv7amwg3fjj7pchbgnsa5ldf5fwgh5js0icm"))
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
@@ -76,19 +81,22 @@ and for the GLSL.std.450 extended instruction set.
 (define-public spirv-tools
   (package
     (name "spirv-tools")
-    (version "2020.2")
+    (version %vulkan-sdk-version)
     (source
      (origin
       (method git-fetch)
       (uri (git-reference
             (url "https://github.com/KhronosGroup/SPIRV-Tools")
-            (commit (string-append "v" version))))
+            (commit version)))
       (sha256
-       (base32 "00b7xgyrcb2qq63pp3cnw5q1xqx2d9rfn65lai6n6r89s1vh3vg6"))
+       (base32 "03d489ind2az7w7q1slj3mdc04372r3qqbnd7m9akxbg7yix1a5j"))
       (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags (list "-DBUILD_SHARED_LIBS=ON"
+                               ;; Some packages like mpv fail to link
+                               ;; when the static libraries are built.
+                               "-DSPIRV_TOOLS_BUILD_STATIC=OFF"
                                (string-append
                                 "-DSPIRV-Headers_SOURCE_DIR="
                                 (assoc-ref %build-inputs "spirv-headers")))))
@@ -105,7 +113,7 @@ parser,disassembler, validator, and optimizer for SPIR-V.")
 (define-public spirv-cross
   (package
     (name "spirv-cross")
-    (version "2020-05-19")
+    (version %vulkan-sdk-version)
     (source
      (origin
        (method git-fetch)
@@ -113,7 +121,7 @@ parser,disassembler, validator, and optimizer for SPIR-V.")
              (url "https://github.com/KhronosGroup/SPIRV-Cross")
              (commit version)))
        (sha256
-        (base32 "0zyijp9zx9wbd4i5lwjap7n793iz6yjkf27la60dsffxl75yy9pd"))
+        (base32 "1ypbc1krkr0yywa1m976g3sjyb80l7hxwrnh6gp70w6va1dlnnn9"))
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
@@ -146,17 +154,18 @@ SPIR-V, aiming to emit GLSL or MSL that looks like human-written code.")
 (define-public glslang
   (package
     (name "glslang")
-    (version "11.11.0")
+    (version %vulkan-sdk-version)
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/KhronosGroup/glslang")
              (commit version)))
+       (patches (search-patches "glslang-install-static-libs.patch"))
        (sha256
         (base32
-         "03jnaj90q2cg2hjdsg96ashz28dw5hcsg9rvf60bp2mphzzsklpq"))
-       (file-name (string-append name "-" version "-checkout"))))
+         "12a1zl8qxa28nbf6m67260c0lwdw3bqbj0jz1382wgm5px1fpqw6"))
+       (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f                      ;FIXME: requires bundled SPIRV-Tools
@@ -178,17 +187,17 @@ interpretation of the specifications for these languages.")
 (define-public vulkan-headers
   (package
     (name "vulkan-headers")
-    (version "1.2.164")
+    (version %vulkan-sdk-version)
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/KhronosGroup/Vulkan-Headers")
-             (commit (string-append "v" version))))
+             (commit version)))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "11wzxvwim4jna1yssbmprl211dhmz8vmrd498zww3bghzlj7bljv"))))
+         "167zdank6pn66mzjdwgrdlmhmsy4v2k0nhw0nwg649k863rgi00j"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))                    ; No tests.
@@ -202,48 +211,55 @@ interpretation of the specifications for these languages.")
 (define-public vulkan-loader
   (package
     (name "vulkan-loader")
-    (version "1.2.162")
+    ;; XXX: Take a slightly newer commit to fix a test failure on i686:
+    ;; https://github.com/KhronosGroup/Vulkan-Loader/pull/1036
+    (version "sdk-1.3.232")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/KhronosGroup/Vulkan-Loader")
-             (commit (string-append "v" version))))
+             (commit "v1.3.232")))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "15gx9ab6w1sjq9hkpbas7z2f8f47j6mlln6p3w26qmydjj8gfjjv"))))
+         "0w69sh669sx9pwlvv2rv92ds2hm2rbzsa6qqcmd8kcad0qfq7dz2"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:configure-flags
-       ,#~(list
-           (string-append "-DVULKAN_HEADERS_INSTALL_DIR="
-                          #$(this-package-input "vulkan-headers"))
-           (string-append "-DCMAKE_INSTALL_INCLUDEDIR="
-                          #$(this-package-input "vulkan-headers")
-                          "/include"))
-       #:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'unpack-googletest
-                    (lambda* (#:key inputs #:allow-other-keys)
-                      (let ((gtest (assoc-ref inputs "googletest:source")))
-                        (when gtest
-                          (copy-recursively gtest "external/googletest"))
-                        #t)))
-                  (add-after 'unpack 'disable-loader-tests
-                    (lambda _
-                      ;; Many tests require a Vulkan driver.  Skip those.
-                      (substitute* "tests/loader_validation_tests.cpp"
-                        ((".*= vkCreateInstance.*" all)
-                         (string-append "GTEST_SKIP();\n" all))
-                        (("TEST_F.*InstanceExtensionEnumerated.*" all)
-                         (string-append all "\nGTEST_SKIP();\n")))
-                      #t)))))
+     (list
+      #:configure-flags
+      #~(list (string-append "-DVULKAN_HEADERS_INSTALL_DIR="
+                             (dirname (dirname
+                                       (search-input-directory
+                                        %build-inputs "include/vulkan"))))
+              "-DBUILD_TESTS=ON")
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-after 'unpack 'fix-pkg-config-file
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((vulkan-headers (dirname (search-input-directory
+                                               inputs "include/vulkan"))))
+                 ;; Ensure the pkg-config file refers to vulkan-headers.
+                 (substitute* "loader/vulkan.pc.in"
+                   (("^includedir=.*")
+                    (string-append "includedir=" vulkan-headers "\n"))))))
+           (add-after 'unpack 'use-system-googletest
+             (lambda _
+               ;; Inform the build system that googletest is already built.
+               (substitute* "CMakeLists.txt"
+                 ((".*if\\(TARGET gtest\\)")
+                  (string-append "    find_package(GTest REQUIRED)\n"
+                                 "    if(true)")))
+               ;; Use the namespaced variable.
+               (substitute* "tests/framework/CMakeLists.txt"
+                 (("PUBLIC gtest ")
+                  "PUBLIC GTest::gtest ")))))))
     (native-inputs
-     `(("googletest:source" ,(package-source googletest))
-       ("libxrandr" ,libxrandr)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("wayland" ,wayland)))
+     (list googletest
+           libxrandr
+           pkg-config
+           python
+           wayland))
     (inputs
      (list vulkan-headers))
     (home-page
@@ -264,20 +280,20 @@ and the ICD.")
 (define-public vulkan-tools
   (package
     (name "vulkan-tools")
-    (version "1.2.162")
+    (version %vulkan-sdk-version)
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/KhronosGroup/Vulkan-Tools")
-             (commit (string-append "v" version))))
+             (commit version)))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "129wzk7xj3vn3c8b4p7fzkd0npl58118s2i1d88gsfnlix54nagq"))))
+         "0jzwjfx4c7y15wkwfhhc64rzljpi47bxrm5jw5blfsqjh8zsd27a"))))
     (build-system cmake-build-system)
     (inputs
-     (list glslang libxrandr vulkan-loader wayland))
+     (list glslang libxrandr vulkan-loader wayland wayland-protocols))
     (native-inputs
      (list pkg-config python vulkan-headers))
     (arguments
@@ -296,7 +312,8 @@ API.")
 (define-public shaderc
   (package
     (name "shaderc")
-    (version "2020.4")
+    ;; shaderc doesn't follow the versioning scheme of vulkan sdk
+    (version "2022.3")
     (source
      (origin
        (method git-fetch)
@@ -306,7 +323,7 @@ API.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "07h78nd964h2bdm4drzws8i1gvyal8a3wlhbcm5qxqk6vknv8hrk"))))
+         "0sdbfi66zmqj0c5q5yv2zvcvry7557yzgxk2mwflyjgqh7kdhb8d"))))
     (build-system cmake-build-system)
     (arguments
      `(;; FIXME: Skip most of the tests, because enabling system gtest breaks
@@ -338,7 +355,16 @@ API.")
                          ,version
                          ,(package-version spirv-tools)
                          ,(package-version glslang))))
-             #t)))))
+             #t))
+         ;; see: https://github.com/google/shaderc/pull/1276
+         (add-after 'do-not-look-for-bundled-sources 'drop-additional-glslang-deps
+           (lambda _
+             (substitute* "glslc/CMakeLists.txt"
+               (("OSDependent OGLCompiler") ""))
+             (substitute* "libshaderc/CMakeLists.txt"
+               (("OSDependent OGLCompiler") ""))
+             (substitute* "libshaderc_util/CMakeLists.txt"
+               (("OSDependent OGLCompiler") "")))))))
     (inputs
      (list glslang python spirv-headers spirv-tools))
     (native-inputs
@@ -397,3 +423,127 @@ shader compilation.")
      (synopsis "Direct3D 12 to Vulkan translation library")
      (description "vkd3d is a library for translating Direct3D 12 to Vulkan.")
      (license license:lgpl2.1))))
+
+(define-public vulkan-validationlayers
+  (package
+    (name "vulkan-validationlayers")
+    (version %vulkan-sdk-version)
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url
+                     "https://github.com/KhronosGroup/Vulkan-ValidationLayers")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "07djrk6yym4vl2b52wr09r8y649v5lark5hnr5rwvlxwxdmd9g75"))))
+    (build-system cmake-build-system)
+    (inputs (list glslang
+                  libxrandr
+                  mesa
+                  shaderc
+                  spirv-tools
+                  vulkan-loader
+                  wayland))
+    (native-inputs (list pkg-config python spirv-headers vulkan-headers))
+    (arguments
+     (list #:tests? #f ;no tests
+           #:configure-flags
+           #~(list "-DUSE_ROBIN_HOOD_HASHING=OFF"
+                   (string-append "-DGLSLANG_INSTALL_DIR="
+                                  (dirname (dirname
+                                            (search-input-directory
+                                             %build-inputs
+                                             "include/glslang"))))
+                   (string-append "-DSPIRV_HEADERS_INSTALL_DIR="
+                                  (dirname (dirname
+                                            (search-input-directory
+                                             %build-inputs
+                                             "include/spirv"))))
+                   (string-append "-DSPIRV_TOOLS_INSTALL_DIR="
+                                  (dirname (dirname
+                                            (search-input-directory
+                                             %build-inputs
+                                             "include/spirv-tools"))))
+                   (string-append "-DVULKAN_HEADERS_INSTALL_DIR="
+                                  (dirname (dirname
+                                            (search-input-directory
+                                             %build-inputs
+                                             "include/vulkan"))))
+                   "-Wno-dev")
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'install 'set-layer-path-in-manifest
+                          (lambda _
+                            (let ((manifest (string-append #$output
+                                             "/share/vulkan/explicit_layer.d"
+                                             "/VkLayer_khronos_validation.json")))
+                              (substitute* manifest
+                                (("\"libVkLayer_khronos_validation.so\"")
+                                 (string-append "\"" #$output
+                                  "/lib/libVkLayer_khronos_validation.so\"")))))))))
+    (home-page "https://github.com/KhronosGroup/Vulkan-ValidationLayers")
+    (synopsis "Khronos official validation layers for Vulkan")
+    (description
+     "Vulkan-ValidationLayers provides the Khronos official validation layers that
+can assist development by enabling developers to verify their applications correctly
+use the Vulkan API.")
+    (license license:asl2.0)))
+
+(define-public volk
+  (package
+    (name "volk")
+    (version %vulkan-sdk-version)
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/zeux/volk")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0xaw3kg754mknx8lfj1p74a9npjfvdvlpicvn0hla4495zpc10rq"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:tests? #f                      ;no test
+       #:configure-flags '("-DVOLK_INSTALL=ON" "-DVOLK_PULL_IN_VULKAN=ON")))
+    (inputs (list vulkan-headers))
+    (synopsis "Meta loader for Vulkan API")
+    (description
+     "Volk is a meta-loader for Vulkan.  It allows you to dynamically load
+entrypoints required to use Vulkan without linking the Vulkan loader.
+Additionally, volk simplifies the use of Vulkan extensions by automatically
+loading all associated entrypoints.  Finally, volk enables loading Vulkan
+entrypoints directly from the driver which can increase performance by
+skipping loader dispatch overhead.")
+    (home-page "https://github.com/zeux/volk")
+    (license license:expat)))
+
+(define-public vulkan-memory-allocator
+  (package
+    (name "vulkan-memory-allocator")
+    (version "3.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator")
+         (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1hpzjwl5bgqv9hmf1fdldihfllcbdg515f391a200klg0rnixdds"))))
+    (build-system cmake-build-system)
+    (arguments
+     ;; no test
+     `(#:tests? #f))
+    (inputs (list vulkan-loader vulkan-headers))
+    (synopsis "Vulkan memory allocation library")
+    (description
+     "The Vulkan Memory Allocator (VMA) library provides a simple and easy to
+integrate API to help users allocate memory for Vulkan buffer and image
+storage.")
+    (home-page
+     "https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator")
+    (license license:expat)))
diff --git a/gnu/packages/w3m.scm b/gnu/packages/w3m.scm
index 39d5e3c37f..498bf0f111 100644
--- a/gnu/packages/w3m.scm
+++ b/gnu/packages/w3m.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2016, 2017, 2018 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2016, 2017, 2018, 2023 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2016, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Rutger Helling <rhelling@mykolab.com>
@@ -42,6 +42,9 @@
 (define-public w3m
   (package
     (name "w3m")
+    ;; When updating, be careful not to change the derivation of w3m-for-tests,
+    ;; unless you mean to. Changing w3m-for-tests will cause thousands of
+    ;; rebuilds via the reverse dependency graph of xdg-utils.
     (version "0.5.3+git20230121")
     (source (origin
               (method git-fetch)
@@ -86,3 +89,21 @@ window.  Moreover, w3m can be used as a text formatting tool which
 typesets HTML into plain text.")
     (license (x11-style "file://doc/README"
                         "See 'doc/README' in the distribution."))))
+
+;; Used in the test suite of xdg-utils
+(define-public w3m-for-tests
+  (hidden-package
+   (package
+     (inherit w3m)
+     (name "w3m")
+     (version "0.5.3+git20230121")
+     (source (origin
+               (method git-fetch)
+               ;; Debian's fork of w3m is the only one that is still maintained.
+               (uri (git-reference
+                     (url "https://salsa.debian.org/debian/w3m.git")
+                     (commit (string-append "v" version))))
+               (file-name (git-file-name name version))
+               (sha256
+                (base32
+                 "0nvhxsqxgxjrr62mvxzhhfzvbvg56g19vlqcgb8mh2x1daazk5ms")))))))
diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm
index 8ed2822bb9..f516e975c1 100644
--- a/gnu/packages/web-browsers.scm
+++ b/gnu/packages/web-browsers.scm
@@ -159,14 +159,14 @@ management, extensions such as advertisement blocker and colorful tabs.")
 (define-public links
   (package
     (name "links")
-    (version "2.28")
+    (version "2.29")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://links.twibright.com/download/"
                                   "links-" version ".tar.bz2"))
               (sha256
                (base32
-                "1d2lyj9k2s6brk38k51qfpddwh2w96w6gh9jq5br9rfy2fdlkm9g"))))
+                "163rmng8zkwy0pv9wxcpc0j3gz27g8ba9myrgs7ny6lfng09dai2"))))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -468,7 +468,7 @@ interface.")
 (define-public qutebrowser
   (package
     (name "qutebrowser")
-    (version "2.5.3")
+    (version "2.5.4")
     (source
      (origin
        (method url-fetch)
@@ -476,7 +476,7 @@ interface.")
                            "qutebrowser/releases/download/v" version "/"
                            "qutebrowser-" version ".tar.gz"))
        (sha256
-        (base32 "10fpr414nadqba33xgvbpaacc5sn0xnpnnljf5a3n8yh6hjg4pl4"))))
+        (base32 "1c8skkc5vjbvbslz65hzrj9d05v4zbcjbli61ikjmr174lhb4q54"))))
     (build-system python-build-system)
     (native-inputs
      (list python-attrs))               ; for tests
@@ -711,7 +711,7 @@ is fully configurable and extensible in Common Lisp.")
 (define-public lagrange
   (package
     (name "lagrange")
-    (version "1.15.4")
+    (version "1.15.5")
     (source
      (origin
        (method url-fetch)
@@ -719,7 +719,7 @@ is fully configurable and extensible in Common Lisp.")
         (string-append "https://git.skyjake.fi/skyjake/lagrange/releases/"
                        "download/v" version "/lagrange-" version ".tar.gz"))
        (sha256
-        (base32 "117n1v8vr966lah98g22zn15y3d2va0mf1yj99smn5dizy75akm9"))
+        (base32 "187h42qqddf7595bzf0wb2vc9yd76ad99vbwl9sdhmy8d6qma6gs"))
        (modules '((guix build utils)))
        (snippet
         '(begin
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 24f5021889..f17f47f1e0 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -3544,16 +3544,18 @@ object knows about.")
 (define-public perl-http-daemon
   (package
     (name "perl-http-daemon")
-    (version "6.01")
+    (version "6.14")
     (source (origin
              (method url-fetch)
              (uri (string-append
-                   "mirror://cpan/authors/id/G/GA/GAAS/HTTP-Daemon-"
+                   "mirror://cpan/authors/id/O/OA/OALDERS/HTTP-Daemon-"
                    version ".tar.gz"))
              (sha256
               (base32
-               "1hmd2isrkilf0q0nkxms1q64kikjmcw9imbvrjgky6kh89vqdza3"))))
+               "079fkcq2vdrzdf0bml52kz73n9gdv1xg0qf72c9v505v7izpwxph"))))
     (build-system perl-build-system)
+    (native-inputs
+     (list perl-module-build perl-test-needs))
     (propagated-inputs
      (list perl-http-message perl-lwp-mediatypes))
     (license license:perl-license)
@@ -3616,7 +3618,7 @@ processing of request data as it arrives.")
 (define-public perl-http-message
   (package
     (name "perl-http-message")
-    (version "6.18")
+    (version "6.37")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -3624,10 +3626,10 @@ processing of request data as it arrives.")
                    version ".tar.gz"))
              (sha256
               (base32
-               "04lih0fn89jpyk74c4aq1rzq18h8v4zd3x0lik2r9dl8sdqd2q6h"))))
+               "00nq0xnpdba4valzgvzy3fgvck1ijrksdyzb4w9q6j72hl5dln8f"))))
     (build-system perl-build-system)
     (native-inputs
-     (list perl-try-tiny))
+     (list perl-test-needs perl-try-tiny))
     (propagated-inputs
      (list perl-encode-locale perl-http-date perl-io-html
            perl-lwp-mediatypes perl-uri))
@@ -3855,14 +3857,14 @@ and IPv6 sockets, intended as a replacement for IO::Socket::INET.")
 (define-public perl-io-socket-ssl
   (package
     (name "perl-io-socket-ssl")
-    (version "2.074")
+    (version "2.081")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/S/SU/SULLR/"
                                   "IO-Socket-SSL-" version ".tar.gz"))
               (sha256
                (base32
-                "0cm810ys5az6z3h3pql71jpliva1gfd0dxwwh4lx194xwimnnj1n"))))
+                "0hw4c62abq0cs3ixi0ws96i2y0fij3452514dlqn7d6nm0kgig87"))))
     (build-system perl-build-system)
     (propagated-inputs
      (list perl-net-ssleay
@@ -6520,6 +6522,32 @@ internetarchive python module for programmatic access to archive.org.")
 snippets on @url{https://commandlinefu.com}.")
       (license license:expat))))
 
+(define-public nntpit
+  (let ((commit "c0d654736460d174a680b2e06c3a81ce883fc09a")
+        (revision "0"))
+    (package
+      (name "nntpit")
+      (version (git-version "0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/taviso/nntpit")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1kkdh2qpkfw97hzw9jsxy5jzmhhv8261bj63mvr5c9qwlp6qs46g"))))
+      (build-system gnu-build-system)
+      (native-inputs (list autoconf automake glib pkg-config))
+      (inputs (list curl json-c libev))
+      (synopsis "Minimal reddit2nntp gateway server")
+      (description
+       "This is a simple reddit2nntp gateway server that lets you use a newsreader
+ to follow discussions on reddit.  The intention is for you to run it locally,
+ tell your newsreader to connect to localhost, and subreddits will appear as newsgroups!")
+      (home-page "https://github.com/taviso/nntpit")
+      (license license:expat))))
+
 (define-public rss-bridge
   (package
     (name "rss-bridge")
diff --git a/gnu/packages/webkit.scm b/gnu/packages/webkit.scm
index 8ef95ce518..815105800b 100644
--- a/gnu/packages/webkit.scm
+++ b/gnu/packages/webkit.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2022, 2023 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -36,6 +36,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
+  #:use-module (gnu packages c)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages enchant)
@@ -123,20 +124,19 @@ the WPE-flavored port of WebKit.")
 engine that uses Wayland for graphics output.")
     (license license:bsd-2)))
 
-(define %webkit-version "2.38.5")
-
 (define-public webkitgtk
   (package
     (name "webkitgtk")                  ; webkit2gtk4
-    (version %webkit-version)
+    (version "2.40.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.webkitgtk.org/releases/"
                                   name "-" version ".tar.xz"))
               (sha256
-               (base32 "19y1n05mp370mq4bp2bk0pm3wk49z9a10azjjdcdyx12091hrhj0"))
+               (base32 "14xkgamqlshxqw6fcslvw0yzj4y5mvx66b6bn64rwrl9pyhpwq54"))
               (patches (search-patches
-                        "webkitgtk-adjust-bubblewrap-paths.patch"))))
+                        "webkitgtk-adjust-bubblewrap-paths.patch"
+                        "webkitgtk-libelogind.patch"))))
     (build-system cmake-build-system)
     (outputs '("out" "doc" "debug"))
     (arguments
@@ -148,18 +148,26 @@ engine that uses Wayland for graphics output.")
       ;; binaries require 20 GiB of memory to link (even with ld.gold or lld)
       ;; and produce 4.6 GiB of debug symbols.
       #:build-type "Release"
-      #:configure-flags #~(list
-                           "-DPORT=GTK"
-                           ;; GTKDOC will be removed upstream soon in favor of
-                           ;; gi-docgen; it is normally disabled because the
-                           ;; doc is rather expensive to build.
-                           "-DENABLE_GTKDOC=ON"
-                           ;; The minibrowser, not built by default, is a good
-                           ;; tool to validate the good operation of
-                           ;; webkitgtk.
-                           "-DENABLE_MINIBROWSER=ON"
-                           ;; The default lib installation prefix is lib64.
-                           (string-append "-DLIB_INSTALL_DIR=" #$output "/lib"))
+      #:configure-flags
+      #~(list "-DPORT=GTK"
+              ;; GTKDOC will be removed upstream soon in favor of
+              ;; gi-docgen; it is normally disabled because the
+              ;; doc is rather expensive to build.
+              "-DENABLE_GTKDOC=ON"
+              ;; The minibrowser, not built by default, is a good
+              ;; tool to validate the good operation of
+              ;; webkitgtk.
+              "-DENABLE_MINIBROWSER=ON"
+              ;; The default lib installation prefix is lib64.
+              (string-append "-DLIB_INSTALL_DIR=" #$output "/lib")
+              ;; XXX: WebKitGTK makes use of elogind's systemd-compatible
+              ;; headers, which are under the include/elogind prefix.  The WTF
+              ;; component doesn't propagate the Journald header correctly
+              ;; detected (stubs from elogind), hence the following hack (see:
+              ;; https://bugs.webkit.org/show_bug.cgi?id=254495).
+              (string-append "-DCMAKE_CXX_FLAGS=-I"
+                             (search-input-directory
+                              %build-inputs "include/elogind")))
       ;; The build may fail with -j1 (see:
       ;; https://bugs.webkit.org/show_bug.cgi?id=195251).
       #:make-flags #~(list "-j" (number->string (max 2 (parallel-job-count))))
@@ -186,13 +194,6 @@ engine that uses Wayland for graphics output.")
               (substitute* "Source/cmake/OptionsCommon.cmake"
                 (("if \\(LD_SUPPORTS_DISABLE_NEW_DTAGS\\)")
                  "if (FALSE)"))))
-          (add-after 'unpack 'help-cmake-find-elogind
-            (lambda _
-              (substitute* "Source/cmake/FindJournald.cmake"
-                ;; Otherwise, CMake would throw an error because it relies on
-                ;; the pkg-config search to locate headers.
-                (("pkg_check_modules\\(PC_SYSTEMD QUIET libsystemd")
-                 "pkg_check_modules(PC_SYSTEMD QUIET libelogind"))))
           (add-after 'unpack 'embed-absolute-wpebackend-reference
             (lambda* (#:key inputs #:allow-other-keys)
               (let ((wpebackend-fdo (assoc-ref inputs "wpebackend-fdo")))
@@ -222,7 +223,8 @@ engine that uses Wayland for graphics output.")
            pkg-config
            python-wrapper
            gi-docgen
-           ruby))
+           ruby
+           unifdef))
     (propagated-inputs
      (list gtk+ libsoup))
     (inputs
@@ -233,11 +235,11 @@ engine that uses Wayland for graphics output.")
            geoclue
            gst-plugins-base
            gst-plugins-bad-minimal
-           gtk+-2
            harfbuzz
            hyphen
            icu4c
            lcms
+           libavif
            libgcrypt
            libgudev
            libjpeg-turbo
@@ -290,7 +292,7 @@ propagated by default) such as @code{gst-plugins-good} and
        (replace "gtk+" gtk)))
     (inputs
      (modify-inputs (package-inputs webkitgtk)
-       (delete "gtk+-2" "libnotify")))))
+       (delete "libnotify")))))
 
 ;;; Required by e.g. emacs-next-pgtk, emacs-xwidgets, and some other GNOME
 ;;; packages for webkit2gtk-4.0.  See also the upstream tracker for libsoup 3:
@@ -309,13 +311,13 @@ propagated by default) such as @code{gst-plugins-good} and
   (package
     (inherit webkitgtk)
     (name "wpewebkit")
-    (version %webkit-version)
+    (version "2.40.0")
     (source (origin
               (inherit (package-source webkitgtk))
               (uri (string-append "https://wpewebkit.org/releases/"
                                   name "-" version ".tar.xz"))
               (sha256
-               (base32 "0q8nmk9l6bqv2bhljm9wv7mvgdl393z7v2m7a0c5avac18yzs07z"))))
+               (base32 "1dl663nbm011sx099x9gdhk3aj119yn5rxp77jmnhdv1l77jpv58"))))
     (arguments
      (substitute-keyword-arguments (package-arguments webkitgtk)
        ((#:configure-flags flags)
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index c480f68aa6..cd0c122fca 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -134,6 +134,7 @@
   #:use-module (gnu packages maths)
   #:use-module (gnu packages mpd)
   #:use-module (gnu packages pciutils)
+  #:use-module (gnu packages music)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
@@ -747,7 +748,7 @@ desktop environment.")
 (define-public icewm
   (package
     (name "icewm")
-    (version "3.3.1")
+    (version "3.3.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -755,7 +756,7 @@ desktop environment.")
                     version "/icewm-" version ".tar.lz"))
               (sha256
                (base32
-                "1m0jl9d2ikwb1s2cpm3q7f73h84mai9y31k8bhsq8y47jbkc6slk"))))
+                "1mp1xl64sin3d4nkh19qmnic1c9qcwf9v7mkzji76pg3mzd823jg"))))
     (build-system gnu-build-system)
     (native-inputs (list pkg-config))
     (inputs (list fontconfig
@@ -1063,6 +1064,28 @@ experience.")
     (home-page "http://fluxbox.org/")
     (license license:expat)))
 
+(define-public fbautostart
+  (package
+    (name "fbautostart")
+    (version "2.718281828")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/paultag/fbautostart.git")
+                     (commit version)))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "13h6j5khi5axqhflzhayzgvyhxylmk5vsgin235ji440mzd516gz"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     (list autoconf automake))
+    (synopsis "XDG autostarter for Fluxbox window manager")
+    (description "This package provides an autostarter complaint with
+the XDG Autostart specification.")
+    (home-page "https://github.com/paultag/fbautostart")
+    (license license:expat)))
+
 (define-public fnott
   (package
     (name "fnott")
@@ -1396,7 +1419,7 @@ It is inspired by Xmonad and dwm.  Its major features include:
                 (mkdir-p xsessions)
                 (make-desktop-entry-file
                  (string-append xsessions "/cwm.desktop")
-                 #:name: cwm
+                 #:name "cwm"
                  #:exec (string-append #$output "/bin/cwm")
                  #:try-exec (string-append #$output "/bin/cwm")
                  #:comment '((#f "OpenBSD Calm Window Manager fork")))))))))
@@ -1789,7 +1812,7 @@ compository, supporting the following featuers:
 (define-public waybar
   (package
     (name "waybar")
-    (version "0.9.16")
+    (version "0.9.17")
     (source
      (origin
        (method git-fetch)
@@ -1798,7 +1821,7 @@ compository, supporting the following featuers:
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "06vwsax8z6vvvav4c1d40nfiljc7h1cla57r43nv8dw86n539ic5"))))
+        (base32 "1709ck7931804mhirnki03cvx60c4dxg668fyz6jpzy8djg5xlxi"))))
     (build-system meson-build-system)
     (inputs (list date
                   fmt
@@ -1810,6 +1833,7 @@ compository, supporting the following featuers:
                   libmpdclient
                   libnl
                   libxml2
+                  playerctl
                   pulseaudio
                   spdlog
                   wayland))
@@ -1849,6 +1873,14 @@ core/thread.")
     (home-page "https://github.com/plattfot/cpu-histogram/")
     (license license:expat)))
 
+(define-public waybar-experimental
+  (let ((base waybar))
+    (package/inherit base
+      (name "waybar-experimental")
+      (arguments
+       (list #:configure-flags #~(list "-Dexperimental=true")))
+      (synopsis "Waybar with experimental features"))))
+
 (define-public wlr-randr
   (package
     (name "wlr-randr")
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index ae6305b425..2bb740ce8d 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -42,7 +42,7 @@
 ;;; Copyright © 2020 James Smith <jsubuntuxp@disroot.org>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2020, 2021 Zheng Junjie <873216071@qq.com>
-;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021, 2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Renzo Poddighe <renzo@poddighe.nl>
@@ -58,6 +58,7 @@
 ;;; Copyright © 2022 Wamm K. D. <jaft.r@outlook.com>
 ;;; Copyright © 2022 Tobias Kortkamp <tobias.kortkamp@gmail.com>
 ;;; Copyright © 2023 Yovan Naumovski <yovan@gorski.stream>
+;;; Copyright © 2023 Jake Leporte <jakeleporte@outlook.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -133,6 +134,8 @@
   #:use-module (gnu packages qt)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages syncthing)
+  #:use-module (gnu packages tex)
+  #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages terminals)
   #:use-module (gnu packages xml)
@@ -360,7 +363,7 @@ with X11 or Wayland, or in a text terminal with ncurses.")
 (define-public copyq
 (package
   (name "copyq")
-  (version "6.3.2")
+  (version "7.0.0")
   (source (origin
             (method git-fetch)
             (uri (git-reference
@@ -369,7 +372,7 @@ with X11 or Wayland, or in a text terminal with ncurses.")
             (file-name (git-file-name name version))
             (sha256
              (base32
-              "0qdf7lr6bdmsnz1k5nnzmbv4h0xj8jqg92x6089qdaz5s87x7vqr"))))
+              "0h8jz7v5xvpq23dh1sr600q5jlrfzm6wsnp7sln8hbgsn96n8kas"))))
   (build-system cmake-build-system)
   (arguments
    (list
@@ -2313,6 +2316,47 @@ before the system goes to sleep.")
       (home-page "https://bitbucket.org/raymonad/xss-lock")
       (license license:expat))))
 
+(define-public physlock
+  (package
+    (name "physlock")
+    (version "13")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/xyb3rt/physlock")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1mz4xxjip5ldiw9jgfq9zvqb6w10bcjfx6939w1appqg8f521a7s"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:tests? #f ;no tests
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)
+
+               (add-after 'unpack 'fix-makefile
+                 (lambda _
+                   (substitute* "main.c" ; remove extra newline in the prompt
+                     (("(fprintf.vt.ios, .%s.)\\n(., options->prompt)" all start end)
+                      (string-append start end)))
+                   (substitute* "Makefile" (("-m 4755 -o root -g root") "")))))
+
+           #:make-flags
+           #~(list "HAVE_SYSTEMD=0" "HAVE_ELOGIND=1"
+                   (string-append "CC=" #$(cc-for-target))
+                   (string-append "PREFIX=" #$output))))
+    (native-inputs (list linux-pam elogind))
+    (synopsis "Screen lock utility")
+    (description
+     "@command{physlock} locks all virtual terminals at once, only allowing the
+user of the active session (the user logged into the foreground virtual
+terminal) to unlock the computer.  It is an alternative to @command{vlock -an},
+written to overcome vlock's limitations regarding hibernate and suspend.")
+    (home-page "https://github.com/xyb3rt/physlock")
+    (license license:gpl2+)))
+
 (define-public python-pyperclip
   (package
     (name "python-pyperclip")
@@ -2768,52 +2812,19 @@ Xwrits hides itself until you should take another break.")
        (file-name (git-file-name name version))
        (sha256
         (base32 "14gnkz18dipsa2v24f4nm9syxaa7g21iqjm7y65jn849ka2jr1h8"))))
-    (build-system scons-build-system)
-    (inputs
-     (list libx11))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("googletest" ,googletest)
-       ("googletest-source" ,(package-source googletest))))
+    (build-system cmake-build-system)
     (arguments
-     `(#:scons ,scons-python2
-       #:scons-flags
-       (list ,(string-append "CC=" (cc-for-target)))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'patch-sconstruct
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "SConstruct"
-               ;; scons doesn't pick up environment variables automatically
-               ;; so it needs help to find path variables
-               (("env = Environment\\(")
-                "env = Environment(
-                         ENV = {
-                           'PATH': os.environ['PATH'],
-                           'CPATH': os.environ['C_INCLUDE_PATH'],
-                           'LIBRARY_PATH': os.environ['LIBRARY_PATH'],
-                           'PKG_CONFIG_PATH': os.environ['PKG_CONFIG_PATH']
-                         },")
-               ;; Update path to gtest source files used in tests
-               (("/usr/src/gtest") (string-append
-                                    (assoc-ref inputs "googletest-source")
-                                    "/googletest"))
-               ;; Exclude one warning that causes a build error
-               (("-Werror") "-Werror -Wno-error=sign-compare"))
-             #t))
-         ;; The SConstruct script doesn't configure installation so
-         ;; binaries must be copied to the output path directly
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin"))
-                    (man (string-append out "/share/man/man1")))
-               (mkdir-p bin)
-               (install-file "xsettingsd" bin)
-               (install-file "dump_xsettings" bin)
-               (install-file "xsettingsd.1" man)
-               (install-file "dump_xsettings.1" man)
-               #t))))))
+     (list #:configure-flags #~(list "-DBUILD_TESTING=ON")
+           #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'disable-problematic-tests
+                          (lambda _
+                            (substitute* "config_parser_test.cc"
+                              ;; This test fails for unknown reasons (see:
+                              ;; https://github.com/derat/xsettingsd/issues/30).
+                              (("TEST\\(CharStreamTest, Basic")
+                               "TEST(CharStreamTest, DISABLED_Basic")))))))
+    (inputs (list libx11))
+    (native-inputs (list pkg-config googletest))
     (home-page "https://github.com/derat/xsettingsd")
     (synopsis "Xorg settings daemon")
     (description "@command{xsettingsd} is a lightweight daemon that provides settings to
@@ -3399,7 +3410,7 @@ keyboard input, mouse actions, etc.  programmatically or manually.")
 (define-public wvkbd
   (package
     (name "wvkbd")
-    (version "0.12")
+    (version "0.13")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3408,7 +3419,7 @@ keyboard input, mouse actions, etc.  programmatically or manually.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "05zl6jhw7pj7w2cd02m3i0zzn1z99kzwh2mlg9h96j5aw1x1lvp6"))))
+                "15jzmgydhbkdn1r885p9wm5sqnj4h7znkqk71f7d3x359l051sh7"))))
     (build-system gnu-build-system)
     (arguments
      (list #:tests? #f ;no tests
@@ -3445,3 +3456,58 @@ the following features:
 @end itemize")
     (license (list license:expat  ;3 files under Expat license (see 'LICENSE')
                    license:gpl3+))))              ;the rest is GPLv3+
+
+(define-public xforms
+  ;; The latest stable release is ancient (2014) and fails with a linker
+  ;; error, so use the last commit.
+  (let ((revision "1")
+        (commit "2c1a9f151baf50887a517280645ec23379fb96f8"))
+    (package
+      (name "xforms")
+      (version (git-version "1.3.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://git.savannah.gnu.org/git/xforms.git/")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "12qc1j5g03n2zigvbwilx2zszr8sgv5wd259js7cwf8ffw4lzjf2"))))
+      (build-system gnu-build-system)
+      (arguments
+       (list #:phases #~(modify-phases %standard-phases
+                          (add-after 'unpack 'patch-doc-makefile
+                            (lambda _
+                              (substitute* "doc/Makefile.am"
+                                (("/bin/mkdir")
+                                 "mkdir")))))
+             #:configure-flags #~(list "--enable-docs")))
+      (native-inputs (list autoconf
+                           automake
+                           libtool
+                           texinfo
+                           texi2html
+                           (texlive-updmap.cfg (list texlive-epsf
+                                                     texlive-tex-texinfo))
+                           imagemagick))
+      (propagated-inputs (list libx11 libxpm libjpeg-turbo))
+      (home-page "http://xforms-toolkit.org/")
+      (synopsis "GUI toolkit for X based on the X11 Xlib library")
+      (description
+       "XForms is a graphical user interface toolkit for X based on the X11
+Xlib library.  It allows you to create windows, containing all kinds of
+widgets (buttons, sliders, browsers, menus etc.) with a few lines of code and
+then attach actions to the widgets, i.e., have some function called when a
+button is pressed.  To make this even easier XForms comes with a program
+called @code{fdesign} that allows you to design a GUI for a program directly
+on the screen and which then writes out the necessary C code for it.")
+      (license license:lgpl2.1+))))
+
+(define-public xforms-gl
+  (package/inherit xforms
+    (name "xforms-gl")
+    (propagated-inputs (modify-inputs (package-propagated-inputs xforms)
+                         (append mesa)))
+    (synopsis
+     "GUI toolkit for X based on the X11 Xlib library, with OpenGL support")))
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index 5223c3a38c..5cc64ac735 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -185,7 +185,7 @@ storage system.")
 (define-public libxfce4ui
   (package
     (name "libxfce4ui")
-    (version "4.18.2")
+    (version "4.18.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -193,7 +193,7 @@ storage system.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "01wlwigrq5icf6bz3waqxjd066hm0z397crxnlz0ri764w22sq5d"))))
+                "1g8a067xbazgh0qc25nc7k1zc6aqmznhh4vy5wnn3aykxrpa98xg"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -330,7 +330,7 @@ development.")
 (define-public garcon
   (package
     (name "garcon")
-    (version "4.18.0")
+    (version "4.18.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -338,7 +338,7 @@ development.")
                                   "garcon-" version ".tar.bz2"))
               (sha256
                (base32
-                "050sy6l4xzqibz4kqxymkc37rqpg37vsf48wnw18b2vaas3k8qsl"))))
+                "02y2nkxwx5mp1w6x2ydi3hpgymk7159zvyzk70afp5dcdlm96ypy"))))
     (build-system gnu-build-system)
     (native-inputs
      (list `(,glib "bin") gobject-introspection intltool pkg-config))
@@ -396,7 +396,7 @@ management D-Bus specification.")
 (define-public xfce4-panel
   (package
     (name "xfce4-panel")
-    (version "4.18.2")
+    (version "4.18.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -404,7 +404,7 @@ management D-Bus specification.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "1hbxwlw806qj7z1169ahwgkl1fm789z22r6dszddx2wzv8w9qv3w"))
+                "06sy6vjydx1p8rx8z94ya6szvmvyarijl5x0pm5ij4cqbihviq2a"))
               (patches (search-patches "xfce4-panel-plugins.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -469,7 +469,7 @@ applications menu, workspace switcher and more.")
 (define-public xfce4-clipman-plugin
   (package
     (name "xfce4-clipman-plugin")
-    (version "1.6.2")
+    (version "1.6.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/panel-plugins/"
@@ -477,7 +477,7 @@ applications menu, workspace switcher and more.")
                                   "xfce4-clipman-plugin-" version ".tar.bz2"))
               (sha256
                (base32
-                "1f4rjdvyplfkrdqg9179chzxx18k3lx29674j28piccgyvk5z2mb"))))
+                "044s9hwl9pnygmfc5lk3ndf4ibjq829zpv4qxsf9bz0pcabiy771"))))
     (build-system gnu-build-system)
     (native-inputs
      (list intltool pkg-config))
@@ -496,7 +496,7 @@ matching them against regular expressions.")
 (define-public xfce4-pulseaudio-plugin
   (package
     (name "xfce4-pulseaudio-plugin")
-    (version "0.4.5")
+    (version "0.4.6")
     (source
      (origin
        (method url-fetch)
@@ -505,7 +505,7 @@ matching them against regular expressions.")
                            (version-major+minor version) "/"
                            "xfce4-pulseaudio-plugin-" version ".tar.bz2"))
        (sha256
-        (base32 "05f12fzn8q1y7jkzanxy82pzl00km66gngb5j6d5k8kbx9ykj9a4"))))
+        (base32 "05k02ilvffddgbp6in9wpjvg6vzlcxxw09nmj29hzba44klc04bf"))))
     (build-system gnu-build-system)
     (native-inputs
      (list intltool pkg-config dbus-glib dbus))
@@ -628,7 +628,7 @@ your system in categories, so you can quickly find and launch them.")
 (define-public xfce4-session
   (package
     (name "xfce4-session")
-    (version "4.18.1")
+    (version "4.18.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -636,7 +636,7 @@ your system in categories, so you can quickly find and launch them.")
                                   "xfce4-session-" version ".tar.bz2"))
               (sha256
                (base32
-                "1ky54pc0zi2q3qkpmccr3qa4c08j5c6bb6xxiczdnngjxrz9anhw"))
+                "12pbppyhg0jdwswwk59fffh2n5ckpfvwc999zkg1l2f2skl7zzq1"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -791,7 +791,7 @@ and import the new pictures from your camera.")
 (define-public thunar-archive-plugin
   (package
     (name "thunar-archive-plugin")
-    (version "0.5.0")
+    (version "0.5.1")
     (source
      (origin
        (method url-fetch)
@@ -799,7 +799,7 @@ and import the new pictures from your camera.")
                            name "/" (version-major+minor version)
                            "/" name "-" version ".tar.bz2"))
        (sha256
-        (base32 "1ykg6qj65l5wywpbiiabidjxzvrhv6q4v63jxb6mlai8b2iqijlf"))))
+        (base32 "1vcbbmh2vw43231c7vbkwc35pmhj7ixb65fvssrwfxydsfqkl6x8"))))
     (build-system gnu-build-system)
     (native-inputs (list pkg-config intltool))
     (inputs (list exo thunar gtk+))
@@ -1005,7 +1005,7 @@ local and remote file systems and manage bookmarks of such.")
 (define-public parole
   (package
     (name "parole")
-    (version "4.16.0")
+    (version "4.18.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/apps/"
@@ -1013,7 +1013,7 @@ local and remote file systems and manage bookmarks of such.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "1rx7apylqb7mf1dl0sswj1630fca3ddk4x1gcdmlv5ykrkc5lc0d"))))
+                "0w9p9zf87pnpl44bay8srrsczscxpmbsriwzqzv31gis9ny2zrdv"))))
     (build-system gnu-build-system)
     (arguments
      (list
@@ -1040,7 +1040,8 @@ local and remote file systems and manage bookmarks of such.")
            gst-plugins-good
            libnotify
            libxfce4ui
-           libxfce4util))
+           libxfce4util
+           taglib))
     (home-page "https://www.xfce.org/")
     (synopsis "Media player based on the GStreamer framework")
     (description "Parole is a modern simple media player based on the
@@ -1338,7 +1339,7 @@ several different time zones.")
 (define-public xfce4-notifyd
   (package
     (name "xfce4-notifyd")
-    (version "0.8.0")
+    (version "0.8.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/apps/"
@@ -1346,10 +1347,22 @@ several different time zones.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "1jcmcjq2kay9kmzd5j5l8kasrzqb7aidp26q4nbmxghxxa3ncyf7"))))
+                "115fy87lcn9scwx52kjs0g250q2d3r10sahl6l8l38fs13dqm8p3"))))
     (build-system glib-or-gtk-build-system)
+    (arguments
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'configure 'patch-configure
+                 (lambda _
+                   (substitute* "configure"
+                     (("\\$PKG_CONFIG --variable=gdbus_codegen gio-2.0")
+                      "which gdbus-codegen")
+                     (("\\$PKG_CONFIG --variable=glib_compile_resources gio-2.0")
+                      "which glib-compile-resources")
+                     (("\\$PKG_CONFIG --variable=glib_genmarshal glib-2.0")
+                      "which glib-genmarshal")))))))
     (native-inputs
-     (list intltool pkg-config))
+     (list intltool pkg-config (list glib "bin") which))
     (inputs
      (list libxfce4ui libnotify sqlite xfce4-panel))
     (home-page "https://goodies.xfce.org/projects/applications/xfce4-notifyd")
@@ -1366,7 +1379,7 @@ sending standard messages over D-Bus using the
 (define-public xfburn
   (package
     (name "xfburn")
-    (version "0.6.2")
+    (version "0.7.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/apps/xfburn/"
@@ -1374,7 +1387,7 @@ sending standard messages over D-Bus using the
                                   "xfburn-" version ".tar.bz2"))
               (sha256
                (base32
-                "09q3s2rkpf0ljzq6bv4hl9byvaggjq7lchfw5zaircwv5q9nwhc3"))))
+                "0i8zpgp4mj78pn2023pdhzb7552r3b52phzp2gjr6jq4kakhx5ms"))))
     (build-system gnu-build-system)
     (native-inputs
      (list intltool pkg-config))
@@ -1469,7 +1482,7 @@ A plugin for the Xfce panel is also available.")
 (define-public xfce4-screensaver
   (package
     (name "xfce4-screensaver")
-    (version "4.16.0")
+    (version "4.18.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/apps/"
@@ -1479,7 +1492,7 @@ A plugin for the Xfce panel is also available.")
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "13962rkc7nn3yigv1km8w0z7g41kj2bxmrrwx2f6gnv27qz18kbd"))))
+                "0p2an3g5jlhmr60if319cfgkqacziym52csj7dfwq64assmyhcdp"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/xiph.scm b/gnu/packages/xiph.scm
index 96651c03a0..b47c718fb6 100644
--- a/gnu/packages/xiph.scm
+++ b/gnu/packages/xiph.scm
@@ -130,7 +130,7 @@ compressed video format.")
 (define-public speex
   (package
     (name "speex")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
      (origin
       (method url-fetch)
@@ -138,7 +138,7 @@ compressed video format.")
                           version ".tar.gz"))
       (sha256
        (base32
-        "150047wnllz4r94whb9r73l5qf0z5z3rlhy98bawfbblmkq8mbpa"))))
+        "1spy51kaxfhpj8171gn1s69wz82nzkz2k0x7k0nhldwangrd8i2b"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
@@ -160,14 +160,14 @@ stereo encoding, and voice activity detection.")
 (define-public speexdsp
   (package
     (name "speexdsp")
-    (version "1.2.0")
+    (version "1.2.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://downloads.xiph.org/releases/speex/"
                                   "speexdsp-" version ".tar.gz"))
               (sha256
                (base32
-                "0wa7sqpk3x61zz99m7lwkgr6yv62ml6lfgs5xja65vlvdzy44838"))))
+                "0gadnnpg9994cindpnw35j45dnr4bflkig1aqxlrafd6wi1p6xwc"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--disable-static"
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index cd867cc410..c510547559 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -24,7 +24,7 @@
 ;;; Copyright © 2020 Liliana Marie Prikler <liliana.prikler@gmail.com>
 ;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Jean-Baptiste Note <jean-baptiste.note@m4x.org>
 ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
@@ -6007,125 +6007,125 @@ basic eye-candy effects.")
 (define-public xpra
   (package
     (name "xpra")
-    (version "4.4.3")
+    (version "4.4.4")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.xpra.org/src/xpra-"
                            version ".tar.xz"))
        (sha256
-        (base32 "03ypmkh5f1ygag3wnq776dn8gpy3aq8f0xv40ab5rjisix7lgfwg"))
+        (base32 "1cf04syxjjj965754m6r2hgq87k1sv0pwvn6mn7xy4w2588bvxm0"))
        (patches (search-patches "xpra-4.2-systemd-run.patch"
                                 "xpra-4.2-install_libs.patch"))))
     (build-system python-build-system)
-    ;; see also http://xpra.org/trac/wiki/Dependencies
-    (inputs `(("bash-minimal" ,bash-minimal)    ; for wrap-program
-              ;; Essential dependencies.
-              ("libjpeg" ,libjpeg-turbo)
-              ("libwebp" ,libwebp)
-              ("ffmpeg" ,ffmpeg)
-              ("libx11" ,libx11)
-              ("libxrandr" ,libxrandr)
-              ("libxtst" ,libxtst)
-              ("libxfixes" ,libxfixes)
-              ("libxkbfile" ,libxkbfile)
-              ("libxcomposite" ,libxcomposite)
-              ("libxdamage" ,libxdamage)
-              ("libxext" ,libxext)
-              ("libxres" ,libxres)
-              ("lz4" ,lz4)
-              ("gtk+" ,gtk+)
-              ("python-pycairo" ,python-pycairo)
-              ("python-pygobject" ,python-pygobject)
-              ("xauth" ,xauth)
-              ("xorg-server" ,xorg-server)
-              ("xf86-video-dummy" ,xf86-video-dummy)
-              ("xf86-input-mouse" ,xf86-input-mouse)
-              ("xf86-input-keyboard" ,xf86-input-keyboard)
-              ("python-pillow" ,python-pillow)
-              ;; Optional dependencies.
-              ("libx264" ,libx264)
-              ("x265" ,x265)
-              ("libvpx" ,libvpx)
-              ("python-rencode" ,python-rencode) ; For speed.
-              ("python-numpy" ,python-numpy)
-              ("python-pyopengl" ,python-pyopengl) ; Drawing acceleration.
-              ("python-pyopengl-accelerate" ,python-pyopengl-accelerate) ; Same.
-              ("python-paramiko" ,python-paramiko) ; Tunneling over SSH.
-              ("python-dbus" ,python-dbus) ; For desktop notifications.
-              ("dbus" ,dbus)               ; For dbus-launch command.
-              ("python-lz4" ,python-lz4) ; Faster compression than zlib.
-              ("python-netifaces" ,python-netifaces)))
+    (inputs
+     (list bash-minimal                 ; for wrap-program
+           ;; Essential dependencies.
+           libjpeg-turbo
+           libwebp
+           ffmpeg
+           libx11
+           libxrandr
+           libxtst
+           libxfixes
+           libxkbfile
+           libxcomposite
+           libxdamage
+           libxext
+           libxres
+           lz4
+           gtk+
+           python-pycairo
+           python-pygobject
+           xauth
+           xorg-server
+           xf86-video-dummy
+           xf86-input-mouse
+           xf86-input-keyboard
+           python-pillow
+           ;; Optional dependencies.
+           libx264
+           x265
+           libvpx
+           python-rencode               ; For speed.
+           python-numpy
+           python-pyopengl              ; Drawing acceleration.
+           python-pyopengl-accelerate   ; Same.
+           python-paramiko              ; Tunneling over SSH.
+           python-dbus                  ; For desktop notifications.
+           dbus                         ; For dbus-launch command.
+           python-lz4                   ; Faster compression than zlib.
+           python-netifaces))
     (native-inputs (list pkg-config pandoc python-cython))
     (arguments
-     `(#:configure-flags '("--without-Xdummy"
-						   "--without-Xdummy_wrapper"
-                           "--with-opengl"
-                           "--without-debug"
-                           "--without-strict") ; Ignore compiler warnings.
-       #:modules ((guix build python-build-system)
+     (list
+      #:configure-flags #~(list "--without-Xdummy"
+                                "--without-Xdummy_wrapper"
+                                "--with-opengl"
+                                "--without-debug"
+                                "--without-strict") ; Ignore compiler warnings.
+      #:modules '((guix build python-build-system)
                   (guix build utils))
-       #:tests? #f ; Do not run test-cases. This would rebuild all modules and
-                                        ; they seem to require python2.
-       #:phases
-       (modify-phases %standard-phases
-         ;; Must pass the same flags as 'install, otherwise enabled modules may
-         ;; not be built.
-         (replace 'build
-           (lambda* (#:key configure-flags #:allow-other-keys)
-             (apply invoke (append (list "python" "setup.py" "build")
-                                   configure-flags))))
-         (add-before 'install 'fix-paths
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             ;; Fix binary paths.
-             (substitute* '("xpra/scripts/config.py" "xpra/x11/vfb_util.py")
-               (("\"Xvfb\"")
-                (string-append "\"" (assoc-ref inputs "xorg-server") "/bin/Xvfb\""))
-               (("\"Xorg\"")
-                (string-append "\"" (assoc-ref inputs "xorg-server") "/bin/Xorg\""))
-               (("\"xauth\"")
-                (string-append "\"" (assoc-ref inputs "xauth") "/bin/xauth\"")))
-             ;; Fix directory of config files.
-             (substitute* '("xpra/scripts/config.py" "xpra/platform/xposix/paths.py")
-               (("\"/etc/xpra/?\"")
-                (string-append "\"" (assoc-ref outputs "out") "/etc/xpra/\"")))
-             ;; XXX: Stolen from (gnu packages linux)
-             (define (append-to-file name body)
-               (let ((file (open-file name "a")))
-                 (display body file)
-                 (close-port file)))
-             ;; Add Xorg module paths.
-             (append-to-file
-              "fs/etc/xpra/xorg.conf"
-              (string-append "\nSection \"Files\"\nModulePath \""
-                             (assoc-ref inputs "xf86-video-dummy") "/lib/xorg/modules,"
-                             (assoc-ref inputs "xf86-input-mouse") "/lib/xorg/modules,"
-                             (assoc-ref inputs "xf86-input-keyboard") "/lib/xorg/modules,"
-                             (assoc-ref inputs "xorg-server") "/lib/xorg/modules\"\n"
-                             "EndSection\n\n"))
-             (substitute* '("xpra/scripts/config.py"
-                            "fs/etc/xpra/conf.d/60_server.conf.in"
-                            "tests/unittests/unit/server/mixins/notification_test.py")
-               ;; The trailing -- is intentional, so we only replace it inside
-               ;; a command line.
-               (("dbus-launch --")
-                (string-append (search-input-file inputs "/bin/dbus-launch")
-                               " --")))
-             ;; /run/user does not exist on guix system
-             (substitute* "./xpra/scripts/config.py"
-               (("socket-dir.*: \"\",")
-                "socket-dir\"        : \"~/.xpra\","))
-             #t))
-         ;; GTK3 will not be found, if GI can’t find its typelibs.
-         (add-after
-             'install 'wrap-program
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((prog (string-append (assoc-ref outputs "out")
-                                        "/bin/xpra")))
-               ;; XXX: only export typelibs in inputs
-               (wrap-program prog
-                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
-               #t))))))
+      ;; Do not run test-cases.  This would rebuild all modules and they seem
+      ;; to require python2.
+      #:tests? #f
+      #:phases
+      #~(modify-phases %standard-phases
+          ;; Must pass the same flags as 'install, otherwise enabled modules may
+          ;; not be built.
+          (replace 'build
+            (lambda* (#:key configure-flags #:allow-other-keys)
+              (apply invoke (append (list "python" "setup.py" "build")
+                                    configure-flags))))
+          (add-before 'install 'fix-paths
+            (lambda* (#:key inputs #:allow-other-keys)
+              ;; Fix binary paths.
+              (substitute* '("xpra/scripts/config.py"
+                             "xpra/x11/vfb_util.py")
+                (("\"Xvfb\"")
+                 (format #f "~s" (search-input-file inputs "bin/Xvfb")))
+                (("\"Xorg\"")
+                 (format #f "~s" (search-input-file inputs "bin/Xorg")))
+                (("\"xauth\"")
+                 (format #f "~s" (search-input-file inputs "bin/xauth"))))
+              ;; Fix directory of config files.
+              (substitute* '("xpra/scripts/config.py"
+                             "xpra/platform/xposix/paths.py")
+                (("\"/etc/xpra/?\"")
+                 (string-append "\"" #$output "/etc/xpra/\"")))
+              ;; XXX: Stolen from (gnu packages linux)
+              (define (append-to-file name body)
+                (let ((file (open-file name "a")))
+                  (display body file)
+                  (close-port file)))
+              ;; Add Xorg module paths.
+              (append-to-file
+               "fs/etc/xpra/xorg.conf"
+               (string-append
+                "\nSection \"Files\"\nModulePath \""
+                #$(this-package-input "xf86-video-dummy") "/lib/xorg/modules,"
+                #$(this-package-input "xf86-input-mouse") "/lib/xorg/modules,"
+                #$(this-package-input "xf86-input-keyboard") "/lib/xorg/modules,"
+                #$(this-package-input "xorg-server") "/lib/xorg/modules\"\n"
+                "EndSection\n\n"))
+              (substitute* '("xpra/scripts/config.py"
+                             "fs/etc/xpra/conf.d/60_server.conf.in"
+                             "tests/unittests/unit/server/mixins/notification_test.py")
+                ;; The trailing -- is intentional, so we only replace it inside
+                ;; a command line.
+                (("dbus-launch --")
+                 (string-append (search-input-file inputs "/bin/dbus-launch")
+                                " --")))
+              ;; /run/user does not exist on guix system.
+              (substitute* "./xpra/scripts/config.py"
+                (("socket-dir.*: \"\",")
+                 "socket-dir\"        : \"~/.xpra\","))))
+          ;; GTK3 will not be found, if GI can’t find its typelibs.
+          (add-after 'install 'wrap-program
+            (lambda* (#:key outputs #:allow-other-keys)
+              ;; XXX: only export typelibs in inputs
+              (wrap-program (search-input-file outputs "bin/xpra")
+                `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH")))))))))
     (home-page "https://www.xpra.org/")
     (synopsis "Remote access to individual applications or full desktops")
     (description "Xpra is a persistent remote display server and client for
diff --git a/gnu/services/audio.scm b/gnu/services/audio.scm
index d55b804ba9..690409b7a1 100644
--- a/gnu/services/audio.scm
+++ b/gnu/services/audio.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2017 Peter Mikkelsen <petermikkelsen10@gmail.com>
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2022 Bruno Victal <mirai@makinata.eu>
+;;; Copyright © 2022⁠–⁠2023 Bruno Victal <mirai@makinata.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -137,12 +137,22 @@
                                    str)
                                #\-) "_")))
 
-(define list-of-string?
-  (list-of string?))
-
 (define list-of-symbol?
   (list-of symbol?))
 
+;; Helpers for deprecated field types, to be removed later.
+(define %lazy-group (make-symbol "%lazy-group"))
+
+(define (%set-user-group user group)
+  (user-account
+   (inherit user)
+   (group (user-group-name group))))
+
+
+;;;
+;;; MPD
+;;;
+
 (define (mpd-serialize-field field-name value)
   (let ((field (if (string? field-name) field-name
                    (uglify-field-name field-name)))
@@ -159,13 +169,34 @@
 (define mpd-serialize-string mpd-serialize-field)
 (define mpd-serialize-boolean mpd-serialize-field)
 
-(define (mpd-serialize-list-of-string field-name value)
+(define (mpd-serialize-list-of-strings field-name value)
   #~(string-append #$@(map (cut mpd-serialize-string field-name <>) value)))
 
+(define (mpd-serialize-user-account field-name value)
+  (mpd-serialize-string field-name (user-account-name value)))
+
+(define (mpd-serialize-user-group field-name value)
+  (mpd-serialize-string field-name (user-group-name value)))
+
 (define-maybe string (prefix mpd-))
-(define-maybe list-of-string (prefix mpd-))
+(define-maybe list-of-strings (prefix mpd-))
 (define-maybe boolean (prefix mpd-))
 
+(define %mpd-user
+  (user-account
+      (name "mpd")
+      (group %lazy-group)
+      (system? #t)
+      (comment "Music Player Daemon (MPD) user")
+      ;; MPD can use $HOME (or $XDG_CONFIG_HOME) to place its data
+      (home-directory "/var/lib/mpd")
+      (shell (file-append shadow "/sbin/nologin"))))
+
+(define %mpd-group
+  (user-group
+   (name "mpd")
+   (system? #t)))
+
 ;;; TODO: Procedures for deprecated fields, to be removed.
 
 (define mpd-deprecated-fields '((music-dir . music-directory)
@@ -195,6 +226,33 @@
 
 (define-maybe port (prefix mpd-))
 
+;;; Procedures for unsupported value types, to be removed.
+
+(define (mpd-user-sanitizer value)
+  (cond ((user-account? value) value)
+        ((string? value)
+         (warning (G_ "string value for 'user' is deprecated, use \
+user-account instead~%"))
+         (user-account
+          (inherit %mpd-user)
+          (name value)
+          ;; XXX: This is to be lazily substituted in (…-accounts)
+          ;; with the value from 'group'.
+          (group %lazy-group)))
+        (else
+         (configuration-field-error #f 'user value))))
+
+(define (mpd-group-sanitizer value)
+  (cond ((user-group? value) value)
+        ((string? value)
+         (warning (G_ "string value for 'group' is deprecated, use \
+user-group instead~%"))
+         (user-group
+          (inherit %mpd-group)
+          (name value)))
+        (else
+         (configuration-field-error #f 'group value))))
+
 ;;;
 
 ;; Generic MPD plugin record, lists only the most prevalent fields.
@@ -297,7 +355,17 @@ disconnect all listeners even when playback is accidentally stopped.")
 for this audio output: the @code{hardware} mixer, the @code{software}
 mixer, the @code{null} mixer (allows setting the volume, but with no
 effect; this can be used as a trick to implement an external mixer
-External Mixer) or no mixer (@code{none}).")
+External Mixer) or no mixer (@code{none})."
+   (sanitizer
+    (lambda (x)  ; TODO: deprecated, remove me later.
+      (cond
+       ((symbol? x)
+        (warning (G_ "symbol value for 'mixer-type' is deprecated, \
+use string instead~%"))
+        (symbol->string x))
+       ((string? x) x)
+       (else
+        (configuration-field-error #f 'mixer-type x))))))
 
   (replay-gain-handler
    maybe-string
@@ -335,12 +403,14 @@ to be appended to the audio output configuration.")
    empty-serializer)
 
   (user
-   (string "mpd")
-   "The user to run mpd as.")
+   (user-account %mpd-user)
+   "The user to run mpd as."
+   (sanitizer mpd-user-sanitizer))
 
   (group
-   (string "mpd")
-   "The group to run mpd as.")
+   (user-group %mpd-group)
+   "The group to run mpd as."
+   (sanitizer mpd-group-sanitizer))
 
   (shepherd-requirement
    (list-of-symbol '())
@@ -349,7 +419,8 @@ will depend on."
    empty-serializer)
 
   (environment-variables
-   (list-of-string '())
+   (list-of-strings '("PULSE_CLIENTCONFIG=/etc/pulse/client.conf"
+                      "PULSE_CONFIG=/etc/pulse/daemon.conf"))
    "A list of strings specifying environment variables."
    empty-serializer)
 
@@ -372,7 +443,7 @@ Available values: @code{notice}, @code{info}, @code{verbose},
   (music-dir ; TODO: deprecated, remove later
    maybe-string
    "The directory to scan for music files."
-   mpd-serialize-deprecated-field)
+   (serializer mpd-serialize-deprecated-field))
 
   (playlist-directory
    maybe-string
@@ -381,7 +452,7 @@ Available values: @code{notice}, @code{info}, @code{verbose},
   (playlist-dir ; TODO: deprecated, remove later
    maybe-string
    "The directory to store playlists."
-   mpd-serialize-deprecated-field)
+   (serializer mpd-serialize-deprecated-field))
 
   (db-file
    maybe-string
@@ -400,23 +471,24 @@ Available values: @code{notice}, @code{info}, @code{verbose},
    "The default port to run mpd on.")
 
   (endpoints
-   maybe-list-of-string
+   maybe-list-of-strings
    "The addresses that mpd will bind to. A port different from
 @var{default-port} may be specified, e.g. @code{localhost:6602} and
 IPv6 addresses must be enclosed in square brackets when a different
 port is used.
 To use a Unix domain socket, an absolute path or a path starting with @code{~}
 can be specified here."
-   (lambda (_ endpoints)
-     (if (maybe-value-set? endpoints)
-         (mpd-serialize-list-of-string "bind_to_address" endpoints)
-         "")))
+   (serializer
+    (lambda (_ endpoints)
+      (if (maybe-value-set? endpoints)
+          (mpd-serialize-list-of-strings "bind_to_address" endpoints)
+          ""))))
 
   (address ; TODO: deprecated, remove later
    maybe-string
    "The address that mpd will bind to.
 To use a Unix domain socket, an absolute path can be specified here."
-   mpd-serialize-deprecated-field)
+   (serializer mpd-serialize-deprecated-field))
 
   (database
    maybe-mpd-plugin
@@ -433,29 +505,29 @@ To use a Unix domain socket, an absolute path can be specified here."
   (inputs
    (list-of-mpd-plugin '())
    "List of MPD input plugin configurations."
-   (lambda (_ x)
-     (mpd-serialize-list-of-mpd-plugin "input" x)))
+   (serializer (lambda (_ x)
+                 (mpd-serialize-list-of-mpd-plugin "input" x))))
 
   (archive-plugins
    (list-of-mpd-plugin '())
    "List of MPD archive plugin configurations."
-   (lambda (_ x)
-     (mpd-serialize-list-of-mpd-plugin "archive_plugin" x)))
+   (serializer (lambda (_ x)
+                 (mpd-serialize-list-of-mpd-plugin "archive_plugin" x))))
 
   (input-cache-size
    maybe-string
    "MPD input cache size."
-   (lambda (_ x)
-     (if (maybe-value-set? x)
-         #~(string-append "\ninput_cache {\n"
-                          #$(mpd-serialize-string "size" x)
-                          "}\n") "")))
+   (serializer (lambda (_ x)
+                 (if (maybe-value-set? x)
+                     #~(string-append "\ninput_cache {\n"
+                                      #$(mpd-serialize-string "size" x)
+                                      "}\n") ""))))
 
   (decoders
    (list-of-mpd-plugin '())
    "List of MPD decoder plugin configurations."
-   (lambda (_ x)
-     (mpd-serialize-list-of-mpd-plugin "decoder" x)))
+   (serializer (lambda (_ x)
+                 (mpd-serialize-list-of-mpd-plugin "decoder" x))))
 
   (resampler
    maybe-mpd-plugin
@@ -464,8 +536,8 @@ To use a Unix domain socket, an absolute path can be specified here."
   (filters
    (list-of-mpd-plugin '())
    "List of MPD filter plugin configurations."
-   (lambda (_ x)
-     (mpd-serialize-list-of-mpd-plugin "filter" x)))
+   (serializer (lambda (_ x)
+                 (mpd-serialize-list-of-mpd-plugin "filter" x))))
 
   (outputs
    (list-of-mpd-plugin-or-output (list (mpd-output)))
@@ -475,8 +547,8 @@ By default this is a single output using pulseaudio.")
   (playlist-plugins
    (list-of-mpd-plugin '())
    "List of MPD playlist plugin configurations."
-   (lambda (_ x)
-     (mpd-serialize-list-of-mpd-plugin "playlist_plugin" x)))
+   (serializer (lambda (_ x)
+                 (mpd-serialize-list-of-mpd-plugin "playlist_plugin" x))))
 
   (extra-options
    (alist '())
@@ -503,7 +575,8 @@ appended to the configuration.")
                                             log-file playlist-directory
                                             db-file state-file sticker-file
                                             environment-variables)
-    (let* ((config-file (mpd-serialize-configuration config)))
+    (let ((config-file (mpd-serialize-configuration config))
+          (username (user-account-name user)))
       (shepherd-service
        (documentation "Run the MPD (Music Player Daemon)")
        (requirement `(user-processes loopback ,@shepherd-requirement))
@@ -512,7 +585,7 @@ appended to the configuration.")
                   (and=> #$(maybe-value log-file)
                          (compose mkdir-p dirname))
 
-                  (let ((user (getpw #$user)))
+                  (let ((user (getpw #$username)))
                     (for-each
                      (lambda (x)
                        (when (and x (not (file-exists? x)))
@@ -546,17 +619,11 @@ appended to the configuration.")
 
 (define (mpd-accounts config)
   (match-record config <mpd-configuration> (user group)
-    (list (user-group
-           (name group)
-           (system? #t))
-          (user-account
-           (name user)
-           (group group)
-           (system? #t)
-           (comment "Music Player Daemon (MPD) user")
-           ;; MPD can use $HOME (or $XDG_CONFIG_HOME) to place its data
-           (home-directory "/var/lib/mpd")
-           (shell (file-append shadow "/sbin/nologin"))))))
+    ;; TODO: Deprecation code, to be removed.
+    (let ((user (if (eq? (user-account-group user) %lazy-group)
+                    (%set-user-group user group)
+                    user)))
+      (list user group))))
 
 (define mpd-service-type
   (service-type
@@ -581,16 +648,58 @@ appended to the configuration.")
 
 (define-configuration/no-serialization mympd-ip-acl
   (allow
-   (list-of-string '())
+   (list-of-strings '())
    "Allowed IP addresses.")
 
   (deny
-   (list-of-string '())
+   (list-of-strings '())
    "Disallowed IP addresses."))
 
 (define-maybe/no-serialization integer)
 (define-maybe/no-serialization mympd-ip-acl)
 
+(define %mympd-user
+  (user-account
+      (name "mympd")
+      (group %lazy-group)
+      (system? #t)
+      (comment "myMPD user")
+      (home-directory "/var/empty")
+      (shell (file-append shadow "/sbin/nologin"))))
+
+(define %mympd-group
+  (user-group
+   (name "mympd")
+   (system? #t)))
+
+;;; TODO: Procedures for unsupported value types, to be removed.
+(define (mympd-user-sanitizer value)
+  (cond ((user-account? value) value)
+        ((string? value)
+         (warning (G_ "string value for 'user' is not supported, use \
+user-account instead~%"))
+         (user-account
+          (inherit %mympd-user)
+          (name value)
+          ;; XXX: this is to be lazily substituted in (…-accounts)
+          ;; with the value from 'group'.
+          (group %lazy-group)))
+        (else
+         (configuration-field-error #f 'user value))))
+
+(define (mympd-group-sanitizer value)
+  (cond ((user-group? value) value)
+        ((string? value)
+         (warning (G_ "string value for 'group' is not supported, use \
+user-group instead~%"))
+         (user-group
+          (inherit %mympd-group)
+          (name value)))
+        (else
+         (configuration-field-error #f 'group value))))
+;;;
+
+
 ;; XXX: The serialization procedures are insufficient since we require
 ;; access to multiple fields at once.
 ;; Fields marked with empty-serializer are never serialized and are
@@ -608,13 +717,15 @@ will depend on."
    empty-serializer)
 
   (user
-   (string "mympd")
+   (user-account %mympd-user)
    "Owner of the @command{mympd} process."
+   (sanitizer mympd-user-sanitizer)
    empty-serializer)
 
   (group
-   (string "nogroup")
+   (user-group %mympd-group)
    "Owner group of the @command{mympd} process."
+   (sanitizer mympd-group-sanitizer)
    empty-serializer)
 
   (work-directory
@@ -707,12 +818,12 @@ prompting a pin from the user.")
       ((? string? val) val)))
 
   (define (ip-acl-serialize-configuration config)
-    (define (serialize-list-of-string prefix lst)
+    (define (serialize-list-of-strings prefix lst)
       (map (cut format #f "~a~a" prefix <>) lst))
     (string-join
      (append
-      (serialize-list-of-string "+" (mympd-ip-acl-allow config))
-      (serialize-list-of-string "-" (mympd-ip-acl-deny config))) ","))
+      (serialize-list-of-strings "+" (mympd-ip-acl-allow config))
+      (serialize-list-of-strings "-" (mympd-ip-acl-deny config))) ","))
 
   ;; myMPD configuration fields are serialized as individual files under
   ;; <work-directory>/config/.
@@ -749,13 +860,18 @@ prompting a pin from the user.")
   (match-record config <mympd-configuration> (package shepherd-requirement
                                               user work-directory
                                               cache-directory log-level log-to)
-    (let ((log-level* (format #f "MYMPD_LOGLEVEL=~a" log-level)))
+    (let ((log-level* (format #f "MYMPD_LOGLEVEL=~a" log-level))
+          (username (user-account-name user)))
       (shepherd-service
        (documentation "Run the myMPD daemon.")
-       (requirement `(loopback user-processes ,@shepherd-requirement))
+       (requirement `(loopback user-processes
+                               ,@(if (eq? log-to 'syslog)
+                                     '(syslog)
+                                     '())
+                               ,@shepherd-requirement))
        (provision '(mympd))
        (start #~(begin
-                  (let* ((pw (getpwnam #$user))
+                  (let* ((pw (getpwnam #$username))
                          (uid (passwd:uid pw))
                          (gid (passwd:gid pw)))
                     (for-each (lambda (dir)
@@ -765,8 +881,8 @@ prompting a pin from the user.")
 
                   (make-forkexec-constructor
                    `(#$(file-append package "/bin/mympd")
-                     "--user" #$user
-                     #$@(if (eqv? log-to 'syslog) '("--syslog") '())
+                     "--user" #$username
+                     #$@(if (eq? log-to 'syslog) '("--syslog") '())
                      "--workdir" #$work-directory
                      "--cachedir" #$cache-directory)
                    #:environment-variables (list #$log-level*)
@@ -775,14 +891,11 @@ prompting a pin from the user.")
 
 (define (mympd-accounts config)
   (match-record config <mympd-configuration> (user group)
-                (list (user-group (name group)
-                                  (system? #t))
-                      (user-account (name user)
-                                    (group group)
-                                    (system? #t)
-                                    (comment "myMPD user")
-                                    (home-directory "/var/empty")
-                                    (shell (file-append shadow "/sbin/nologin"))))))
+    ;; TODO: Deprecation code, to be removed.
+    (let ((user (if (eq? (user-account-group user) %lazy-group)
+                    (%set-user-group user group)
+                    user)))
+      (list user group))))
 
 (define (mympd-log-rotation config)
   (match-record config <mympd-configuration> (log-to)
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 190bb8fe24..e5c6bf5335 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2015, 2016, 2020 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
@@ -40,7 +40,7 @@
 (define-module (gnu services base)
   #:use-module (guix store)
   #:use-module (guix deprecation)
-  #:autoload   (guix diagnostics) (warning &fix-hint)
+  #:autoload   (guix diagnostics) (warning formatted-message &fix-hint)
   #:autoload   (guix i18n) (G_)
   #:use-module (guix combinators)
   #:use-module (gnu services)
@@ -223,7 +223,6 @@
             guix-publish-configuration-port
             guix-publish-configuration-host
             guix-publish-configuration-compression
-            guix-publish-configuration-compression-level ;deprecated
             guix-publish-configuration-nar-path
             guix-publish-configuration-cache
             guix-publish-configuration-ttl
@@ -246,7 +245,7 @@
             kmscon-service-type
 
             pam-limits-service-type
-            pam-limits-service
+            pam-limits-service  ; deprecated
 
             greetd-service-type
             greetd-configuration
@@ -703,9 +702,10 @@ to add @var{device} to the kernel's entropy pool.  The service will fail if
 ;;; /etc/hosts
 ;;;
 
-(define (valid-name? name)
-  "Return true if @var{name} is likely to be a valid host name."
-  (false-if-exception (not (string-any char-set:whitespace name))))
+(eval-when (expand load eval)
+  (define (valid-name? name)
+    "Return true if @var{name} is likely to be a valid host name."
+    (false-if-exception (not (string-any char-set:whitespace name)))))
 
 (define-compile-time-procedure (assert-valid-name (name valid-name?))
   "Ensure @var{name} is likely to be a valid host name."
@@ -813,21 +813,6 @@ host names."
    #t                                             ;default to UTF-8
    (description "Ensure the Linux virtual terminals run in UTF-8 mode.")))
 
-(define console-keymap-service-type
-  (shepherd-service-type
-   'console-keymap
-   (lambda (files)
-     (shepherd-service
-      (documentation (string-append "Load console keymap (loadkeys)."))
-      (provision '(console-keymap))
-      (start #~(lambda _
-                 (zero? (system* #$(file-append kbd "/bin/loadkeys")
-                                 #$@files))))
-      (respawn? #f)))
-   (description "@emph{This service is deprecated in favor of the
-@code{keyboard-layout} field of @code{operating-system}.}  Load the given list
-of console keymaps with @command{loadkeys}.")))
-
 (define %default-console-font
   ;; Note: the 'font-gnu-unifont' package cannot be cross-compiled (yet), but
   ;; its "psf" output is the same whether it's built natively or not, hence
@@ -900,14 +885,6 @@ package or any valid argument to @command{setfont}, as in this example:
                  \"/share/consolefonts/ter-132n\"))) ; for HDPI
 @end example\n")))
 
-(define* (console-font-service tty #:optional (font "LatGrkCyr-8x16"))
-  "This procedure is deprecated in favor of @code{console-font-service-type}.
-
-Return a service that sets up Unicode support in @var{tty} and loads
-@var{font} for that tty (fonts are per virtual console in Linux.)"
-  (simple-service (symbol-append 'console-font- (string->symbol tty))
-                  console-font-service-type `((,tty . ,font))))
-
 (define %default-motd
   (plain-file "motd" "This is the GNU operating system, welcome!\n\n"))
 
@@ -1553,14 +1530,17 @@ Service Switch}, for an example."
   (shepherd-service-type
    'syslog
    (lambda (config)
+     (define config-file
+       (syslog-configuration-config-file config))
+
      (shepherd-service
       (documentation "Run the syslog daemon (syslogd).")
       (provision '(syslogd))
       (requirement '(user-processes))
+      (actions (list (shepherd-configuration-action config-file)))
       (start #~(let ((spawn (make-forkexec-constructor
                              (list #$(syslog-configuration-syslogd config)
-                                   "--rcfile"
-                                   #$(syslog-configuration-config-file config))
+                                   "--rcfile" #$config-file)
                              #:pid-file "/var/run/syslog.pid")))
                  (lambda ()
                    ;; Set the umask such that file permissions are #o640.
@@ -1584,17 +1564,13 @@ information on the configuration file syntax."
 
 
 (define pam-limits-service-type
-  (let ((security-limits
-         ;; Create /etc/security containing the provided "limits.conf" file.
-         (lambda (limits-file)
-           `(("security/limits.conf"
-              ,limits-file))))
-        (pam-extension
+  (let ((pam-extension
          (lambda (pam)
            (let ((pam-limits (pam-entry
                               (control "required")
                               (module "pam_limits.so")
-                              (arguments '("conf=/etc/security/limits.conf")))))
+                              (arguments
+                               '("conf=/etc/security/limits.conf")))))
              (if (member (pam-service-name pam)
                          '("login" "greetd" "su" "slim" "gdm-password" "sddm"
                            "sudo" "sshd"))
@@ -1602,7 +1578,27 @@ information on the configuration file syntax."
                   (inherit pam)
                   (session (cons pam-limits
                                  (pam-service-session pam))))
-                 pam)))))
+                 pam))))
+
+        ;; XXX: Using file-like objects is deprecated, use lists instead.
+        ;;      This is to be reduced into the list? case when the deprecated
+        ;;      code gets removed.
+        ;; Create /etc/security containing the provided "limits.conf" file.
+        (security-limits
+         (match-lambda
+           ((? file-like? obj)
+            (warning (G_ "Using file-like value for \
+'pam-limits-service-type' is deprecated~%"))
+            `(("security/limits.conf" ,obj)))
+           ((? list? lst)
+            `(("security/limits.conf"
+               ,(plain-file "limits.conf"
+                            (string-join (map pam-limits-entry->string lst)
+                                         "\n" 'suffix)))))
+           (_ (raise
+               (formatted-message
+                (G_ "invalid input for 'pam-limits-service-type'~%")))))))
+
     (service-type
      (name 'limits)
      (extensions
@@ -1612,9 +1608,11 @@ information on the configuration file syntax."
      (description
       "Install the specified resource usage limits by populating
 @file{/etc/security/limits.conf} and using the @code{pam_limits}
-authentication module."))))
+authentication module.")
+     (default-value '()))))
 
-(define* (pam-limits-service #:optional (limits '()))
+(define-deprecated (pam-limits-service #:optional (limits '()))
+  pam-limits-service-type
   "Return a service that makes selected programs respect the list of
 pam-limits-entry specified in LIMITS via pam_limits.so."
   (service pam-limits-service-type
@@ -1987,10 +1985,7 @@ proxy of 'guix-daemon'...~%")
               (default #f))
   (compression       guix-publish-configuration-compression
                      (thunked)
-                     (default (default-compression this-record
-                                (current-source-location))))
-  (compression-level %guix-publish-configuration-compression-level ;deprecated
-                     (default #f))
+                     (default (default-compression this-record)))
   (nar-path    guix-publish-configuration-nar-path ;string
                (default "nar"))
   (cache       guix-publish-configuration-cache   ;#f | string
@@ -2004,25 +1999,14 @@ proxy of 'guix-daemon'...~%")
   (negative-ttl guix-publish-configuration-negative-ttl ;#f | integer
                 (default #f)))
 
-(define-deprecated (guix-publish-configuration-compression-level config)
-  "Return a compression level, the old way."
-  (match (guix-publish-configuration-compression config)
-    (((_ level) _ ...) level)))
-
-(define (default-compression config properties)
+(define (default-compression config)
   "Return the default 'guix publish' compression according to CONFIG, and
 raise a deprecation warning if the 'compression-level' field was used."
-  (match (%guix-publish-configuration-compression-level config)
-    (#f
-     ;; Default to low compression levels when there's no cache so that users
-     ;; get good bandwidth by default.
-     (if (guix-publish-configuration-cache config)
-         '(("gzip" 5) ("zstd" 19))
-         '(("gzip" 3) ("zstd" 3))))               ;zstd compresses faster
-    (level
-     (warn-about-deprecation 'compression-level properties
-                             #:replacement 'compression)
-     `(("gzip" ,level)))))
+  ;; Default to low compression levels when there's no cache so that users
+  ;; get good bandwidth by default.
+  (if (guix-publish-configuration-cache config)
+      '(("gzip" 5) ("zstd" 19))
+      '(("gzip" 3) ("zstd" 3))))               ;zstd compresses faster
 
 (define (guix-publish-shepherd-service config)
   (define (config->compression-options config)
@@ -2664,16 +2648,17 @@ Write, say, @samp{\"~a/24\"} for a 24-bit network mask.")
                             ipv6-address?))))
   (gateway     network-route-gateway (default #f)))
 
-(define* (cidr->netmask str #:optional (family AF_INET))
-  "Given @var{str}, a string in CIDR notation (e.g., \"1.2.3.4/24\"), return
+(eval-when (expand load eval)
+  (define* (cidr->netmask str #:optional (family AF_INET))
+    "Given @var{str}, a string in CIDR notation (e.g., \"1.2.3.4/24\"), return
 the netmask as a string like \"255.255.255.0\"."
-  (match (string-split str #\/)
-    ((ip (= string->number bits))
-     (let ((mask (ash (- (expt 2 bits) 1)
-                      (- (if (= family AF_INET6) 128 32)
-                         bits))))
-       (inet-ntop family mask)))
-    (_ #f)))
+    (match (string-split str #\/)
+      ((ip (= string->number bits))
+       (let ((mask (ash (- (expt 2 bits) 1)
+                        (- (if (= family AF_INET6) 128 32)
+                           bits))))
+         (inet-ntop family mask)))
+      (_ #f))))
 
 (define (cidr->ip str)
   "Strip the netmask bit of @var{str}, a CIDR-notation IP/netmask address."
diff --git a/gnu/services/configuration.scm b/gnu/services/configuration.scm
index 02d1aa1796..367b85c1be 100644
--- a/gnu/services/configuration.scm
+++ b/gnu/services/configuration.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
 ;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,7 +29,8 @@
   #:use-module (guix gexp)
   #:use-module ((guix utils) #:select (source-properties->location))
   #:use-module ((guix diagnostics)
-                #:select (formatted-message location-file &error-location))
+                #:select (formatted-message location-file &error-location
+                          warning))
   #:use-module ((guix modules) #:select (file-name->module-name))
   #:use-module (guix i18n)
   #:autoload   (texinfo) (texi-fragment->stexi)
@@ -37,6 +39,7 @@
   #:use-module (ice-9 format)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-35)
   #:export (configuration-field
@@ -44,6 +47,7 @@
             configuration-field-type
             configuration-missing-field
             configuration-field-error
+            configuration-field-sanitizer
             configuration-field-serializer
             configuration-field-getter
             configuration-field-default-value-thunk
@@ -116,6 +120,7 @@ does not have a default value" field kind)))
   (type configuration-field-type)
   (getter configuration-field-getter)
   (predicate configuration-field-predicate)
+  (sanitizer configuration-field-sanitizer)
   (serializer configuration-field-serializer)
   (default-value-thunk configuration-field-default-value-thunk)
   (documentation configuration-field-documentation))
@@ -181,11 +186,44 @@ does not have a default value" field kind)))
      (values #'(field-type %unset-value)))))
 
 (define (define-configuration-helper serialize? serializer-prefix syn)
+
+  (define (normalize-extra-args s)
+    "Extract and normalize arguments following @var{doc}."
+    (let loop ((s s)
+               (sanitizer* %unset-value)
+               (serializer* %unset-value))
+      (syntax-case s (sanitizer serializer empty-serializer)
+        (((sanitizer proc) tail ...)
+         (if (maybe-value-set? sanitizer*)
+             (syntax-violation 'sanitizer "duplicate entry"
+                               #'proc)
+             (loop #'(tail ...) #'proc serializer*)))
+        (((serializer proc) tail ...)
+         (if (maybe-value-set? serializer*)
+             (syntax-violation 'serializer "duplicate or conflicting entry"
+                               #'proc)
+             (loop #'(tail ...) sanitizer* #'proc)))
+        ((empty-serializer tail ...)
+         (if (maybe-value-set? serializer*)
+             (syntax-violation 'empty-serializer
+                               "duplicate or conflicting entry" #f)
+             (loop #'(tail ...) sanitizer* #'empty-serializer)))
+        (()  ; stop condition
+         (values (list sanitizer* serializer*)))
+        ((proc)  ; TODO: deprecated, to be removed.
+         (null? (filter-map maybe-value-set? (list sanitizer* serializer*)))
+         (begin
+           (warning #f (G_ "specifying serializers after documentation is \
+deprecated, use (serializer ~a) instead~%") (syntax->datum #'proc))
+           (values (list %unset-value #'proc)))))))
+
   (syntax-case syn ()
-    ((_ stem (field field-type+def doc custom-serializer ...) ...)
+    ((_ stem (field field-type+def doc extra-args ...) ...)
      (with-syntax
          ((((field-type def) ...)
-           (map normalize-field-type+def #'(field-type+def ...))))
+           (map normalize-field-type+def #'(field-type+def ...)))
+          (((sanitizer* serializer*) ...)
+           (map normalize-extra-args #'((extra-args ...) ...))))
        (with-syntax
            (((field-getter ...)
              (map (lambda (field)
@@ -200,21 +238,18 @@ does not have a default value" field kind)))
                     ((field-type default-value)
                      default-value))
                   #'((field-type def) ...)))
+            ((field-sanitizer ...)
+             (map maybe-value #'(sanitizer* ...)))
             ((field-serializer ...)
-             (map (lambda (type custom-serializer)
+             (map (lambda (type proc)
                     (and serialize?
-                         (match custom-serializer
-                           ((serializer)
-                            serializer)
-                           (()
-                            (if serializer-prefix
-                                (id #'stem
-                                    serializer-prefix
-                                    #'serialize- type)
-                                (id #'stem #'serialize- type))))))
+                         (or (maybe-value proc)
+                             (if serializer-prefix
+                                 (id #'stem serializer-prefix #'serialize- type)
+                                 (id #'stem #'serialize- type)))))
                   #'(field-type ...)
-                  #'((custom-serializer ...) ...))))
-         (define (field-sanitizer name pred)
+                  #'(serializer* ...))))
+         (define (default-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.
@@ -235,21 +270,29 @@ does not have a default value" field kind)))
 
          #`(begin
              ;; Define field validation macros.
-             #,@(map field-sanitizer
-                     #'(field ...)
-                     #'(field-predicate ...))
+             #,@(filter-map (lambda (name pred sanitizer)
+                              (if sanitizer
+                                  #f
+                                  (default-field-sanitizer name pred)))
+                            #'(field ...)
+                            #'(field-predicate ...)
+                            #'(field-sanitizer ...))
 
              (define-record-type* #,(id #'stem #'< #'stem #'>)
                stem
                #,(id #'stem #'make- #'stem)
                #,(id #'stem #'stem #'?)
-               #,@(map (lambda (name getter def)
-                         #`(#,name #,getter (default #,def)
+               #,@(map (lambda (name getter def sanitizer)
+                         #`(#,name #,getter
+                                   (default #,def)
                                    (sanitize
-                                    #,(id #'stem #'validate- #'stem #'- name))))
+                                    #,(or sanitizer
+                                          (id #'stem
+                                              #'validate- #'stem #'- name)))))
                        #'(field ...)
                        #'(field-getter ...)
-                       #'(field-default ...))
+                       #'(field-default ...)
+                       #'(field-sanitizer ...))
                (%location #,(id #'stem #'stem #'-source-location)
                           (default (and=> (current-source-location)
                                           source-properties->location))
@@ -261,10 +304,12 @@ does not have a default value" field kind)))
                       (type 'field-type)
                       (getter field-getter)
                       (predicate field-predicate)
+                      (sanitizer
+                       (or field-sanitizer
+                           (id #'stem #'validate- #'stem #'- #'field)))
                       (serializer field-serializer)
                       (default-value-thunk
                         (lambda ()
-                          (display '#,(id #'stem #'% #'stem))
                           (if (maybe-value-set? (syntax->datum field-default))
                               field-default
                               (configuration-missing-default-value
@@ -440,10 +485,7 @@ the list result in @code{#t} when applying PRED? on them."
   (list-of string?))
 
 (define alist?
-  (match-lambda
-    (() #t)
-    ((head . tail) (and (pair? head) (alist? tail)))
-    (_ #f)))
+  (list-of pair?))
 
 (define serialize-file-like empty-serializer)
 
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index c0178135b0..adea5b38dd 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2020 Reza Alizadeh Majd <r.majd@pantherx.org>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021, 2022 muradm <mail@muradm.net>
+;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -154,7 +155,8 @@
             xfce-desktop-service
             xfce-desktop-service-type
 
-            x11-socket-directory-service
+            x11-socket-directory-service ;deprecated
+            x11-socket-directory-service-type
 
             enlightenment-desktop-configuration
             enlightenment-desktop-configuration?
@@ -1421,15 +1423,10 @@ rules."
    (default-value (gnome-desktop-configuration))
    (description "Run the GNOME desktop environment.")))
 
-(define-deprecated (gnome-desktop-service #:key (config
-                                                 (gnome-desktop-configuration)))
-  gnome-desktop-service-type
-  "Return a service that adds the @code{gnome} package to the system profile,
-and extends polkit with the actions from @code{gnome-settings-daemon}."
-  (service gnome-desktop-service-type config))
-
-;; MATE Desktop service.
-;; TODO: Add mate-screensaver.
+
+;;;
+;;; MATE Desktop service.
+;;; TODO: Add mate-screensaver.
 
 (define-record-type* <mate-desktop-configuration> mate-desktop-configuration
   make-mate-desktop-configuration
@@ -1459,14 +1456,6 @@ and extends polkit with the actions from @code{gnome-settings-daemon}."
    (default-value (mate-desktop-configuration))
    (description "Run the MATE desktop environment.")))
 
-(define-deprecated (mate-desktop-service #:key
-                                         (config
-                                          (mate-desktop-configuration)))
-  mate-desktop-service-type
-  "Return a service that adds the @code{mate} package to the system profile,
-and extends polkit with the actions from @code{mate-settings-daemon}."
-  (service mate-desktop-service-type config))
-
 
 ;;;
 ;;; XFCE desktop service.
@@ -1497,16 +1486,7 @@ rules."
    (default-value (xfce-desktop-configuration))
    (description "Run the Xfce desktop environment.")))
 
-(define-deprecated (xfce-desktop-service #:key (config
-                                                (xfce-desktop-configuration)))
-  xfce-desktop-service-type
-  "Return a service that adds the @code{xfce} package to the system profile,
-and extends polkit with the ability for @code{thunar} to manipulate the file
-system as root from within a user session, after the user has authenticated
-with the administrator's password."
-  (service xfce-desktop-service-type config))
-
-+
+
 ;;;
 ;;; Lxqt desktop service.
 ;;;
@@ -1573,18 +1553,38 @@ rules."
 ;;; X11 socket directory service
 ;;;
 
-(define x11-socket-directory-service
+(define x11-socket-directory-service-type
+  (let ((x11-socket-directory-shepherd-service
+         (shepherd-service
+          (documentation "Create @file{/tmp/.X11-unix} for XWayland.")
+          (requirement '(file-systems))
+          (provision '(x11-socket-directory))
+          (one-shot? #t)
+          (start #~(lambda _
+                     (let ((directory "/tmp/.X11-unix"))
+                       (mkdir-p directory)
+                       (chmod directory #o1777)))))))
+    (service-type
+     (name 'x11-socket-directory-service)
+     (extensions
+      (list
+       (service-extension shepherd-root-service-type
+                          (compose
+                           list
+                           (const x11-socket-directory-shepherd-service)))))
+     (default-value #f) ; no default value required
+     (description
+      "Create @file{/tmp/.X11-unix} for XWayland.  When using X11, libxcb
+takes care of creating that directory however, when using XWayland, we
+need to create it beforehand."))))
+
+(define-deprecated x11-socket-directory-service
+  x11-socket-directory-service-type
   ;; Return a service that creates /tmp/.X11-unix.  When using X11, libxcb
   ;; takes care of creating that directory.  However, when using XWayland, we
   ;; need to create beforehand.  Thus, create it unconditionally here.
-  (simple-service 'x11-socket-directory
-                  activation-service-type
-                  (with-imported-modules '((guix build utils))
-                    #~(begin
-                        (use-modules (guix build utils))
-                        (let ((directory "/tmp/.X11-unix"))
-                          (mkdir-p directory)
-                          (chmod directory #o1777))))))
+  (service x11-socket-directory-service-type))
+
 
 ;;;
 ;;; Enlightenment desktop service.
@@ -1889,7 +1889,7 @@ applications needing access to be root.")
 
          (service ntp-service-type)
 
-         x11-socket-directory-service
+         (service x11-socket-directory-service-type)
 
          (service pulseaudio-service-type)
          (service alsa-service-type)
diff --git a/gnu/services/herd.scm b/gnu/services/herd.scm
index a7c845b4b0..e489ce2b9a 100644
--- a/gnu/services/herd.scm
+++ b/gnu/services/herd.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016-2019, 2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016-2019, 2022-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -284,22 +284,12 @@ returns a shepherd <service> object."
 
 (define (load-services/safe files)
   "This is like 'load-services', but make sure only the subset of FILES that
-can be safely reloaded is actually reloaded.
-
-This is done to accommodate the Shepherd < 0.15.0 where services lacked the
-'replacement' slot, and where 'register-services' would throw an exception
-when passed a service with an already-registered name."
-  (eval-there `(let* ((services     (map primitive-load ',files))
-                      (slots        (map slot-definition-name
-                                         (class-slots <service>)))
-                      (can-replace? (memq 'replacement slots)))
-                 (define (registered? service)
-                   (not (null? (lookup-services (canonical-name service)))))
-
-                 (apply register-services
-                        (if can-replace?
-                            services
-                            (remove registered? services))))))
+can be safely reloaded is actually reloaded."
+  (eval-there `(let ((services (map primitive-load ',files)))
+                 ;; Since version 0.5.0 of the Shepherd, registering a service
+                 ;; that has the same name as an already-registered service
+                 ;; makes it a "replacement" of that previous service.
+                 (apply register-services services))))
 
 (define* (start-service name #:optional (arguments '()))
   (invoke-action name 'start arguments
diff --git a/gnu/services/linux.scm b/gnu/services/linux.scm
index 60e2093e1d..4f28044112 100644
--- a/gnu/services/linux.scm
+++ b/gnu/services/linux.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
 ;;; Copyright © 2021 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2022 Josselin Poiret <dev@jpoiret.xyz>
+;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,12 +31,15 @@
   #:use-module (guix ui)
   #:use-module (gnu services)
   #:use-module (gnu services base)
+  #:use-module (gnu services configuration)
+  #:use-module (gnu services mcron)
   #:use-module (gnu services shepherd)
   #:use-module (gnu packages linux)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-35)
+  #:use-module (ice-9 format)
   #:use-module (ice-9 match)
   #:export (earlyoom-configuration
             earlyoom-configuration?
@@ -50,6 +54,16 @@
             earlyoom-configuration-send-notification-command
             earlyoom-service-type
 
+            fstrim-configuration
+            fstrim-configuration?
+            fstrim-configuration-package
+            fstrim-configuration-schedule
+            fstrim-configuration-listed-in
+            fstrim-configuration-verbose?
+            fstrim-configuration-quiet-unsupported?
+            fstrim-configuration-extra-arguments
+            fstrim-service-type
+
             kernel-module-loader-service-type
 
             rasdaemon-configuration
@@ -152,6 +166,93 @@ representation."
 
 
 ;;;
+;;; fstrim
+;;;
+
+(define (mcron-time? x)
+  (or (procedure? x) (string? x) (list? x)))
+
+(define-maybe list-of-strings (prefix fstrim-))
+
+(define (fstrim-serialize-boolean field-name value)
+  (list (format #f "~:[~;--~a~]" value
+                ;; Drop trailing '?' character.
+                (string-drop-right (symbol->string field-name) 1))))
+
+(define (fstrim-serialize-list-of-strings field-name value)
+  (list (string-append "--" (symbol->string field-name))
+        #~(string-join '#$value ":")))
+
+(define-configuration fstrim-configuration
+  (package
+    (file-like util-linux)
+    "The package providing the @command{fstrim} command."
+    empty-serializer)
+  (schedule
+   (mcron-time "0 0 * * 0")
+   "Schedule for launching @command{fstrim}.  This can be a procedure, a list
+or a string.  For additional information, see @ref{Guile Syntax,,
+Job specification, mcron, the mcron manual}.  By default this is set to run
+weekly on Sunday at 00:00."
+   empty-serializer)
+  ;; The following are fstrim-related options.
+  (listed-in
+   (maybe-list-of-strings '("/etc/fstab" "/proc/self/mountinfo"))
+   ;; Note: documentation sourced from the fstrim manpage.
+   "List of files in fstab or kernel mountinfo format.  All missing or
+empty files are silently ignored.  The evaluation of the list @emph{stops}
+after the first non-empty file.  File systems with @code{X-fstrim.notrim} mount
+option in fstab are skipped.")
+  (verbose?
+   (boolean #t)
+   "Verbose execution.")
+  (quiet-unsupported?
+   (boolean #t)
+   "Suppress error messages if trim operation (ioctl) is unsupported.")
+  (extra-arguments
+   maybe-list-of-strings
+   "Extra options to append to @command{fstrim} (run @samp{man fstrim} for
+more information)."
+   (serializer
+    (lambda (_ value)
+      (if (maybe-value-set? value)
+          value '()))))
+  (prefix fstrim-))
+
+(define (serialize-fstrim-configuration config)
+  (concatenate
+   (filter list?
+           (map (lambda (field)
+                  ((configuration-field-serializer field)
+                   (configuration-field-name field)
+                   ((configuration-field-getter field) config)))
+                fstrim-configuration-fields))))
+
+(define (fstrim-mcron-job config)
+  (match-record config <fstrim-configuration> (package schedule)
+    #~(job
+       ;; Note: The “if” below is to ensure that
+       ;; lists are ungexp'd correctly since @var{schedule}
+       ;; can be either a procedure, a string or a list.
+       #$(if (list? schedule)
+             #~'(#$@schedule)
+             schedule)
+       (lambda ()
+         (system* #$(file-append package "/sbin/fstrim")
+                  #$@(serialize-fstrim-configuration config)))
+       "fstrim")))
+
+(define fstrim-service-type
+  (service-type
+   (name 'fstrim)
+   (extensions
+    (list (service-extension mcron-service-type
+                             (compose list fstrim-mcron-job))))
+   (description "Discard unused blocks from file systems.")
+   (default-value (fstrim-configuration))))
+
+
+;;;
 ;;; Kernel module loader.
 ;;;
 
diff --git a/gnu/services/mcron.scm b/gnu/services/mcron.scm
index 52332d6123..2ef5980e09 100644
--- a/gnu/services/mcron.scm
+++ b/gnu/services/mcron.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,7 +34,9 @@
             mcron-configuration-mcron
             mcron-configuration-jobs
             mcron-configuration-log?
+            mcron-configuration-log-file
             mcron-configuration-log-format
+            mcron-configuration-date-format
 
             mcron-service-type))
 
@@ -55,20 +58,37 @@
 (define list-of-gexps?
   (list-of gexp?))
 
+(define-maybe/no-serialization string)
+
 (define-configuration/no-serialization mcron-configuration
-  (mcron (file-like mcron) "The mcron package to use.")
+  (mcron
+   (file-like mcron)
+   "The mcron package to use.")
+
   (jobs
    (list-of-gexps '())
    "This is a list of gexps (@pxref{G-Expressions}), where each gexp
 corresponds to an mcron job specification (@pxref{Syntax, mcron job
 specifications,, mcron, GNU@tie{}mcron}).")
-  (log? (boolean #t) "Log messages to standard output.")
+
+  (log?
+   (boolean #t)
+   "Log messages to standard output.")
+
+  (log-file
+   (string "/var/log/mcron.log")
+   "Log file location.")
+
   (log-format
    (string "~1@*~a ~a: ~a~%")
    "@code{(ice-9 format)} format string for log messages.  The default value
-produces messages like \"@samp{@var{pid} @var{name}:
-@var{message}\"} (@pxref{Invoking mcron, Invoking,, mcron, GNU@tie{}mcron}).
-Each message is also prefixed by a timestamp by GNU Shepherd."))
+produces messages like @samp{@var{pid} @var{name}: @var{message}}
+(@pxref{Invoking mcron, Invoking,, mcron, GNU@tie{}mcron}).
+Each message is also prefixed by a timestamp by GNU Shepherd.")
+
+  (date-format
+   maybe-string
+   "@code{(srfi srfi-19)} format string for date."))
 
 (define (job-files mcron jobs)
   "Return a list of file-like object for JOBS, a list of gexps."
@@ -136,41 +156,44 @@ files."
                (display line)
                (loop)))))))))
 
-(define mcron-shepherd-services
-  (match-lambda
-    (($ <mcron-configuration> mcron ()) ;nothing to do!
-     '())
-    (($ <mcron-configuration> mcron jobs log? log-format)
-     (let ((files (job-files mcron jobs)))
-       (list (shepherd-service
-              (provision '(mcron))
-              (requirement '(user-processes))
-              (modules `((srfi srfi-1)
-                         (srfi srfi-26)
-                         (ice-9 popen)  ;for the 'schedule' action
-                         (ice-9 rdelim)
-                         (ice-9 match)
-                         ,@%default-modules))
-              (start #~(make-forkexec-constructor
-                        (list (string-append #$mcron "/bin/mcron")
-                              #$@(if log?
-                                     #~("--log" "--log-format" #$log-format)
-                                     #~())
-                              #$@files)
-
-                        ;; Disable auto-compilation of the job files and set a
-                        ;; sane value for 'PATH'.
-                        #:environment-variables
-                        (cons* "GUILE_AUTO_COMPILE=0"
-                               "PATH=/run/current-system/profile/bin"
-                               (remove (cut string-prefix? "PATH=" <>)
-                                       (environ)))
-
-                        #:log-file "/var/log/mcron.log"))
-              (stop #~(make-kill-destructor))
-
-              (actions
-               (list (shepherd-schedule-action mcron files)))))))))
+(define (mcron-shepherd-services config)
+  (match-record config <mcron-configuration>
+    (mcron jobs log? log-file log-format date-format)
+    (if (eq? jobs '())
+        '()                             ;nothing to do
+        (let ((files (job-files mcron jobs)))
+          (list (shepherd-service
+                 (provision '(mcron))
+                 (requirement '(user-processes))
+                 (modules `((srfi srfi-1)
+                            (srfi srfi-26)
+                            (ice-9 popen) ;for the 'schedule' action
+                            (ice-9 rdelim)
+                            (ice-9 match)
+                            ,@%default-modules))
+                 (start #~(make-forkexec-constructor
+                           (list #$(file-append mcron "/bin/mcron")
+                                 #$@(if log?
+                                        `("--log" "--log-format" ,log-format
+                                          ,@(if (maybe-value-set? date-format)
+                                                (list "--date-format"
+                                                      date-format)
+                                                '()))
+                                        '())
+                                 #$@files)
+
+                           ;; Disable auto-compilation of the job files and
+                           ;; set a sane value for 'PATH'.
+                           #:environment-variables
+                           (cons* "GUILE_AUTO_COMPILE=0"
+                                  "PATH=/run/current-system/profile/bin"
+                                  (remove (cut string-prefix? "PATH=" <>)
+                                          (environ)))
+
+                           #:log-file #$log-file))
+                 (stop #~(make-kill-destructor))
+                 (actions
+                  (list (shepherd-schedule-action mcron files)))))))))
 
 (define mcron-service-type
   (service-type (name 'mcron)
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index 4632498357..19c109d238 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013-2023 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
@@ -486,36 +486,19 @@ daemon is responsible for allocating IP addresses to its client.")))
   ntp-configuration?
   (ntp      ntp-configuration-ntp
             (default ntp))
-  (servers  %ntp-configuration-servers   ;list of <ntp-server> objects
+  (servers  ntp-configuration-servers     ;list of <ntp-server> objects
             (default %ntp-servers))
   (allow-large-adjustment? ntp-allow-large-adjustment?
                            (default #t))) ;as recommended in the ntpd manual
 
-(define (ntp-configuration-servers ntp-configuration)
-  ;; A wrapper to support the deprecated form of this field.
-  (let ((ntp-servers (%ntp-configuration-servers ntp-configuration)))
-    (match ntp-servers
-      (((? string?) (? string?) ...)
-       (format (current-error-port) "warning: Defining NTP servers as strings is \
-deprecated.  Please use <ntp-server> records instead.\n")
-       (map (lambda (addr)
-              (ntp-server
-               (type 'server)
-               (address addr)
-               (options '()))) ntp-servers))
-      ((($ <ntp-server>) ($ <ntp-server>) ...)
-       ntp-servers))))
-
 (define (ntp-shepherd-service config)
   (match-record config <ntp-configuration>
     (ntp servers allow-large-adjustment?)
-    (let ((servers (ntp-configuration-servers config)))
-      ;; TODO: Add authentication support.
-      (define config
-        (string-append "driftfile /var/run/ntpd/ntp.drift\n"
-                       (string-join (map ntp-server->string servers)
-                                    "\n")
-                       "
+    ;; TODO: Add authentication support.
+    (define config
+      (string-append "driftfile /var/run/ntpd/ntp.drift\n"
+                     (string-join (map ntp-server->string servers) "\n")
+                     "
 # Disable status queries as a workaround for CVE-2013-5211:
 # <http://support.ntp.org/bin/view/Main/SecurityNotice#DRDoS_Amplification_Attack_using>.
 restrict default kod nomodify notrap nopeer noquery limited
@@ -529,21 +512,22 @@ restrict -6 ::1
 # option by default, as documented in the 'ntp.conf' manual.
 restrict source notrap nomodify noquery\n"))
 
-      (define ntpd.conf
-        (plain-file "ntpd.conf" config))
+    (define ntpd.conf
+      (plain-file "ntpd.conf" config))
 
-      (list (shepherd-service
-             (provision '(ntpd))
-             (documentation "Run the Network Time Protocol (NTP) daemon.")
-             (requirement '(user-processes networking))
-             (start #~(make-forkexec-constructor
-                       (list (string-append #$ntp "/bin/ntpd") "-n"
-                             "-c" #$ntpd.conf "-u" "ntpd"
-                             #$@(if allow-large-adjustment?
-                                    '("-g")
-                                    '()))
-                       #:log-file "/var/log/ntpd.log"))
-             (stop #~(make-kill-destructor)))))))
+    (list (shepherd-service
+           (provision '(ntpd))
+           (documentation "Run the Network Time Protocol (NTP) daemon.")
+           (requirement '(user-processes networking))
+           (actions (list (shepherd-configuration-action ntpd.conf)))
+           (start #~(make-forkexec-constructor
+                     (list (string-append #$ntp "/bin/ntpd") "-n"
+                           "-c" #$ntpd.conf "-u" "ntpd"
+                           #$@(if allow-large-adjustment?
+                                  '("-g")
+                                  '()))
+                     #:log-file "/var/log/ntpd.log"))
+           (stop #~(make-kill-destructor))))))
 
 (define %ntp-accounts
   (list (user-account
@@ -1235,6 +1219,7 @@ project's documentation} for more information."
                             ;; TODO: iwd? is deprecated and should be passed
                             ;; with shepherd-requirement, remove later.
                             ,@(if iwd? '(iwd) '())))
+             (actions (list (shepherd-configuration-action conf)))
              (start
               #~(lambda _
                   (let ((pid
@@ -1248,7 +1233,11 @@ project's documentation} for more information."
                                                "/lib/NetworkManager/VPN")
                                 ;; Override non-existent default users
                                 "NM_OPENVPN_USER="
-                                "NM_OPENVPN_GROUP="))))
+                                "NM_OPENVPN_GROUP="
+                                ;; Allow NetworkManager to find the modules.
+                                (string-append
+                                 "LINUX_MODULE_DIRECTORY="
+                                 "/run/booted-system/kernel/lib/modules")))))
                     ;; XXX: Despite the "online" name, this doesn't guarantee
                     ;; WAN connectivity, it merely waits for NetworkManager
                     ;; to finish starting-up. This is required otherwise
diff --git a/gnu/services/sddm.scm b/gnu/services/sddm.scm
index 694ad736dc..9e02f1cc81 100644
--- a/gnu/services/sddm.scm
+++ b/gnu/services/sddm.scm
@@ -324,9 +324,3 @@ Relogin="              (if (sddm-configuration-relogin? config)
                   (description
                    "Run SDDM, a display and log-in manager for X11 and
 Wayland."))))
-
-(define-deprecated (sddm-service #:optional (config (sddm-configuration)))
-  sddm-service-type
-  "Run the @uref{https://github.com/sddm/sddm,SDDM display manager}
-with the given @var{config}, a @code{<sddm-configuration>} object."
-  (service sddm-service-type config))
diff --git a/gnu/services/security.scm b/gnu/services/security.scm
index 8116072920..e750bb468b 100644
--- a/gnu/services/security.scm
+++ b/gnu/services/security.scm
@@ -200,7 +200,7 @@
    "Backend to use to detect changes in the @code{log-path}.  The default is
 'auto.  To consult the defaults of the jail configuration, refer to the
 @file{/etc/fail2ban/jail.conf} file of the @code{fail2ban} package."
-   fail2ban-jail-configuration-serialize-backend)
+   (serializer fail2ban-jail-configuration-serialize-backend))
   (max-retry
    maybe-integer
    "The number of failures before a host get banned
@@ -269,7 +269,7 @@ names matching their filter name.")
    maybe-symbol
    "The encoding of the log files handled by the jail.
 Possible values are: @code{'ascii}, @code{'utf-8} and @code{'auto}."
-   fail2ban-jail-configuration-serialize-log-encoding)
+   (serializer fail2ban-jail-configuration-serialize-log-encoding))
   (log-path
    (list-of-strings '())
    "The file names of the log files to be monitored.")
@@ -280,7 +280,7 @@ Possible values are: @code{'ascii}, @code{'utf-8} and @code{'auto}."
    (text-config '())
    "Extra content for the jail configuration, provided as a list of file-like
 objects."
-   serialize-text-config)
+   (serializer serialize-text-config))
   (prefix fail2ban-jail-configuration-))
 
 (define list-of-fail2ban-jail-configurations?
diff --git a/gnu/services/vnc.scm b/gnu/services/vnc.scm
index 15c3c14fee..d57cf51af2 100644
--- a/gnu/services/vnc.scm
+++ b/gnu/services/vnc.scm
@@ -17,6 +17,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu services vnc)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages vnc)
   #:use-module ((gnu services) #:hide (delete))
   #:use-module (gnu system shadow)
@@ -191,7 +192,9 @@ CONFIG, a <xvnc-configuration> object."
          (name "xvnc")
          (group "xvnc")
          (system? #t)
-         (comment "User for Xvnc server"))))
+         (comment "User for Xvnc server")
+         (home-directory "/var/empty")
+         (shell (file-append shadow "/sbin/nologin")))))
 
 (define (xvnc-shepherd-service config)
   "Return a <shepherd-service> for Xvnc with CONFIG."
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index d56e893527..45897d7d6f 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -15,6 +15,7 @@
 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2020, 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro>
 ;;; Copyright © 2022 Simen Endsjø <simendsjo@gmail.com>
+;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -51,6 +52,8 @@
   #:use-module (gnu packages logging)
   #:use-module (gnu packages mail)
   #:use-module (gnu packages rust-apps)
+  #:autoload   (guix i18n) (G_)
+  #:use-module (guix diagnostics)
   #:use-module (guix packages)
   #:use-module (guix records)
   #:use-module (guix modules)
@@ -61,6 +64,7 @@
   #:use-module ((guix packages) #:select (package-version))
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-9)
+  #:use-module (srfi srfi-34)
   #:use-module (ice-9 match)
   #:use-module (ice-9 format)
   #:export (httpd-configuration
@@ -96,6 +100,7 @@
             nginx-configuration-nginx
             nginx-configuration-shepherd-requirement
             nginx-configuration-log-directory
+            nginx-configuration-log-level
             nginx-configuration-run-directory
             nginx-configuration-server-blocks
             nginx-configuration-upstream-blocks
@@ -562,6 +567,9 @@
                         (default '()))              ;list of symbols
   (log-directory nginx-configuration-log-directory  ;string
                  (default "/var/log/nginx"))
+  (log-level     nginx-configuration-log-level
+                 (sanitize assert-valid-log-level)
+                 (default 'error))
   (run-directory nginx-configuration-run-directory  ;string
                  (default "/var/run/nginx"))
   (server-blocks nginx-configuration-server-blocks
@@ -584,6 +592,14 @@
   (file          nginx-configuration-file         ;#f | string | file-like
                  (default #f)))
 
+(define (assert-valid-log-level level)
+  "Ensure @var{level} is one of @code{'debug}, @code{'info}, @code{'notice},
+@code{'warn}, @code{'error}, @code{'crit}, @code{'alert}, or @code{'emerg}."
+  (unless (memq level '(debug info notice warn error crit alert emerg))
+    (raise
+     (formatted-message (G_ "unknown log level '~a'~%") level)))
+  level)
+
 (define (config-domain-strings names)
  "Return a string denoting the nginx config representation of NAMES, a list
 of domain names."
@@ -692,6 +708,7 @@ of index files."
   (match-record config
                 <nginx-configuration>
                 (nginx log-directory run-directory
+                 log-level
                  server-blocks upstream-blocks
                  server-names-hash-bucket-size
                  server-names-hash-bucket-max-size
@@ -704,7 +721,7 @@ of index files."
           (flatten
            "user nginx nginx;\n"
            "pid " run-directory "/pid;\n"
-           "error_log " log-directory "/error.log info;\n"
+           "error_log " log-directory "/error.log " (symbol->string log-level) ";\n"
            (map emit-load-module modules)
            (map emit-global-directive global-directives)
            "http {\n"
@@ -823,7 +840,11 @@ This has the effect of killing old worker processes and starting new ones, using
 the same configuration file.  It is useful for situations where the same nginx
 configuration file can point to different things after a reload, such as
 renewed TLS certificates, or @code{include}d files.")
-                 (procedure (nginx-action "-s" "reload"))))))))))
+                 (procedure (nginx-action "-s" "reload")))
+               (shepherd-action
+                (name 'reopen)
+                (documentation "Re-open log files.")
+                (procedure (nginx-action "-s" "reopen"))))))))))
 
 (define nginx-service-type
   (service-type (name 'nginx)
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index c4745cecf5..7295a45b59 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -358,6 +358,22 @@ in @var{modules}."
                                  files)
                        #t))))
 
+(define (xorg-configuration-server-package-path config input path)
+  "Lookup the direct @var{input} in the xorg server package of @var{config}
+and append @var{path} to it."
+  (let* ((server (xorg-configuration-server config))
+         (package (lookup-package-direct-input server input)))
+    (when package (file-append package path))))
+
+(define (xorg-configuration-dri-driver-path config)
+  (xorg-configuration-server-package-path config "mesa" "/lib/dri"))
+
+(define (xorg-configuration-xkb-bin-dir config)
+  (xorg-configuration-server-package-path config "xkbcomp" "/bin"))
+
+(define (xorg-configuration-xkb-dir config)
+  (xorg-configuration-server-package-path config "xkeyboard-config" "/share/X11/xkb"))
+
 (define* (xorg-wrapper #:optional (config (xorg-configuration)))
   "Return a derivation that builds a script to start the X server with the
 given @var{config}.  The resulting script should be used in place of
@@ -365,12 +381,13 @@ given @var{config}.  The resulting script should be used in place of
   (define exp
     ;; Write a small wrapper around the X server.
     #~(begin
-        (setenv "XORG_DRI_DRIVER_PATH" (string-append #$mesa "/lib/dri"))
-        (setenv "XKB_BINDIR" (string-append #$xkbcomp "/bin"))
+        (setenv "XORG_DRI_DRIVER_PATH"
+                #$(xorg-configuration-dri-driver-path config))
+        (setenv "XKB_BINDIR" #$(xorg-configuration-xkb-bin-dir config))
 
         (let ((X (string-append #$(xorg-configuration-server config) "/bin/X")))
           (apply execl X X
-                 "-xkbdir" (string-append #$xkeyboard-config "/share/X11/xkb")
+                 "-xkbdir" #$(xorg-configuration-xkb-dir config)
                  "-config" #$(xorg-configuration->file config)
                  "-configdir" #$(xorg-configuration-directory
                                  (xorg-configuration-modules config))
diff --git a/gnu/system.scm b/gnu/system.scm
index 34195d53d1..50a3bac7e4 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -1201,15 +1201,7 @@ use 'plain-file' instead~%")
 
     ;; By default, applications that use D-Bus, such as Emacs, abort at startup
     ;; when /etc/machine-id is missing.  Make sure these warnings are non-fatal.
-    ("DBUS_FATAL_WARNINGS" . "0")
-
-    ;; XXX: Normally we wouldn't need to do this, but our glibc@2.23 package
-    ;; used to look things up in 'PREFIX/lib/locale' instead of
-    ;; '/run/current-system/locale' as was intended.  Keep this hack around so
-    ;; that people who still have glibc@2.23-using packages in their profiles
-    ;; can use them correctly.
-    ;; TODO: Remove when glibc@2.23 is long gone.
-    ("GUIX_LOCPATH" . "/run/current-system/locale")))
+    ("DBUS_FATAL_WARNINGS" . "0")))
 
 ;; Ensure LST is a list of <setuid-program> records and warn otherwise.
 (define-with-syntax-properties (ensure-setuid-program-list (lst properties))
diff --git a/gnu/system/linux-container.scm b/gnu/system/linux-container.scm
index c2fd55d48e..409386a84f 100644
--- a/gnu/system/linux-container.scm
+++ b/gnu/system/linux-container.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Google LLC
 ;;; Copyright © 2022 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2023 Pierre Langlois <pierre.langlois@gmx.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,9 +50,12 @@ from OS that are needed on the bare metal and not in a container."
   (define base
     (remove (lambda (service)
               (memq (service-kind service)
-                    (list (service-kind %linux-bare-metal-service)
-                          firmware-service-type
-                          system-service-type)))
+                    (cons* (service-kind %linux-bare-metal-service)
+                           firmware-service-type
+                           system-service-type
+                           (if shared-network?
+                               (list hosts-service-type)
+                               '()))))
             (operating-system-default-essential-services os)))
 
   (cons (service system-service-type
diff --git a/gnu/tests/databases.scm b/gnu/tests/databases.scm
index 2ca13577a1..92be1a829b 100644
--- a/gnu/tests/databases.scm
+++ b/gnu/tests/databases.scm
@@ -389,7 +389,11 @@ data double PRECISION NULL
 
 (define %mysql-os
   (simple-operating-system
-   (service mysql-service-type)))
+   (service mysql-service-type
+            (mysql-configuration
+             ;; Disable O_DIRECT since it's not supported on overlayfs.
+             ;; See <https://jira.mariadb.org/browse/MDEV-28751>.
+             (extra-content "innodb-flush-method = fsync")))))
 
 (define* (run-mysql-test)
   "Run tests in %MYSQL-OS."
diff --git a/gnu/tests/gdm.scm b/gnu/tests/gdm.scm
index 70a86b9065..ec1df4b797 100644
--- a/gnu/tests/gdm.scm
+++ b/gnu/tests/gdm.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2022 Bruno Victal <mirai@makinata.eu>.
+;;; Copyright © 2022⁠–⁠2023 Bruno Victal <mirai@makinata.eu>.
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,36 +23,26 @@
   #:use-module (gnu services desktop)
   #:use-module (gnu services xorg)
   #:use-module (gnu system)
-  #:use-module (gnu system file-systems)
   #:use-module (gnu system vm)
   #:use-module (guix gexp)
   #:use-module (ice-9 format)
   #:export (%test-gdm-x11
-            %test-gdm-wayland
-            %test-gdm-wayland-tmpfs))
+            %test-gdm-wayland))
 
-(define* (make-os #:key wayland? tmp-tmpfs?)
+(define* (make-os #:key wayland?)
   (operating-system
     (inherit %simple-os)
     (services
      (modify-services %desktop-services
        (gdm-service-type config => (gdm-configuration
                                     (inherit config)
-                                    (wayland? wayland?)))))
-    (file-systems (if tmp-tmpfs? (cons (file-system
-                                         (mount-point "/tmp")
-                                         (device "none")
-                                         (type "tmpfs")
-                                         (flags '(no-dev no-suid))
-                                         (check? #f))
-                                       %base-file-systems)
-                      %base-file-systems))))
-
-(define* (run-gdm-test #:key wayland? tmp-tmpfs?)
+                                    (wayland? wayland?)))))))
+
+(define* (run-gdm-test #:key wayland?)
   "Run tests in a vm which has gdm running."
   (define os
     (marionette-operating-system
-     (make-os #:wayland? wayland? #:tmp-tmpfs? tmp-tmpfs?)
+     (make-os #:wayland? wayland?)
      #:imported-modules '((gnu services herd))))
 
   (define vm
@@ -60,7 +50,7 @@
      (operating-system os)
      (memory-size 1024)))
 
-  (define name (format #f "gdm-~:[x11~;wayland~]~:[~;-tmpfs~]" wayland? tmp-tmpfs?))
+  (define name (format #f "gdm-~:[x11~;wayland~]" wayland?))
 
   (define test
     (with-imported-modules '((gnu build marionette))
@@ -69,8 +59,8 @@
                        (ice-9 format)
                        (srfi srfi-64))
 
-          (let* ((marionette (make-marionette (list #$vm)))
-                 (expected-session-type #$(if wayland? "wayland" "x11")))
+          (let ((marionette (make-marionette (list #$vm)))
+                (expected-session-type #$(if wayland? "wayland" "x11")))
 
             (test-runner-current (system-test-runner #$output))
             (test-begin #$name)
@@ -86,6 +76,9 @@
             (test-assert "gdm ready"
               (wait-for-file "/var/run/gdm/gdm.pid" marionette))
 
+            ;; waiting for gdm.pid is not enough, tests may still sporadically fail.
+            (sleep 1)
+
             (test-equal (string-append "session-type is " expected-session-type)
               expected-session-type
               (marionette-eval
@@ -118,10 +111,3 @@
    (name "gdm-wayland")
    (description "Basic tests for the GDM service. (Wayland)")
    (value (run-gdm-test #:wayland? #t))))
-
-(define %test-gdm-wayland-tmpfs
-  (system-test
-   ;; See <https://issues.guix.gnu.org/57589>.
-   (name "gdm-wayland-tmpfs")
-   (description "Basic tests for the GDM service. (Wayland, /tmp as tmpfs)")
-   (value (run-gdm-test #:wayland? #t #:tmp-tmpfs? #t))))
diff --git a/gnu/tests/lightdm.scm b/gnu/tests/lightdm.scm
index dda472bd74..6011d2c515 100644
--- a/gnu/tests/lightdm.scm
+++ b/gnu/tests/lightdm.scm
@@ -50,7 +50,7 @@
         (service polkit-service-type)
         (service elogind-service-type)
         (service dbus-root-service-type)
-        x11-socket-directory-service))
+        (service x11-socket-directory-service-type)))
 
 (define %lightdm-os
   (operating-system
diff --git a/gnu/tests/pam.scm b/gnu/tests/pam.scm
new file mode 100644
index 0000000000..5cf13d97d7
--- /dev/null
+++ b/gnu/tests/pam.scm
@@ -0,0 +1,97 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu tests pam)
+  #:use-module (gnu tests)
+  #:use-module (gnu services)
+  #:use-module (gnu services base)
+  #:use-module (gnu system)
+  #:use-module (gnu system pam)
+  #:use-module (gnu system vm)
+  #:use-module (guix gexp)
+  #:use-module (ice-9 format)
+  #:export (%test-pam-limits
+            %test-pam-limits-deprecated))
+
+
+;;;
+;;; pam-limits-service-type
+;;;
+
+(define pam-limit-entries
+  (list
+   (pam-limits-entry "@realtime" 'both 'rtprio 99)
+   (pam-limits-entry "@realtime" 'both 'memlock 'unlimited)))
+
+(define (run-test-pam-limits config)
+  "Run tests in a os with pam-limits-service-type configured."
+  (define os
+    (marionette-operating-system
+     (simple-operating-system
+      (service pam-limits-service-type config))))
+
+  (define vm
+    (virtual-machine os))
+
+  (define name (format #f "pam-limit-service~:[~;-deprecated~]"
+                       (file-like? config)))
+
+  (define test
+    (with-imported-modules '((gnu build marionette))
+      #~(begin
+          (use-modules (gnu build marionette)
+                       (srfi srfi-64))
+
+          (let ((marionette (make-marionette (list #$vm))))
+
+            (test-runner-current (system-test-runner #$output))
+
+            (test-begin #$name)
+
+            (test-assert "/etc/security/limits.conf ready"
+              (wait-for-file "/etc/security/limits.conf" marionette))
+
+            (test-equal "/etc/security/limits.conf content matches"
+              #$(string-join (map pam-limits-entry->string pam-limit-entries)
+                             "\n" 'suffix)
+              (marionette-eval
+               '(call-with-input-file "/etc/security/limits.conf"
+                  get-string-all)
+               marionette))
+
+            (test-end)))))
+
+  (gexp->derivation (string-append name "-test") test))
+
+(define %test-pam-limits
+  (system-test
+   (name "pam-limits-service")
+   (description "Test that pam-limits-service can serialize its config
+(as a list) to @file{limits.conf}.")
+   (value (run-test-pam-limits pam-limit-entries))))
+
+(define %test-pam-limits-deprecated
+  (system-test
+   (name "pam-limits-service-deprecated")
+   (description "Test that pam-limits-service can serialize its config
+(as a file-like object) to @file{limits.conf}.")
+   (value (run-test-pam-limits
+           (plain-file "limits.conf"
+                       (string-join (map pam-limits-entry->string
+                                         pam-limit-entries)
+                                    "\n" 'suffix))))))