summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/contributing.texi9
-rw-r--r--doc/guix.texi196
-rw-r--r--gnu/build/chromium-extension.scm18
-rw-r--r--gnu/home/services.scm55
-rw-r--r--gnu/home/services/shells.scm19
-rw-r--r--gnu/local.mk4
-rw-r--r--gnu/packages/admin.scm26
-rw-r--r--gnu/packages/aidc.scm11
-rw-r--r--gnu/packages/algebra.scm4
-rw-r--r--gnu/packages/audio.scm4
-rw-r--r--gnu/packages/bioconductor.scm19
-rw-r--r--gnu/packages/c.scm107
-rw-r--r--gnu/packages/calendar.scm9
-rw-r--r--gnu/packages/chicken.scm51
-rw-r--r--gnu/packages/chromium.scm6
-rw-r--r--gnu/packages/clojure.scm1
-rw-r--r--gnu/packages/commencement.scm9
-rw-r--r--gnu/packages/compression.scm24
-rw-r--r--gnu/packages/diffoscope.scm16
-rw-r--r--gnu/packages/docker.scm6
-rw-r--r--gnu/packages/emacs-xyz.scm101
-rw-r--r--gnu/packages/engineering.scm12
-rw-r--r--gnu/packages/finance.scm122
-rw-r--r--gnu/packages/fribidi.scm4
-rw-r--r--gnu/packages/games.scm40
-rw-r--r--gnu/packages/geo.scm43
-rw-r--r--gnu/packages/gnome.scm38
-rw-r--r--gnu/packages/gps.scm4
-rw-r--r--gnu/packages/gstreamer.scm8
-rw-r--r--gnu/packages/guile-xyz.scm19
-rw-r--r--gnu/packages/hardware.scm4
-rw-r--r--gnu/packages/image-viewers.scm21
-rw-r--r--gnu/packages/image.scm4
-rw-r--r--gnu/packages/irc.scm13
-rw-r--r--gnu/packages/jami.scm2
-rw-r--r--gnu/packages/kde-multimedia.scm17
-rw-r--r--gnu/packages/kde-utils.scm7
-rw-r--r--gnu/packages/linux.scm57
-rw-r--r--gnu/packages/lisp-xyz.scm104
-rw-r--r--gnu/packages/maths.scm37
-rw-r--r--gnu/packages/monitoring.scm61
-rw-r--r--gnu/packages/music.scm4
-rw-r--r--gnu/packages/networking.scm30
-rw-r--r--gnu/packages/node-xyz.scm243
-rw-r--r--gnu/packages/package-management.scm12
-rw-r--r--gnu/packages/patches/containerd-create-pid-file.patch31
-rw-r--r--gnu/packages/patches/libgeotiff-adapt-test-script-for-proj-6.2.patch63
-rw-r--r--gnu/packages/plotutils.scm4
-rw-r--r--gnu/packages/python-science.scm4
-rw-r--r--gnu/packages/python-web.scm74
-rw-r--r--gnu/packages/python-xyz.scm52
-rw-r--r--gnu/packages/qt.scm143
-rw-r--r--gnu/packages/slang.scm92
-rw-r--r--gnu/packages/sqlite.scm6
-rw-r--r--gnu/packages/tex.scm48
-rw-r--r--gnu/packages/text-editors.scm15
-rw-r--r--gnu/packages/toys.scm41
-rw-r--r--gnu/packages/version-control.scm37
-rw-r--r--gnu/packages/video.scm18
-rw-r--r--gnu/packages/vpn.scm4
-rw-r--r--gnu/packages/web.scm18
-rw-r--r--gnu/packages/wm.scm57
-rw-r--r--gnu/packages/xfce.scm24
-rw-r--r--gnu/packages/xorg.scm4
-rw-r--r--gnu/services/docker.scm5
-rw-r--r--gnu/services/guix.scm2
-rw-r--r--gnu/services/networking.scm47
-rw-r--r--gnu/system.scm1
-rw-r--r--gnu/tests/guix.scm21
-rw-r--r--guix/import/egg.scm9
-rw-r--r--guix/import/pypi.scm8
-rw-r--r--guix/import/texlive.scm20
-rw-r--r--guix/import/utils.scm2
-rw-r--r--guix/monad-repl.scm64
-rw-r--r--guix/scripts/home.scm64
-rw-r--r--guix/scripts/import/texlive.scm25
-rw-r--r--guix/scripts/package.scm33
-rw-r--r--guix/scripts/shell.scm5
-rw-r--r--guix/scripts/system.scm67
-rw-r--r--guix/upstream.scm18
-rw-r--r--guix/utils.scm6
-rw-r--r--tests/guix-home.sh8
82 files changed, 2046 insertions, 695 deletions
diff --git a/doc/contributing.texi b/doc/contributing.texi
index 6a2564b07d..02c7c5ae59 100644
--- a/doc/contributing.texi
+++ b/doc/contributing.texi
@@ -225,8 +225,7 @@ $ ./pre-inst-env guile -c '(use-modules (guix utils)) (pk (%current-system))'
 @noindent
 @cindex REPL
 @cindex read-eval-print loop
-@dots{} and for a REPL (@pxref{Using Guile Interactively,,, guile, Guile
-Reference Manual}):
+@dots{} and for a REPL (@pxref{Using Guix Interactively}):
 
 @example
 $ ./pre-inst-env guile
@@ -279,8 +278,8 @@ prepared Guile object (@file{.go}) files.
 
 You can run @command{make} automatically as you work using
 @command{watchexec} from the @code{watchexec} package.  For example,
-to build again each time you update a package file, you can run
-@samp{watchexec -w gnu/packages make -j4}.
+to build again each time you update a package file, run
+@samp{watchexec -w gnu/packages -- make -j4}.
 
 @node The Perfect Setup
 @section The Perfect Setup
@@ -292,7 +291,7 @@ Manual}).  First, you need more than an editor, you need
 wonderful @url{https://nongnu.org/geiser/, Geiser}.  To set that up, run:
 
 @example
-guix package -i emacs guile emacs-geiser emacs-geiser-guile
+guix install emacs guile emacs-geiser emacs-geiser-guile
 @end example
 
 Geiser allows for interactive and incremental development from within
diff --git a/doc/guix.texi b/doc/guix.texi
index a7ac74b416..3c5864ec1a 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -299,6 +299,7 @@ Programming Interface
 * The Store Monad::             Purely functional interface to the store.
 * G-Expressions::               Manipulating build expressions.
 * Invoking guix repl::          Programming Guix in Guile.
+* Using Guix Interactively::    Fine-grain interaction at the REPL.
 
 Defining Packages
 
@@ -7100,6 +7101,7 @@ package definitions.
 * The Store Monad::             Purely functional interface to the store.
 * G-Expressions::               Manipulating build expressions.
 * Invoking guix repl::          Programming Guix in Guile
+* Using Guix Interactively::    Fine-grain interaction at the REPL.
 @end menu
 
 @node Package Modules
@@ -10860,8 +10862,9 @@ So, to exit the monad and get the desired effect, one must use
 @end lisp
 
 Note that the @code{(guix monad-repl)} module extends the Guile REPL with
-new ``meta-commands'' to make it easier to deal with monadic procedures:
-@code{run-in-store}, and @code{enter-store-monad}.  The former is used
+new ``commands'' to make it easier to deal with monadic procedures:
+@code{run-in-store}, and @code{enter-store-monad} (@pxref{Using Guix
+Interactively}).  The former is used
 to ``run'' a single monadic value through the store:
 
 @example
@@ -10886,6 +10889,9 @@ scheme@@(guile-user)>
 Note that non-monadic values cannot be returned in the
 @code{store-monad} REPL.
 
+Other meta-commands are available at the REPL, such as @code{,build} to
+build a file-like object (@pxref{Using Guix Interactively}).
+
 The main syntactic forms to deal with monads in general are provided by
 the @code{(guix monads)} module and are described below.
 
@@ -11778,7 +11784,8 @@ lines at the top of the script:
 @code{!#}
 @end example
 
-Without a file name argument, a Guile REPL is started:
+Without a file name argument, a Guile REPL is started, allowing for
+interactive use (@pxref{Using Guix Interactively}):
 
 @example
 $ guix repl
@@ -11834,6 +11841,132 @@ Inhibit loading of the @file{~/.guile} file.  By default, that
 configuration file is loaded when spawning a @code{guile} REPL.
 @end table
 
+@node Using Guix Interactively
+@section Using Guix Interactively
+
+@cindex interactive use
+@cindex REPL, read-eval-print loop
+The @command{guix repl} command gives you access to a warm and friendly
+@dfn{read-eval-print loop} (REPL) (@pxref{Invoking guix repl}).  If
+you're getting into Guix programming---defining your own packages,
+writing manifests, defining services for Guix System or Guix Home,
+etc.---you will surely find it convenient to toy with ideas at the REPL.
+
+If you use Emacs, the most convenient way to do that is with Geiser
+(@pxref{The Perfect Setup}), but you do not have to use Emacs to enjoy
+the REPL@.  When using @command{guix repl} or @command{guile} in the
+terminal, we recommend using Readline for completion and Colorized to
+get colorful output.  To do that, you can run:
+
+@example
+guix install guile guile-readline guile-colorized
+@end example
+
+@noindent
+... and then create a @file{.guile} file in your home directory containing
+this:
+
+@lisp
+(use-modules (ice-9 readline) (ice-9 colorized))
+
+(activate-readline)
+(activate-colorized)
+@end lisp
+
+The REPL lets you evaluate Scheme code; you type a Scheme expression at
+the prompt, and the REPL prints what it evaluates to:
+
+@example
+$ guix repl
+scheme@@(guix-user)> (+ 2 3)
+$1 = 5
+scheme@@(guix-user)> (string-append "a" "b")
+$2 = "ab"
+@end example
+
+It becomes interesting when you start fiddling with Guix at the REPL.
+The first thing you'll want to do is to ``import'' the @code{(guix)}
+module, which gives access to the main part of the programming
+interface, and perhaps a bunch of useful Guix modules.  You could type
+@code{(use-modules (guix))}, which is valid Scheme code to import a
+module (@pxref{Using Guile Modules,,, guile, GNU Guile Reference
+Manual}), but the REPL provides the @code{use} @dfn{command} as a
+shorthand notation (@pxref{REPL Commands,,, guile, GNU Guile Reference
+Manual}):
+
+@example
+scheme@@(guix-user)> ,use (guix)
+scheme@@(guix-user)> ,use (gnu packages base)
+@end example
+
+Notice that REPL commands are introduced by a leading comma.  A REPL
+command like @code{use} is not valid Scheme code; it's interpreted
+specially by the REPL.
+
+Guix extends the Guile REPL with additional commands for convenience.
+Among those, the @code{build} command comes in handy: it ensures that
+the given file-like object is built, building it if needed, and returns
+its output file name(s).  In the example below, we build the
+@code{coreutils} and @code{grep} packages, as well as a ``computed
+file'' (@pxref{G-Expressions, @code{computed-file}}), and we use the
+@code{scandir} procedure to list the files in Grep's @code{/bin}
+directory:
+
+@example
+scheme@@(guix-user)> ,build coreutils
+$1 = "/gnu/store/@dots{}-coreutils-8.32-debug"
+$2 = "/gnu/store/@dots{}-coreutils-8.32"
+scheme@@(guix-user)> ,build grep
+$3 = "/gnu/store/@dots{}-grep-3.6"
+scheme@@(guix-user)> ,build (computed-file "x" #~(mkdir #$output))
+building /gnu/store/@dots{}-x.drv...
+$4 = "/gnu/store/@dots{}-x"
+scheme@@(guix-user)> ,use(ice-9 ftw)
+scheme@@(guix-user)> (scandir (string-append $3 "/bin"))
+$5 = ("." ".." "egrep" "fgrep" "grep")
+@end example
+
+At a lower-level, a useful command is @code{lower}: it takes a file-like
+object and ``lowers'' it into a derivation (@pxref{Derivations}) or a
+store file:
+
+@example
+scheme@@(guix-user)> ,lower grep
+$6 = #<derivation /gnu/store/@dots{}-grep-3.6.drv => /gnu/store/@dots{}-grep-3.6 7f0e639115f0>
+scheme@@(guix-user)> ,lower (plain-file "x" "Hello!")
+$7 = "/gnu/store/@dots{}-x"
+@end example
+
+The full list of REPL commands can be seen by typing @code{,help guix}
+and is given below for reference.
+
+@deffn {REPL command} build @var{object}
+Lower @var{object} and build it if it's not already built, returning its
+output file name(s).
+@end deffn
+
+@deffn {REPL command} lower @var{object}
+Lower @var{object} into a derivation or store file name and return it.
+@end deffn
+
+@deffn {REPL command} verbosity @var{level}
+Change build verbosity to @var{level}.
+
+This is similar to the @option{--verbosity} command-line option
+(@pxref{Common Build Options}): level 0 means total silence, level 1
+shows build events only, and higher levels print build logs.
+@end deffn
+
+@deffn {REPL command} run-in-store @var{exp}
+Run @var{exp}, a monadic expresssion, through the store monad.
+@xref{The Store Monad}, for more information.
+@end deffn
+
+@deffn {REPL command} enter-store-monad
+Enter a new REPL to evaluate monadic expressions (@pxref{The Store
+Monad}).  You can quit this ``inner'' REPL by typing @code{,q}.
+@end deffn
+
 @c *********************************************************************
 @node Utilities
 @chapter Utilities
@@ -37648,6 +37781,13 @@ bootloader boot menu:
 Describe the running system generation: its file name, the kernel and
 bootloader used, etc., as well as provenance information when available.
 
+The @code{--list-installed} flag is available, with the same
+syntax that is used in @command{guix package --list-installed}
+(@pxref{Invoking guix package}).  When the flag is used,
+the description will include a list of packages that are currently
+installed in the system profile, with optional filtering based on a
+regular expression.
+
 @quotation Note
 The @emph{running} system generation---referred to by
 @file{/run/current-system}---is not necessarily the @emph{current}
@@ -37675,6 +37815,11 @@ generations that are up to 10 days old:
 $ guix system list-generations 10d
 @end example
 
+The @code{--list-installed} flag may also be specified, with the same
+syntax that is used in @command{guix package --list-installed}.  This
+may be helpful if trying to determine when a package was added to the
+system.
+
 @end table
 
 The @command{guix system} command has even more to offer!  The following
@@ -39663,6 +39808,23 @@ contents of the extensions will be added to the end of the corresponding
 Bash configuration files (@pxref{Bash Startup Files,,, bash, The GNU
 Bash Reference Manual}.
 
+For example, here is how you would define a service that extends the
+Bash service such that @file{~/.bash_profile} defines an additional
+environment variable, @env{PS1}:
+
+@lisp
+(define bash-fancy-prompt-service
+  (simple-service 'bash-fancy-prompt
+                  home-bash-service-type
+                  (home-bash-extension
+                   (environment-variables
+                    '(("PS1" . "\\u \\wλ "))))))
+@end lisp
+
+You would then add @code{bash-fancy-prompt-service} to the list in the
+@code{services} field of your @code{home-environment}.  The reference of
+@code{home-bash-extension} follows.
+
 @deftp {Data Type} home-bash-extension
 Available @code{home-bash-extension} fields are:
 
@@ -40345,6 +40507,17 @@ install anything.
 Describe the current home generation: its file name, as well as
 provenance information when available.
 
+To show installed packages in the current home generation's profile, the
+@code{--list-installed} flag is provided, with the same syntax that is
+used in @command{guix package --list-installed} (@pxref{Invoking guix
+package}).  For instance, the following command shows a table of all the
+packages with ``emacs'' in their name that are installed in the current
+home generation's profile:
+
+@example
+guix home describe --list-installed=emacs
+@end example
+
 @item list-generations
 List a summary of each generation of the home environment available on
 disk, in a human-readable way.  This is similar to the
@@ -40357,9 +40530,14 @@ generations displayed.  For instance, the following command displays
 generations that are up to 10 days old:
 
 @example
-$ guix home list-generations 10d
+guix home list-generations 10d
 @end example
 
+The @code{--list-installed} flag may also be specified, with the same
+syntax that is used in @command{guix home describe}.  This may be
+helpful if trying to determine when a package was added to the home
+profile.
+
 @item import
 Generate a @dfn{home environment} from the packages in the default
 profile and configuration files found in the user's home directory.  The
@@ -40787,6 +40965,16 @@ package, you can try and import it (@pxref{Invoking guix import}):
 guix import texlive @var{package}
 @end example
 
+Additional options include:
+
+@table @code
+@item --recursive
+@itemx -r
+Traverse the dependency graph of the given upstream package recursively
+and generate package expressions for all those packages that are not yet
+in Guix.
+@end table
+
 @quotation Note
 @TeX{} Live packaging is still very much work in progress, but you can
 help!  @xref{Contributing}, for more information.
diff --git a/gnu/build/chromium-extension.scm b/gnu/build/chromium-extension.scm
index 8ca5251957..28449a1e1d 100644
--- a/gnu/build/chromium-extension.scm
+++ b/gnu/build/chromium-extension.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2022 Nicolas Graves <ngraves@ngraves.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,10 +20,9 @@
 (define-module (gnu build chromium-extension)
   #:use-module (guix gexp)
   #:use-module (guix packages)
-  #:use-module (gnu packages chromium)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages tls)
-  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages node-xyz)
   #:use-module (guix build-system trivial)
   #:export (make-chromium-extension))
 
@@ -69,24 +69,14 @@ in PACKAGE-OUTPUT of PACKAGE.  The extension will be signed with SIGNING-KEY."
    (string-append name "-" version ".crx")
    (with-imported-modules '((guix build utils))
      #~(begin
-         ;; This is not great.  We pull Xorg and Chromium just to Zip and
-         ;; sign an extension.  This should be implemented with something
-         ;; lighter.  (TODO: where is the CRXv3 documentation..?)
          (use-modules (guix build utils))
-         (let ((chromium #$(file-append ungoogled-chromium "/bin/chromium"))
-               (xvfb #$(file-append xorg-server "/bin/Xvfb"))
+         (let ((crx3 #+(file-append node-crx3 "/bin/crx3"))
                (packdir (string-append (getcwd) "/extension")))
            (mkdir packdir)
            (copy-recursively (ungexp package package-output) packdir
                              ;; Ensure consistent file modification times.
                              #:keep-mtime? #t)
-           (system (string-append xvfb " :1 &"))
-           (setenv "DISPLAY" ":1")
-           (sleep 2)                    ;give Xorg some time to initialize...
-           (invoke chromium
-                   "--user-data-dir=chromium-profile"
-                   (string-append "--pack-extension=" packdir)
-                   (string-append "--pack-extension-key=" #$signing-key))
+           (invoke crx3 "--keyPath" #$signing-key packdir)
            (copy-file (string-append packdir ".crx") #$output))))
    #:local-build? #t))
 
diff --git a/gnu/home/services.scm b/gnu/home/services.scm
index 5ee3357792..b05ec53e2a 100644
--- a/gnu/home/services.scm
+++ b/gnu/home/services.scm
@@ -46,6 +46,7 @@
             home-run-on-change-service-type
             home-provenance-service-type
 
+            environment-variable-shell-definitions
             home-files-directory
             xdg-configuration-files-directory
             xdg-data-files-directory
@@ -169,6 +170,34 @@ packages, configuration files, activation script, and so on.")))
 configuration files that the user has declared in their
 @code{home-environment} record.")))
 
+(define (environment-variable-shell-definitions variables)
+  "Return a gexp that evaluates to a list of POSIX shell statements defining
+VARIABLES, a list of environment variable name/value pairs.  The returned code
+ensures variable values are properly quoted."
+  #~(let ((shell-quote
+           (lambda (value)
+             ;; Double-quote VALUE, leaving dollar sign as is.
+             (let ((quoted (list->string
+                            (string-fold-right
+                             (lambda (chr lst)
+                               (case chr
+                                 ((#\" #\\)
+                                  (append (list chr #\\) lst))
+                                 (else (cons chr lst))))
+                             '()
+                             value))))
+               (string-append "\"" quoted "\"")))))
+      (string-append
+       #$@(map (match-lambda
+                 ((key . #f)
+                  "")
+                 ((key . #t)
+                  #~(string-append "export " #$key "\n"))
+                 ((key . value)
+                  #~(string-append "export " #$key "="
+                                   (shell-quote #$value) "\n")))
+               variables))))
+
 (define (environment-variables->setup-environment-script vars)
   "Return a file that can be sourced by a POSIX compliant shell which
 initializes the environment.  The file will source the home
@@ -181,7 +210,7 @@ If value is @code{#f} variable will be omitted.
 If value is @code{#t} variable will be just exported.
 For any other, value variable will be set to the @code{value} and
 exported."
-  (define (warn-about-duplicate-defenitions)
+  (define (warn-about-duplicate-definitions)
     (fold
      (lambda (x acc)
        (when (equal? (car x) (car acc))
@@ -192,15 +221,18 @@ exported."
      (sort vars (lambda (a b)
                   (string<? (car a) (car b))))))
 
-  (warn-about-duplicate-defenitions)
+  (warn-about-duplicate-definitions)
   (with-monad
    %store-monad
    (return
     `(("setup-environment"
        ;; TODO: It's necessary to source ~/.guix-profile too
        ;; on foreign distros
-       ,(apply mixed-text-file "setup-environment"
-               "\
+       ,(computed-file "setup-environment"
+                       #~(call-with-output-file #$output
+                           (lambda (port)
+                             (set-port-encoding! port "UTF-8")
+                             (display "\
 HOME_ENVIRONMENT=$HOME/.guix-home
 GUIX_PROFILE=\"$HOME_ENVIRONMENT/profile\"
 PROFILE_FILE=\"$HOME_ENVIRONMENT/profile/etc/profile\"
@@ -227,17 +259,10 @@ case $XCURSOR_PATH in
   *) export XCURSOR_PATH=$HOME_ENVIRONMENT/profile/share/icons:$XCURSOR_PATH ;;
 esac
 
-"
-
-               (append-map
-                (match-lambda
-                  ((key . #f)
-                   '())
-                  ((key . #t)
-                   (list "export " key "\n"))
-                  ((key . value)
-                   (list "export " key "=" value "\n")))
-                vars)))))))
+" port)
+                             (display
+                              #$(environment-variable-shell-definitions vars)
+                              port)))))))))
 
 (define home-environment-variables-service-type
   (service-type (name 'home-environment-variables)
diff --git a/gnu/home/services/shells.scm b/gnu/home/services/shells.scm
index dda80736b1..172e58a9ff 100644
--- a/gnu/home/services/shells.scm
+++ b/gnu/home/services/shells.scm
@@ -111,16 +111,7 @@ service type can be extended with a list of file-like objects.")))
 
 (define (serialize-boolean field-name val) "")
 (define (serialize-posix-env-vars field-name val)
-  #~(string-append
-     #$@(map
-         (match-lambda
-           ((key . #f)
-            "")
-           ((key . #t)
-            #~(string-append "export " #$key "\n"))
-           ((key . value)
-            #~(string-append "export " #$key "=" #$value "\n")))
-         val)))
+  (environment-variable-shell-definitions val))
 
 
 ;;;
@@ -192,9 +183,9 @@ another process for example)."))
   (mixed-text-file
    "zprofile"
    "\
-# Setups system and user profiles and related variables
+# Set up the system, user profile, and related variables.
 source /etc/profile
-# Setups home environment profile
+# Set up the home environment profile.
 source ~/.profile
 
 # It's only necessary if zsh is a login shell, otherwise profiles will
@@ -443,9 +434,9 @@ alias grep='grep --color=auto'\n")
       ,(mixed-text-file
         "bash_profile"
         "\
-# Setups system and user profiles and related variables
+# Set up the system, user profile, and related variables.
 # /etc/profile will be sourced by bash automatically
-# Setups home environment profile
+# Set up the home environment profile.
 if [ -f ~/.profile ]; then source ~/.profile; fi
 
 # Honor per-interactive-shell startup file
diff --git a/gnu/local.mk b/gnu/local.mk
index 6baae4fa8d..2bcf966101 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -17,7 +17,7 @@
 # Copyright © 2017, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 # Copyright © 2017, 2018, 2019 Gábor Boskovits <boskovits@gmail.com>
 # Copyright © 2018 Amirouche Boubekki <amirouche@hypermove.net>
-# Copyright © 2018, 2019, 2020, 2021 Oleg Pykhalov <go.wigust@gmail.com>
+# Copyright © 2018, 2019, 2020, 2021, 2022 Oleg Pykhalov <go.wigust@gmail.com>
 # Copyright © 2018 Stefan Stefanović <stefanx2ovic@gmail.com>
 # Copyright © 2018, 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 # Copyright © 2019, 2020, 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
@@ -967,6 +967,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/cmh-support-fplll.patch      		\
   %D%/packages/patches/coda-use-system-libs.patch		\
   %D%/packages/patches/collectd-5.11.0-noinstallvar.patch		\
+  %D%/packages/patches/containerd-create-pid-file.patch		\
   %D%/packages/patches/combinatorial-blas-awpm.patch		\
   %D%/packages/patches/combinatorial-blas-io-fix.patch		\
   %D%/packages/patches/cool-retro-term-wctype.patch		\
@@ -1390,7 +1391,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/libcroco-CVE-2020-12825.patch		\
   %D%/packages/patches/libcyaml-libyaml-compat.patch		\
   %D%/packages/patches/libexpected-nofetch.patch                \
-  %D%/packages/patches/libgeotiff-adapt-test-script-for-proj-6.2.patch		\
   %D%/packages/patches/libgit2-mtime-0.patch			\
   %D%/packages/patches/libgnome-encoding.patch			\
   %D%/packages/patches/libgnomeui-utf8.patch			\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 88cb8fded9..7a37cdda61 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -2278,24 +2278,23 @@ network, which causes enabled computers to power on.")
 (define-public dmidecode
   (package
     (name "dmidecode")
-    (version "3.3")
+    (version "3.4")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://savannah/dmidecode/dmidecode-"
                            version ".tar.xz"))
        (sha256
-        (base32 "0m8lzg9rf1qssasiix672bxk5qwms90561g8hfkkhk31h2kkgiw2"))))
+        (base32 "04i2ahvqinkrnzfsbswplv9wff36xf9b3snvriwrjz26v18sijs3"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f                                ; no 'check' target
-       #:make-flags
-       (list (string-append "CC=" ,(cc-for-target))
-             (string-append "prefix="
-                            (assoc-ref %outputs "out")))
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure))))                   ; no configure script
+     (list #:tests? #f                  ; no 'check' target
+           #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   (string-append "prefix=" #$output))
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure))))                   ; no configure script
     (home-page "https://www.nongnu.org/dmidecode/")
     (synopsis "Read hardware information from the BIOS")
     (description
@@ -2635,6 +2634,9 @@ various ways that may be running with too much privilege.")
                (base32
                 "1mlc25sd5rgj5xmzcllci47inmfdw7cp185fday6hc9rwqkqmnaw"))))
     (build-system gnu-build-system)
+    (arguments
+     (list #:make-flags
+           #~(list "BUILD_INFO=\"(Guix)\"")))
     (inputs (list libcap-ng))
     (home-page "https://www.smartmontools.org/")
     (synopsis "S.M.A.R.T. harddisk control and monitoring tools")
@@ -4194,7 +4196,7 @@ Python loading in HPC environments.")
   (let ((real-name "inxi"))
     (package
       (name "inxi-minimal")
-      (version "3.3.15-1")
+      (version "3.3.19-1")
       (source
        (origin
          (method git-fetch)
@@ -4203,7 +4205,7 @@ Python loading in HPC environments.")
                (commit version)))
          (file-name (git-file-name real-name version))
          (sha256
-          (base32 "02zy94bd6ayfl9y7ka6gk32q254k49cbq3a6wgi31r2fcvybyrf7"))))
+          (base32 "0g5m43cj4534gb181zy1hwjz5il88xibf8psxw8a4s6jnaq1zdlk"))))
       (build-system trivial-build-system)
       (inputs
        `(("bash" ,bash-minimal)
diff --git a/gnu/packages/aidc.scm b/gnu/packages/aidc.scm
index 5482261a59..5e77ae3c5a 100644
--- a/gnu/packages/aidc.scm
+++ b/gnu/packages/aidc.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2014 John Darringon <jmd@gnu.org>
 ;;; Copyright © 2016, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Hartmut Goebel <h.goebel@crazy-compilers.com>
-;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018, 2019, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2020 Leo Famulari <leo@famulari.name>
 ;;;
@@ -23,6 +23,7 @@
 
 (define-module (gnu packages aidc)
   #:use-module (gnu packages)
+  #:use-module (guix gexp)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -148,7 +149,7 @@ characters, and is highly robust.")
 (define-public libdmtx
   (package
     (name "libdmtx")
-    (version "0.7.5")
+    (version "0.7.7")
     (source
      (origin
        (method git-fetch)
@@ -157,11 +158,11 @@ characters, and is highly robust.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0wk3fkxzf9ip75v8ia54v6ywx72ajp5s6777j4ay8barpbv869rj"))))
+        (base32 "0s95gplvb6x7gnl48yn7ywa9r15lfm8k2m60wm9i7w75ay4bq32i"))))
     (build-system gnu-build-system)
     (arguments
-     ;; XXX Test suite is broken: https://github.com/dmtx/libdmtx/issues/22
-     `(#:tests? #f))
+     (list #:configure-flags
+           #~(list "--disable-static")))
     (native-inputs
      (list autoconf automake libtool pkg-config))
     (home-page "https://github.com/dmtx")
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 6823531cc0..95fbdb5e36 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -325,7 +325,7 @@ precision.")
 (define-public giac
   (package
     (name "giac")
-    (version "1.7.0-51")
+    (version "1.9.0-19")
     (source
      (origin
        (method url-fetch)
@@ -337,7 +337,7 @@ precision.")
                            "~parisse/debian/dists/stable/main/source/"
                            "giac_" version ".tar.gz"))
        (sha256
-        (base32 "0wgqa2nxpv652348fxpchx5zvaj6ssc403jxwsdp5ky9pdpap2zs"))))
+        (base32 "1zl3wpw4mwsc2zm2mnxnajxql0df68mlfyivbkk4i300wjfqkdvb"))))
     (build-system gnu-build-system)
     (arguments
      (list
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index bab9d66a2d..262994c998 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -5841,7 +5841,7 @@ and DSD streams.")
 (define-public qpwgraph
   (package
     (name "qpwgraph")
-    (version "0.3.2")
+    (version "0.3.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -5850,7 +5850,7 @@ and DSD streams.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1zja4klvzbfwi14ihiahl8zm869h0c1yrpfkzvixxjcps372hh07"))))
+                "1xqmlbqj6ny4cpclzr8xyy6d6i392h9f1vmlbasp6xfy5b0yya94"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f))    ;; no tests
diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm
index 38c309caa4..31484799b2 100644
--- a/gnu/packages/bioconductor.scm
+++ b/gnu/packages/bioconductor.scm
@@ -2940,6 +2940,25 @@ measures for Affymetrix Oligonucleotide Arrays.")
     (properties
      `((upstream-name . "AffyCompatible")))
     (build-system r-build-system)
+    (arguments
+     (list
+      #:phases
+      `(modify-phases %standard-phases
+         (add-after 'unpack 'make-reproducible
+           (lambda _
+             ;; Order DTD elements before generating R code from them.
+             (substitute* "R/methods-AffyCompatible.R"
+               (("dtd <- .*" m)
+                (string-append m "
+elements <- dtd$elements
+ordered <- elements[order(names(elements))]\n"))
+               (("elt in dtd\\$elements")
+                "elt in ordered"))
+             ;; Use a predictable directory name for code generation.
+             (mkdir-p "/tmp/NetAffxResourcePrototype")
+             (substitute* "R/DataClasses.R"
+               (("directory=tempdir\\(\\)")
+                "directory=\"/tmp/NetAffxResourcePrototype\"")))))))
     (propagated-inputs
      (list r-biostrings r-rcurl r-xml))
     (home-page "https://bioconductor.org/packages/AffyCompatible/")
diff --git a/gnu/packages/c.scm b/gnu/packages/c.scm
index b1f68c706b..1630a40d17 100644
--- a/gnu/packages/c.scm
+++ b/gnu/packages/c.scm
@@ -15,6 +15,7 @@
 ;;; Copyright © 2021 Foo Chuan Wei <chuanwei.foo@hotmail.com>
 ;;; Copyright © 2022 (unmatched parenthesis <paren@disroot.org>
 ;;; Copyright © 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com>
+;;; Copyright © 2022 Ekaitz Zarraga <ekaitz@elenq.tech>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -112,58 +113,64 @@
       (license license:expat))))
 
 (define-public tcc
-  (package
-    (name "tcc")                                  ;aka. "tinycc"
-    (version "0.9.27")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://savannah/tinycc/tcc-"
-                                  version ".tar.bz2"))
-              (sha256
-               (base32
-                "177bdhwzrnqgyrdv1dwvpd04fcxj68s5pm1dzwny6359ziway8yy"))))
-    (build-system gnu-build-system)
-    (native-inputs (list perl texinfo))
-    (arguments
-     `(#:configure-flags (list (string-append "--elfinterp="
-                                              (assoc-ref %build-inputs "libc")
-                                              ,(glibc-dynamic-linker))
-                               (string-append "--crtprefix="
-                                              (assoc-ref %build-inputs "libc")
-                                              "/lib")
-                               (string-append "--sysincludepaths="
-                                              (assoc-ref %build-inputs "libc")
-                                              "/include:"
-                                              (assoc-ref %build-inputs
-                                                         "kernel-headers")
-                                              "/include:{B}/include")
-                               (string-append "--libpaths="
-                                              (assoc-ref %build-inputs "libc")
-                                              "/lib")
-                               ,@(if (string-prefix? "armhf-linux"
-                                                     (or (%current-target-system)
-                                                         (%current-system)))
-                                     `("--triplet=arm-linux-gnueabihf")
-                                     '()))
-       #:test-target "test"))
-    (native-search-paths
-     (list (search-path-specification
-            (variable "CPATH")
-            (files '("include")))
-           (search-path-specification
-            (variable "LIBRARY_PATH")
-            (files '("lib" "lib64")))))
-    ;; Fails to build on MIPS: "Unsupported CPU"
-    (supported-systems (delete "mips64el-linux" %supported-systems))
-    (synopsis "Tiny and fast C compiler")
-    (description
-     "TCC, also referred to as \"TinyCC\", is a small and fast C compiler
+  ;; There's currently no release fixing <https://issues.guix.gnu.org/52140>.
+  (let ((revision "1")
+        (commit "a83b28568596afd8792fd58d1a5bd157fc6b6634"))
+    (package
+      (name "tcc")                                ;aka. "tinycc"
+      (version (git-version "0.9.27" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "git://repo.or.cz/tinycc.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "01znw86fg73x3k0clafica4b6glbhz69p588kvp766i0zgvs68dh"))))
+      (build-system gnu-build-system)
+      (native-inputs (list perl texinfo))
+      (arguments
+       `(#:configure-flags (list (string-append "--elfinterp="
+                                                (assoc-ref %build-inputs
+                                                           "libc")
+                                                ,(glibc-dynamic-linker))
+                                 (string-append "--crtprefix="
+                                                (assoc-ref %build-inputs
+                                                           "libc") "/lib")
+                                 (string-append "--sysincludepaths="
+                                                (assoc-ref %build-inputs
+                                                           "libc") "/include:"
+                                                (assoc-ref %build-inputs
+                                                           "kernel-headers")
+                                                "/include:{B}/include")
+                                 (string-append "--libpaths="
+                                                (assoc-ref %build-inputs
+                                                           "libc") "/lib")
+                                 ,@(if (string-prefix? "armhf-linux"
+                                                       (or (%current-target-system)
+                                                           (%current-system)))
+                                       `("--triplet=arm-linux-gnueabihf")
+                                       '()))
+         #:test-target "test"))
+      (native-search-paths
+       (list (search-path-specification
+              (variable "CPATH")
+              (files '("include")))
+             (search-path-specification
+              (variable "LIBRARY_PATH")
+              (files '("lib" "lib64")))))
+      ;; Fails to build on MIPS: "Unsupported CPU"
+      (supported-systems (delete "mips64el-linux" %supported-systems))
+      (synopsis "Tiny and fast C compiler")
+      (description
+       "TCC, also referred to as \"TinyCC\", is a small and fast C compiler
 written in C.  It supports ANSI C with GNU and extensions and most of the C99
 standard.")
-    (home-page "http://www.tinycc.org/")
-    ;; An attempt to re-licence tcc under the Expat licence is underway but not
-    ;; (if ever) complete.  See the RELICENSING file for more information.
-    (license license:lgpl2.1+)))
+      (home-page "http://www.tinycc.org/")
+      ;; An attempt to re-licence tcc under the Expat licence is underway but not
+      ;; (if ever) complete.  See the RELICENSING file for more information.
+      (license license:lgpl2.1+))))
 
 (define-public pcc
   (package
diff --git a/gnu/packages/calendar.scm b/gnu/packages/calendar.scm
index 66723d7378..715d158241 100644
--- a/gnu/packages/calendar.scm
+++ b/gnu/packages/calendar.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015, 2016, 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
-;;; Copyright © 2016, 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Troy Sankey <sankeytms@gmail.com>
 ;;; Copyright © 2016, 2021 Stefan Reichoer <stefan@xsteve.at>
 ;;; Copyright © 2018, 2019, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -179,13 +179,13 @@ data units.")
 (define-public khal
   (package
     (name "khal")
-    (version "0.10.4")
+    (version "0.10.5")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "khal" version))
               (sha256
                (base32
-                "17qj1n2l39pnzk4vjrmql90z7908nivnzcc2g9nj1h31k859inrz"))))
+                "0xhcrx7lcjk126i2xgqmgb199vd4hxsq34mkdmhdh9ia62nbgvsf"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f ; The test suite is unreliable. See <https://bugs.gnu.org/44197>
@@ -198,8 +198,7 @@ data units.")
             (invoke "make" "--directory=doc/" "man")
             (install-file
              "doc/build/man/khal.1"
-             (string-append (assoc-ref outputs "out") "/share/man/man1"))
-            #t)))))
+             (string-append (assoc-ref outputs "out") "/share/man/man1")))))))
     (native-inputs
      (list python-setuptools-scm
            ;; Required to build manpage
diff --git a/gnu/packages/chicken.scm b/gnu/packages/chicken.scm
index d611c1762e..b87b8118f1 100644
--- a/gnu/packages/chicken.scm
+++ b/gnu/packages/chicken.scm
@@ -109,6 +109,26 @@ useful list processing procedures for construction, examining, destructuring
 and manipulating lists and pairs.")
     (license license:bsd-3)))
 
+(define-public chicken-srfi-13
+  (package
+    (name "chicken-srfi-13")
+    (version "0.3.2")
+    (source (origin
+              (method url-fetch)
+              (uri (egg-uri "srfi-13" version))
+              (sha256
+               (base32
+                "18clbmaampaxivwx9bya9fxnkzqbczhlz0kbs9bfapm77mxkwclc"))))
+    (build-system chicken-build-system)
+    (arguments '(#:egg-name "srfi-13"))
+    (native-inputs (list chicken-test))
+    (propagated-inputs (list chicken-srfi-14))
+    (home-page "https://wiki.call-cc.org/egg/srfi-13")
+    (synopsis "SRFI-13 string library for Chicken scheme")
+    (description "This package provides the SRFI-13 string library for Chicken
+scheme.")
+    (license license:bsd-3)))
+
 (define-public chicken-srfi-14
   (package
     (name "chicken-srfi-14")
@@ -278,3 +298,34 @@ with integers.")
      "This package provides a simple testing utility for CHICKEN Scheme.")
     (license license:bsd-3)))
 
+(define-public chicken-crypto-tools
+  (package
+    (name "chicken-crypto-tools")
+    (version "1.4")
+    (source (origin
+              (method url-fetch)
+              (uri (egg-uri "crypto-tools" version))
+              (sha256
+               (base32
+                "0ajf0qfnhp99f4x1dll2fhlxrsxamgrrwyksc7rrym77xmv8f1pd"))))
+    (build-system chicken-build-system)
+    (arguments '(#:egg-name "crypto-tools"))
+    (home-page "https://wiki.call-cc.org/egg/crypto-tools")
+    (synopsis "Useful cryptographic primitives")
+    (description "The crypto-tools egg implements useful cryptographic
+primitives.  More specifically, provided are:
+
+@itemize
+@item binary blobs
+@itemize
+@item marshallers to and from hex strings
+@item blob xor
+@item blob padding using either PKCS#5 or ISO7816-4
+@end itemize
+@item Block cipher modes of operation
+@itemize
+@item CBC with or without incorporated encrypted IV in the ciphertext
+@item CTR with or without incorporated IV in the ciphertext
+@end itemize
+@end itemize")
+    (license license:bsd-3)))
diff --git a/gnu/packages/chromium.scm b/gnu/packages/chromium.scm
index 968a76ff5c..4f21335502 100644
--- a/gnu/packages/chromium.scm
+++ b/gnu/packages/chromium.scm
@@ -316,7 +316,7 @@
   ;; run the Blink performance tests, just remove everything to save ~70MiB.
   '("third_party/blink/perf_tests"))
 
-(define %chromium-version "103.0.5060.114")
+(define %chromium-version "103.0.5060.134")
 (define %ungoogled-revision (string-append %chromium-version "-1"))
 (define %debian-revision "debian/102.0.5005.61-1")
 
@@ -328,7 +328,7 @@
     (file-name (git-file-name "ungoogled-chromium" %ungoogled-revision))
     (sha256
      (base32
-      "11i7d480q21vcd9p14rc7rb408xwlg2nkj88dq0sfj2rz60lzy0a"))))
+      "00mpmyaa8bqxf1f4vhk1waxhjbhcwab8m1x1vf341al64f6bmr1r"))))
 
 (define %debian-origin
   (origin
@@ -477,7 +477,7 @@
                                   %chromium-version ".tar.xz"))
               (sha256
                (base32
-                "0rarcd2q1ggl10cw3vwjk7j9aka7i129a0qv8qr7751vy083as3p"))
+                "0wdmy15602qxrb403p8yyx69k7py85fbawdsgap1l6z4h4j2g2p4"))
               (modules '((guix build utils)))
               (snippet (force ungoogled-chromium-snippet))))
     (build-system gnu-build-system)
diff --git a/gnu/packages/clojure.scm b/gnu/packages/clojure.scm
index e6eb749501..c8157bfdcd 100644
--- a/gnu/packages/clojure.scm
+++ b/gnu/packages/clojure.scm
@@ -170,6 +170,7 @@ designs.")
      `(#:install-plan
        '(("deps.edn" "lib/clojure/")
          ("example-deps.edn" "lib/clojure/")
+         ("tools.edn" "lib/clojure/")
          ("exec.jar" "lib/clojure/libexec/")
          ("clojure" "bin/")
          ("clj" "bin/"))
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index 820ff7281f..60b06c0901 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -13,6 +13,7 @@
 ;;; Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2022 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2022 Ekaitz Zarraga <ekaitz@elenq.tech>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -808,7 +809,13 @@ $MES -e '(mescc)' module/mescc.scm -- \"$@\"
     (inherit tcc-boot0)
     (name "tcc-boot")
     (version "0.9.27")
-    (source (package-source tcc))
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://savannah/tinycc/tcc-"
+                                  version ".tar.bz2"))
+              (sha256
+               (base32
+                "177bdhwzrnqgyrdv1dwvpd04fcxj68s5pm1dzwny6359ziway8yy"))))
     (build-system gnu-build-system)
     (inputs '())
     (propagated-inputs '())
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index d5bd3abf0f..5b31b0ad52 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -2648,7 +2648,7 @@ to their original, binary CD format.")
 (define-public libdeflate
   (package
     (name "libdeflate")
-    (version "1.10")
+    (version "1.12")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2657,19 +2657,19 @@ to their original, binary CD format.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0v5qh1cz787xj86l15x6brkkaw0jbxhqj5f85275q0l945qazvwm"))))
+                "16n9232zjavcp5wp17cx0gh2v7gipxpncsha05j3ybajfs7g88jv"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags
-       (list (string-append "CC=" ,(cc-for-target))
-             (string-append "PREFIX=" (assoc-ref %outputs "out")))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'skip-static-library-installation
-           (lambda _
-             (substitute* "Makefile"
-               (("install .*\\$\\(STATIC_LIB\\).*") ""))))
-         (delete 'configure))))
+     (list #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   (string-append "PREFIX=" #$output))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'skip-static-library-installation
+                 (lambda _
+                   (substitute* "Makefile"
+                     (("install .*\\$\\(STATIC_LIB\\).*") ""))))
+               (delete 'configure))))   ; no configure script
     (inputs
      (list zlib))
     (home-page "https://github.com/ebiggers/libdeflate")
diff --git a/gnu/packages/diffoscope.scm b/gnu/packages/diffoscope.scm
index 529f73cc77..2dc3cfad0f 100644
--- a/gnu/packages/diffoscope.scm
+++ b/gnu/packages/diffoscope.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2019 Vagrant Cascadian <vagrant@reproducible-builds.org>
+;;; Copyright © 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -74,7 +75,7 @@
 (define-public diffoscope
   (package
     (name "diffoscope")
-    (version "217")
+    (version "219")
     (source
      (origin
        (method git-fetch)
@@ -83,7 +84,7 @@
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0vbyg8lm5ddrdkhahcs70rhdmz42blppzliryghxcyyxs7g3gzq5"))
+        (base32 "0n6dn53paxi1316fnv5abw5rlvpfd2kpfn3b08wfzrcb6chsx7br"))
        (patches
         (search-patches "diffoscope-fix-llvm-test.patch"))))
     (build-system python-build-system)
@@ -176,10 +177,15 @@
 
              ;; XXX: Must be the same version as python-magic uses;
              ;; remove when 'file' is updated.
-             file-next
+             file-next)
 
-             fpc
-             gettext-minimal
+       (match (%current-system)
+              ;; fpc is only available on x86 currently.
+              ((or "x86_64-linux" "i686-linux")
+               (list fpc))
+              (_ '()))
+
+       (list gettext-minimal
              ghostscript
              `(,giflib "bin")
              gnumeric
diff --git a/gnu/packages/docker.scm b/gnu/packages/docker.scm
index ae4ee419af..184280b38f 100644
--- a/gnu/packages/docker.scm
+++ b/gnu/packages/docker.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Katherine Cox-Buday <cox.katherine.e@gmail.com>
 ;;; Copyright © 2020 Jesse Dowell <jessedowell@gmail.com>
-;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2021, 2022 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2022 Pierre Langlois <pierre.langlois@gmx.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -184,7 +184,9 @@ Python without keeping their credentials in a Docker configuration file.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1vsl747i3wyy68j4lp4nprwxadbyga8qxlrk892afcd2990zp5mr"))))
+        (base32 "1vsl747i3wyy68j4lp4nprwxadbyga8qxlrk892afcd2990zp5mr"))
+       (patches
+        (search-patches "containerd-create-pid-file.patch"))))
     (build-system go-build-system)
     (arguments
      (let ((make-flags #~(list (string-append "VERSION=" #$version)
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 7abd3cf1f5..312cb58b28 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -278,8 +278,6 @@
                        "-o" "geiser.info" "geiser.texi")))))))
     (native-inputs
      (list texinfo))
-    (propagated-inputs
-     (list emacs-project emacs-transient))
     (home-page "https://www.nongnu.org/geiser/")
     (synopsis "Collection of Emacs modes for Scheme hacking")
     (description
@@ -1010,7 +1008,7 @@ libgit2 bindings for Emacs, intended to boost the performance of Magit.")
     (inputs
      (list git perl))
     (propagated-inputs
-     (list emacs-dash emacs-transient emacs-with-editor))
+     (list emacs-dash emacs-with-editor))
     (home-page "https://magit.vc/")
     (synopsis "Emacs interface for the Git version control system")
     (description
@@ -1035,8 +1033,7 @@ rebasing, and other common Git operations.")
                (base32
                 "1v1y4fir1plz4kj0cvkcd29wibli4dw7vp4fmbxq4df76d8iy8yd"))))
     (build-system emacs-build-system)
-    (propagated-inputs (list emacs-dash emacs-with-editor emacs-magit
-                             emacs-transient))
+    (propagated-inputs (list emacs-dash emacs-with-editor emacs-magit))
     (home-page "https://github.com/magit/magit-svn")
     (synopsis "Git-SVN extension to Magit")
     (description
@@ -1091,8 +1088,7 @@ process, passing on the arguments as command line arguments.")
        (sha256
         (base32 "1amr2c08mq1nnn6k66mgz4rzyni4np7gxm96g4qyla2cbfbachgk"))))
     (build-system emacs-build-system)
-    (propagated-inputs
-     (list emacs-magit emacs-transient))
+    (propagated-inputs (list emacs-magit))
     (home-page "https://github.com/magit/magit-annex/")
     (synopsis "Git-annex support for Magit")
     (description
@@ -4650,8 +4646,6 @@ saving won't move point back to the beginning of the buffer.")
         (base32
          "1pz4l1xnq6s67w5yq9107vm8dg7rqf8n9dmbn90jys97c722g70n"))))
     (build-system emacs-build-system)
-    (propagated-inputs
-     (list emacs-transient))
     (home-page "https://gitlab.com/pidu/git-timemachine")
     (synopsis "Step through historic versions of Git-controlled files")
     (description "This package enables you to step through historic versions
@@ -5075,7 +5069,7 @@ result.")
                 (emacs-substitute-sexps file
                   ("(defcustom rg-executable" "rg"))))))))
     (propagated-inputs
-     (list emacs-s emacs-transient emacs-wgrep ripgrep))
+     (list emacs-s emacs-wgrep ripgrep))
     (home-page "https://rgel.readthedocs.io/en/latest/")
     (synopsis "Search tool based on @code{ripgrep}")
     (description
@@ -5598,16 +5592,16 @@ displays the priority part of a heading as your preferred string value.")
 (define-public emacs-org-fragtog
   (package
     (name "emacs-org-fragtog")
-    (version "0.4.1")
+    (version "0.4.2")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/io12/org-fragtog.git")
+             (url "https://github.com/io12/org-fragtog")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1912nlnk5v20szlmxr6y7chvms294z0p0hzdfgi8i3c7yrz7lmsj"))))
+        (base32 "1xag0pdphigk0ilrj2hacai3p6xgl27jji08aa1zlhq7p3rbay7m"))))
     (build-system emacs-build-system)
     (propagated-inputs
      (list emacs-org))
@@ -7527,6 +7521,32 @@ to a key in your preferred mode.")
 SuperCollider is a platform for audio synthesis and algorithmic composition.")
       (license license:gpl2+))))
 
+(define-public emacs-soothe-theme
+  ;; There is no named branch.
+  (let ((commit "0786fe70c6c1b4ddcfb932fdc6862b9611cfc09b")
+	(revision "0"))
+    (package
+     (name "emacs-soothe-theme")
+     (version (git-version "20141027.2233" revision commit))
+     (source
+      (origin
+       (method git-fetch)
+       (uri (git-reference
+	     (url "https://github.com/emacsfodder/emacs-soothe-theme")
+	     (commit commit)))
+       (file-name (git-file-name name version))
+       (sha256
+	(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")
+     (description
+      "Soothe theme is an amalgam of muted color tones and highlighted
+backgrounds.  It has builtin support for Rainbow delimiters, Org mode,
+Whitespace mode, ECB, Flyspell, Ido, Linum, highlight indentation, Show Paren
+mode.")
+     (license license:gpl3))))
+
 (define-public emacs-company-auctex
   (let ((commit "48c42c58ce2f0e693301b0cb2d085055410c1b25")
         (revision "1"))
@@ -13250,7 +13270,7 @@ a DONE state.")
         (base32
          "00q7aym0kl03j9m66pivgy0snxcjjg402049b2wdy18kgyypfvx8"))))
     (build-system emacs-build-system)
-    (propagated-inputs (list emacs-transient emacs-evil))
+    (propagated-inputs (list emacs-evil))
     (home-page "https://github.com/ChanderG/toodoo.el")
     (synopsis "Magit-like interface for a Todo workflow built on top of Org")
     (description "This package provides a minor mode for fast and easy management of Todos
@@ -15503,14 +15523,14 @@ one if it fails.")
 (define-public emacs-eldoc
   (package
     (name "emacs-eldoc")
-    (version "1.12.0")
+    (version "1.13.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
              "https://elpa.gnu.org/packages/eldoc-" version ".tar"))
        (sha256
-        (base32 "1npggpisqnfkc3gx7dr3pjnif7gf571z7s9g7n6vnb213353qskk"))))
+        (base32 "0c05dzrs7vrhibj46jpz625482ah6xywji7way6wcvwc711y74fz"))))
     (build-system emacs-build-system)
     (home-page "http://elpa.gnu.org/packages/eldoc.html")
     (synopsis "Show function arglist or variable docstring in echo area")
@@ -16129,7 +16149,7 @@ multiplexer.")
 (define-public emacs-plz
   (package
     (name "emacs-plz")
-    (version "0.1")
+    (version "0.2")
     (source
      (origin
        (method git-fetch)
@@ -16138,7 +16158,7 @@ multiplexer.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0psdjmj1r4g57vhm6c4hajmma72jk893fk820fbjgjwqihr1bxx9"))))
+        (base32 "170pbqiywk1zyhd0ig4f25qnjf7r1gwy0c6h343bcnl6qxvkvlv2"))))
     (build-system emacs-build-system)
     (inputs (list curl))
     (home-page "https://github.com/alphapapa/plz.el")
@@ -18761,7 +18781,6 @@ interactive commands and functions, such as @code{completing-read}.")
            emacs-org-super-agenda
            emacs-ov
            emacs-peg
-           emacs-transient
            emacs-ts
            emacs-s))
     (native-inputs
@@ -23352,7 +23371,7 @@ can be queued at any time.")
     (inputs
      (list youtube-dl))
     (propagated-inputs
-     (list emacs-async emacs-transient))
+     (list emacs-async emacs-dash))
     (home-page "https://gitlab.com/tuedachu/ytdl")
     (synopsis "Emacs interface for youtube-dl")
     (description
@@ -25058,8 +25077,7 @@ constant expressions.")
            emacs-docker-tramp
            emacs-json-mode
            emacs-s
-           emacs-tablist
-           emacs-transient))
+           emacs-tablist))
     (arguments `(#:tests? #false))      ;no tests
     (build-system emacs-build-system)
     (home-page "https://github.com/Silex/docker.el")
@@ -25439,7 +25457,7 @@ to Metals.")
 (define-public emacs-lsp-ui
   (package
     (name "emacs-lsp-ui")
-    (version "8.0.0")
+    (version "8.0.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -25448,7 +25466,7 @@ to Metals.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "00yirx6qzlb8fv8rd53zaw93nw72z3br40rb16scdqj1v20qsp47"))))
+                "1pd5lvjlmd6zq64py21yi5zxhcza9g5q48ngfivv7fi7pf3vsv00"))))
     (build-system emacs-build-system)
     (propagated-inputs
      (list emacs-dash emacs-lsp-mode emacs-markdown-mode emacs-flycheck))
@@ -25676,7 +25694,6 @@ commands (a prefix and a suffix) we prefer to call it just a \"transient\".")
             emacs-let-alist
             emacs-magit
             emacs-markdown-mode
-            emacs-transient
             emacs-yaml))
      (home-page "https://github.com/magit/forge/")
      (synopsis "Access Git forges from Magit")
@@ -25698,8 +25715,7 @@ comfort of Magit and the rest of Emacs.")
                 (sha256
                  (base32
                   "1lfnh1glg6al677m7ci0x8g5wjdhjxlfl3nv1f1ppsw4dpnwsj9b"))))
-      (propagated-inputs
-       (list emacs-hydra emacs-transient))
+      (propagated-inputs (list emacs-hydra))
       (build-system emacs-build-system)
       (home-page "https://github.com/jojojames/matcha/")
       (synopsis "Collection of hydras with a generic interface to launch them")
@@ -26065,8 +26081,7 @@ output.")
           (base32
            "16cjmrzflf2i1w01973sl944xrfanakba8sb4dpwi79d92xp03xy"))))
       (build-system emacs-build-system)
-      (propagated-inputs
-       (list emacs-vdiff emacs-magit emacs-transient))
+      (propagated-inputs (list emacs-vdiff emacs-magit))
       (home-page "https://github.com/justbur/emacs-vdiff-magit/")
       (synopsis "Frontend for diffing based on vimdiff")
       (description "This package permits comparisons of two or three buffers
@@ -26655,7 +26670,7 @@ all of your projects, then override or add variables on a per-project basis.")
     (inputs
      (list calibre))
     (propagated-inputs
-     (list emacs-dash emacs-esxml emacs-s emacs-transient))
+     (list emacs-dash emacs-esxml emacs-s))
     (home-page "https://github.com/chenyanming/calibredb.el")
     (synopsis "Yet another calibre client for Emacs")
     (description "This package integrates calibre into Emacs.
@@ -27409,7 +27424,7 @@ it forcibly
 (define-public emacs-elpher
   (package
     (name "emacs-elpher")
-    (version "3.4.1")
+    (version "3.4.2")
     (source
      (origin
        (method git-fetch)
@@ -27418,7 +27433,7 @@ it forcibly
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0dv71zc95m5sa4824vk3d1xk726nh2v50i0yp6w3ydfzzsfph6j6"))))
+        (base32 "1c6pid2ip2c2lpww42wxgq4qflx1m8vxilyva03h8xzgr39kwq64"))))
     (build-system emacs-build-system)
     (arguments
      (list
@@ -27824,7 +27839,7 @@ contains a track position, playback will start at the specified position.")
 (define-public emacs-org-jira
   (package
    (name "emacs-org-jira")
-   (version "4.3.2")
+   (version "4.3.3")
    (source
     (origin
      (method git-fetch)
@@ -27834,7 +27849,7 @@ contains a track position, playback will start at the specified position.")
      (file-name (git-file-name name version))
      (sha256
       (base32
-       "1hsfkkm3ykdf7n8a6k0mpzilhjpy7vllwrl2s4rfb9mhnaq5yb8y"))))
+       "0awfz4c70pxfj401p4h4j1lxic4pqpgigkldy9wvdkcyhqbphswj"))))
    (build-system emacs-build-system)
    (propagated-inputs
     (list emacs-request emacs-s emacs-dash emacs-org))
@@ -28567,8 +28582,7 @@ for the Telegram messaging platform.")))
     (inputs '())
     (native-inputs '())
     (propagated-inputs
-     (list emacs-alert emacs-all-the-icons emacs-dashboard emacs-telega
-           emacs-transient))
+     (list emacs-alert emacs-all-the-icons emacs-dashboard emacs-telega))
     (synopsis "Contributed packages to Telega")
     (description "Telega-contrib is a collection of third-party
 contributed packages to Telega.")))
@@ -30445,8 +30459,6 @@ you use some other configuration.")
          (sha256
           (base32 "0yv38bqdp6b614lbj4v408vv5mlic3vs1v7266xrfxm1cm903apj"))))
       (build-system emacs-build-system)
-      (propagated-inputs
-       (list emacs-transient))
       (home-page "https://github.com/TatriX/tshell")
       (synopsis "Experimental buffer-oriented Emacs shell")
       (description
@@ -30774,8 +30786,8 @@ and allows for an arbitrary number of leader keys.")
       (license license:gpl3+))))
 
 (define-public emacs-spaceleader
-  (let ((commit "35368b03c094399c487cce93ab5b7ac725bd04f5")
-        (revision "0"))
+  (let ((commit "5d88d120494623d6777d464ec40ff4bb7d6b1d57")
+        (revision "1"))
     (package
       (name "emacs-spaceleader")
       (version (git-version "0.0.3" revision commit))
@@ -30787,7 +30799,7 @@ and allows for an arbitrary number of leader keys.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "1lg51y59z6igqjw3vgyjc5zw32j11xhzw8y0svlx3ry415b0lnls"))))
+          (base32 "1prnjf7zs49z5a8qwhn8d0qnp60b3l0xhjkqg6v237acvk2axixr"))))
       (build-system emacs-build-system)
       (propagated-inputs
        (list emacs-dash
@@ -31077,8 +31089,7 @@ rules about where space should be left to separate words and parentheses.")
        (sha256
         (base32 "0b9hf20iah3ym2d4kz67k0kb48dq0442zxw4zmc03zg3sxfdxh0x"))))
     (build-system emacs-build-system)
-    (propagated-inputs
-     (list emacs-dash emacs-transient))
+    (propagated-inputs (list emacs-dash))
     (home-page "https://github.com/MaximeWack/seriesTracker")
     (synopsis "Keep track of the TV shows you watch from Emacs")
     (description
@@ -31693,7 +31704,7 @@ Fennel code within Emacs.")
 (define-public emacs-org-modern
   (package
    (name "emacs-org-modern")
-   (version "0.3")
+   (version "0.4")
    (source
      (origin
        (method git-fetch)
@@ -31701,7 +31712,7 @@ Fennel code within Emacs.")
              (url "https://github.com/minad/org-modern")
              (commit version)))
        (sha256
-        (base32 "187fxw2rg0kw1d2binpa32ckp67r4v10j6ypr077g9qn6nkmyvvn"))
+        (base32 "0af9dzp9n3882kvsp3q4008hffq1mp9hjl964mlp5j8vay3x7qbz"))
        (file-name (git-file-name name version))))
    (build-system emacs-build-system)
    (home-page "https://github.com/minad/org-modern")
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index 4d23242a33..6eefd14d7e 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -35,6 +35,7 @@
 ;;; 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>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -2857,20 +2858,23 @@ data structures and to operate on them.")
     (license license:gpl3+)))
 
 (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 "2.1.0")
+     (version (git-version "2.4.0" "1" commit))
      (source
       (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/pcb2gcode/pcb2gcode")
-             (commit (string-append "v" version))
+             (commit commit)
              (recursive? #t)))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0nzglcyh6ban27cc73j4l7w7r9k38qivq0jz8iwnci02pfalw4ry"))))
+         "1r1qmvpn5ffi2xpq2gigwsk8kn79s4s2ywfvicwf8i7rzwhkdf17"))))
      (build-system gnu-build-system)
      (inputs
       (list boost
@@ -2887,7 +2891,7 @@ data structures and to operate on them.")
 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+))))
 
 (define-public syscall-intercept
   ;; Upstream provides no tag. Also, last version update is 4 years old.
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index 96dfc34075..89f5fc055c 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -29,6 +29,7 @@
 ;;; Copyright © 2022 Kyle Meyer <kyle@kyleam.com>
 ;;; Copyright © 2022 Aleksandr Vityazev <avityazev@posteo.org>
 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022 Philip McGrath <philip@philipmcgrath.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -62,6 +63,7 @@
   #:use-module (guix deprecation)
   #:use-module (guix gexp)
   #:use-module (guix utils)
+  #:use-module (srfi srfi-26)
   #:use-module (gnu packages)
   #:use-module (gnu packages aidc)
   #:use-module (gnu packages autotools)
@@ -1350,6 +1352,126 @@ information.")
     (home-page "https://grisbi.org")
     (license license:gpl2+)))
 
+(define-public gbonds
+  ;; The last "upstream" commit is from about 2008, but the Debian maintainers
+  ;; have effectively become the upstream with an extensive series of patches.
+  ;; However, the patches are stored "unapplied", and some enhancements (like
+  ;; a decade's worth of new data files) rely on the Debian packaging tools,
+  ;; so building normally even from the patched sources would miss them.
+  ;; Here, we do all of the patching in the origin, so that the result of
+  ;; `guix build --source` is actually useable for building without Guix.
+  (let ((revision "1")
+        (commit "3054ee2f90cc7c03ed6b131177d09701c7a4fced"))
+    (package
+      (name "gbonds")
+      (version (git-version "2.0.3" revision commit))
+      (source
+       (let ((unapplied
+              (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://salsa.debian.org/debian/gbonds.git")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "1sqzzfymzxbnq6cjs5wvjbnvcrkdlimlmj2h7mlcaa9qqdpsgfki"))
+                (file-name (git-file-name name version)))))
+         (origin
+           (inherit unapplied)
+           (patches
+            ;; The order matters.
+            (map (cut file-append unapplied "/debian/patches/" <>)
+                 '("desktop-file"
+                   "POTFILES"
+                   "POTFILES.missing"
+                   "commands-compile"
+                   "egg-recent-model-compile"
+                   "gbonds-name-case"
+                   "copyright-update"
+                   "website-url"
+                   "link-libm"
+                   "xmldocs"
+                   "configure-compiler-warnings"
+                   "omf"
+                   "desktop-file-keywords"
+                   "replace-g_strcasecmp"
+                   "gtk3-port"
+                   "gsettings-port"
+                   "no-rarian-compat"
+                   "extern-gb_prefs"
+                   "use-treasury-api.patch")))
+           (snippet
+            #~(begin
+                (use-modules (guix build utils)
+                             (srfi srfi-26))
+
+                ;; Remove generated files, which have not been patched.
+                (for-each (lambda (pth)
+                            (when (file-exists? pth)
+                              (delete-file pth)))
+                          `(;; Things `make maintainer-clean` would do.
+                            "gbonds.spec"
+                            "src/marshal.c"
+                            "src/marshal.h"
+                            ;; Things upstream's distclean missed.
+                            "intltool-extract"
+                            "intltool-merge"
+                            "intltool-update"
+                            ;; Autotools generated files.
+                            "aclocal.m4"
+                            "config.guess"
+                            "config.h.in"
+                            "config.log"
+                            "config.sub"
+                            "configure"
+                            "depcomp"
+                            "intltool-extract.in"
+                            "intltool-merge.in"
+                            "intltool-update.in"
+                            "ltmain.sh"
+                            ,@(find-files "." "^Makefile\\.in$")))
+
+                ;; Arrange for `make install` to handle the additional
+                ;; redemption data files added in the Debian packaging.
+                (let* ((new-redemption-data-files
+                        (find-files "debian" "^sb[[:digit:]]+\\.asc$"))
+                       (names
+                        (map (cut substring <> (string-length "debian/"))
+                             new-redemption-data-files)))
+                  (for-each rename-file
+                            new-redemption-data-files
+                            (map (cut string-append "data/" <>)
+                                 names))
+                  (substitute* "data/Makefile.am"
+                    (("redemption_DATA = \\\\")
+                     (apply string-append
+                            "redemption_DATA = \\"
+                            (map (cut string-append "\n\t" <> " \\")
+                                 names))))))))))
+      (outputs '("out" "debug"))
+      (inputs (list gtk+
+                    glib
+                    json-glib
+                    libxml2
+                    libsoup-minimal-2
+                    cairo
+                    pango))
+      (native-inputs (list autoconf
+                           automake
+                           intltool
+                           libtool
+                           patch
+                           pkg-config))
+      (build-system glib-or-gtk-build-system)
+      (home-page "http://gbonds.sourceforge.net")
+      (synopsis "@acronym{U.S.} Savings Bond inventory program for GNOME")
+      (description
+       "GBonds is a @acronym{U.S.} Savings Bond inventory program for the
+GNOME desktop environment.  It allows you to track the current redemption
+value and performance of your @acronym{U.S.} Savings Bonds and keep a valuable
+record of the bonds you own.")
+      (license license:gpl2+))))
+
 (define-public trezord-udev-rules
   (let ((commit "bff7fdfe436c727982cc553bdfb29a9021b423b0")
         (revision "0"))
diff --git a/gnu/packages/fribidi.scm b/gnu/packages/fribidi.scm
index 1a371f2111..d3a6169b0b 100644
--- a/gnu/packages/fribidi.scm
+++ b/gnu/packages/fribidi.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Marek Benc <merkur32@gmail.com>
-;;; Copyright © 2016, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2019, 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -97,4 +97,6 @@ or right-to-left ordering as necessary.")
 to visual-Hebrew output.  This is useful for reading Hebrew mail messages,
 viewing Hebrew texts, etc.  It was written for Hebrew but Arabic (or other BiDi
 languages) should work equally well.")
+    (properties
+     '((release-monitoring-url . "https://deb.debian.org/debian/pool/main/b/bidiv")))
     (license gpl2+)))
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 713f9339b2..d55a2ee867 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -1103,46 +1103,6 @@ cows can think too: all you have to do is run @command{cowthink}.  If you're
 tired of cows, a variety of other ASCII-art messengers are available.")
     (license license:gpl3+)))
 
-(define-public lolcat
-  (let ((commit "35dca3d0a381496d7195cd78f5b24aa7b62f2154")
-        (revision "0"))
-    (package
-      (name "lolcat")
-      (version (git-version "1.0" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/jaseg/lolcat")
-               (commit commit)))
-         (sha256
-          (base32
-           "0jjbkqcc2ikjxd1xgdyv4rb0vsw218181h89f2ywg29ffs3ypd8g"))
-         (file-name (git-file-name name version))))
-      (build-system gnu-build-system)
-      (arguments
-       `(#:tests? #f                    ; no check target
-         #:make-flags
-         (list ,(string-append "CC=" (cc-for-target)))
-         #:phases
-         (modify-phases %standard-phases
-           (delete 'bootstrap)
-           (delete 'configure)
-           (replace 'install
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let* ((out  (assoc-ref outputs "out"))
-                      (dest (string-append out "/bin")))
-                 (mkdir-p dest)
-                 (install-file "lolcat" dest)
-                 (install-file "censor" dest)
-                 #t))))))
-      (home-page "https://github.com/jaseg/lolcat")
-      (synopsis "Rainbow coloring effect for text console display")
-      (description "@command{lolcat} concatenates files and streams like
-regular @command{cat}, but it also adds terminal escape codes between
-characters and lines resulting in a rainbow effect.")
-      (license license:wtfpl2))))
-
 (define-public falltergeist
   (package
     (name "falltergeist")
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 024a9dd883..a05b86219e 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -216,7 +216,7 @@ OpenStreetMap written in C using eXpat, Cairo and GLib.")
 (define-public geos
   (package
     (name "geos")
-    (version "3.8.1")
+    (version "3.10.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://download.osgeo.org/geos/geos-"
@@ -224,8 +224,8 @@ OpenStreetMap written in C using eXpat, Cairo and GLib.")
                                   ".tar.bz2"))
               (sha256
                (base32
-                "1xqpmr10xi0n9sj47fbwc89qb0yr9imh4ybk0jsxpffy111syn22"))))
-    (build-system gnu-build-system)
+                "05apyh6dvv15fax4xvxa0kr622h4y08w9p3274mlqsrqmjcwbfsh"))))
+    (build-system cmake-build-system)
     (arguments `(#:phases
                  (modify-phases %standard-phases
                    (add-after
@@ -233,11 +233,10 @@ OpenStreetMap written in C using eXpat, Cairo and GLib.")
                     (lambda _
                       (substitute* '("tests/xmltester/testrunner.sh"
                                      "tests/geostest/testrunner.sh")
-                        (("/bin/sh") (which "sh")))
-                      #t)))))
+                        (("/bin/sh") (which "sh"))))))))
     (inputs
      (list glib))
-    (home-page "https://geos.osgeo.org/")
+    (home-page "https://libgeos.org/")
     (synopsis "Geometry Engine for Geographic Information Systems")
     (description
      "GEOS provides a spatial object model and fundamental geometric
@@ -342,18 +341,14 @@ and driving.")
 (define-public libgeotiff
   (package
     (name "libgeotiff")
-    (version "1.5.1")
+    (version "1.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "http://download.osgeo.org/geotiff/libgeotiff/libgeotiff-"
                            version ".tar.gz"))
-       (patches (search-patches
-                 ;; See libgeotiff 1.5.1 issue
-                 ;; https://github.com/OSGeo/libgeotiff/issues/22
-                 "libgeotiff-adapt-test-script-for-proj-6.2.patch"))
        (sha256
-        (base32 "0b31mlzcv5b1y7jdvb7p0pa3xradrg3x5g32ym911lbhq4rrgsgr"))
+        (base32 "1mjmgv48x51ppax5dnb6lq7z600czxll53bx6jbzqwd4m93i7aq5"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -2213,7 +2208,7 @@ orienteering sport.")
     (license license:gpl3+)))
 
 (define-public grass
-  (let* ((version "7.8.6")
+  (let* ((version "7.8.7")
          (majorminor (string-join (list-head (string-split version #\.) 2) ""))
          (grassxx (string-append "grass" majorminor)))
     (package
@@ -2225,7 +2220,7 @@ orienteering sport.")
          (uri (string-append "https://grass.osgeo.org/" grassxx
                              "/source/grass-" version ".tar.gz"))
          (sha256
-          (base32 "1glk74ly3j0x8ymn4jp73s6y8qv7p3g5nv4gvb6l9qqplyq1fpnq"))))
+          (base32 "0sbz0ba9p963phvd0gmvfqq1fg4ixpipzcjbf20ys86qavjppzsg"))))
       (build-system gnu-build-system)
       (inputs
        `(("bzip2" ,bzip2)
@@ -2336,7 +2331,7 @@ visualization.")
 (define-public saga
   (package
     (name "saga")
-    (version "7.9.0")
+    (version "8.2.1")
     (source
      (origin
        (method url-fetch)
@@ -2344,8 +2339,8 @@ visualization.")
                            (version-major version) "/SAGA%20-%20" version
                            "/saga-" version ".tar.gz"))
        (sha256
-        (base32 "1n051yxxkylly0k9rlkx2ih3j2lf9d4csg00sm7161r7nhjvggd1"))))
-    (build-system gnu-build-system)
+        (base32 "008izjs6gvj09abxf16ssl1xy0ay3ljq4jswbggp6wiiq459minv"))))
+    (build-system cmake-build-system)
     (native-inputs
      (list pkg-config swig))
     (inputs
@@ -2365,7 +2360,12 @@ visualization.")
            vigra
            wxwidgets))
     (arguments
-     '(#:configure-flags '("--enable-python")))
+     '(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'cd-to-source-dir
+           (lambda _
+             (chdir "saga-gis"))))))
     (synopsis "System for Automated Geoscientific Analyses")
     (description
      "SAGA (System for Automated Geoscientific Analyses) is a Geographic
@@ -2486,12 +2486,14 @@ growing set of geoscientific methods.")
                              "PyQgsLayoutHtml"
                              "PyQgsLayoutLegend"
                              "PyQgsLayoutMapGrid"
+                             "PyQgsMapClippingUtils"
                              "PyQgsMapLayer"
                              "PyQgsMetadataBase"
                              "PyQgsOGRProvider"
                              "PyQgsOGRProviderGpkg"
                              "PyQgsOapifProvider"
                              "PyQgsPalLabelingLayout"
+                             "PyQgsProcessingInPlace"
                              "PyQgsProject"
                              "PyQgsProviderConnectionGpkg"
                              "PyQgsProviderConnectionPostgres"
@@ -2528,6 +2530,7 @@ growing set of geoscientific methods.")
                              "qgis_layoutlabeltest"
                              "qgis_layoutmanualtabletest"
                              "qgis_layoutmapgridtest"
+                             "qgis_layoutmapoverviewtest"
                              "qgis_layoutmaptest"
                              "qgis_layoutmultiframetest"
                              "qgis_layoutpicturetest"
@@ -2535,6 +2538,7 @@ growing set of geoscientific methods.")
                              "qgis_layouttest"
                              "qgis_mapdevicepixelratiotest"
                              "qgis_maprendererjobtest"
+                             "qgis_meshcontourstest"
                              "qgis_ogrproviderguitest"
                              "qgis_painteffecttest"
                              "qgis_pallabelingtest"
@@ -2548,7 +2552,8 @@ growing set of geoscientific methods.")
                              "qgis_svgmarkertest"
                              "qgis_taskmanagertest"
                              "qgis_wcsprovidertest"
-                             "qgis_ziplayertest")
+                             "qgis_ziplayertest"
+                             "TestQgsRandomMarkerSymbolLayer")
                            "|")))))
          (add-after 'install 'wrap-python
            (assoc-ref python:%standard-phases 'wrap))
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 0ce96d41de..96ec260dec 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -4373,6 +4373,44 @@ the GObject type system and has additional code generation routines that make
 targeting the GNOME stack simple.")
     (license license:lgpl2.1+)))
 
+(define-public vala-next
+  (package
+    (inherit vala)
+    (version "0.56.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/vala/"
+                                  (version-major+minor version) "/"
+                                  "vala-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0k0jj3xwjq222x0hbqqy5bykhgk1f1wsb85bqcdgsnbqn6dn3jb6"))))
+    (arguments
+     (list
+      #:configure-flags #~(list "CC=gcc" "--enable-coverage")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'use-gcc-by-default
+            (lambda _
+              (substitute* "codegen/valaccodecompiler.c"
+                (("cc_command = \"cc\"")
+                 "cc_command = \"gcc\""))))
+          (add-after 'unpack 'patch-docbook-xml
+            (lambda* (#:key inputs #:allow-other-keys)
+              (with-directory-excursion "doc/manual"
+                (substitute* '("manual.xml" "version.xml.in")
+                  (("http://www.oasis-open.org/docbook/xml/4.4/")
+                   (search-input-directory inputs "xml/dtd/docbook"))))))
+          (add-before 'check 'pre-check
+            (lambda _
+              (substitute* "valadoc/tests/libvaladoc/tests-extra-environment.sh"
+                (("export PKG_CONFIG_PATH=" m)
+                 (string-append m "$PKG_CONFIG_PATH:")))))
+          ;; Wrapping the binaries breaks vala's behavior adaptations based on
+          ;; the file name of the program executed (vala: compile and execute,
+          ;; valac: compile into a binary).
+          (delete 'glib-or-gtk-wrap))))))
+
 ;;; An older variant kept to build libsoup-minimal-2.
 (define-public vala-0.52
   (package/inherit vala
diff --git a/gnu/packages/gps.scm b/gnu/packages/gps.scm
index a18b93c179..853361bd61 100644
--- a/gnu/packages/gps.scm
+++ b/gnu/packages/gps.scm
@@ -138,7 +138,7 @@ between two other data points.")
 (define-public gama
   (package
     (name "gama")
-    (version "2.19")
+    (version "2.21")
     (source
       (origin
         (method url-fetch)
@@ -146,7 +146,7 @@ between two other data points.")
                             version ".tar.gz"))
         (sha256
          (base32
-          "0lh3abvyq07igi44mmjif3nwy6iig0j1jq6rrxkrvkhhm5q98b1q"))
+          "0xncq4cgzn5mgwxw515xa0rhazf28y4cnpwg67kbibya7zx2iqw7"))
         (modules '((guix build utils)))
         (snippet
          '(begin
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index dd537c9d10..a1503602ad 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -841,7 +841,9 @@ model to base your own plug-in on, here it is.")
        ("libgme" ,libgme)
        ("libgudev" ,libgudev)
        ("libkate" ,libkate)
-       ("libmfx" ,mediasdk)
+       ,@(if (target-x86?)
+           `(("libmfx" ,mediasdk))
+           '())
        ("libmms" ,libmms)
        ("libmodplug" ,libmodplug)
        ("libmpcdec" ,libmpcdec)
@@ -887,7 +889,9 @@ model to base your own plug-in on, here it is.")
        ("soundtouch" ,soundtouch)
        ("spandsp" ,spandsp)
        ("srt" ,srt)
-       ("svthevcenc" ,svt-hevc)
+       ,@(if (target-x86?)
+           `(("svthevcenc" ,svt-hevc))
+           '())
        ("tinyalsa" ,tinyalsa)
        ("transcode" ,transcode)
        ("usrsctp" ,usrsctp)
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 2456509b97..0717acf83b 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -42,6 +42,7 @@
 ;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2022 Zhu Zihao <all_but_last@163.com>
 ;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
+;;; Copyright © 2022 Taiju HIGASHI <higashi@taiju.info>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1614,7 +1615,7 @@ for MySQL.")
 (define-public guile-config
   (package
     (name "guile-config")
-    (version "0.4.2")
+    (version "0.5.1")
     (source
      (origin
        (method git-fetch)
@@ -1623,7 +1624,7 @@ for MySQL.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256 (base32
-                "09028ylbddjdp3d67zdjz3pnsjqz6zs2bfck5rr3dfaa0qjap40n"))))
+                "0s708k6qnk9155bjrcy1f1v7lqhlpaj4mjip46sr3iw85hca92wz"))))
     (build-system gnu-build-system)
     (native-inputs
      (list autoconf automake pkg-config texinfo))
@@ -1652,16 +1653,16 @@ above command-line parameters.")
 (define-public guile-hall
   (package
     (name "guile-hall")
-    (version "0.3.1")
+    (version "0.4.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://gitlab.com/a-sassmannshausen/guile-hall")
              (commit version)))
-       (file-name "guile-hall-0.3.1-checkout")
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1s24nigdra6rvclvy15l2aw00c3aq9vv8qwxylzs60darbl36206"))))
+        (base32 "0yrrik1v1xbik5h5q7w2cxrx6gvkmcdm32dl36i7xqdq8pr8sh2d"))))
     (build-system gnu-build-system)
     (arguments
       `(#:modules
@@ -4041,8 +4042,8 @@ according to Bitorrent BEP003.")
     (license license:gpl3+)))
 
 (define-public guile-irc
-  (let ((commit "375d3bde9c6ae7ccc9d7cc65817966b6fda8f26a")
-        (revision "0"))
+  (let ((commit "7d08ce6fdcb87ac668c5d3bfd5584247805507bb")
+        (revision "1"))
     (package
       (name "guile-irc")
       (version (git-version "0.3.0" revision commit))
@@ -4054,12 +4055,12 @@ according to Bitorrent BEP003.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "113lcckcywrz9060w1c3fnvr8d7crdsjgsv4h47hgmr1slgadl4y"))))
+                  "1jx8704200l29ndg9bfyamgxrzknya0f0vwb2sxhd0k3b8r94avw"))))
       (build-system gnu-build-system)
       (arguments
        `(#:configure-flags '("--enable-gnutls=yes")))
       (native-inputs
-       (list autoconf automake texinfo))
+       (list autoconf automake texinfo pkg-config))
       (inputs
        (list gnutls guile-3.0))
       (home-page "https://github.com/rekado/guile-irc")
diff --git a/gnu/packages/hardware.scm b/gnu/packages/hardware.scm
index ecff498156..27567bb38e 100644
--- a/gnu/packages/hardware.scm
+++ b/gnu/packages/hardware.scm
@@ -319,7 +319,7 @@ operability and find drivers.")
 (define-public hwinfo
   (package
     (name "hwinfo")
-    (version "21.81")
+    (version "21.82")
     (home-page "https://github.com/openSUSE/hwinfo")
     (source
      (origin
@@ -330,7 +330,7 @@ operability and find drivers.")
          (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0iyx1fb66s6b5ai4agw91nvl9wwk7z8g6y475vry3wv80dngzc43"))
+        (base32 "1ih6vrgh64408cijywy9by2snynkw91p3h0ry5pzk3lyqsl0wnlh"))
        (modules
         '((guix build utils)))
        (snippet
diff --git a/gnu/packages/image-viewers.scm b/gnu/packages/image-viewers.scm
index 1db169535e..8d4d2351c3 100644
--- a/gnu/packages/image-viewers.scm
+++ b/gnu/packages/image-viewers.scm
@@ -162,7 +162,7 @@ YouTube videos without requiring API and opens/downloads them using mpv/ytdl.")
 (define-public feh
   (package
     (name "feh")
-    (version "3.8")
+    (version "3.9")
     (home-page "https://feh.finalrewind.org/")
     (source (origin
               (method url-fetch)
@@ -170,16 +170,19 @@ YouTube videos without requiring API and opens/downloads them using mpv/ytdl.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "1a9bsq5j9sl2drzkab0hdhnamalpaszw9mz2prz6scrr5dak8g3z"))))
+                "185wwqd60r2rk6lzcvd6sl58589qfqrfnf7lqd6friyj84n9cjc6"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases (modify-phases %standard-phases (delete 'configure))
-       #:test-target "test"
-       #:make-flags
-       (list ,(string-append "CC=" (cc-for-target))
-             (string-append "PREFIX=" (assoc-ref %outputs "out"))
-             "exif=1"
-             "inotify=1")))
+     (list #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure))     ; no configure script
+           #:test-target "test"
+           #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   (string-append "PREFIX=" #$output)
+                   "exif=1"
+                   "inotify=1"
+                   "magic=1")))
     (native-inputs
      (list perl perl-test-command))
     (inputs (list curl
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 7f5625acf5..ea510142f8 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -1812,7 +1812,7 @@ parsing, viewing, modifying, and saving this metadata.")
 (define-public flameshot
   (package
     (name "flameshot")
-    (version "0.10.2")
+    (version "12.1.0")
     (source
      (origin
        (method git-fetch)
@@ -1822,7 +1822,7 @@ parsing, viewing, modifying, and saving this metadata.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "07n98pp5i6i51g7a4vqwbd6xarihzl7r714r2knvw2zn5mlj55dd"))))
+         "1p7gqs5vqzbddlgl38lbanchwb14m6lx8f2cn2c5p0vyqwvqqv52"))))
     (build-system qt-build-system)
     (native-inputs
      (list qttools))
diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm
index 8c484efb2d..5fc69cab3b 100644
--- a/gnu/packages/irc.scm
+++ b/gnu/packages/irc.scm
@@ -194,21 +194,20 @@ Conferencing} and @acronym{ICB, Internet Citizen's Band}.")
 (define-public weechat
   (package
     (name "weechat")
-    (version "3.5")
+    (version "3.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://weechat.org/files/src/weechat-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "030p1264rrbr5sbyww85xq0cm5zzdmnpz89y9z90ppcfxi64x47a"))))
+                "1ppj676gwh67krq92xnfkmh3qnwbz8d51djsscxw013x7cdxg1cx"))))
     (build-system cmake-build-system)
     (outputs '("out" "doc"))
     (native-inputs
      `(("gettext-minimal" ,gettext-minimal)
        ("pkg-config" ,pkg-config)
-       ,@(if (or (target-x86-64?)
-                 (target-x86-32?))
+       ,@(if (target-x86?)
            `(("ruby-asciidoctor" ,ruby-asciidoctor))
            '())
        ;; For tests.
@@ -231,16 +230,14 @@ Conferencing} and @acronym{ICB, Internet Citizen's Band}.")
     (arguments
      `(#:configure-flags
        (list "-DENABLE_PHP=OFF"
-             ,@(if (or (target-x86-64?)
-                       (target-x86-32?))
+             ,@(if (target-x86?)
                  '("-DENABLE_MAN=ON"
                    "-DENABLE_DOC=ON")
                 '())
              "-DENABLE_TESTS=ON")       ; ‘make test’ fails otherwise
        #:phases
        (modify-phases %standard-phases
-         ,@(if (or (target-x86-64?)
-                   (target-x86-32?))
+         ,@(if (target-x86?)
              '((add-after 'install 'move-doc
                  (lambda* (#:key outputs #:allow-other-keys)
                    (let* ((out (assoc-ref outputs "out"))
diff --git a/gnu/packages/jami.scm b/gnu/packages/jami.scm
index 160d0f560b..b8210bcc1e 100644
--- a/gnu/packages/jami.scm
+++ b/gnu/packages/jami.scm
@@ -181,7 +181,7 @@
     "--enable-muxer=h263"
     "--enable-muxer=h264"
     "--enable-muxer=hevc"
-;    "--enable-muxer=matroska"
+    "--enable-muxer=matroska"
     "--enable-muxer=webm"
     "--enable-muxer=ogg"
     "--enable-muxer=pcm_s16be"
diff --git a/gnu/packages/kde-multimedia.scm b/gnu/packages/kde-multimedia.scm
index 752f6b499c..265dcef625 100644
--- a/gnu/packages/kde-multimedia.scm
+++ b/gnu/packages/kde-multimedia.scm
@@ -29,6 +29,7 @@
   #:use-module (guix gexp)
   #:use-module (gnu packages)
   #:use-module (gnu packages audio)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cdrom)
   #:use-module (gnu packages docbook)
@@ -373,6 +374,16 @@ variety of formats.")
                  (("\"(dvdcss)\"" _ library)
                   (string-append "\"" libdvdcss "/lib/" library "\""))))
              #t))
+         (add-before 'configure 'fix-cmake-taglib
+           (lambda _
+             ;; Use the CMake variables provided by FindTaglib from
+             ;; extra-cmake-modules, instead of bundled FindTaglib.cmake:
+             (substitute*
+                 '("plugins/decoder/mp3/CMakeLists.txt"
+                   "plugins/decoder/flac/CMakeLists.txt"
+                   "plugins/project/audiometainforenamer/CMakeLists.txt")
+               (("TAGLIB_INCLUDES") "Taglib_INCLUDE_DIRS")
+               (("TAGLIB_LIBRARIES") "Taglib_LIBRARIES"))))
          (add-after 'qt-wrap 'wrap-path
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Set paths to backend programs.
@@ -380,12 +391,14 @@ variety of formats.")
                `("PATH" ":" prefix
                  ,(map (lambda (input)
                          (string-append (assoc-ref inputs input) "/bin"))
-                       '("cdrdao" "dvd+rw-tools" "libburn" "sox"))))
+                       '("cdrdao" "cdrtools" "dvd+rw-tools" "libburn" "sox"))))
              #t)))))
     (native-inputs
      (list extra-cmake-modules pkg-config kdoctools))
     (inputs
-     (list cdrdao
+     (list bash-minimal
+           cdrdao
+           cdrtools
            dvd+rw-tools
            ffmpeg
            flac
diff --git a/gnu/packages/kde-utils.scm b/gnu/packages/kde-utils.scm
index 2b3a0dd15e..ec3470aa0a 100644
--- a/gnu/packages/kde-utils.scm
+++ b/gnu/packages/kde-utils.scm
@@ -496,14 +496,14 @@ remind you to take a break now and then.")
 (define-public smb4k
   (package
     (name "smb4k")
-    (version "3.0.6")
+    (version "3.1.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://sourceforge.net/projects/smb4k/files/"
-                           version "/smb4k-" version ".tar.xz/download"))
+                           version "/smb4k-" version ".tar.xz"))
        (sha256
-        (base32 "0hz6nfd845bykf78s4g2qs77szl96gy6g8rpg44pqd39a0k0xbh7"))))
+        (base32 "0prw0aq16nz9ns4d50mc6fbaw9pbcyh8p698izylhd4i0nr1dd9d"))))
     (build-system qt-build-system)
     (native-inputs
      (list extra-cmake-modules kdoctools))
@@ -515,6 +515,7 @@ remind you to take a break now and then.")
            kcoreaddons
            kcrash
            kdbusaddons
+           kdnssd
            ki18n
            kiconthemes
            kio
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 7637a514aa..3efbb1e2d0 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -352,7 +352,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-5.18-version "5.18.10")
+(define-public linux-libre-5.18-version "5.18.12")
 (define-public linux-libre-5.18-gnu-revision "gnu")
 (define deblob-scripts-5.18
   (linux-libre-deblob-scripts
@@ -362,7 +362,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "0vjpn8iw9yg39sr6jfhzyvivf159h9zfgnjamwa283zfll0h0a53")))
 (define-public linux-libre-5.18-pristine-source
   (let ((version linux-libre-5.18-version)
-        (hash (base32 "1qyyfdfp8qn8a6brgly0h72jvz9s0wp2pjyrcpknzvmqvc0kv7pr")))
+        (hash (base32 "09wmgfrnv1df6jg9v3svwhvnxl0j6h4f240p903xlmgj884lvds0")))
    (make-linux-libre-source version
 
                             (%upstream-linux-source version hash)
@@ -371,7 +371,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.53")
+(define-public linux-libre-5.15-version "5.15.55")
 (define-public linux-libre-5.15-gnu-revision "gnu")
 (define deblob-scripts-5.15
   (linux-libre-deblob-scripts
@@ -381,12 +381,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "129qlhwdv2mfb85gbvq03kkbdfp73b444rryr4rrbvi0jmq4cp24")))
 (define-public linux-libre-5.15-pristine-source
   (let ((version linux-libre-5.15-version)
-        (hash (base32 "01vvyw6sjkkjs7l4cy04yv19d9f3wmpy5gqfm763y7q58dr73apk")))
+        (hash (base32 "1k7x7fp675wglfd357n7hjidnm3j8zj3gcymyazg6fkcid8bvxhy")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.15)))
 
-(define-public linux-libre-5.10-version "5.10.129")
+(define-public linux-libre-5.10-version "5.10.131")
 (define-public linux-libre-5.10-gnu-revision "gnu1")
 (define deblob-scripts-5.10
   (linux-libre-deblob-scripts
@@ -396,12 +396,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "1981axxswghza3iadp94q54y8w30h9w9vyq4cbjiiv9alvbv0pb8")))
 (define-public linux-libre-5.10-pristine-source
   (let ((version linux-libre-5.10-version)
-        (hash (base32 "1zlw89m7wpy02rnk8mizng43i77hrkwzl280sivqz1c05c2jzrxa")))
+        (hash (base32 "1ki11mvl3dky7iih90znr47vr66dxnlwrqwg2jkk1hqn5i243i4b")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.10)))
 
-(define-public linux-libre-5.4-version "5.4.204")
+(define-public linux-libre-5.4-version "5.4.206")
 (define-public linux-libre-5.4-gnu-revision "gnu1")
 (define deblob-scripts-5.4
   (linux-libre-deblob-scripts
@@ -411,12 +411,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "1vnjbdyssa7dwyjl9kg35alwvf7yh597cl74yr1wy2gk5bc9paw6")))
 (define-public linux-libre-5.4-pristine-source
   (let ((version linux-libre-5.4-version)
-        (hash (base32 "0ivsfdw55mysihylk5n46r7limf1rqddipap17mkfnyq345b3hgx")))
+        (hash (base32 "1asvc7y1f938icspxx39n6y6r0w9mp0k9vik84rsx1hzzv0db41c")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.4)))
 
-(define-public linux-libre-4.19-version "4.19.251")
+(define-public linux-libre-4.19-version "4.19.252")
 (define-public linux-libre-4.19-gnu-revision "gnu1")
 (define deblob-scripts-4.19
   (linux-libre-deblob-scripts
@@ -426,12 +426,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "00i91lx938nqlgy63hiricqd0fnbbf26vgya9c5lb7m1f4x324im")))
 (define-public linux-libre-4.19-pristine-source
   (let ((version linux-libre-4.19-version)
-        (hash (base32 "1x6ag81wzcynfa4l819mamk9k11fxgq5m1gain93avparjnwi1rp")))
+        (hash (base32 "0ac7k6x9h8gqi37n8d4fyi52h4cmzyy8f5vfv1aiihww4kvzca7v")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.19)))
 
-(define-public linux-libre-4.14-version "4.14.287")
+(define-public linux-libre-4.14-version "4.14.288")
 (define-public linux-libre-4.14-gnu-revision "gnu1")
 (define deblob-scripts-4.14
   (linux-libre-deblob-scripts
@@ -441,12 +441,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "00i91lx938nqlgy63hiricqd0fnbbf26vgya9c5lb7m1f4x324im")))
 (define-public linux-libre-4.14-pristine-source
   (let ((version linux-libre-4.14-version)
-        (hash (base32 "05pnz2wch5b430j82sjqhxyfbpln4p1569avj2qkk62x4164kdbq")))
+        (hash (base32 "0yyzxyz66mfngx3ll3pl43413xb67iyxddzh3lpzqcfg7d0rxfwz")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.14)))
 
-(define-public linux-libre-4.9-version "4.9.322")
+(define-public linux-libre-4.9-version "4.9.323")
 (define-public linux-libre-4.9-gnu-revision "gnu1")
 (define deblob-scripts-4.9
   (linux-libre-deblob-scripts
@@ -456,7 +456,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "0bib3641dbcqdkx3anna3caxnsg3nw9cnmhcklq0s93g3m57041h")))
 (define-public linux-libre-4.9-pristine-source
   (let ((version linux-libre-4.9-version)
-        (hash (base32 "02g4lkiq6y5i6vrrk2i9h6dxka6mfjpk9dz3517adw5qf79ph6b2")))
+        (hash (base32 "1h96ai9w5q2axhliw85aymdsg8py9y6gl8big5r2gwkbls6h7pa3")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.9)))
@@ -4756,14 +4756,14 @@ isolation or root privileges.")
 (define-public hdparm
   (package
     (name "hdparm")
-    (version "9.63")
+    (version "9.64")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/hdparm/hdparm/"
                                   "hdparm-" version ".tar.gz"))
               (sha256
                (base32
-                "14cni5r116k07zqj0565byjhv6gf3ns6hd8jkjl7fn5sxgm5sy3h"))))
+                "16l5mc6dpqkzhwsljyzks05pq89l2lw09qkx50ks1zn3a5lranri"))))
     (build-system gnu-build-system)
     (arguments
      (list #:make-flags
@@ -7803,26 +7803,27 @@ available in the kernel Linux.")
 (define-public cpuid
   (package
     (name "cpuid")
-    (version "20220224")
+    (version "20220620")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://www.etallen.com/cpuid/cpuid-"
                                   version ".src.tar.gz"))
               (sha256
                (base32
-                "178zv8jclzg3hqm3g5bpjnsp898rbbxfq6ydavw49vla24mdw6aa"))))
+                "06nb69vlv1szdzq1dp784pgbr9z2py050v1hlrn4rr56jp0a2nci"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags
-       (list (string-append "CC=" ,(cc-for-target)))
-       #:tests? #f                      ; no tests
-       #:phases (modify-phases %standard-phases
-                  (delete 'configure)   ; no configure script
-                  (add-before 'install 'fix-makefile
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      (substitute* "Makefile"
-                        (("\\$\\(BUILDROOT\\)/usr")
-                         (assoc-ref outputs "out"))))))))
+     (list #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target)))
+           #:tests? #f                  ; no tests
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure)      ; no configure script
+               (add-before 'install 'fix-makefile
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (substitute* "Makefile"
+                     (("\\$\\(BUILDROOT\\)/usr")
+                      (assoc-ref outputs "out"))))))))
     (inputs (list perl))
     (supported-systems '("i686-linux" "x86_64-linux"))
     (home-page "http://www.etallen.com/cpuid.html")
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index 129b99e485..2f6d22fe7d 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -17839,6 +17839,74 @@ to setup.")
 (define-public cl-posix-mqueue
   (sbcl-package->cl-source-package sbcl-cl-posix-mqueue))
 
+(define-public sbcl-glop
+  (let ((commit "45e722ab4a0cd2944d550bf790206b3326041e38")
+        (revision "1"))
+    (package
+      (name "sbcl-glop")
+      (version (git-version "0.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/lispgames/glop")
+               (commit commit)))
+         (file-name (git-file-name "glop" version))
+         (sha256
+          (base32 "1nm35kvigflfjlmsa8zwdajc61f02fh4sq08jv0wnqylhx8yg2bv"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       (list #:test-asd-file "glop-test.asd"
+             #:phases
+             #~(modify-phases %standard-phases
+                 (add-after 'unpack 'patch-lib-paths
+                   (lambda* (#:key inputs #:allow-other-keys)
+                     (substitute* "src/x11/xcomposite.lisp"
+                       (("libXcomposite.so")
+                        (search-input-file inputs "/lib/libXcomposite.so")))
+                     (substitute* "src/x11/xlib.lisp"
+                       (("libX11")
+                        (string-drop-right
+                         (search-input-file inputs "/lib/libX11.so") 3)))
+                     (substitute* "src/utils.lisp"
+                       (("libX11")
+                        (string-drop-right
+                         (search-input-file inputs "/lib/libX11.so") 3)))
+                     (substitute* "src/utils.lisp"
+                       (("libGL.so")
+                        (search-input-file inputs "/lib/libGL.so.1")))
+                     (substitute* "src/x11/glx.lisp"
+                       (("libGL.so")
+                        (search-input-file inputs "/lib/libGL.so")))
+                     (substitute* "src/x11/display-ctrl.lisp"
+                       (("libXrandr")
+                        (string-drop-right
+                         (search-input-file inputs "/lib/libXrandr.so") 3))))))))
+      (native-inputs
+       (list sbcl-cl-opengl))
+      (inputs
+       (list libx11
+             libxcomposite
+             libxrandr
+             mesa
+             sbcl-cffi
+             sbcl-split-sequence
+             sbcl-trivial-garbage))
+      (home-page "https://github.com/lispgames/glop")
+      (synopsis "Direct FFI bindings for OpenGL window and context management")
+      (description
+       "This package provides Common Lisp bindings to create OpenGL window and
+context manipulation code as well as system input handling.  Direct FFI
+bindings to system functions are used so no third party C lib is required
+except system libraries.")
+      (license license:expat))))
+
+(define-public ecl-glop
+  (sbcl-package->ecl-package sbcl-glop))
+
+(define-public cl-glop
+  (sbcl-package->cl-source-package sbcl-glop))
+
 (define-public sbcl-sdl2
   (let ((commit "bb2aa2a41cf799e3bb1ddf50de41fe389c6db668")
         (revision "1"))
@@ -22675,3 +22743,39 @@ between Lisp objects and some binary (i.e. octet-based) representation.")
 
 (define-public ecl-binary-types
   (sbcl-package->ecl-package sbcl-binary-types))
+
+(define-public sbcl-trivial-custom-debugger
+  (let ((commit "a560594a673bbcd88136af82086107ee5ff9ca81"))
+    (package
+      (name "sbcl-trivial-custom-debugger")
+      (version (git-version "1.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/phoe/trivial-custom-debugger")
+               (commit commit)))
+         (file-name (git-file-name "trivial-custom-debugger" version))
+         (sha256
+          (base32 "1iri5wsp9sc1f5q934cj87zd79r5dc8fda0gl7x1pz95v0wx28yk"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       (list sbcl-parachute))
+      (home-page "https://github.com/phoe/trivial-custom-debugger/")
+      (synopsis "Allow arbitrary functions as the standard Lisp debugger")
+      (description
+       "This is a portability library that allows one to fully override the
+standard debugger provided by their Common Lisp system for situations where
+binding @code{*debugger-hook*} is not enough -- most notably, for
+@code{break}.")
+      (license license:expat))))
+
+(define-public cl-trivial-custom-debugger
+  (sbcl-package->cl-source-package sbcl-trivial-custom-debugger))
+
+(define-public ecl-trivial-custom-debugger
+  (package
+    (inherit (sbcl-package->ecl-package sbcl-trivial-custom-debugger))
+    (arguments
+     ;; Tests fail on ECL: https://github.com/phoe/trivial-custom-debugger/issues/3
+     '(#:tests? #f))))
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 83a04f7301..6a84f47468 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -2953,23 +2953,21 @@ This is the certified version of the Open Cascade Technology (OCCT) library.")
 (define-public gmsh
   (package
     (name "gmsh")
-    (version "4.9.5")
+    (version "4.10.5")
     (source
      (origin
-      (method git-fetch)
-      (uri (git-reference
-            (url "https://gitlab.onelab.info/gmsh/gmsh.git")
-            (commit
-             (string-append "gmsh_"
-                            (string-replace-substring version "." "_")))))
-      (file-name (git-file-name name version))
-      (sha256
-       (base32 "0asd9p64ng5l2zk5glc33x3ynnvdpndlflg3q9mr0jxr7y9x0lrm"))
-      (modules '((guix build utils)))
-      (snippet
-       '(begin
-          (delete-file-recursively "contrib/metis")
-          #t))))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.onelab.info/gmsh/gmsh.git")
+             (commit
+              (string-append "gmsh_"
+                             (string-replace-substring version "." "_")))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "08p39yjgf3lbnjg90skpmsq9n1a9pmwppdmy5s94dc6sq2nfr7xl"))
+       (modules '((guix build utils)))
+       (snippet
+        '(delete-file-recursively "contrib/metis"))))
     (build-system cmake-build-system)
     (propagated-inputs
      (list fltk
@@ -2984,9 +2982,9 @@ This is the certified version of the Open Cascade Technology (OCCT) library.")
            metis
            opencascade-occt))
     (inputs
-     `(("fontconfig" ,fontconfig)
-       ("libxft" ,libxft)
-       ("python" ,python)))
+     (list fontconfig
+           libxft
+           python))
     (arguments
      `(#:configure-flags `("-DENABLE_SYSTEM_CONTRIB:BOOL=ON"
                            "-DENABLE_BUILD_SHARED:BOOL=ON"
@@ -3014,8 +3012,7 @@ This is the certified version of the Open Cascade Technology (OCCT) library.")
                                            "/lib/libgmsh.so")))
                (substitute* "api/gmsh.py"
                  (("find_library\\(\"gmsh\"\\)")
-                  (simple-format #f "\"~a\"" libgmsh))))
-             #t)))))
+                  (simple-format #f "\"~a\"" libgmsh)))))))))
     (home-page "http://gmsh.info/")
     (synopsis "3D finite element grid generator")
     (description "Gmsh is a 3D finite element grid generator with a built-in
diff --git a/gnu/packages/monitoring.scm b/gnu/packages/monitoring.scm
index 1544efb614..1694f94b98 100644
--- a/gnu/packages/monitoring.scm
+++ b/gnu/packages/monitoring.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2021, 2022 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2021 Raphaël Mélotte <raphael.melotte@mind.be>
+;;; Copyright © 2022 Paul A. Patience <paul@apatience.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -682,3 +683,63 @@ processes which keep waking up the disk unnecessarily and thus prevent some
 power saving.")
     (home-page "https://github.com/martinpitt/fatrace")
     (license license:gpl3+)))
+
+(define-public pw
+  (package
+    (name "pw")
+    (version "2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://www.kylheku.com/git/pw")
+             (commit (string-append "pw-" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1xn3qnzz48xan78cp83hfrcifrxx9lgnm14134qhyr5wvj7dk246"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:tests? #f                  ; There are no tests
+           #:make-flags
+           #~(list (string-append "CC=" #$(cc-for-target))
+                   (string-append "DESTDIR=" #$output))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'fix-makefile
+                 (lambda _
+                   (substitute* "Makefile"
+                     (("/share/man/man1 \\\\") "/share/man/man1; \\"))))
+               (delete 'configure)
+               (add-before 'install 'make-install-dirs
+                 (lambda _
+                   (mkdir-p (string-append #$output "/bin"))
+                   (mkdir-p (string-append #$output "/share/man/man1"))
+                   (mkdir-p (string-append #$output "/share/man/man5")))))))
+    (home-page "https://www.kylheku.com/cgit/pw/")
+    (synopsis "Monitor recent lines of output from pipe")
+    (description
+     "@command{pw} is Pipe Watch, a utility that continuously reads lines of
+text from a pipe or pipe-like source, passes them through a FIFO buffer, and
+maintains a display based on the occasional sampling of the contents of the
+FIFO buffer, with useful features such as triggering and filtering.
+
+With @command{pw} you can:
+
+@itemize
+@item Interactively apply and remove filters on-the-fly, without interrupting
+the source.
+
+@item Make recurring patterns in the stream appear to ``freeze'' on the
+screen, using triggers.
+
+@item Prevent the overwhelming amount of output from a program from flooding
+the terminal, while consuming all of that output so that the program isn't
+blocked.  @command{pw} can pause its display updates entirely.
+
+@item Juggle multiple shell background jobs that produce output, yet execute
+indefinitely without blocking.  When @command{pw} runs as part of a shell
+background job, it continues to consume input, process filters and take
+snapshots, without displaying anything.  When put into the foreground again,
+display resumes.
+@end itemize")
+    (license license:bsd-2)))
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 5bc5724370..697fae8fc0 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -5374,7 +5374,7 @@ at @code{musicbrainz.org}.")
 (define-public clyrics
   (package
     (name "clyrics")
-    (version "0.12")
+    (version "0.13")
     (source
      (origin
        (method git-fetch)
@@ -5383,7 +5383,7 @@ at @code{musicbrainz.org}.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1l9iqz6vxrrxapv7s110g360bqxksir4dcqd8w0l4lhmnfmz3vnk"))))
+        (base32 "0py31linlbphl18wxj5v00gggvxp9djg466mjncf5wpa147hs8r3"))))
     (build-system trivial-build-system)
     (inputs
      (list bash ; for the wrapped program
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index b26ef100f6..9101aac472 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -3106,14 +3106,14 @@ eight bytes) tools
 (define-public asio
   (package
     (name "asio")
-    (version "1.20.0")
+    (version "1.22.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/asio/asio/"
                            version " (Stable)/asio-" version ".tar.bz2"))
        (sha256
-        (base32 "0335kyxdnwnp96sh9p3jq1s87qnfmp5l7hzlcdxbbwfzrb9p8hr0"))))
+        (base32 "0v5w9j4a02j2rkc7mrdj3ms0kfpqbgq2ipkixlz2l0p8xs0vfsvp"))))
     (build-system gnu-build-system)
     (inputs
      (list boost openssl))
@@ -3472,16 +3472,16 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
 (define-public opendht
   (package
     (name "opendht")
-    (version "2.3.4")
+    (version "2.4.9")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/savoirfairelinux/opendht")
-                    (commit version)))
+                    (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0gp1wdpk50y0pcvlhqfw9vpms8lsrjvv63x4dh40axsvf2ix9lkj"))))
+                "150yxlhn8ykhck7gr1i2bppbqpfyhk0cscn5z7vyn94y5fnqkxsb"))))
     (outputs '("out" "tools" "debug"))
     (build-system gnu-build-system)
     (arguments
@@ -3491,7 +3491,6 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
       #:modules '(((guix build python-build-system) #:prefix python:)
                   (guix build gnu-build-system)
                   (guix build utils))
-      #:tests? #f                     ;tests require networking
       #:configure-flags
       #~(list "--enable-tests"
               "--enable-proxy-server"
@@ -3500,6 +3499,15 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
               "--enable-proxy-client")
       #:phases
       #~(modify-phases %standard-phases
+          (add-after 'unpack 'disable-problematic-tests
+            (lambda _
+              ;; The dhtrunnertester test suite includes 'testListen', which
+              ;; is sensitive to the performance/load of the machine it runs
+              ;; on, introducing nondeterminism (see:
+              ;; https://github.com/savoirfairelinux/opendht/issues/626).
+              (substitute* "tests/Makefile.am"
+                (("tests/dhtrunnertester.(h|cpp)$" all)
+                 (string-append "# " all)))))
           (add-after 'unpack 'fix-python-installation-prefix
             ;; Specify the installation prefix for the compiled Python module
             ;; that would otherwise attempt to installs itself to Python's own
@@ -3515,6 +3523,10 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
                 (("extra_link_args=\\[(.*)\\]" _ args)
                  (string-append "extra_link_args=[" args
                                 ", '-Wl,-rpath=" #$output "/lib']")))))
+          (replace 'check
+            (lambda* (#:key tests? #:allow-other-keys)
+              (when tests?
+                (invoke "tests/opendht_unit_tests"))))
           (add-after 'install 'move-and-wrap-tools
             (lambda* (#:key inputs outputs #:allow-other-keys)
               (let* ((tools (assoc-ref outputs "tools"))
@@ -3531,15 +3543,15 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
                   `("GUIX_PYTHONPATH" prefix (,site-packages)))))))))
     (inputs (list bash-minimal fmt readline))
     (propagated-inputs
-     (list msgpack                    ;included in several installed headers
-           restinio                   ;included in opendht/http.h
+     (list msgpack                      ;included in several installed headers
+           restinio                     ;included in opendht/http.h
            ;; The following are listed in the 'Requires.private' field of
            ;; opendht.pc:
            argon2
            gnutls
            jsoncpp
            nettle
-           openssl))                  ;required for the DHT proxy
+           openssl))                    ;required for the DHT proxy
     (native-inputs
      (list autoconf
            automake
diff --git a/gnu/packages/node-xyz.scm b/gnu/packages/node-xyz.scm
index 9dcb5c3d16..b14b407e19 100644
--- a/gnu/packages/node-xyz.scm
+++ b/gnu/packages/node-xyz.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2021 Noisytoot <noisytoot@disroot.org>
 ;;; Copyright © 2021 Charles <charles.b.jackson@protonmail.com>
 ;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
+;;; Copyright © 2022 Nicolas Graves <ngraves@ngraves.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -56,6 +57,34 @@
 architecture supporting plugins.")
     (license license:expat)))
 
+(define-public node-buffer-crc32
+  (package
+    (name "node-buffer-crc32")
+    (version "0.2.13")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/brianloveswords/buffer-crc32")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "09qx2mnd898190m50mc0rhyvbm7d677sxz9bn09qmqkz6fnsddgf"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (replace 'configure
+                    (lambda _
+                      (invoke "npm" "--offline" "--ignore-scripts" "install"
+                              "--production"))))))
+    (home-page "https://github.com/brianloveswords/buffer-crc32")
+    (synopsis "CRC32 implementation in Javascript")
+    (description
+     "This package provides a CRC32 algorithm that works with binary data
+and fancy character sets, signed or unsigned data and has tests, for Node.")
+    (license license:expat)))
+
 (define-public node-color-name
   (package
     (name "node-color-name")
@@ -77,6 +106,43 @@ architecture supporting plugins.")
      "This package provides a JSON list with color names and their values.")
     (license license:expat)))
 
+(define-public node-crx3
+  (package
+    (name "node-crx3")
+    (version "1.1.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ahwayakchih/crx3")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1snqyw8c3s9p2clhqh1172z0rs1was36sfxkk6acgpar32c2rwzw"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'replace-mri-by-minimist
+                    (lambda _
+                      (substitute* "package.json"
+                        (("\"mri\": \"\\^1\\.1\\.6\",")
+                         "\"minimist\": \"^1.2.6\","))
+                      (substitute* "lib/configuration.js"
+                        (("mri")
+                         "minimist"))))
+                  (replace 'configure
+                    (lambda _
+                      (invoke "npm" "--offline" "--ignore-scripts" "install"
+                              "--production"))))))
+    (inputs (list node-minimist node-pbf node-yazl))
+    (home-page "https://github.com/ahwayakchih/crx3")
+    (synopsis "Create CRXv3 browser extensions with Javascript")
+    (description
+     "This package creates web extension files (CRXv3) for Chromium versions
+64.0.3242 and above and all other browsers supporting the file format and API.")
+    (license license:bsd-3)))
+
 (define-public node-env-variable
   (package
     (name "node-env-variable")
@@ -176,6 +242,33 @@ user-land JavaScript.")
 random number generator.")
     (license license:bsd-3)))
 
+(define-public node-minimist
+  (package
+    (name "node-minimist")
+    (version "1.2.6")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/substack/minimist")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0mxj40mygbiy530wskc8l28wxb6fv3f8vrhpwjgprymhpgbaac7d"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (replace 'configure
+                    (lambda _
+                      (invoke "npm" "--offline" "--ignore-scripts" "install"
+                              "--production"))))))
+    (home-page "https://github.com/substack/minimist")
+    (synopsis "Parse CLI arguments in Javascript")
+    (description "This package can scan for CLI flags and arguments in
+Javascript.")
+    (license license:expat)))
+
 (define-public node-oop
   ;; No releases, last commit was February 2013.
   (let ((commit "f9d87cda0958886955c14a0a716e57021ed295dc")
@@ -201,6 +294,94 @@ random number generator.")
 while being as light-weight and simple as possible.")
       (license license:expat))))
 
+(define-public node-pbf
+  (package
+    (name "node-pbf")
+    (version "3.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mapbox/pbf")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1r8xs787ix79yr0vrwrizdml9h7cmxjrzhvnhkj784ac5f8nv5j7"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (replace 'configure
+                    (lambda _
+                      (invoke "npm" "--offline" "--ignore-scripts" "install"
+                              "--production"))))))
+    (inputs (list node-ieee754 node-resolve-protobuf-schema))
+    (home-page "https://github.com/mapbox/pbf")
+    (synopsis "Decode and encode protocol buffers in Javascript")
+    (description
+     "This package is a low-level, fast and lightweight JavaScript library
+for decoding and encoding protocol buffers, a compact binary format for
+structured data serialization.  Works both in Node and the browser.
+It supports lazy decoding and detailed customization of the reading/writing
+code.")
+    (license license:bsd-3)))
+
+(define-public node-protocol-buffers-schema
+  (package
+    (name "node-protocol-buffers-schema")
+    (version "3.6.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mafintosh/protocol-buffers-schema")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0lnckxj14jzsnfxdd5kmlwrac43c214bv8i2g5rdldymlpxzrz1v"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (replace 'configure
+                    (lambda _
+                      (invoke "npm" "--offline" "--ignore-scripts" "install"
+                              "--production"))))))
+    (home-page "https://github.com/mafintosh/protocol-buffers-schema")
+    (synopsis "Protocol buffers schema parser written in Javascript")
+    (description "This package provides a protocol buffers schema parser
+written in Javascript.")
+    (license license:expat)))
+
+(define-public node-resolve-protobuf-schema
+  (package
+    (name "node-resolve-protobuf-schema")
+    (version "2.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mafintosh/resolve-protobuf-schema")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0zxavr0b2yz9xzp6zlsg5g09i0a6zqb24j12rdvfgph6wd4mzk40"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (replace 'configure
+                    (lambda _
+                      (invoke "npm" "--offline" "--ignore-scripts" "install"
+                              "--production"))))))
+    (inputs (list node-protocol-buffers-schema))
+    (home-page "https://github.com/mafintosh/resolve-protobuf-schema")
+    (synopsis "Resolve protobuf imports")
+    (description
+     "This package can read a protobuf schema from the disk, parse it and
+resolve all imports.")
+    (license license:expat)))
+
 (define-public node-stack-trace
   ;; There have been improvements since the last release.
   (let ((commit "4fd379ee78965ce7ce8820b436f1b1b590d5dbcf")
@@ -365,6 +546,33 @@ Subsequent calls will either return the cached previous value or throw an error
 if desired.")
     (license license:isc)))
 
+(define-public node-ieee754
+  (package
+    (name "node-ieee754")
+    (version "1.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/feross/ieee754")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "19rlg59lavnwsvbblhvrqwinz2wzqlxhddqpwrc3cyqkscjgza7i"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (replace 'configure
+                    (lambda _
+                      (invoke "npm" "--offline" "--ignore-scripts" "install"
+                              "--production"))))))
+    (home-page "https://github.com/feross/ieee754")
+    (synopsis "Read/write IEEE754 floating point numbers in Javascript")
+    (description "This package can read and write IEEE754 floating point
+numbers from/to a Buffer or array-like object in Javascript.")
+    (license license:bsd-3)))
+
 (define-public node-inherits
   (package
     (name "node-inherits")
@@ -1303,3 +1511,38 @@ connection.")))
 accessing serial ports.  This package is the recommended entry point for most
 projects.  It combines a high-level Node.js stream interface with a useful
 default set of parsers and bindings.")))
+
+(define-public node-yazl
+  (package
+    (name "node-yazl")
+    (version "2.5.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/thejoshwolfe/yazl")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1lhwqqnvazpi4xw81ldpx0ky0h1j5rcx3br480q2bnzj21cm109n"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (replace 'configure
+                    (lambda _
+                      (invoke "npm" "--offline" "--ignore-scripts" "install"
+                              "--production"))))))
+    (inputs (list node-buffer-crc32))
+    (home-page "https://github.com/thejoshwolfe/yazl")
+    (synopsis "Yet another zip library for node")
+    (description
+     "This package provides a zip library for Node.  It follows the
+following principles:
+@enumerate
+@item Don't block the JavaScript thread.  Use and provide async APIs.
+@item Keep memory usage under control.  Don't attempt to buffer entire
+files in RAM at once.
+@item Prefer to open input files one at a time than all at once.
+@end enumerate")
+    (license license:expat)))
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index c91132ad5b..750e675e39 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -1302,18 +1302,18 @@ allow for great power and flexibility.
 (define-public gwl
   (package
     (name "gwl")
-    (version "0.4.0")
+    (version "0.5.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/gwl/gwl-" version ".tar.gz"))
               (sha256
                (base32
-                "0sgaaq430l3dqmqqiikfb0ilxnd2cq28626y18kxx5c781qwpys9"))))
+                "09r22gqgaj2mxvlwvfach5j1n66y3yggmzc6d2gxq7lyywbcvjvs"))))
     (build-system gnu-build-system)
     (arguments
      `(#:parallel-build? #false ; for reproducibility
        #:make-flags
-       '("GUILE_AUTO_COMPILE=0")))
+       '("GUILE_AUTO_COMPILE=0" "GWL_SKIP_INTEGRATION_TESTS=1")))
     (native-inputs
      (list autoconf automake pkg-config texinfo graphviz))
     (inputs
@@ -1342,8 +1342,8 @@ environments.")
     (license (list license:gpl3+ license:agpl3+ license:silofl1.1))))
 
 (define-public guix-build-coordinator
-  (let ((commit "a7bbf9da27120839c22cc40abc6fad651df0a762")
-        (revision "58"))
+  (let ((commit "cc884efa7ee8a481cd3dae1b93d27454ac8dfcd2")
+        (revision "59"))
     (package
       (name "guix-build-coordinator")
       (version (git-version "0" revision commit))
@@ -1354,7 +1354,7 @@ environments.")
                       (commit commit)))
                 (sha256
                  (base32
-                  "1ryw2hpasq24zzaiz8dwn2krkb0vj3391plzfarjpvsk4058jhd5"))
+                  "03yz8if282mvkgqn0pxlqj0h3nyjfag7a835v9s98nkqfbj1ixcl"))
                 (file-name (string-append name "-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
diff --git a/gnu/packages/patches/containerd-create-pid-file.patch b/gnu/packages/patches/containerd-create-pid-file.patch
new file mode 100644
index 0000000000..668ffcd9e9
--- /dev/null
+++ b/gnu/packages/patches/containerd-create-pid-file.patch
@@ -0,0 +1,31 @@
+Copyright © 2022 Oleg Pykhalov <go.wigust@gmail.com>
+
+Create a PID file after containerd is ready to serve requests.
+
+Fixes <https://issues.guix.gnu.org/38432>.
+
+--- a/cmd/containerd/command/notify_linux.go	1970-01-01 03:00:01.000000000 +0300
++++ b/cmd/containerd/command/notify_linux.go	2022-07-02 04:42:35.553753495 +0300
+@@ -22,15 +22,22 @@
+ 	sd "github.com/coreos/go-systemd/v22/daemon"
+ 
+ 	"github.com/containerd/containerd/log"
++
++	"os"
++	"strconv"
+ )
+ 
+ // notifyReady notifies systemd that the daemon is ready to serve requests
+ func notifyReady(ctx context.Context) error {
++	pidFile, _ := os.Create("/run/containerd/containerd.pid")
++	defer pidFile.Close()
++	pidFile.WriteString(strconv.FormatInt(int64(os.Getpid()), 10))
+ 	return sdNotify(ctx, sd.SdNotifyReady)
+ }
+ 
+ // notifyStopping notifies systemd that the daemon is about to be stopped
+ func notifyStopping(ctx context.Context) error {
++	os.Remove("/run/containerd/containerd.pid")
+ 	return sdNotify(ctx, sd.SdNotifyStopping)
+ }
+ 
diff --git a/gnu/packages/patches/libgeotiff-adapt-test-script-for-proj-6.2.patch b/gnu/packages/patches/libgeotiff-adapt-test-script-for-proj-6.2.patch
deleted file mode 100644
index 746610c095..0000000000
--- a/gnu/packages/patches/libgeotiff-adapt-test-script-for-proj-6.2.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From 678ffd97db2d63cf6856428bea65a93e069f812f Mon Sep 17 00:00:00 2001
-From: Even Rouault <even.rouault@spatialys.com>
-Date: Wed, 4 Sep 2019 16:11:37 +0200
-Subject: [PATCH 1/2] Adapt test script for PROJ 6.2 EPSG database (fixes #22)
-
----
- libgeotiff/test/testlistgeo          | 8 +++++++-
- libgeotiff/test/testlistgeo_out.dist | 4 ++--
- 2 files changed, 9 insertions(+), 3 deletions(-)
-
-diff --git a/libgeotiff/test/testlistgeo b/libgeotiff/test/testlistgeo
-index 7fb4a2f..571f5d0 100755
---- a/test/testlistgeo
-+++ b/test/testlistgeo
-@@ -210,10 +210,15 @@ echo "Testing listgeo equidistant_cylindrical.tif" >> ${OUT}
- $EXE ${DATA_DIR}/equidistant_cylindrical.tif >>${OUT}
- echo "" >>${OUT}
- 
-+# Normalize for results depending on the exact version of PROJ / EPSG database
-+sed "s/ETRS89-extended/ETRS89/g" < ${OUT} > ${OUT}.tmp
-+mv ${OUT}.tmp ${OUT}
-+
-+sed "s/ETRS89-extended/ETRS89/g" < ${TEST_CLI_DIR}/testlistgeo_out.dist > testlistgeo_out.dist.tmp
- 
- # do 'diff' with distribution results
- echo "diff ${OUT} with testlistgeo_out.dist"
--diff -u ${OUT} ${TEST_CLI_DIR}/testlistgeo_out.dist
-+diff -u ${OUT} testlistgeo_out.dist.tmp
- if [ $? -ne 0 ] ; then
-     echo  ""
-     echo "PROBLEMS HAVE OCCURRED"
-@@ -224,6 +229,7 @@ else
-     echo "TEST OK"
-     echo "test file ${OUT} removed"
-     echo
-+    rm testlistgeo_out.dist.tmp
-     /bin/rm -f ${OUT}
-     exit 0
- fi
-diff --git a/libgeotiff/test/testlistgeo_out.dist b/libgeotiff/test/testlistgeo_out.dist
-index 68a948c..c157f00 100644
---- a/test/testlistgeo_out.dist
-+++ b/test/testlistgeo_out.dist
-@@ -1738,11 +1738,11 @@ Geotiff_Information:
-    Keyed_Information:
-       GTModelTypeGeoKey (Short,1): ModelTypeProjected
-       GTRasterTypeGeoKey (Short,1): RasterPixelIsArea
--      ProjectedCSTypeGeoKey (Short,1): Code-3035 (ETRS89 / LAEA Europe)
-+      ProjectedCSTypeGeoKey (Short,1): Code-3035 (ETRS89-extended / LAEA Europe)
-       End_Of_Keys.
-    End_Of_Geotiff.
- 
--PCS = 3035 (ETRS89 / LAEA Europe)
-+PCS = 3035 (ETRS89-extended / LAEA Europe)
- Projection = 19986 (Europe Equal Area 2001)
- Projection Method: CT_LambertAzimEqualArea
-    ProjCenterLatGeoKey: 52.000000 ( 52d 0' 0.00"N)
-
-From 15af10648c4cb7b4c55cbe08caaf9884c1d156d9 Mon Sep 17 00:00:00 2001
-From: Even Rouault <even.rouault@spatialys.com>
-Date: Wed, 4 Sep 2019 19:13:11 +0200
-Subject: [PATCH 2/2] appveyor.yml: build vcpkg from source to fix issue with
- VS2015
diff --git a/gnu/packages/plotutils.scm b/gnu/packages/plotutils.scm
index 569e44a958..56d3c4e282 100644
--- a/gnu/packages/plotutils.scm
+++ b/gnu/packages/plotutils.scm
@@ -269,14 +269,14 @@ colors, styles, options and details.")
 (define-public asymptote
   (package
     (name "asymptote")
-    (version "2.80")
+    (version "2.81")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/asymptote/"
                            version "/asymptote-" version ".src.tgz"))
        (sha256
-        (base32 "0mhpvsjgw8av5rgkqlb0m8njc4fsfw5ddlx5121iyn29vjbx0rk2"))
+        (base32 "0wq0xnkxb8rsphmgls5f38ll61j8i0plh7cr1n0kldvpr14bm3kn"))
        (modules '((guix build utils)))
        (snippet
         ;; Remove bundled RapidJSON.
diff --git a/gnu/packages/python-science.scm b/gnu/packages/python-science.scm
index 428ce48b53..57c9325f49 100644
--- a/gnu/packages/python-science.scm
+++ b/gnu/packages/python-science.scm
@@ -1183,7 +1183,7 @@ aggregated sum and more.")
 (define-public python-pyvista
   (package
     (name "python-pyvista")
-    (version "0.34.0")
+    (version "0.35.1")
     (source
      ;; The PyPI tarball does not contain the tests.
      ;; (However, we don't yet actually run the tests.)
@@ -1194,7 +1194,7 @@ aggregated sum and more.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0f2x2wvi5pkpv5h3jrnx8zxnaj51navfqp2fdna1l9rpjgjjf94g"))))
+        (base32 "1rwwn8a4j3i22il6dxr2qzrnnz3n1gjbpa2p8gfzrjmzp5lzzk81"))))
     (build-system python-build-system)
     (propagated-inputs
      (list python-appdirs
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index dab6bda0ed..3239086dc3 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -73,16 +73,20 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix build-system copy)
   #:use-module (guix build-system python)
   #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages django)
+  #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages gnupg)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages groff)
   #:use-module (gnu packages libevent)
@@ -2955,6 +2959,76 @@ with python-requests.")
 adapter for use with the Requests library.")
     (license license:asl2.0)))
 
+(define-public python-msal
+  (package
+    (name "python-msal")
+    (version "1.18.0")
+    (home-page
+     "https://github.com/AzureAD/microsoft-authentication-library-for-python")
+    (source (origin
+              (method git-fetch)
+              ;; Pypi does not have tests.
+              (uri (git-reference (url home-page) (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "02d9vlvp08q1yffgn7a0y19451py1jly67q5ld6m2d9xidbrvac1"))))
+    (build-system python-build-system)
+    (arguments
+     ;; Tests (all?) rely on network access and only some can be disabled by
+     ;; setting the environment variable TRAVIS_TAG.
+     (list #:tests? #f))
+    (native-inputs (list python-mock))
+    (propagated-inputs (list python-cryptography python-pyjwt python-requests))
+    (synopsis "Microsoft Authentication Library (MSAL) for Python")
+    (description
+     "The Microsoft Authentication Library for Python enables applications to
+integrate with the Microsoft identity platform.  It allows you to sign in
+users or apps with Microsoft identities (Azure AD, Microsoft Accounts and
+Azure AD B2C accounts) and obtain tokens to call Microsoft APIs such as
+Microsoft Graph or your own APIs registered with the Microsoft identity
+platform.  It is built using industry standard OAuth2 and OpenID Connect
+protocols.")
+    (license license:expat)))
+
+(define-public oauth2ms
+  (let ((commit "a1ef0cabfdea57e9309095954b90134604e21c08")
+        (revision "0"))
+    (package
+      (name "oauth2ms")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/harishkrupo/oauth2ms")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0dqi6n4npdrvb42r672n4sl1jl8z5lsk554fwiiihpj0faa9dx64"))))
+      (build-system copy-build-system)
+      (arguments
+       (list #:install-plan #~`(("oauth2ms" "bin/oauth2ms")
+                                ("." #$(string-append "share/doc/" name "-"
+                                                      version "/")
+                                 #:include-regexp ("\\.org$")))
+             #:phases #~(modify-phases %standard-phases
+                          (add-after 'install 'wrap-pythonpath
+                            (lambda* (#:key inputs outputs #:allow-other-keys)
+                              (let ((path (getenv "GUIX_PYTHONPATH")))
+                                (wrap-program (string-append #$output
+                                                             "/bin/oauth2ms")
+                                              `("GUIX_PYTHONPATH" ":" prefix
+                                                (,path)))))))))
+      (inputs (list bash-minimal python python-gnupg python-msal python-pyxdg))
+      (home-page "https://github.com/harishkrupo/oauth2ms")
+      (synopsis "XOAUTH2 compatible Microsoft Office 365 token fetcher")
+      (description
+       "Oauth2ms can be used to fetch OAuth 2.0 tokens from the Microsoft Identity
+endpoint.  Additionally, it can encode the token in the XOAUTH2 format to be
+used as authentication in IMAP mail servers.")
+      (license license:asl2.0))))
+
 (define-public python-oauthlib
   (package
     (name "python-oauthlib")
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index a9371dccd2..fcac915282 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -5562,7 +5562,10 @@ include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
               ;; instead of /bin/sh.
               (substitute* "numpy/distutils/exec_command.py"
                 (("'/bin/sh'")
-                 (format #f "~s" (search-input-file inputs "bin/bash"))))))
+                 (format #f "~s" (search-input-file inputs "bin/bash"))))
+              ;; Don't try to call '/bin/true' specifically.
+              (substitute* "numpy/core/tests/test_cpu_features.py"
+                (("/bin/true") (search-input-file inputs "bin/true")))))
           (replace 'check
             (lambda* (#:key tests? outputs inputs #:allow-other-keys)
               (when tests?
@@ -16223,7 +16226,11 @@ graphviz.")
                                "test__doctests.py"
                                "test__all__.py"
                                "test___config.py"
-                               "test__execmodules.py")))
+                               "test__execmodules.py"
+                               ;; This test contains 'test_unlink', which
+                               ;; fails on i686 (see:
+                               ;; https://github.com/gevent/gevent/issues/1558).
+                               "test__core_stat.py")))
                         (call-with-output-file "skipped_tests.txt"
                           (lambda (port)
                             (format port "~a~%"
@@ -30086,6 +30093,26 @@ profile.  It supports:
 Currently, Linux is the only platform supported by this library.")
     (license license:expat)))
 
+(define-public python-clrprint
+  (package
+    (name "python-clrprint")
+    (version "2.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "clrprint" version))
+              (sha256
+               (base32
+                "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #f))                    ;there are no tests
+    (propagated-inputs (list python-colorama python-termcolor))
+    (home-page "https://github.com/AbhijithAJ/clrprint")
+    (synopsis "Print colorful output in the terminal")
+    (description "@code{clrprint} is developed to print colorful output in the
+terminal.  It has red, blue, green, yellow, purple and black/white (default)
+colors.")
+    (license license:expat)))
+
 (define-public python-musical-scales
   (package
     (name "python-musical-scales")
@@ -30155,3 +30182,24 @@ GeoPackage Binary")
 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-bsdiff4
+  (package
+    (name "python-bsdiff4")
+    (version "1.2.2")
+    (home-page "https://github.com/ilanschnell/bsdiff4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1fa0vkmbr0a9xifq7i5gfcf7ifn739i1fdij8awynm299fsqvvhx"))))
+    (build-system python-build-system)
+    (synopsis "Binary diff and patch using the BSDIFF4 format")
+    (description "This package provides a Python library for the @code{bsdiff}
+binary diff utility.  It also provides two command-line tools, @code{bsdiff4}
+and @code{bspatch4}.")
+    (license license:bsd-2)))
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 762c63cace..beba03936a 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -19,7 +19,7 @@
 ;;; Copyright © 2020 TomZ <tomz@freedommail.ch>
 ;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
@@ -55,6 +55,7 @@
   #:use-module (guix deprecation)
   #:use-module (guix utils)
   #:use-module (gnu packages)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages cmake)
@@ -84,6 +85,7 @@
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages markup)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages ninja)
   #:use-module (gnu packages node)
@@ -552,13 +554,13 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtbase
   (package/inherit qtbase-5
     (name "qtbase")
-    (version "6.1.1")
+    (version "6.3.1")
     (source (origin
               (inherit (package-source qtbase-5))
               (uri (qt5-urls name version))
               (sha256
                (base32
-                "1wizrfiw6h8bk99brbdpdli40vsk6yqchs66f1r083hp0ygsma11"))
+                "00sfya41ihqb0zwg6wf1kiy02iymj6mk584hhk2c4s94khfl4r0a"))
               (modules '((guix build utils)))
               (snippet
                ;; corelib uses bundled harfbuzz, md4, md5, sha3
@@ -577,8 +579,6 @@ developers using C++ or QML, a CSS & JavaScript like language.")
        ;; enough) or a functional network.  It's also quite expensive to
        ;; build and run.
        ((#:tests? _ #f) #f)
-       ;; ((#:cmake _)
-       ;;  cmake)                          ;requires a CMake >= 3.18.4
        ((#:configure-flags _ ''())
         `(let ((out (assoc-ref %outputs "out")))
            (list "-GNinja"              ;the build fails otherwise
@@ -604,6 +604,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                  ;; cases such as for those below.
                  "-DFEATURE_system_pcre2=ON"
                  "-DFEATURE_system_sqlite=ON"
+                 "-DFEATURE_system_xcb_xinput=ON"
                  ;; Don't use the precompiled headers.
                  "-DBUILD_WITH_PCH=OFF"
                  ;; Drop special machine instructions that do not have runtime
@@ -620,67 +621,79 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                  "-DFEATURE_mips_dsp=OFF"
                  "-DFEATURE_mips_dspr2=OFF")))
        ((#:phases phases)
-        `(modify-phases ,phases
-           (delete 'patch-bin-sh)
-           (delete 'patch-xdg-open)
-           (add-after 'patch-paths 'patch-more-paths
-             (lambda _
-               (substitute* "src/gui/platform/unix/qgenericunixservices.cpp"
-                 (("\"xdg-open\"")
-                  (format #f "~s" (which "xdg-open"))))
-               (substitute* '("mkspecs/features/qt_functions.prf"
-                              "qmake/library/qmakebuiltins.cpp")
-                 (("/bin/sh")
-                  (which "sh")))))
-           (replace 'configure
-             (assoc-ref %standard-phases 'configure))
-           (replace 'build
-             (lambda* (#:key parallel-build? #:allow-other-keys)
-               (apply invoke "cmake" "--build" "."
-                      (if parallel-build?
-                          `("--parallel" ,(number->string (parallel-job-count)))
-                          '()))))
-           (replace 'install
-             (lambda _
-               (invoke "cmake" "--install" ".")))
-           (replace 'patch-mkspecs
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (archdata (string-append out "/lib/qt6"))
-                      (mkspecs (string-append archdata "/mkspecs"))
-                      (qt_config.prf (string-append
-                                      mkspecs "/features/qt_config.prf")))
-                 ;; For each Qt module, let `qmake' uses search paths in the
-                 ;; module directory instead of all in QT_INSTALL_PREFIX.
-                 (substitute* qt_config.prf
-                   (("\\$\\$\\[QT_INSTALL_HEADERS\\]")
-                    "$$clean_path($$replace(dir, mkspecs/modules, ../../include/qt6))")
-                   (("\\$\\$\\[QT_INSTALL_LIBS\\]")
-                    "$$clean_path($$replace(dir, mkspecs/modules, ../../lib))")
-                   (("\\$\\$\\[QT_HOST_LIBS\\]")
-                    "$$clean_path($$replace(dir, mkspecs/modules, ../../lib))")
-                   (("\\$\\$\\[QT_INSTALL_BINS\\]")
-                    "$$clean_path($$replace(dir, mkspecs/modules, ../../bin))"))
-
-                 ;; Searches Qt tools in the current PATH instead of QT_HOST_BINS.
-                 (substitute* (string-append mkspecs "/features/qt_functions.prf")
-                   (("cmd = \\$\\$\\[QT_HOST_BINS\\]/\\$\\$2")
-                    "cmd = $$system(which $${2}.pl 2>/dev/null || which $${2})"))
-
-                 ;; Resolve qmake spec files within qtbase by absolute paths.
-                 (substitute*
-                     (map (lambda (file)
-                            (string-append mkspecs "/features/" file))
-                          '("device_config.prf" "moc.prf" "qt_build_config.prf"
-                            "qt_config.prf"))
-                   (("\\$\\$\\[QT_HOST_DATA/get\\]") archdata)
-                   (("\\$\\$\\[QT_HOST_DATA/src\\]") archdata)))))))))
+        #~(modify-phases #$phases
+            (delete 'patch-bin-sh)
+            (delete 'patch-xdg-open)
+            (add-after 'patch-paths 'patch-more-paths
+              (lambda* (#:key inputs #:allow-other-keys)
+                (substitute* "src/gui/platform/unix/qgenericunixservices.cpp"
+                  (("\"xdg-open\"")
+                   (format #f "~s" (search-input-file inputs "bin/xdg-open"))))
+                (substitute* '("mkspecs/features/qt_functions.prf"
+                               "qmake/library/qmakebuiltins.cpp")
+                  (("/bin/sh")
+                   (search-input-file inputs "bin/bash")))
+                (substitute* "src/corelib/CMakeLists.txt"
+                  (("/bin/ls")
+                   (search-input-file inputs "bin/ls")))))
+            (replace 'configure
+              (assoc-ref %standard-phases 'configure))
+            (replace 'build
+              (lambda* (#:key parallel-build? #:allow-other-keys)
+                (apply invoke "cmake" "--build" "."
+                       (if parallel-build?
+                           `("--parallel" ,(number->string (parallel-job-count)))
+                           '()))))
+            (replace 'install
+              (lambda _
+                (invoke "cmake" "--install" ".")))
+            (replace 'patch-mkspecs
+              (lambda* (#:key outputs #:allow-other-keys)
+                (let* ((archdata (search-input-directory outputs "lib/qt6"))
+                       (mkspecs (search-input-directory outputs
+                                                        "lib/qt6/mkspecs"))
+                       (qt_config.prf
+                        (search-input-file
+                         outputs "lib/qt6/mkspecs/features/qt_config.prf"))
+                       (qt_functions.prf
+                        (search-input-file
+                         outputs "lib/qt6/mkspecs/features/qt_functions.prf")))
+                  ;; For each Qt module, let `qmake' uses search paths in the
+                  ;; module directory instead of all in QT_INSTALL_PREFIX.
+                  (substitute* qt_config.prf
+                    (("\\$\\$\\[QT_INSTALL_HEADERS\\]")
+                     "$$clean_path($$replace(dir, mkspecs/modules, ../../include/qt6))")
+                    (("\\$\\$\\[QT_INSTALL_LIBS\\]")
+                     "$$clean_path($$replace(dir, mkspecs/modules, ../../lib))")
+                    (("\\$\\$\\[QT_HOST_LIBS\\]")
+                     "$$clean_path($$replace(dir, mkspecs/modules, ../../lib))")
+                    (("\\$\\$\\[QT_INSTALL_BINS\\]")
+                     "$$clean_path($$replace(dir, mkspecs/modules, ../../bin))"))
+
+                  ;; Searches Qt tools in the current PATH instead of QT_HOST_BINS.
+                  (substitute* qt_functions.prf
+                    (("cmd = \\$\\$\\[QT_HOST_BINS\\]/\\$\\$2")
+                     "cmd = $$system(which $${2}.pl 2>/dev/null || which $${2})"))
+
+                  ;; Resolve qmake spec files within qtbase by absolute paths.
+                  (substitute*
+                      (map (lambda (file)
+                             (search-input-file
+                              outputs
+                              (string-append "lib/qt6/mkspecs/features/" file)))
+                           '("device_config.prf" "moc.prf" "qt_build_config.prf"
+                             "qt_config.prf"))
+                    (("\\$\\$\\[QT_HOST_DATA/get\\]") archdata)
+                    (("\\$\\$\\[QT_HOST_DATA/src\\]") archdata)))))))))
     (native-inputs
-     `(("gtk+" ,gtk+)                   ;for GTK theme support
-       ("ninja" ,ninja)
-       ("wayland-protocols" ,wayland-protocols)
-       ("xorg-server" ,xorg-server-for-tests)
-       ,@(package-native-inputs qtbase-5)))
+     (modify-inputs (package-native-inputs qtbase-5)
+       (prepend gtk                     ;for GTK theme support
+                ninja wayland-protocols)))
+    (inputs
+     (modify-inputs (package-inputs qtbase-5)
+       (prepend bash-minimal libxcb md4c)
+       (replace "gtk+" gtk)                ;use latest gtk
+       (replace "postgresql" postgresql))) ;use latest postgresql
     (native-search-paths
      (list (search-path-specification
             (variable "QMAKEPATH")
diff --git a/gnu/packages/slang.scm b/gnu/packages/slang.scm
index c8de04667f..f335dc1a39 100644
--- a/gnu/packages/slang.scm
+++ b/gnu/packages/slang.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018, 2019, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,6 +22,7 @@
 (define-module (gnu packages slang)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module ((guix licenses) #:prefix license:)
@@ -47,31 +48,29 @@
                 "06p379fqn6w38rdpqi98irxi2bf4llb0rja3dlgkqz7nqh7kp7pw"))
               (modules '((guix build utils)))
               (snippet
-               '(begin
-                  (substitute* "src/Makefile.in"
-                    (("/bin/ln") "ln"))
-                  #t))))
+               #~(begin
+                   (substitute* "src/Makefile.in"
+                     (("/bin/ln") "ln"))))))
     (build-system gnu-build-system)
     (arguments
-     '(#:parallel-tests? #f
-       #:parallel-build? #f  ; there's at least one race
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'reduce-array-test-size
-           ;; Reduce the size of the array, otherwise the array.sl/array.slc
-           ;; tests fails with "Unable to create a multi-dimensional array of
-           ;; the desired size" on 32 bit systems.
-           (lambda _
-             (substitute* "src/test/array.sl"
-               (("10000,10000,10000,10000,10000,10000")
-                "10,10,10,10,10,10"))))
-         (add-before 'configure 'substitute-before-config
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((ncurses (assoc-ref inputs "ncurses")))
-               (substitute* "configure"
-                 (("MISC_TERMINFO_DIRS=\"\"")
-                  (string-append "MISC_TERMINFO_DIRS="
-                                 "\"" ncurses "/share/terminfo" "\"")))))))))
+     (list #:parallel-tests? #f
+           #:parallel-build? #f         ; race to build/use elfobj
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'reduce-array-test-size
+                 ;; Fix array.sl/array.slc failure on 32-bit systems ("Unable to
+                 ;; to create a multi-dimensional array of the desired size").
+                 (lambda _
+                   (substitute* "src/test/array.sl"
+                     (("10000,10000,10000,10000,10000,10000")
+                      "10,10,10,10,10,10"))))
+               (add-before 'configure 'fix-configure-script
+                 ;; Don't try to link to the long-obsolete (and gone) -ltermcap.
+                 (lambda _
+                   (substitute* "configure"
+                     (("(MISC_TERMINFO_DIRS)=.*" _ variable)
+                      (format #f "~a=\"~a/share/terminfo\"\n" variable
+                              #$(this-package-input "ncurses")))))))))
     (inputs
      (list readline zlib libpng pcre ncurses))
     (home-page "https://www.jedsoft.org/slang/")
@@ -87,6 +86,51 @@ interpreter, it may also be used in a stand-alone fashion through the use of
 slsh, which is part of the S-Lang distribution.")
     (license license:gpl2+)))
 
+(define-public most
+  (package
+    (name "most")
+    (version "5.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://www.jedsoft.org/releases/most/most-"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "008537ns659pw2aag15imwjrxj73j26aqq90h285is6kz8gmv06v"))
+       (modules '((guix build utils)))
+       (snippet
+        #~(begin
+            (substitute* "src/Makefile.in"
+              (("/bin/cp") "cp"))))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:configure-flags
+           #~(list (string-append "--with-slang="
+                                  #$(this-package-input "slang")))
+           #:tests? #f                  ; no test suite
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-before 'configure 'fix-configure-script
+                 ;; Don't try to link to the long-obsolete (and gone) -ltermcap.
+                 (lambda _
+                   (substitute* "configure"
+                     (("(MISC_TERMINFO_DIRS)=.*" _ variable)
+                      (format #f "~a=\"~a/share/terminfo\"\n" variable
+                              #$(this-package-input "ncurses")))))))))
+    (inputs
+     (list ncurses slang))
+    (home-page "https://www.jedsoft.org/most/")
+    (synopsis
+     "@dfn{Pager} (terminal text viewer) with multiple windows and filters")
+    (description
+     "Most is a paging text viewer.  It displays the contents of a file or the
+output of a command on the terminal, one screenful at a time, and lets you
+scroll up and down to (re)view the entire text.
+
+You can open multiple windows within @command{most} to view different files, or
+to inspect different parts of the same file, at the same time.")
+    (license license:gpl2+)))
+
 (define-public newt
   (package
     (name "newt")
diff --git a/gnu/packages/sqlite.scm b/gnu/packages/sqlite.scm
index c894f563a8..c6b1b63173 100644
--- a/gnu/packages/sqlite.scm
+++ b/gnu/packages/sqlite.scm
@@ -113,10 +113,10 @@ is in the public domain.")
 (define-public sqlite-next
   (package
     (inherit sqlite)
-    (version "3.37.0")
+    (version "3.39.1")
     (source (origin
               (method url-fetch)
-              (uri (sqlite-uri version 2021))
+              (uri (sqlite-uri version 2022))
               (sha256
                (base32
-                "1xvrfh2r5x5pljlvakym3zrhml2dvsr8dd8xsb3nzcylsi8lc6kk"))))))
+                "1i0wjd1mig720q1gk9jkpw6h0mialbrlkfh8w8lans0czakygj47"))))))
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index 47e015da71..ddcd0043c4 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -11034,3 +11034,51 @@ settings to typeset Dutch documents.")
 Finnish in @code{babel}.  It provides all the necessary macros, definitions and
 settings to typeset Finnish documents.")
       (license license:lppl1.3c+))))
+
+(define-public texlive-generic-babel-norsk
+  (package
+    (name "texlive-generic-babel-norsk")
+    (version (number->string %texlive-revision))
+    (source (origin
+              (method svn-fetch)
+              (uri (texlive-ref "generic" "babel-norsk"))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "1yf538l2isxgmab8jslxxx5fbdk4njf147n4raf5vyw3l4slxm6m"))))
+    (build-system texlive-build-system)
+    (arguments '(#:tex-directory "generic/babel-norsk"))
+    (home-page "https://www.ctan.org/pkg/babel-norsk")
+    (synopsis "Babel support for Norwegian")
+    (description
+       "The package provides the language definition file for support of
+Norwegian in @code{babel}.  Some shortcuts are defined, as well as translations
+to Norsk of standard “LaTeX names”.")
+    (license license:lppl1.3+)))
+
+(define-public texlive-babel-danish
+  (let ((template (simple-texlive-package
+                   "texlive-babel-danish"
+                   (list "/source/generic/babel-danish/")
+                   (base32
+                    "00dryb078fqckqjnxa2riq478j6d5i28j5cclv4bw7dn5naa3lz7"))))
+    (package
+      (inherit template)
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ '())
+          "generic/babel-danish")
+         ((#:build-targets _ '())
+          ''("danish.ins")) ; TODO: use dtx and build documentation
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _
+                 (chdir "source/generic/babel-danish")))))))
+      (home-page "https://www.ctan.org/pkg/babel-danish")
+      (synopsis "Babel support for Danish")
+      (description
+       "This package provides the language definition file for support of
+Danish in @code{babel}.  It provides all the necessary macros, definitions and
+settings to typeset Danish documents.")
+      (license license:lppl1.3c+))))
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index 30fc375176..0c8531cc4d 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -167,7 +167,7 @@ based command language.")
 (define-public kakoune
   (package
     (name "kakoune")
-    (version "2021.08.28")
+    (version "2021.11.08")
     (source
      (origin
        (method url-fetch)
@@ -175,7 +175,7 @@ based command language.")
                            "releases/download/v" version "/"
                            "kakoune-" version ".tar.bz2"))
        (sha256
-        (base32 "1jvn4b9rma5jjvg3xz8nf224pbq3ry570j6qvc834wn5v3gxfvkg"))))
+        (base32 "1x5mvmpf0rgmr2xdw5wjn4hr6qd8yvj0zx588fi324x1knfqhc5a"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -191,14 +191,9 @@ based command language.")
              (substitute* "src/shell_manager.cc"
                (("if \\(m_shell.empty\\(\\)\\)" line)
                 (string-append "m_shell = \"" (which "sh")
-                               "\";\n        " line)))
-             #t))
-         (delete 'configure)            ; no configure script
-         ;; kakoune requires us to be in the src/ directory to build.
-         (add-before 'build 'chdir
-           (lambda _ (chdir "src") #t)))))
-    (native-inputs
-     (list asciidoc pkg-config ruby))
+                               "\";\n        " line)))))
+         (delete 'configure))))            ; no configure script
+    (native-inputs (list pkg-config))
     (synopsis "Vim-inspired code editor")
     (description
      "Kakoune is a code editor heavily inspired by Vim, as such most of its
diff --git a/gnu/packages/toys.scm b/gnu/packages/toys.scm
index 4fa6966ca9..fb2f367490 100644
--- a/gnu/packages/toys.scm
+++ b/gnu/packages/toys.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2017, 2018, 2020–2022 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Jesse Gibbons <jgibbons2357+guix@gmail.com>
 ;;; Copyright © 2019, 2020, 2021 Timotej Lazar <timotej.lazar@araneo.si>
+;;; Copyright © 2019 Liliana Marie Prikler <liliana.prikler@gmail.com>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
 ;;;
@@ -38,6 +39,46 @@
   #:use-module (guix packages)
   #:use-module (guix utils))
 
+(define-public lolcat
+  (let ((commit "35dca3d0a381496d7195cd78f5b24aa7b62f2154")
+        (revision "0"))
+    (package
+      (name "lolcat")
+      (version (git-version "1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/jaseg/lolcat")
+               (commit commit)))
+         (sha256
+          (base32
+           "0jjbkqcc2ikjxd1xgdyv4rb0vsw218181h89f2ywg29ffs3ypd8g"))
+         (file-name (git-file-name name version))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:tests? #f                    ; no check target
+         #:make-flags
+         (list ,(string-append "CC=" (cc-for-target)))
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'bootstrap)
+           (delete 'configure)
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out  (assoc-ref outputs "out"))
+                      (dest (string-append out "/bin")))
+                 (mkdir-p dest)
+                 (install-file "lolcat" dest)
+                 (install-file "censor" dest)
+                 #t))))))
+      (home-page "https://github.com/jaseg/lolcat")
+      (synopsis "Rainbow coloring effect for text console display")
+      (description "@command{lolcat} concatenates files and streams like
+regular @command{cat}, but it also adds terminal escape codes between
+characters and lines resulting in a rainbow effect.")
+      (license license:wtfpl2))))
+
 (define-public oneko
   (package
     (name "oneko")
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 2d838ea1c4..612f69597f 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -2439,7 +2439,7 @@ from Subversion to any supported Distributed Version Control System (DVCS).")
 (define-public tig
   (package
     (name "tig")
-    (version "2.5.5")
+    (version "2.5.6")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2447,7 +2447,12 @@ from Subversion to any supported Distributed Version Control System (DVCS).")
                     version "/tig-" version ".tar.gz"))
               (sha256
                (base32
-                "04skfsw5wkf6p47lis7x4xyfbpjik3id1km75q0fd2g8xa5jrfi4"))))
+                "0pwn7mlfnd5ngcbagjs9vsr7jgmia8676p0i91vvfl4v6qrmzfsh"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; TODO: Delete and rebuild doc/*.(1|5|7).
+                  (for-each delete-file (find-files "doc" "\\.html$"))))))
     (build-system gnu-build-system)
     (native-inputs
      (list asciidoc xmlto))
@@ -2458,7 +2463,17 @@ from Subversion to any supported Distributed Version Control System (DVCS).")
        (modify-phases %standard-phases
          (add-after 'install 'install-doc
            (lambda _
-             (invoke "make" "install-doc"))))
+             (invoke "make" "install-doc")))
+         (add-after 'install 'install-completions
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out   (assoc-ref outputs "out"))
+                    (share (string-append out "/share")))
+               (mkdir-p (string-append share "/bash-completion/completions"))
+               (mkdir-p (string-append share "/zsh/site-functions"))
+               (copy-file "contrib/tig-completion.bash"
+                          (string-append share "/bash-completion/completions/tig"))
+               (copy-file "contrib/tig-completion.zsh"
+                          (string-append share "/zsh/site-functions/_tig"))))))
        #:test-target "test"
        #:tests? #f))                    ; tests require access to /dev/tty
     (home-page "https://jonas.github.io/tig/")
@@ -2678,20 +2693,25 @@ by rclone usable with git-annex.")
 (define-public fossil
   (package
     (name "fossil")
-    (version "2.17")
+    (version "2.18")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
              "https://www.fossil-scm.org/home/tarball/"
-             "f48180f2ff3169651a725396d4f7d667c99a92873b9c3df7eee2f144be7a0721"
+             "84f25d7eb10c0714109d69bb2809abfa8b4b5c3d73b151a5b10df724dacd46d8"
              "/fossil-src-" version ".tar.gz"))
+       ;; XXX: Currently the above hash must be manually updated.
        (sha256
-        (base32 "1gvx6xzrw1a8snlq9qmr6099r44ifghg0h0fw4jazqmmyxriqzsw"))
+        (base32 "0cq7677p84nnbfvk2dsh3c3y900gslw3zaw8iipfq932vmf1s31h"))
        (modules '((guix build utils)))
        (snippet
         '(begin
-           (delete-file-recursively "compat") #t))))
+           (delete-file-recursively "compat")
+           ;; Disable obsolete SQLite feature check; remove for 2.19.
+           (substitute* "tools/sqlcompattest.c"
+             ((".*\"ENABLE_JSON1\".*")
+              ""))))))
     (build-system gnu-build-system)
     (native-inputs
      (list tcl                          ;for configuration only
@@ -2728,6 +2748,9 @@ by rclone usable with git-annex.")
      "Fossil is a distributed source control management system which supports
 access and administration over HTTP CGI or via a built-in HTTP server.  It has
 a built-in wiki, built-in file browsing, built-in tickets system, etc.")
+    (properties
+     '((release-monitoring-url
+        . "https://fossil-scm.org/home/uv/latest-release.md")))
     (license (list license:public-domain        ;src/miniz.c, src/shell.c
                    license:bsd-2))))
 
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 3097aca7e3..68ab7c7143 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -333,6 +333,7 @@ the SVT-HEVC encoder, it is possible to spread video encoding processing across
 multiple Intel's Xeon processors to achieve a real advantage of processing
 efficiency.")
     (home-page "https://01.org/svt")
+    (supported-systems '("x86_64-linux" "i686-linux"))
     (license (license:non-copyleft "file:///LICENSE.md"))))
 
 (define-public mediasdk
@@ -375,6 +376,7 @@ efficiency.")
     (description "MediaSDK provides a plain C API to access hardware-accelerated
 video decode, encode and filtering on Intel's Gen graphics hardware platforms.")
     (home-page "http://mediasdk.intel.com/")
+    (supported-systems '("x86_64-linux" "i686-linux"))
     (license (license:non-copyleft "file:///LICENSE"))))
 
 (define-public schroedinger
@@ -691,13 +693,17 @@ touchscreen devices and the ability to apply filters to their input events.")
              (("\\(A52DIR\\)/include")
               "(A52DIR)/include/a52dec")
              (("LIBS = " match)
-              (string-append match "-la52 ")))
-           #t))
+              (string-append match "-la52 ")))))
+       (add-after 'unpack 'preseed-cflags
+         (lambda _
+           (setenv "CFLAGS"
+                   (string-append "-D_FILE_OFFSET_BITS=64 "
+                                  "-D_LARGEFILE_SOURCE "
+                                  "-D_LARGEFILE64_SOURCE"))))
        (add-before 'install 'create-destination-directory
          (lambda* (#:key outputs #:allow-other-keys)
            (let* ((out (string-append (assoc-ref outputs "out"))))
-             (mkdir-p (string-append out "/bin"))
-             #t))))))
+             (mkdir-p (string-append out "/bin"))))))))
   (native-inputs
    (list nasm))
   (inputs
@@ -4915,7 +4921,7 @@ video from a Wayland session.")
 (define-public gaupol
   (package
     (name "gaupol")
-    (version "1.9")
+    (version "1.11")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -4924,7 +4930,7 @@ video from a Wayland session.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1mmjg8nwhif2hmmp8i11643izwzdf839brqdai3ksfg0qkh8rnxk"))))
+                "01qbhhycmy26b2mw2jlri321k478jhp7y0jzlcv87iaq05qr4pc8"))))
     (build-system python-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index a1c3ab7736..af6be7257d 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -1163,7 +1163,7 @@ public keys and can roam across IP addresses.")
 (define-public xl2tpd
   (package
     (name "xl2tpd")
-    (version "1.3.16")
+    (version "1.3.17")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1172,7 +1172,7 @@ public keys and can roam across IP addresses.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0is5ccrvijz0pfm45pfrlbb9y8231yz3c4zqs8mkgakl9rxajy6l"))))
+                "06aiidwygywaa1jn8m2pw8l3vnsc2bjnacbjmlsdy1cqgr1f5cc9"))))
     (build-system gnu-build-system)
     (arguments
      (list
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index f8742cd120..9342873bc0 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -381,14 +381,14 @@ the same, being completely separated from the Internet.")
     ;; Track the ‘mainline’ branch.  Upstream considers it more reliable than
     ;; ’stable’ and recommends that “in general you deploy the NGINX mainline
     ;; branch at all times” (https://www.nginx.com/blog/nginx-1-6-1-7-released/)
-    (version "1.21.6")
+    (version "1.23.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://nginx.org/download/nginx-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1bh52jqqcaj5wlh2kvhxr00jhk2hnk8k97ki4pwyj4c8920p1p36"))))
+                "1lacv4gb72n7f93smy098y122aaz9bxdxxkjksgbwwljbfiwl2l2"))))
     (build-system gnu-build-system)
     (inputs (list libxml2 libxslt openssl pcre zlib))
     (arguments
@@ -476,9 +476,9 @@ and as a proxy to reduce the load on back-end HTTP or mail servers.")
 
 (define-public nginx-documentation
   ;; This documentation should be relevant for the current nginx package.
-  (let ((version "1.21.6")
-        (revision 2829)
-        (changeset "1ecf0e0526da"))
+  (let ((version "1.23.0")
+        (revision 2862)
+        (changeset "cf7551842617"))
     (package
       (name "nginx-documentation")
       (version (simple-format #f "~A-~A-~A" version revision changeset))
@@ -490,7 +490,7 @@ and as a proxy to reduce the load on back-end HTTP or mail servers.")
                (file-name (string-append name "-" version))
                (sha256
                 (base32
-                 "1r3y9wv4bhji5b16ljb557llf6ih3z2mzgwbia79h7223468w3fg"))))
+                 "1qfrcakj6dzdypn01dngjqvsi4b4fsbpxziy5m2x1rs1z6gv7ia3"))))
       (build-system gnu-build-system)
       (arguments
        '(#:tests? #f                    ; no test suite
@@ -4652,8 +4652,8 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
                    license:freebsd-doc)))) ; documentation
 
 (define-public guix-data-service
-  (let ((commit "39487cd7e6df7f50f21af15b26f9ec616709f21d")
-        (revision "32"))
+  (let ((commit "ee73d2cc9857533020535eb8e1ad856e04fb5152")
+        (revision "33"))
     (package
       (name "guix-data-service")
       (version (string-append "0.0.1-" revision "." (string-take commit 7)))
@@ -4665,7 +4665,7 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0xynndlx711spak3s5lzzip8x9bccrzrs5vlrm6jj2ppgrrjsc8h"))))
+                  "0rmx728md50nlka61f4gma58avplyaf32k71hazprijdqii2vkgf"))))
       (build-system gnu-build-system)
       (arguments
        '(#:modules ((guix build utils)
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index 8fef7de77b..f27f8af8d4 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -2715,6 +2715,63 @@ which do not support it.")
     (description "wlogout is a logout menu for Wayland environments.")
     (license license:expat)))
 
+(define-public berry
+  (package
+    (name "berry")
+    (version "0.1.11")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+          (url "https://github.com/jlervin/berry")
+          (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "1qyq3g0m7rb9gpk1i5kfy9nr8sqivjiilbi4g0nw4d400rblvkbj"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; There are no tests.
+       #:make-flags
+       ,#~(list (string-append "CC=" #$(cc-for-target))
+                (string-append "prefix=" #$output)
+                (string-append "CFLAGS="
+                               "-I" (assoc-ref %build-inputs "freetype")
+                               "/include/freetype2"))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after 'build 'install-xsession
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((output (assoc-ref outputs "out"))
+                    (xsessions (string-append output "/share/xsessions")))
+               (mkdir-p xsessions)
+               (with-output-to-file (string-append xsessions "/berry.desktop")
+                 (lambda _
+                   (format #t
+                    "\
+[Desktop Entry]~@
+Name=berry~@
+Comment=Berry Window Manager~@
+Exec=~a/bin/berry~@
+TryExec=~@*~a/bin/berry~@
+Icon=~@
+Type=Application~%"
+                    output)))))))))
+    (native-inputs
+     (list pkg-config))
+    (inputs
+      (list freetype
+            fontconfig
+            libxext
+            libx11
+            libxft
+            libxinerama))
+    (home-page "https://berrywm.org/")
+    (synopsis "Healthy, byte-sized window manager")
+    (description
+     "@code{berry} is a healthy, bite-sized window manager written in C using XLib.")
+    (license license:expat)))
+
 (define-public avizo
   (package
     (name "avizo")
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index 323ecd3042..19bb18923b 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -302,7 +302,7 @@ upstream occasionally.")
 (define-public exo
   (package
     (name "exo")
-    (version "4.16.3")
+    (version "4.16.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -310,7 +310,7 @@ upstream occasionally.")
                                   "exo-" version ".tar.bz2"))
               (sha256
                (base32
-                "1rpsp37n5l3qxinv37rz5l4rvja7yaf8hqsy81jhlgz27wygybbj"))))
+                "1jifknw0chyaismj94mrx9pbhnd7ridm25bn1d15q7lgwxkhr9c2"))))
     (build-system gnu-build-system)
     (native-inputs
      (list pkg-config intltool))
@@ -579,7 +579,7 @@ applications, and includes a search bar to search for applications.")
 (define-public xfce4-xkb-plugin
   (package
     (name "xfce4-xkb-plugin")
-    (version "0.8.2")
+    (version "0.8.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/panel-plugins/"
@@ -587,7 +587,7 @@ applications, and includes a search bar to search for applications.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "0rvrz464y7ji989zvi2v85kg47444nqsdq9rv6k8dkbkdwzy2jxv"))))
+                "11s9s0634g9rf5hcj6nga6hsv71wcq9c7ym6nsis077gfmwfkgzh"))))
     (build-system gnu-build-system)
     (native-inputs
      (list intltool pkg-config))
@@ -693,7 +693,7 @@ allows you to shut down the computer from Xfce.")
 (define-public xfce4-settings
   (package
     (name "xfce4-settings")
-    (version "4.16.2")
+    (version "4.16.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -701,7 +701,7 @@ allows you to shut down the computer from Xfce.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "0zixl1yiksavp3a824hqczxx5q3l09f0ng37gxl5wlv0111cpmsd"))
+                "0r4fmcmqzik9a1cflm3jck40pmbbgn8viffygq5jq54fdp9fd6gj"))
               (patches (search-patches "xfce4-settings-defaults.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -1155,7 +1155,7 @@ inhibit interface which allows applications to prevent automatic sleep.")
 (define-public ristretto
   (package
     (name "ristretto")
-    (version "0.12.2")
+    (version "0.12.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/apps/ristretto/"
@@ -1163,7 +1163,7 @@ inhibit interface which allows applications to prevent automatic sleep.")
                                   "ristretto-" version ".tar.bz2"))
               (sha256
                (base32
-                "0sfrvb19xkiphcp2ddqxgvh9hbramlm6qi7sv99s407c4acqdvhf"))))
+                "0gizrn49ayamb1sqfxi3mdxas9dz4dw1sv3iyji718az48hp13w6"))))
     (build-system gnu-build-system)
     (native-inputs
      (list intltool desktop-file-utils
@@ -1305,7 +1305,7 @@ of data to either CD/DVD/BD.")
 (define-public mousepad
   (package
     (name "mousepad")
-    (version "0.5.9")
+    (version "0.5.10")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/apps/mousepad/"
@@ -1313,7 +1313,7 @@ of data to either CD/DVD/BD.")
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "0wzlcwhvpnig6123k83fsmrfjq5x1pqncxmnd8k2fmzccz0sh27i"))))
+                "1b9bal9wxmgpff6r7k48gnkd0vla7xljmiahjq6mdrdyaa6z7fkf"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '(;; Use the GSettings keyfile backend rather than
@@ -2070,7 +2070,7 @@ for the Xfce panel.  It supports several features, such as:
 (define-public xfce4-wavelan-plugin
   (package
    (name "xfce4-wavelan-plugin")
-   (version "0.6.2")
+   (version "0.6.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/panel-plugins/"
@@ -2079,7 +2079,7 @@ for the Xfce panel.  It supports several features, such as:
                                   "/xfce4-wavelan-plugin-" version ".tar.bz2"))
               (sha256
                (base32
-                "07a8nmc60in48licjj0gmwm77vb8divh1lb7jnib35n5a1ka6ypa"))))
+                "0azpv0s3r4ag3gp0bsfvq0jgzycx6ivdsw5p0ga7425pdksw5h31"))))
     (build-system gnu-build-system)
     (native-inputs
      (list intltool pkg-config))
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index 6a424b71d2..c3e38314ce 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -5132,7 +5132,7 @@ by the Xorg server.")
 (define-public xorg-server
   (package
     (name "xorg-server")
-    (version "21.1.2")
+    (version "21.1.4")
     (source
      (origin
        (method url-fetch)
@@ -5140,7 +5140,7 @@ by the Xorg server.")
                            "/xserver/xorg-server-" version ".tar.xz"))
        (sha256
         (base32
-         "1c4dgvpv3kib8rhw37b00vc056nlb1z66c2lwzs4prz8kxmg82y2"))
+         "11y5w6z3rz3i4jyv0wc3scd2jh3bsmcklq0fm7a5invywj7bxi2w"))
        (patches
         (list
          ;; See:
diff --git a/gnu/services/docker.scm b/gnu/services/docker.scm
index 846ebe8334..741bab5a8c 100644
--- a/gnu/services/docker.scm
+++ b/gnu/services/docker.scm
@@ -98,6 +98,8 @@ loop-back communications.")
                      ;; For finding containerd-shim binary.
                      #:environment-variables
                      (list (string-append "PATH=" #$containerd "/bin"))
+                     #:pid-file "/run/containerd/containerd.pid"
+                     #:pid-file-timeout 300
                      #:log-file "/var/log/containerd.log"))
            (stop #~(make-kill-destructor)))))
 
@@ -135,7 +137,8 @@ loop-back communications.")
                                   '("--userland-proxy=false"))
                            (if #$enable-iptables?
                                "--iptables"
-                               "--iptables=false"))
+                               "--iptables=false")
+                           "--containerd" "/run/containerd/containerd.sock")
                      #:environment-variables
                      (list #$@environment-variables)
                      #:pid-file "/var/run/docker.pid"
diff --git a/gnu/services/guix.scm b/gnu/services/guix.scm
index 338e027245..dac1e5841a 100644
--- a/gnu/services/guix.scm
+++ b/gnu/services/guix.scm
@@ -652,8 +652,6 @@ ca-certificates.crt file in the system profile."
                 #:user #$user
                 #:group #$group
                 #:pid-file "/var/run/guix-data-service/pid"
-                ;; Allow time for migrations to run
-                #:pid-file-timeout 120
                 #:environment-variables
                 `(,(string-append
                     "GUIX_LOCPATH=" #$glibc-utf8-locales "/lib/locale")
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index a9560db66b..b555c46040 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -918,9 +918,7 @@ applications in communication.  It is used by Jami, for example.")))
               (lambda (port)
                 (display "\
 ### These lines were generated from your system configuration:
-User tor
 DataDirectory /var/lib/tor
-PidFile /var/run/tor/tor.pid
 Log notice syslog\n" port)
                 (when (eq? 'unix '#$socks-socket-type)
                   (display "\
@@ -960,7 +958,25 @@ HiddenServicePort ~a ~a~%"
   "Return a <shepherd-service> running Tor."
   (match config
     (($ <tor-configuration> tor)
-     (let ((torrc (tor-configuration->torrc config)))
+     (let* ((torrc (tor-configuration->torrc config))
+            (tor   (least-authority-wrapper
+                    (file-append tor "/bin/tor")
+                    #:name "tor"
+                    #:mappings (list (file-system-mapping
+                                      (source "/var/lib/tor")
+                                      (target source)
+                                      (writable? #t))
+                                     (file-system-mapping
+                                      (source "/dev/log") ;for syslog
+                                      (target source))
+                                     (file-system-mapping
+                                      (source "/var/run/tor")
+                                      (target source)
+                                      (writable? #t))
+                                     (file-system-mapping
+                                      (source torrc)
+                                      (target source)))
+                    #:namespaces (delq 'net %namespaces))))
        (with-imported-modules (source-module-closure
                                '((gnu build shepherd)
                                  (gnu system file-systems)))
@@ -974,22 +990,15 @@ HiddenServicePort ~a ~a~%"
                 (modules '((gnu build shepherd)
                            (gnu system file-systems)))
 
-                (start #~(make-forkexec-constructor/container
-                          (list #$(file-append tor "/bin/tor") "-f" #$torrc)
-
-                          #:log-file "/var/log/tor.log"
-                          #:mappings (list (file-system-mapping
-                                            (source "/var/lib/tor")
-                                            (target source)
-                                            (writable? #t))
-                                           (file-system-mapping
-                                            (source "/dev/log") ;for syslog
-                                            (target source))
-                                           (file-system-mapping
-                                            (source "/var/run/tor")
-                                            (target source)
-                                            (writable? #t)))
-                          #:pid-file "/var/run/tor/tor.pid"))
+                ;; XXX: #:pid-file won't work because the wrapped 'tor'
+                ;; program would print its PID within the user namespace
+                ;; instead of its actual PID outside.  There's no inetd or
+                ;; systemd socket activation support either (there's
+                ;; 'sd_notify' though), so we're stuck with that.
+                (start #~(make-forkexec-constructor
+                          (list #$tor "-f" #$torrc)
+                          #:user "tor" #:group "tor"
+                          #:log-file "/var/log/tor.log"))
                 (stop #~(make-kill-destructor))
                 (documentation "Run the Tor anonymous network overlay."))))))))
 
diff --git a/gnu/system.scm b/gnu/system.scm
index ba1b7b5152..a94f0a9a1f 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -1222,6 +1222,7 @@ deprecated; use 'setuid-program' instead~%"))
                (file-append sudo "/bin/sudo")
                (file-append sudo "/bin/sudoedit")
                (file-append fuse "/bin/fusermount")
+               (file-append fuse-3 "/bin/fusermount3")
 
                ;; To allow mounts with the "user" option, "mount" and "umount" must
                ;; be setuid-root.
diff --git a/gnu/tests/guix.scm b/gnu/tests/guix.scm
index a4c3e35e5d..ad0980a10c 100644
--- a/gnu/tests/guix.scm
+++ b/gnu/tests/guix.scm
@@ -222,14 +222,23 @@ host	all	all	::1/128 	trust"))))))
                      ((pid) (number? pid))))))
              marionette))
 
+          ;; The service starts immediately but replies with status 500 until
+          ;; initialization is complete, so keep trying for a while.
+          (define (try-http-get attempts)
+            (let ((status
+                   (let-values (((response text)
+                                 (http-get #$(simple-format
+                                              #f "http://localhost:~A/healthcheck"
+                                              forwarded-port))))
+                     (response-code response))))
+              (if (or (= status 200) (<= attempts 1))
+                  status
+                  (begin (sleep 5)
+                         (try-http-get (- attempts 1))))))
+
           (test-equal "http-get"
             200
-            (let-values
-                (((response text)
-                  (http-get #$(simple-format
-                               #f "http://localhost:~A/healthcheck" forwarded-port)
-                            #:decode-body? #t)))
-              (response-code response)))
+            (try-http-get 12))
 
           (test-end))))
 
diff --git a/guix/import/egg.scm b/guix/import/egg.scm
index 0b88020554..52196583c4 100644
--- a/guix/import/egg.scm
+++ b/guix/import/egg.scm
@@ -85,11 +85,6 @@
 (define %eggs-home-page
   (make-parameter "https://wiki.call-cc.org/egg"))
 
-(define (egg-source-url name version)
-  "Return the URL to the source tarball for version VERSION of the CHICKEN egg
-NAME."
-  `(egg-uri ,name version))
-
 (define (egg-name->guix-name name)
   "Return the package name for CHICKEN egg NAME."
   (string-append package-name-prefix name))
@@ -196,7 +191,7 @@ not work."
       (let* ((version* (or (assoc-ref egg-content 'version)
                            (find-latest-version name)))
              (version (if (list? version*) (first version*) version*))
-             (source-url (if source #f (egg-source-url name version)))
+             (source-url (if source #f `(egg-uri ,name version)))
              (tarball (if source
                           #f
                           (with-store store
@@ -342,7 +337,7 @@ not work."
   "Return an @code{<upstream-source>} for the latest release of PACKAGE."
   (let* ((egg-name (guix-package->egg-name package))
          (version (find-latest-version egg-name))
-         (source-url (egg-source-url egg-name version)))
+         (source-url (egg-uri egg-name version)))
     (upstream-source
      (package (package-name package))
      (version version)
diff --git a/guix/import/pypi.scm b/guix/import/pypi.scm
index 392fc9700b..4760fc3dae 100644
--- a/guix/import/pypi.scm
+++ b/guix/import/pypi.scm
@@ -161,9 +161,11 @@ or #f if there isn't any."
 (define (python->package-name name)
   "Given the NAME of a package on PyPI, return a Guix-compliant name for the
 package."
-  (if (string-prefix? "python-" name)
-      (snake-case name)
-      (string-append "python-" (snake-case name))))
+  (cond
+   ((string-prefix? "python-" name) (snake-case name))
+   ((or (string=? "trytond" name)
+        (string-prefix? "trytond-" name)) (snake-case name))
+   (else (string-append "python-" (snake-case name)))))
 
 (define (guix-package->pypi-name package)
   "Given a Python PACKAGE built from pypi.org, return the name of the
diff --git a/guix/import/texlive.scm b/guix/import/texlive.scm
index c741555928..116bd1f66a 100644
--- a/guix/import/texlive.scm
+++ b/guix/import/texlive.scm
@@ -246,7 +246,7 @@ of those files are returned that are unexpectedly installed."
                           ;; entries with the same prefix.
                           (lambda (x y) (every equal? x y)))))
 
-(define (tlpdb->package name package-database)
+(define (tlpdb->package name version package-database)
   (and-let* ((data (assoc-ref package-database name))
              (dirs (files->directories
                     (map (lambda (dir)
@@ -255,7 +255,9 @@ of those files are returned that are unexpectedly installed."
                                  (or (assoc-ref data 'runfiles) (list))
                                  (or (assoc-ref data 'srcfiles) (list))))))
              (name (guix-name name))
-             (version (number->string %texlive-revision))
+             ;; TODO: we're ignoring the VERSION argument because that
+             ;; information is distributed across %texlive-tag and
+             ;; %texlive-revision.
              (ref (svn-multi-reference
                    (url (string-append "svn://www.tug.org/texlive/tags/"
                                        %texlive-tag "/Master/texmf-dist"))
@@ -276,6 +278,9 @@ of those files are returned that are unexpectedly installed."
                        (force-output port)
                        (get-hash))))
                   ,@(if (assoc-ref data 'srcfiles) '() '(#:trivial? #true))))
+        ;; package->definition in (guix import utils) expects to see a
+        ;; version field.
+        (version ,version)
         ,@(or (and=> (assoc-ref data 'depend)
                      (lambda (inputs)
                        `((propagated-inputs
@@ -297,13 +302,18 @@ of those files are returned that are unexpectedly installed."
 
 (define texlive->guix-package
   (memoize
-   (lambda* (name #:key repo version (package-database tlpdb))
+   (lambda* (name #:key
+                  repo
+                  (version (number->string %texlive-revision))
+                  (package-database tlpdb))
      "Find the metadata for NAME in the tlpdb and return the `package'
 s-expression corresponding to that package, or #f on failure."
-     (tlpdb->package name (package-database)))))
+     (tlpdb->package name version (package-database)))))
 
-(define (texlive-recursive-import name)
+(define* (texlive-recursive-import name #:key repo version)
   (recursive-import name
+                    #:repo repo
+                    #:version version
                     #:repo->guix-package texlive->guix-package
                     #:guix-name guix-name))
 
diff --git a/guix/import/utils.scm b/guix/import/utils.scm
index 26eebfece5..668b8c8083 100644
--- a/guix/import/utils.scm
+++ b/guix/import/utils.scm
@@ -341,6 +341,8 @@ APPEND-VERSION?/string is a string, append this string."
   (match guix-package
     ((or
       ('package ('name name) ('version version) . rest)
+      ('package ('inherit ('simple-texlive-package name . _))
+                ('version version) . rest)
       ('let _ ('package ('name name) ('version version) . rest)))
 
      `(define-public ,(string->symbol
diff --git a/guix/monad-repl.scm b/guix/monad-repl.scm
index aefabdeebb..8a6053edd5 100644
--- a/guix/monad-repl.scm
+++ b/guix/monad-repl.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2022 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,6 +21,12 @@
   #:use-module (guix monads)
   #:use-module (guix utils)
   #:use-module (guix packages)
+  #:use-module (guix status)
+  #:autoload   (guix gexp) (lower-object)
+  #:use-module ((guix derivations)
+                #:select (derivation?
+                          derivation->output-paths built-derivations))
+  #:use-module (ice-9 match)
   #:use-module (ice-9 pretty-print)
   #:use-module (system repl repl)
   #:use-module (system repl common)
@@ -69,16 +75,58 @@
                          #:guile-for-build guile)
                     'store-monad)))
 
+(define %build-verbosity
+  ;; Current build verbosity level.
+  1)
+
+(define* (evaluate/print-with-store mvalue #:key build?)
+  "Run monadic value MVALUE in the store monad and print its value."
+  (with-store store
+    (set-build-options store
+                       #:print-build-trace #t
+                       #:print-extended-build-trace? #t
+                       #:multiplexed-build-output? #t)
+    (with-status-verbosity %build-verbosity
+      (let* ((guile  (or (%guile-for-build)
+                         (default-guile-derivation store)))
+             (values (run-with-store store
+                       (if build?
+                           (mlet %store-monad ((obj mvalue))
+                             (if (derivation? obj)
+                                 (mbegin %store-monad
+                                   (built-derivations (list obj))
+                                   (return
+                                    (match (derivation->output-paths obj)
+                                      (((_ . files) ...) files))))
+                                 (return (list obj))))
+                           (mlet %store-monad ((obj mvalue))
+                             (return (list obj))))
+                       #:guile-for-build guile)))
+        (for-each (lambda (value)
+                    (run-hook before-print-hook value)
+                    (pretty-print value))
+                  values)))))
+
 (define-meta-command ((run-in-store guix) repl (form))
   "run-in-store EXP
 Run EXP through the store monad."
-  (with-store store
-    (let* ((guile (or (%guile-for-build)
-                      (default-guile-derivation store)))
-           (value (run-with-store store (repl-eval repl form)
-                                  #:guile-for-build guile)))
-      (run-hook before-print-hook value)
-      (pretty-print value))))
+  (evaluate/print-with-store (repl-eval repl form)))
+
+(define-meta-command ((verbosity guix) repl (level))
+  "verbosity LEVEL
+Change build verbosity to LEVEL."
+  (set! %build-verbosity (repl-eval repl level)))
+
+(define-meta-command ((lower guix) repl (form))
+  "lower OBJECT
+Lower OBJECT into a derivation or store file and return it."
+  (evaluate/print-with-store (lower-object (repl-eval repl form))))
+
+(define-meta-command ((build guix) repl (form))
+  "build OBJECT
+Lower OBJECT and build it, returning its output file name(s)."
+  (evaluate/print-with-store (lower-object (repl-eval repl form))
+                             #:build? #t))
 
 (define-meta-command ((enter-store-monad guix) repl)
   "enter-store-monad
diff --git a/guix/scripts/home.scm b/guix/scripts/home.scm
index 0f5c3388a1..4add7e7c69 100644
--- a/guix/scripts/home.scm
+++ b/guix/scripts/home.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -143,6 +144,11 @@ Some ACTIONS support additional ARGS.\n"))
                          use BACKEND for 'extension-graph' and 'shepherd-graph'"))
   (newline)
   (display (G_ "
+  -I, --list-installed[=REGEXP]
+                         for 'describe' or 'list-generations', list installed
+                         packages matching REGEXP"))
+  (newline)
+  (display (G_ "
   -h, --help             display this help and exit"))
   (display (G_ "
   -V, --version          display version information and exit"))
@@ -183,6 +189,9 @@ Some ACTIONS support additional ARGS.\n"))
          (option '("graph-backend") #t #f
                  (lambda (opt name arg result)
                    (alist-cons 'graph-backend arg result)))
+         (option '(#\I "list-installed") #f #t
+                 (lambda (opt name arg result)
+                   (alist-cons 'list-installed (or arg "") result)))
 
          ;; Container options.
          (option '(#\N "network") #f #f
@@ -569,17 +578,20 @@ Run @command{guix home reconfigure ~a/home-configuration.scm} to effectively
 deploy the home environment described by these files.\n")
                              destination))))
     ((describe)
-     (match (generation-number %guix-home)
-       (0
-        (leave (G_ "no home environment generation, nothing to describe~%")))
-       (generation
-        (display-home-environment-generation generation))))
+     (let ((list-installed-regex (assoc-ref opts 'list-installed)))
+       (match (generation-number %guix-home)
+         (0
+          (leave (G_ "no home environment generation, nothing to describe~%")))
+         (generation
+          (display-home-environment-generation
+           generation #:list-installed-regex list-installed-regex)))))
     ((list-generations)
-     (let ((pattern (match args
+     (let ((list-installed-regex (assoc-ref opts 'list-installed))
+           (pattern (match args
                       (() #f)
                       ((pattern) pattern)
                       (x (leave (G_ "wrong number of arguments~%"))))))
-       (list-generations pattern)))
+       (list-generations pattern #:list-installed-regex list-installed-regex)))
     ((switch-generation)
      (let ((pattern (match args
                       ((pattern) pattern)
@@ -748,9 +760,11 @@ description matches REGEXPS sorted by relevance, and their score."
 
 (define* (display-home-environment-generation
           number
-          #:optional (profile %guix-home))
-  "Display a summary of home-environment generation NUMBER in a
-human-readable format."
+          #:optional (profile %guix-home)
+          #:key (list-installed-regex #f))
+  "Display a summary of home-environment generation NUMBER in a human-readable
+format.  List packages in that home environment that match
+LIST-INSTALLED-REGEX."
   (define (display-channel channel)
     (format #t     "    ~a:~%" (channel-name channel))
     (format #t (G_ "      repository URL: ~a~%") (channel-url channel))
@@ -782,24 +796,36 @@ human-readable format."
         (format #t (G_ "  configuration file: ~a~%")
                 (if (supports-hyperlinks?)
                     (file-hyperlink config-file)
-                    config-file))))))
-
-(define* (list-generations pattern #:optional (profile %guix-home))
-  "Display in a human-readable format all the home environment
-generations matching PATTERN, a string.  When PATTERN is #f, display
-all the home environment generations."
+                    config-file)))
+      (when list-installed-regex
+        (format #t (G_ "  packages:\n"))
+        (pretty-print-table (list-installed
+                             list-installed-regex
+                             (list (string-append generation "/profile")))
+                            #:left-pad 4)))))
+
+(define* (list-generations pattern #:optional (profile %guix-home)
+                           #:key (list-installed-regex #f))
+  "Display in a human-readable format all the home environment generations
+matching PATTERN, a string.  When PATTERN is #f, display all the home
+environment generations.  List installed packages that match
+LIST-INSTALLED-REGEX."
   (cond ((not (file-exists? profile))             ; XXX: race condition
          (raise (condition (&profile-not-found-error
                             (profile profile)))))
         ((not pattern)
-         (for-each display-home-environment-generation (profile-generations profile)))
+         (for-each (cut display-home-environment-generation <>
+                        #:list-installed-regex list-installed-regex)
+                   (profile-generations profile)))
         ((matching-generations pattern profile)
          =>
          (lambda (numbers)
            (if (null-list? numbers)
                (exit 1)
-               (leave-on-EPIPE
-                (for-each display-home-environment-generation numbers)))))))
+               (leave-on-EPIPE (for-each
+                                (cut display-home-environment-generation <>
+                                     #:list-installed-regex list-installed-regex)
+                                numbers)))))))
 
 
 ;;;
diff --git a/guix/scripts/import/texlive.scm b/guix/scripts/import/texlive.scm
index c5dcc07ea1..203386e31c 100644
--- a/guix/scripts/import/texlive.scm
+++ b/guix/scripts/import/texlive.scm
@@ -22,11 +22,13 @@
   #:use-module (guix utils)
   #:use-module (guix scripts)
   #:use-module (guix import texlive)
+  #:use-module (guix import utils)
   #:use-module (guix scripts import)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-11)
   #:use-module (srfi srfi-37)
   #:use-module (srfi srfi-41)
+  #:use-module (srfi srfi-71)
   #:use-module (ice-9 match)
   #:use-module (ice-9 format)
   #:export (guix-import-texlive))
@@ -58,6 +60,9 @@ Import and convert the Texlive package for PACKAGE-NAME.\n"))
          (option '(#\V "version") #f #f
                  (lambda args
                    (show-version-and-exit "guix import texlive")))
+         (option '(#\r "recursive") #f #f
+                 (lambda (opt name arg result)
+                   (alist-cons 'recursive #t result)))
          %standard-import-options))
 
 
@@ -78,12 +83,20 @@ Import and convert the Texlive package for PACKAGE-NAME.\n"))
                             (_ #f))
                            (reverse opts))))
     (match args
-      ((name)
-       (let ((sexp (texlive->guix-package name)))
-         (unless sexp
-           (leave (G_ "failed to import package '~a'~%")
-                  name))
-         sexp))
+      ((spec)
+       (let ((name version (package-name->name+version spec)))
+         (if (assoc-ref opts 'recursive)
+             ;; Recursive import
+             (with-error-handling
+               (map package->definition
+                    (filter identity (texlive-recursive-import name
+                                                               #:version version))))
+             ;; Single import
+             (let ((sexp (texlive->guix-package name #:version version)))
+               (unless sexp
+                 (leave (G_ "failed to download description for package '~a'~%")
+                        name))
+               sexp))))
       (()
        (leave (G_ "too few arguments~%")))
       ((many ...)
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 99a6cfaa29..7d92598efa 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2020 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2018 Steve Sprang <scs@stevesprang.com>
 ;;; Copyright © 2022 Josselin Poiret <dev@jpoiret.xyz>
+;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -67,6 +68,7 @@
             delete-generations
             delete-matching-generations
             guix-package
+            list-installed
 
             search-path-environment-variables
             manifest-entry-version-prefix
@@ -773,6 +775,22 @@ doesn't need it."
 
   (add-indirect-root store absolute))
 
+(define (list-installed regexp profiles)
+  "Write to the current output port the list of packages matching REGEXP in
+PROFILES."
+  (let* ((regexp    (and regexp (make-regexp* regexp regexp/icase)))
+         (manifest  (concatenate-manifests
+                     (map profile-manifest profiles)))
+         (installed (manifest-entries manifest)))
+    (leave-on-EPIPE
+     (let ((rows (filter-map
+                  (match-lambda
+                    (($ <manifest-entry> name version output path _)
+                     (and (regexp-exec regexp name)
+                          (list name (or version "?") output path))))
+                  installed)))
+       rows))))
+
 
 ;;;
 ;;; Queries and actions.
@@ -824,19 +842,8 @@ processed, #f otherwise."
        #t)
 
       (('list-installed regexp)
-       (let* ((regexp    (and regexp (make-regexp* regexp regexp/icase)))
-              (manifest  (concatenate-manifests
-                          (map profile-manifest profiles)))
-              (installed (manifest-entries manifest)))
-         (leave-on-EPIPE
-          (let ((rows (filter-map
-                       (match-lambda
-                         (($ <manifest-entry> name version output path _)
-                          (and (regexp-exec regexp name)
-                               (list name (or version "?") output path))))
-                       installed)))
-            ;; Show most recently installed packages last.
-            (pretty-print-table (reverse rows)))))
+       ;; Show most recently installed packages last.
+       (pretty-print-table (reverse (list-installed regexp profiles)))
        #t)
 
       (('list-available regexp)
diff --git a/guix/scripts/shell.scm b/guix/scripts/shell.scm
index 004ed7af2e..c115a00320 100644
--- a/guix/scripts/shell.scm
+++ b/guix/scripts/shell.scm
@@ -390,6 +390,11 @@ return #f and #f."
        ;; If the user already specified a profile, there's nothing more to
        ;; cache.
        (values #f #f))
+      ((('export-manifest? . #t) . _)
+       ;; When exporting a manifest, compute it anew so that '-D' packages
+       ;; lead to 'package-development-manifest' expressions rather than an
+       ;; expanded list of inputs.
+       (values #f #f))
       ((('system . system) . rest)
        (loop rest system file specs))
       ((_ . rest) (loop rest system file specs)))))
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index b9084a401c..bfde0a88ca 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -50,7 +50,8 @@
   #:use-module (guix channels)
   #:use-module (guix scripts build)
   #:autoload   (guix scripts package) (delete-generations
-                                       delete-matching-generations)
+                                       delete-matching-generations
+                                       list-installed)
   #:autoload   (guix scripts pull) (channel-commit-hyperlink)
   #:autoload   (guix graph) (export-graph node-type
                              graph-backend-name lookup-backend)
@@ -480,8 +481,10 @@ list of services."
 ;;;
 
 (define* (display-system-generation number
-                                    #:optional (profile %system-profile))
-  "Display a summary of system generation NUMBER in a human-readable format."
+                                    #:optional (profile %system-profile)
+                                    #:key (list-installed-regex #f))
+  "Display a summary of system generation NUMBER in a human-readable format.
+List packages in that system that match LIST-INSTALLED-REGEX."
   (define (display-channel channel)
     (format #t     "    ~a:~%" (channel-name channel))
     (format #t (G_ "      repository URL: ~a~%") (channel-url channel))
@@ -544,23 +547,35 @@ list of services."
         (format #t (G_ "  configuration file: ~a~%")
                 (if (supports-hyperlinks?)
                     (file-hyperlink config-file)
-                    config-file))))))
-
-(define* (list-generations pattern #:optional (profile %system-profile))
+                    config-file)))
+      (when list-installed-regex
+        (format #t (G_ "  packages:\n"))
+        (pretty-print-table (list-installed
+                             list-installed-regex
+                             (list (string-append generation "/profile")))
+                            #:left-pad 4)))))
+
+(define* (list-generations pattern #:optional (profile %system-profile)
+                           #:key (list-installed-regex #f))
   "Display in a human-readable format all the system generations matching
-PATTERN, a string.  When PATTERN is #f, display all the system generations."
+PATTERN, a string.  When PATTERN is #f, display all the system generations.
+List installed packages that match LIST-INSTALLED-REGEX."
   (cond ((not (file-exists? profile))             ; XXX: race condition
          (raise (condition (&profile-not-found-error
                             (profile profile)))))
         ((not pattern)
-         (for-each display-system-generation (profile-generations profile)))
+         (for-each (cut display-system-generation <>
+                        #:list-installed-regex list-installed-regex)
+                   (profile-generations profile)))
         ((matching-generations pattern profile)
          =>
          (lambda (numbers)
            (if (null-list? numbers)
                (exit 1)
                (leave-on-EPIPE
-                (for-each display-system-generation numbers)))))))
+                (for-each (cut display-system-generation <>
+                               #:list-installed-regex list-installed-regex)
+                          numbers)))))))
 
 
 ;;;
@@ -1032,6 +1047,11 @@ Some ACTIONS support additional ARGS.\n"))
                          use BACKEND for 'extension-graphs' and 'shepherd-graph'"))
   (newline)
   (display (G_ "
+  -I, --list-installed[=REGEXP]
+                         for 'describe' and 'list-generations', list installed
+                         packages matching REGEXP"))
+  (newline)
+  (display (G_ "
   -h, --help             display this help and exit"))
   (display (G_ "
   -V, --version          display version information and exit"))
@@ -1135,6 +1155,9 @@ Some ACTIONS support additional ARGS.\n"))
          (option '("graph-backend") #t #f
                  (lambda (opt name arg result)
                    (alist-cons 'graph-backend arg result)))
+         (option '(#\I "list-installed") #f #t
+                 (lambda (opt name arg result)
+                   (alist-cons 'list-installed (or arg "") result)))
          %standard-build-options))
 
 (define %default-options
@@ -1322,25 +1345,29 @@ argument list and OPTS is the option alist."
     ;; The following commands do not need to use the store, and they do not need
     ;; an operating system configuration file.
     ((list-generations)
-     (let ((pattern (match args
+     (let ((list-installed-regex (assoc-ref opts 'list-installed))
+           (pattern (match args
                       (() #f)
                       ((pattern) pattern)
                       (x (leave (G_ "wrong number of arguments~%"))))))
-       (list-generations pattern)))
+       (list-generations pattern #:list-installed-regex list-installed-regex)))
     ((describe)
      ;; Describe the running system, which is not necessarily the current
      ;; generation.  /run/current-system might point to
      ;; /var/guix/profiles/system-N-link, or it might point directly to
      ;; /gnu/store/…-system.  Try both.
-     (match (generation-number "/run/current-system" %system-profile)
-       (0
-        (match (generation-number %system-profile)
-          (0
-           (leave (G_ "no system generation, nothing to describe~%")))
-          (generation
-           (display-system-generation generation))))
-       (generation
-        (display-system-generation generation))))
+     (let ((list-installed-regex (assoc-ref opts 'list-installed)))
+       (match (generation-number "/run/current-system" %system-profile)
+         (0
+          (match (generation-number %system-profile)
+            (0
+             (leave (G_ "no system generation, nothing to describe~%")))
+            (generation
+             (display-system-generation
+              generation #:list-installed-regex list-installed-regex))))
+         (generation
+          (display-system-generation
+           generation #:list-installed-regex list-installed-regex)))))
     ((search)
      (apply (resolve-subcommand "search") args))
     ((edit)
diff --git a/guix/upstream.scm b/guix/upstream.scm
index 9b49d1641f..cbfd1aa609 100644
--- a/guix/upstream.scm
+++ b/guix/upstream.scm
@@ -251,13 +251,17 @@ correspond to the same version."
                      #:warn warn-about-load-error)))
 
 (define %updaters
-  ;; The list of publically-known updaters.
-  (delay (fold-module-public-variables (lambda (obj result)
-                                         (if (upstream-updater? obj)
-                                             (cons obj result)
-                                             result))
-                                       '()
-                                       (importer-modules))))
+  ;; The list of publically-known updaters, alphabetically sorted.
+  (delay
+    (sort (fold-module-public-variables (lambda (obj result)
+                                          (if (upstream-updater? obj)
+                                              (cons obj result)
+                                              result))
+                                        '()
+                                        (importer-modules))
+          (lambda (updater1 updater2)
+            (string<? (symbol->string (upstream-updater-name updater1))
+                      (symbol->string (upstream-updater-name updater2)))))))
 
 ;; Tests need to mock this variable so mark it as "non-declarative".
 (set! %updaters %updaters)
diff --git a/guix/utils.scm b/guix/utils.scm
index 745da98a79..329ef62dde 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -1124,11 +1124,11 @@ according to THRESHOLD, then #f is returned."
 ;;; Prettified output.
 ;;;
 
-(define* (pretty-print-table rows #:key (max-column-width 20))
+(define* (pretty-print-table rows #:key (max-column-width 20) (left-pad 0))
   "Print ROWS in neat columns.  All rows should be lists of strings and each
 row should have the same length.  The columns are separated by a tab
 character, and aligned using spaces.  The maximum width of each column is
-bound by MAX-COLUMN-WIDTH."
+bound by MAX-COLUMN-WIDTH.  Each row is prefixed with LEFT-PAD spaces."
   (let* ((number-of-columns-to-pad (if (null? rows)
                                        0
                                        (1- (length (first rows)))))
@@ -1143,7 +1143,7 @@ bound by MAX-COLUMN-WIDTH."
                               (map (cut min <> max-column-width)
                                    column-widths)))
          (fmt (string-append (string-join column-formats "\t") "\t~a")))
-    (for-each (cut format #t "~?~%" fmt <>) rows)))
+    (for-each (cut format #t "~v_~?~%" left-pad fmt <>) rows)))
 
 ;;; Local Variables:
 ;;; eval: (put 'call-with-progress-reporter 'scheme-indent-function 1)
diff --git a/tests/guix-home.sh b/tests/guix-home.sh
index 8a7048a9ca..1d1acbfd6e 100644
--- a/tests/guix-home.sh
+++ b/tests/guix-home.sh
@@ -79,9 +79,15 @@ trap 'chmod -Rf +w "$test_directory"; rm -rf "$test_directory"' EXIT
              (guix-defaults? #t)
              (bashrc (list (local-file "dot-bashrc")))))
 
+   (simple-service 'add-environment-variable
+                   home-environment-variables-service-type
+                   '(("TODAY" . "26 messidor")))
+
    (simple-service 'home-bash-service-extension-test
                    home-bash-service-type
                    (home-bash-extension
+                    (environment-variables
+                      '(("PS1" . "$GUIX_ENVIRONMENT λ ")))
                     (bashrc
                      (list
                       (plain-file
@@ -138,6 +144,8 @@ EOF
 # dot-bashrc test file for guix home
 # the content of bashrc-test-config.sh"
     grep -q "the content of ~/.config/test.conf" "${HOME}/.config/test.conf"
+    grep '^export PS1="\$GUIX_ENVIRONMENT λ "$' "${HOME}/.bash_profile"
+    ( . "${HOME}/.guix-home/setup-environment"; test "$TODAY" = "26 messidor" )
 
     # This one should still be here.
     grep "stay around" "$HOME/.config/random-file"