summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2021-05-15 22:55:24 +0200
committerLudovic Courtès <ludo@gnu.org>2021-05-15 22:55:24 +0200
commit25487c3fe6a41dd62f6e53f256392224a3be2a08 (patch)
tree1051a1716d962ba0a7bbbf9dc8f7b67aa2674400 /gnu
parent4a9597e4516ec5ca58df3e007fcd5ef1d3fd2e54 (diff)
parent46eac03e720e9b21d225e2ec1c41299c09202d18 (diff)
downloadguix-25487c3fe6a41dd62f6e53f256392224a3be2a08.tar.gz
Merge branch 'master' into core-updates
Diffstat (limited to 'gnu')
-rw-r--r--gnu/local.mk3
-rw-r--r--gnu/packages/admin.scm12
-rw-r--r--gnu/packages/audio.scm6
-rw-r--r--gnu/packages/backup.scm4
-rw-r--r--gnu/packages/bdw-gc.scm11
-rw-r--r--gnu/packages/bioinformatics.scm8
-rw-r--r--gnu/packages/boost.scm3
-rw-r--r--gnu/packages/build-tools.scm15
-rw-r--r--gnu/packages/ccache.scm8
-rw-r--r--gnu/packages/chromium.scm4
-rw-r--r--gnu/packages/compression.scm37
-rw-r--r--gnu/packages/crates-io.scm259
-rw-r--r--gnu/packages/cups.scm15
-rw-r--r--gnu/packages/databases.scm24
-rw-r--r--gnu/packages/disk.scm51
-rw-r--r--gnu/packages/dns.scm4
-rw-r--r--gnu/packages/emacs-xyz.scm20
-rw-r--r--gnu/packages/embedded.scm10
-rw-r--r--gnu/packages/file-systems.scm237
-rw-r--r--gnu/packages/freedesktop.scm64
-rw-r--r--gnu/packages/game-development.scm4
-rw-r--r--gnu/packages/games.scm16
-rw-r--r--gnu/packages/gnome.scm7
-rw-r--r--gnu/packages/gnuzilla.scm11
-rw-r--r--gnu/packages/guile-xyz.scm81
-rw-r--r--gnu/packages/guile.scm38
-rw-r--r--gnu/packages/linux.scm27
-rw-r--r--gnu/packages/lisp-xyz.scm143
-rw-r--r--gnu/packages/networking.scm4
-rw-r--r--gnu/packages/ntp.scm6
-rw-r--r--gnu/packages/onc-rpc.scm7
-rw-r--r--gnu/packages/package-management.scm14
-rw-r--r--gnu/packages/patches/giara-fix-login.patch27
-rw-r--r--gnu/packages/patches/hplip-remove-imageprocessor.patch245
-rw-r--r--gnu/packages/patches/snappy-add-inline-for-GCC.patch67
-rw-r--r--gnu/packages/pdf.scm4
-rw-r--r--gnu/packages/python-web.scm4
-rw-r--r--gnu/packages/python-xyz.scm47
-rw-r--r--gnu/packages/racket.scm36
-rw-r--r--gnu/packages/radio.scm14
-rw-r--r--gnu/packages/ruby.scm61
-rw-r--r--gnu/packages/rust-apps.scm9
-rw-r--r--gnu/packages/shells.scm681
-rw-r--r--gnu/packages/spice.scm26
-rw-r--r--gnu/packages/syndication.scm156
-rw-r--r--gnu/packages/terminals.scm6
-rw-r--r--gnu/packages/tor.scm4
-rw-r--r--gnu/packages/upnp.scm4
-rw-r--r--gnu/packages/version-control.scm123
-rw-r--r--gnu/packages/video.scm12
-rw-r--r--gnu/packages/vnc.scm108
-rw-r--r--gnu/packages/web.scm31
-rw-r--r--gnu/packages/webkit.scm4
-rw-r--r--gnu/services.scm90
-rw-r--r--gnu/services/spice.scm45
-rw-r--r--gnu/system.scm36
-rw-r--r--gnu/system/examples/vm-image.tmpl26
-rw-r--r--gnu/system/locale.scm2
-rw-r--r--gnu/tests/linux-modules.scm80
59 files changed, 2175 insertions, 926 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 0e1e83b3d5..d8ae0bd517 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1087,6 +1087,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/ghostscript-no-header-id.patch		\
   %D%/packages/patches/ghostscript-no-header-uuid.patch		\
   %D%/packages/patches/ghostscript-no-header-creationdate.patch \
+  %D%/packages/patches/giara-fix-login.patch                      \
   %D%/packages/patches/glib-appinfo-watch.patch			\
   %D%/packages/patches/glib-skip-failing-test.patch		\
   %D%/packages/patches/glibc-CVE-2018-11236.patch		\
@@ -1199,7 +1200,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/hubbub-sort-entities.patch		\
   %D%/packages/patches/hurd-cross.patch				\
   %D%/packages/patches/hurd-xattr.patch				\
-  %D%/packages/patches/hplip-remove-imageprocessor.patch	\
   %D%/packages/patches/hydra-disable-darcs-test.patch		\
   %D%/packages/patches/icecat-makeicecat.patch			\
   %D%/packages/patches/icecat-avoid-bundled-libraries.patch	\
@@ -1660,6 +1660,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/slim-login.patch				\
   %D%/packages/patches/slim-display.patch			\
   %D%/packages/patches/snappy-add-O2-flag-in-CmakeLists.txt.patch	\
+  %D%/packages/patches/snappy-add-inline-for-GCC.patch		\
   %D%/packages/patches/sphinxbase-fix-doxygen.patch		\
   %D%/packages/patches/sssd-fix-samba.patch			\
   %D%/packages/patches/sssd-system-directories.patch		\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 2cb093b471..60a624fbd1 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -1601,7 +1601,7 @@ system administrator.")
 (define-public sudo
   (package
     (name "sudo")
-    (version "1.9.6p1")
+    (version "1.9.7")
     (source (origin
               (method url-fetch)
               (uri
@@ -1611,7 +1611,7 @@ system administrator.")
                                     version ".tar.gz")))
               (sha256
                (base32
-                "146alf6cwnzjcckia8m0ibcj9ram2z469f5z7v6vkzpsb30cvsd9"))
+                "0jg5vf6hc0j2bh4vqwsb4jybhryrsh4kz97r1salvf4rcqnprgib"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -4092,7 +4092,7 @@ Logitech Unifying Receiver.")
   (package
     (name "lynis")
     ;; Also update the ‘lynis-sdk’ input to the commit matching this release.
-    (version "3.0.3")
+    (version "3.0.4")
     (source
      (origin
        (method git-fetch)
@@ -4101,7 +4101,7 @@ Logitech Unifying Receiver.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0sdjh2f1563qalp740vkaaxdxl56ny98h168cggpm10h2yq366gr"))
+        (base32 "1i556d8xpas6k5k3ad0xvc6ihxnw27nzrjkf14759jkcqrbpb4gy"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -4118,10 +4118,10 @@ Logitech Unifying Receiver.")
            (method git-fetch)
            (uri (git-reference
                  (url "https://github.com/CISOfy/lynis-sdk")
-                 (commit "ea7a39774fbd71113a1955cf1a4937b489935174")))
+                 (commit "a4087770b7ee794901c5135673e006e8f84bfd3d")))
            (file-name (git-file-name "lynis-sdk" version))
            (sha256
-            (base32 "0q5j2myshjkz9qwvcg8n7c33yw2cp80yvzhckd60qmzabv4g4qb5"))))))
+            (base32 "00wikqydhrjcn0ampgr4qjg30y12as1gm23z94bs72ff035lhcpw"))))))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 2c003a1359..6ccecef3c0 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -2718,15 +2718,15 @@ different audio devices such as ALSA or PulseAudio.")
 (define-public qjackctl
   (package
     (name "qjackctl")
-    (version "0.9.1")
+    (version "0.9.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/qjackctl/qjackctl/"
                                   version "/qjackctl-" version ".tar.gz"))
               (sha256
                (base32
-                "0m72kglwwvn91dxnka4lx765p3r0bcpqw251svymxr2wxjc4rgjg"))))
-    (build-system gnu-build-system)
+                "065x66rr1mb2bkqr88l50rcn5c8rsiq4hp5hrlyqqg46371gzhp9"))))
+    (build-system cmake-build-system)
     (arguments
      '(#:tests? #f))                    ; no check target
     (inputs
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 335649bfff..adbc735201 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -1096,14 +1096,14 @@ backup.")
 (define-public disarchive
   (package
     (name "disarchive")
-    (version "0.2.0")
+    (version "0.2.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://files.ngyro.com/disarchive/"
                                   "disarchive-" version ".tar.gz"))
               (sha256
                (base32
-                "12d4r4i7vi8fxilr2aww6kzq56jax5ymhjfm3cpgx26vj4c70kb6"))))
+                "1jypk0gdwxqbqxiblww863nzq0kwnc676q68j32sprqd7ilnq02s"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("autoconf" ,autoconf)
diff --git a/gnu/packages/bdw-gc.scm b/gnu/packages/bdw-gc.scm
index 0d82889bac..52725238b4 100644
--- a/gnu/packages/bdw-gc.scm
+++ b/gnu/packages/bdw-gc.scm
@@ -89,6 +89,17 @@ C or C++ programs, though that is not its primary goal.")
 
    (license (x11-style (string-append home-page "license.txt")))))
 
+(define-public libgc/disable-munmap
+  ;; TODO: Use '--disable-munmap' by default on next rebuild cycle.
+  (package/inherit libgc
+    (arguments
+     ;; Work around <https://github.com/ivmai/bdwgc/issues/353>.
+     (substitute-keyword-arguments (package-arguments libgc)
+       ((#:configure-flags flags ''())
+        `(cons "--disable-munmap" ,flags))))
+    (properties `((hidden? . #t)
+                  ,@(package-properties libgc)))))
+
 ;; TODO: Add a static output in libgc in the next rebuild cycle.
 (define-public libgc/static-libs
   (package/inherit
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 0d09a98dc5..36a7038b82 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -7554,14 +7554,18 @@ experience substantial biological insertions and deletions.")
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin")))
+                    (bin (string-append out "/bin"))
+                    (scripts (find-files "." "prinseq.*.pl")))
+               (substitute* scripts
+                 (("\"perl -pe")
+                  (string-append "\"" (which "perl") " -pe")))
                (for-each (lambda (file)
                            (chmod file #o555)
                            (install-file file bin)
                            (wrap-script (string-append bin "/" (basename file))
                                         `("PERL5LIB" ":" prefix
                                           (,(getenv "PERL5LIB")))))
-                         (find-files "." "prinseq.*.pl"))))))))
+                         scripts)))))))
     (inputs
      `(("guile" ,guile-3.0)             ; for wrapper scripts
        ("perl" ,perl)
diff --git a/gnu/packages/boost.scm b/gnu/packages/boost.scm
index 33f05cff15..c6cf452f09 100644
--- a/gnu/packages/boost.scm
+++ b/gnu/packages/boost.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;; Copyright © 2021 Franck Pérignon <franck.perignon@univ-grenoble-alpes.fr>
+;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -68,7 +69,7 @@
     (version "1.75.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://dl.bintray.com/boostorg/release/"
+              (uri (string-append "https://boostorg.jfrog.io/artifactory/main/release/"
                                   version "/source/boost_"
                                   (version-with-underscores version) ".tar.bz2"))
               ; Should be included in next Boost update
diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm
index 9a18b77ff0..88247cc911 100644
--- a/gnu/packages/build-tools.scm
+++ b/gnu/packages/build-tools.scm
@@ -218,8 +218,7 @@ programs and other files depend.")
                     (add-before 'configure 'set-build-environment
                       (lambda _
                         (setenv "CC" "gcc") (setenv "CXX" "g++")
-                        (setenv "AR" "ar")
-                        #t))
+                        (setenv "AR" "ar")))
                     (replace 'configure
                       (lambda _
                         (invoke "python" "build/gen.py"
@@ -234,16 +233,15 @@ programs and other files depend.")
                                     (string-append
                                      "#define LAST_COMMIT_POSITION_NUM ~a\n"
                                      "#define LAST_COMMIT_POSITION \"~a (~a)\"\n")
-                                    ,revision ,revision ,(string-take commit 8))
-                            #t))))
+                                    ,revision ,revision ,(string-take commit 8))))))
                     (replace 'build
                       (lambda _
                         (invoke "ninja" "-C" "out" "gn"
                                 "-j" (number->string (parallel-job-count)))))
                     (replace 'check
-                      (lambda* (#:key (tests? #t) #:allow-other-keys)
+                      (lambda* (#:key tests? #:allow-other-keys)
                         (if tests?
-                            (lambda ()
+                            (begin
                               (invoke "ninja" "-C" "out" "gn_unittests"
                                       "-j" (number->string (parallel-job-count)))
                               (invoke "./out/gn_unittests"))
@@ -251,11 +249,10 @@ programs and other files depend.")
                     (replace 'install
                       (lambda* (#:key outputs #:allow-other-keys)
                         (let ((out (assoc-ref outputs "out")))
-                          (install-file "out/gn" (string-append out "/bin"))
-                          #t))))))
+                          (install-file "out/gn" (string-append out "/bin"))))))))
       (native-inputs
        `(("ninja" ,ninja)
-         ("python" ,python-2)))
+         ("python" ,python-wrapper)))
       (synopsis "Generate Ninja build files")
       (description
        "GN is a tool that collects information about a project from @file{.gn}
diff --git a/gnu/packages/ccache.scm b/gnu/packages/ccache.scm
index 112f613c88..4ff0fb2ae0 100644
--- a/gnu/packages/ccache.scm
+++ b/gnu/packages/ccache.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2016, 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -31,14 +31,14 @@
 (define-public ccache
   (package
     (name "ccache")
-    (version "4.2")
+    (version "4.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/ccache/ccache/releases/download/v"
                            version "/ccache-" version ".tar.xz"))
        (sha256
-        (base32 "0kx9ggbbm899zwyyxvm4dgzn1b95zi1niz0l734pi5y3i0cb251g"))))
+        (base32 "1d4995lkmqshzfxlmbyn101m1rxs02yb8dgh4rl30p26hhhhyjjh"))))
     (build-system cmake-build-system)
     (native-inputs `(("perl" ,perl)     ; for test/run
                      ("which" ,(@ (gnu packages base) which))))
@@ -52,8 +52,8 @@
              (substitute* '("unittest/test_hashutil.cpp" "test/suites/base.bash")
                (("#!/bin/sh") (string-append "#!" (which "sh"))))
              #t))
-         ;; tests require a writable HOME
          (add-before 'check 'set-home
+           ;; Tests require a writable HOME.
            (lambda _
              (setenv "HOME" (getenv "TMPDIR"))
 	     #t)))))
diff --git a/gnu/packages/chromium.scm b/gnu/packages/chromium.scm
index ea7b242788..f06767f305 100644
--- a/gnu/packages/chromium.scm
+++ b/gnu/packages/chromium.scm
@@ -320,7 +320,7 @@
                   (string-append "ungoogled-chromium-" category "-" name))))
     (sha256 (base32 hash))))
 
-(define %chromium-version "90.0.4430.93")
+(define %chromium-version "90.0.4430.212")
 (define %debian-revision "debian/90.0.4430.85-1")
 (define %ungoogled-revision "90.0.4430.85-1-11-g3184907")
 
@@ -481,7 +481,7 @@
                                   %chromium-version ".tar.xz"))
               (sha256
                (base32
-                "0zimr975vp0v12zz1nqjwag3f0q147wrmdhpzgi4yf089rgwfbjk"))
+                "17nmhrkl81qqvzbh861k2mmifncx4wg1mv1fmn52f8gzn461vqdb"))
               (modules '((guix build utils)))
               (snippet (force ungoogled-chromium-snippet))))
     (build-system gnu-build-system)
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 05e442a971..11fc339ee5 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -67,6 +67,7 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages benchmark)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages curl)
@@ -1001,7 +1002,7 @@ tarballs.")
 (define-public libjcat
   (package
     (name "libjcat")
-    (version "0.1.6")
+    (version "0.1.7")
     (source
      (origin
        (method git-fetch)
@@ -1011,7 +1012,7 @@ tarballs.")
          (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1a2z34m8611xvna9kwch8ralxx7c9mk4rm9vrxx7p9hr8sbqbsaz"))))
+        (base32 "110c8h3p7m4ibrfvgja592z7j5h88qqanllxsvmxkjz3b129i02r"))))
     (build-system meson-build-system)
     (native-inputs
      `(("gobject-introspection" ,gobject-introspection)
@@ -1109,7 +1110,7 @@ well as bzip2.")
 (define-public snappy
   (package
     (name "snappy")
-    (version "1.1.8")
+    (version "1.1.9")
     (source
      (origin
        (method git-fetch)
@@ -1118,11 +1119,35 @@ well as bzip2.")
               (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1j0kslq2dvxgkcxl1gakhvsa731yrcvcaipcp5k8k7ayicvkv9jv"))
-       (patches (search-patches "snappy-add-O2-flag-in-CmakeLists.txt.patch"))))
+        (base32 "03zz56h79z0sgvi5sangjqn9dahhzvf645v26n1y0gwmfbmsax95"))
+       (patches
+        (search-patches "snappy-add-O2-flag-in-CmakeLists.txt.patch"
+                        "snappy-add-inline-for-GCC.patch"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
+     `(#:configure-flags
+       (list "-DBUILD_SHARED_LIBS=ON"
+             ;; These would be installed alongside Snappy otherwise.
+             "-DBENCHMARK_ENABLE_INSTALL=OFF"
+             "-DINSTALL_GTEST=OFF")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'unpack-third_party-subprojects
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "third_party"
+               (for-each (lambda (subproject)
+                           (let* ((input (string-append subproject "-source"))
+                                  (source (assoc-ref inputs input)))
+                             (with-directory-excursion subproject
+                               ;; Take advantage of the coincidence that both
+                               ;; use GIT-FETCH, which creates a directory.
+                               (copy-recursively source "."))))
+                         (list "benchmark"
+                               "googletest"))
+               #;punt))))))
+    (native-inputs
+     `(("benchmark-source" ,(package-source benchmark))
+       ("googletest-source" ,(package-source googletest))))
     (home-page "https://github.com/google/snappy")
     (synopsis "Fast compressor/decompressor")
     (description "Snappy is a compression/decompression library.  It does not
diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index 8a286738f8..c488a769f6 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -1581,17 +1581,17 @@ using AES-NI for high performance.")
      "This package provides a failure resistant deserialization derive.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-alacritty-terminal-0.12
+(define-public rust-alacritty-terminal-0.13
   (package
     (name "rust-alacritty-terminal")
-    (version "0.12.0")
+    (version "0.13.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "alacritty_terminal" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1q7sm7rm5yny4lka8w4vji2v2crkkbwj3y8l5qnq01qlwmkjmkfd"))))
+        (base32 "13f0pzy9jci57pmmvdd9qcbiycs2fsjqda4qgafxjm6s27sphdx7"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -2198,7 +2198,7 @@ ArrayVec and ArrayString.")
 (define-public rust-as-slice-0.1
   (package
     (name "rust-as-slice")
-    (version "0.1.4")
+    (version "0.1.5")
     (source
      (origin
        (method url-fetch)
@@ -2206,7 +2206,7 @@ ArrayVec and ArrayString.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1rmhdfj11va424163d6r79wbgf2043i2p37s59ky6x2v8wiiqkdv"))))
+         "1q3a9494ikaq38zjg5px5gwwrbdgnyj23b505224njlmwd4knh25"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -5538,23 +5538,24 @@ system calls.  Second, exposing the internal buffer allows the user to work
 with data in place, which avoids another copy.")
     (license license:gpl3)))
 
-(define-public rust-bugreport-0.3
+(define-public rust-bugreport-0.4
   (package
     (name "rust-bugreport")
-    (version "0.3.0")
+    (version "0.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "bugreport" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1n5f1nkqbc5yf9bckjap49pwnqnvdczm6x9y23caaghpgw0n4rqi"))))
+        (base32 "0gday6f2brqgzl12a0vf7fx1hh1mim6gdjxc6dfwk9v4i19pxsd0"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-snailquote" ,rust-snailquote-0.3)
-        ("rust-sys-info" ,rust-sys-info-0.7))))
+       (("rust-git-version" ,rust-git-version-0.3)
+        ("rust-shell-escape" ,rust-shell-escape-0.1)
+        ("rust-sys-info" ,rust-sys-info-0.9))))
     (home-page "https://github.com/sharkdp/bugreport")
     (synopsis "Collect system and environment information for bug reports")
     (description
@@ -5563,6 +5564,24 @@ automatically collect information about the system and the environment that
 users can send along with a bug report.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-bugreport-0.3
+  (package
+    (inherit rust-bugreport-0.4)
+    (name "rust-bugreport")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "bugreport" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1n5f1nkqbc5yf9bckjap49pwnqnvdczm6x9y23caaghpgw0n4rqi"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-snailquote" ,rust-snailquote-0.3)
+        ("rust-sys-info" ,rust-sys-info-0.7))))))
+
 (define-public rust-build-const-0.2
   (package
     (name "rust-build-const")
@@ -7737,6 +7756,25 @@ combinator.")
 and 1.0.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-common-path-1
+  (package
+    (name "rust-common-path")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "common-path" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "00firjly5xpb5hhmivnnhwakr1cwbqv8ckzyj0vbxczl89czg0i3"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://gitlab.com/pwoolcoc/common-path")
+    (synopsis "Find the common prefix between a set of paths")
+    (description
+     "Common path finds the common prefix between a set of paths.")
+    (license (list license:expat license:asl2.0))))
+
 ;; This package requires features which are unavailable
 ;; on the stable releases of Rust.
 (define-public rust-compiler-builtins-0.1
@@ -7924,14 +7962,14 @@ this to write Rust programs which can be customized by end users easily.")
 (define-public rust-console-0.14
   (package
     (name "rust-console")
-    (version "0.14.0")
+    (version "0.14.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "console" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1ajnr0rga4vya0fza12ighf3ffkm86w1rv8p5wf443s8nd30kj3w"))))
+        (base32 "0i8z1bdbv8is1lamd81jdsf4pa1ww2jl3h0yjdshc5mabd2fd4rr"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -12403,14 +12441,14 @@ programs.")
 (define-public rust-dyn-clone-1
   (package
     (name "rust-dyn-clone")
-    (version "1.0.2")
+    (version "1.0.4")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "dyn-clone" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "10idzzq2sad7dhrfhrhcx7yckzj8il2bzr16204683ryclxdqlsc"))))
+        (base32 "1kxb16nxiixn558gn82yaq2fl6271jay4rqkrw31lmnprjpjc9pf"))))
     (arguments
      `(#:skip-build? #t))
     (build-system cargo-build-system)
@@ -12632,7 +12670,7 @@ signing, and verification in pure Rust.")
 (define-public rust-either-1
   (package
     (name "rust-either")
-    (version "1.5.3")
+    (version "1.6.1")
     (source
      (origin
        (method url-fetch)
@@ -12641,7 +12679,7 @@ signing, and verification in pure Rust.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1qyz1b1acad6w0k5928jw5zaq900zhsk7p8dlcp4hh61w4f6n7xv"))))
+         "0mwl9vngqf5jvrhmhn9x60kr5hivxyjxbmby2pybncxfqhf4z3g7"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -15941,7 +15979,7 @@ API library @code{gdi32}.")
 (define-public rust-generic-array-0.14
   (package
     (name "rust-generic-array")
-    (version "0.14.2")
+    (version "0.14.4")
     (source
       (origin
         (method url-fetch)
@@ -15950,7 +15988,7 @@ API library @code{gdi32}.")
          (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "107r1fpm8zcab3lzci4x9par6ik8bra390c60rhxvnmz7dgnlx5c"))))
+          "05qqwm9v5asbil9z28wjkmpfvs1c5c99n8n9gwxis3d3r3n6c52h"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -15971,7 +16009,7 @@ API library @code{gdi32}.")
   (package
     (inherit rust-generic-array-0.14)
     (name "rust-generic-array")
-    (version "0.13.2")
+    (version "0.13.3")
     (source
      (origin
        (method url-fetch)
@@ -15980,7 +16018,7 @@ API library @code{gdi32}.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1kddwxpd58y807y1r3lijg7sw3gxm6nczl6wp57gamhv6mhygl8f"))))
+         "02g3zhqc086zmsb6kcmjs2fiprz8gq12g0xbm9g23215ydxfd5zp"))))
     (arguments
      `(#:cargo-inputs
        (("rust-serde" ,rust-serde-1)
@@ -15993,7 +16031,7 @@ API library @code{gdi32}.")
   (package
     (inherit rust-generic-array-0.13)
     (name "rust-generic-array")
-    (version "0.12.3")
+    (version "0.12.4")
     (source
      (origin
        (method url-fetch)
@@ -16002,7 +16040,7 @@ API library @code{gdi32}.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1v5jg7djicq34nbiv1dwaki71gkny002wyy9qfn3y0hfmrs053y6"))))))
+         "1gfpay78vijl9vrwl1k9v7fbvbhkhcmnrk4kfg9l6x24y4s9zpzz"))))))
 
 (define-public rust-generic-array-0.9
   (package
@@ -16462,6 +16500,55 @@ debugging format.")
 DWARF debugging format.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-git-version-0.3
+  (package
+    (name "rust-git-version")
+    (version "0.3.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "git-version" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1qj1rd19v8vg094b3fj0gy6ca53v93lhrl31wg1fs7g0y61qx4cl"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-git-version-macro" ,rust-git-version-macro-0.3)
+        ("rust-proc-macro-hack" ,rust-proc-macro-hack-0.5))))
+    (home-page "https://github.com/fusion-engineering/rust-git-version")
+    (synopsis "Embed git information in your code at compile-time")
+    (description
+     "This crates compiles the git version (tag name, or hash otherwise) and
+dirty state into your program.")
+    (license license:bsd-2)))
+
+(define-public rust-git-version-macro-0.3
+  (package
+    (name "rust-git-version-macro")
+    (version "0.3.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "git-version-macro" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0mynlf8sfaa4xx7qff0qgnr339fbf1svgr569yip067fzm97ma9l"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro-hack" ,rust-proc-macro-hack-0.5)
+        ("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/fusion-engineering/rust-git-version")
+    (synopsis "Internal macro crate for git-version")
+    (description
+     "This is an internal macro crate for git-version.")
+    (license license:bsd-2)))
+
 (define-public rust-git2-0.13
   (package
     (name "rust-git2")
@@ -16563,6 +16650,24 @@ reading and writing git repositories.")
         ("rust-thread-id" ,rust-thread-id-3)
         ("rust-time" ,rust-time-0.1))))))
 
+(define-public rust-gjson-0.7
+  (package
+    (name "rust-gjson")
+    (version "0.7.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "gjson" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0vhary4ha77scriaw6r4nv16ha9pfzirm84sjc240csqwb542p10"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/tidwall/gjson.rs")
+    (synopsis "JSON parser for Rust")
+    (description "Gjson is a JSON parser for Rust.")
+    (license license:expat)))
+
 (define-public rust-glium-0.25
   (package
     (name "rust-glium")
@@ -17644,8 +17749,36 @@ their key-value pairs in a user controllable order.")
        (("rust-bytes" ,rust-bytes-0.4)
         ("rust-http" ,rust-http-0.1))))))
 
+(define-public rust-heapless-0.6
+  (package
+    (name "rust-heapless")
+    (version "0.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "heapless" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "08il083hcffis6km4is24kf2j0cnqs0bzz2b196l495zkk9d8jv3"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-as-slice" ,rust-as-slice-0.1)
+        ("rust-generic-array" ,rust-generic-array-0.14)
+        ("rust-hash32" ,rust-hash32-0.1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-stable-deref-trait" ,rust-stable-deref-trait-1)
+        ("rust-ufmt-write" ,rust-ufmt-write-0.1))))
+    (home-page "https://github.com/japaric/heapless")
+    (synopsis "@code{statice} friendly data structures")
+    (description "This package provides @code{static} friendly data structures
+that don't require dynamic memory allocation.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-heapless-0.5
   (package
+    (inherit rust-heapless-0.6)
     (name "rust-heapless")
     (version "0.5.5")
     (source
@@ -17656,7 +17789,6 @@ their key-value pairs in a user controllable order.")
        (sha256
         (base32
          "1h1d6s1f9zn0rz2vkdn0b42kcnkmlpd90yhfyqqhpirv38ws5a3k"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-as-slice" ,rust-as-slice-0.1)
@@ -17667,12 +17799,7 @@ their key-value pairs in a user controllable order.")
         ("rust-ufmt-write" ,rust-ufmt-write-0.1))
        #:cargo-development-inputs
        (("rust-scoped-threadpool" ,rust-scoped-threadpool-0.1)
-        ("rust-ufmt" ,rust-ufmt-0.1))))
-    (home-page "https://github.com/japaric/heapless")
-    (synopsis "@code{statice} friendly data structures")
-    (description "This package provides @code{static} friendly data structures
-that don't require dynamic memory allocation.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-ufmt" ,rust-ufmt-0.1))))))
 
 (define-public rust-heapsize-0.4
   (package
@@ -41170,17 +41297,17 @@ syntax extension expansion.")
     (description "This package provides a backport of libsyntax.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-sys-info-0.7
+(define-public rust-sys-info-0.9
   (package
     (name "rust-sys-info")
-    (version "0.7.0")
+    (version "0.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "sys-info" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0facyh6hswp1i7airri8ly5kl6sv5bvkkd21vs51k2b3z22bvkz5"))))
+        (base32 "0fiqhnj1rk69rahz4077lzs8x72gv4zcyknqdg7k359k97pfrz1k"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -41193,6 +41320,19 @@ syntax extension expansion.")
      "This Rust crate gathers system information.")
     (license license:expat)))
 
+(define-public rust-sys-info-0.7
+  (package
+    (inherit rust-sys-info-0.9)
+    (name "rust-sys-info")
+    (version "0.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "sys-info" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0facyh6hswp1i7airri8ly5kl6sv5bvkkd21vs51k2b3z22bvkz5"))))))
+
 (define-public rust-sysctl-0.4
   (package
     (name "rust-sysctl")
@@ -41245,27 +41385,26 @@ syntax extension expansion.")
 (define-public rust-sysinfo-0.16
   (package
     (name "rust-sysinfo")
-    (version "0.16.1")
+    (version "0.16.5")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "sysinfo" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1rj3rdy1jd9la9a5xzwk0gcimln7qvzqf1sqwg9xi6cf0vvy453w"))))
+        (base32 "06x5kvd4glq35jjy23xj8p7nd64dk8g4kc0v9qdfhyr0y0792zjn"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-cc" ,rust-cc-1)
-        ("rust-cfg-if" ,rust-cfg-if-1)
-        ("rust-core-foundation-sys" ,rust-core-foundation-sys-0.8)
-        ("rust-doc-comment" ,rust-doc-comment-0.3)
-        ("rust-libc" ,rust-libc-0.2)
-        ("rust-ntapi" ,rust-ntapi-0.3)
-        ("rust-once-cell" ,rust-once-cell-1)
-        ("rust-rayon" ,rust-rayon-1)
-        ("rust-winapi" ,rust-winapi-0.3))))
+       (("rust-cfg-if" ,rust-cfg-if-1)
+         ("rust-core-foundation-sys" ,rust-core-foundation-sys-0.8)
+         ("rust-doc-comment" ,rust-doc-comment-0.3)
+         ("rust-libc" ,rust-libc-0.2)
+         ("rust-ntapi" ,rust-ntapi-0.3)
+         ("rust-once-cell" ,rust-once-cell-1)
+         ("rust-rayon" ,rust-rayon-1)
+         ("rust-winapi" ,rust-winapi-0.3))))
     (home-page "https://github.com/GuillaumeGomez/sysinfo")
     (synopsis "System handler to interact with processes")
     (description
@@ -48469,6 +48608,32 @@ WebAssembly binary files.")
      "Bindings for all Web APIs, a procedurally generated crate from WebIDL.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-webbrowser-0.5
+  (package
+    (name "rust-webbrowser")
+    (version "0.5.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "webbrowser" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "12hmi768mnpssfh9w61ys75v706jj3pcy4fliqq21dnnj1j1bbgc"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-web-sys" ,rust-web-sys-0.3)
+        ("rust-widestring" ,rust-widestring-0.4)
+        ("rust-winapi" ,rust-winapi-0.3))))
+    (home-page
+     "https://github.com/amodm/webbrowser-rs")
+    (synopsis "Open URLs in web browsers available on a platform")
+    (description
+     "Webbrowser-rs is a Rust library to open URLs in the web browsers
+available on a platform.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-webpki-0.21
   (package
     (name "rust-webpki")
@@ -48762,20 +48927,20 @@ using @code{bindgen}.")
 (define-public rust-which-4
   (package
     (name "rust-which")
-    (version "4.0.2")
+    (version "4.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "which" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1vqih4glz0kh3p08bl8mdzk4c02195ws7v6mfpyfrf5qw7vlxhc7"))))
+        (base32 "1zixp9631knhnvd8c3si4wn01fldq063s86jxlmwxwmx5kj52mdm"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-libc" ,rust-libc-0.2)
-        ("rust-thiserror" ,rust-thiserror-1))))
+       (("rust-either" ,rust-either-1)
+        ("rust-libc" ,rust-libc-0.2))))
     (home-page "https://github.com/harryfei/which-rs.git")
     (synopsis "Rust equivalent of Unix command @command{which}")
     (description
diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm
index 2ae3e5e0fd..bbeb565657 100644
--- a/gnu/packages/cups.scm
+++ b/gnu/packages/cups.scm
@@ -487,16 +487,15 @@ should only be used as part of the Guix cups-pk-helper service.")
 (define-public hplip
   (package
     (name "hplip")
-    (version "3.21.2")
+    (version "3.21.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/hplip/hplip/" version
                                   "/hplip-" version ".tar.gz"))
               (sha256
                (base32
-                "0hbwx9d4c8177vi0gavz9pxi7rc97jciacndp90ms8327shj2121"))
+                "1lsa0g8lafnmfyia0vy9x1j9q2l80xjjm7clkrawrbg53y3x7ixx"))
               (modules '((guix build utils)))
-              (patches (search-patches "hplip-remove-imageprocessor.patch"))
               (snippet
                '(begin
                   ;; Delete non-free blobs: .so files, pre-compiled
@@ -505,7 +504,14 @@ should only be used as part of the Guix cups-pk-helper service.")
                             (find-files "."
                                         (lambda (file stat)
                                           (elf-file? file))))
+
+                  ;; Now remove some broken references to them.
                   (delete-file "prnt/hpcups/ImageProcessor.h")
+                  (substitute* "Makefile.in"
+                    ((" -lImageProcessor ") " ")
+                    (("(\\@HPLIP_BUILD_TRUE\\@[[:blank:]]*).*libImageProcessor.*"
+                      _ prefix)
+                     (string-append prefix ":; \\\n")))
 
                   ;; Install binaries under libexec/hplip instead of
                   ;; share/hplip; that'll at least ensure they get stripped.
@@ -530,7 +536,8 @@ should only be used as part of the Guix cups-pk-helper service.")
     ;; TODO install apparmor profile files eventually.
     (arguments
      `(#:configure-flags
-       `("--disable-network-build"
+       `("--disable-imageProcessor-build"
+         "--disable-network-build"
          ,(string-append "--prefix=" (assoc-ref %outputs "out"))
          ,(string-append "--sysconfdir=" (assoc-ref %outputs "out") "/etc")
          ,(string-append "LDFLAGS=-Wl,-rpath="
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index b41a68e4fb..3a9c8c7ad4 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -50,6 +50,7 @@
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;; Copyright © 2021 David Larsson <david.larsson@selfhosted.xyz>
 ;;; Copyright © 2021 Pjotr Prins <pjotr.guix@thebird.nl>
+;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -114,6 +115,7 @@
   #:use-module (gnu packages popt)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-web)
@@ -2907,6 +2909,28 @@ simple and Pythonic domain language.")
 (define-public python2-sqlalchemy
   (package-with-python2 python-sqlalchemy))
 
+(define-public python-sqlalchemy-stubs
+  (package
+    (name "python-sqlalchemy-stubs")
+    (version "0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "sqlalchemy-stubs" version))
+       (sha256
+        (base32
+         "1bppjmv7v7m0q8gwg791pgxbx4ay7mna0zq204pn9vw28kfxcrf6"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-mypy" ,python-mypy)
+       ("python-typing-extensions" ,python-typing-extensions)))
+    (home-page "https://github.com/dropbox/sqlalchemy-stubs")
+    (synopsis "SQLAlchemy stubs and mypy plugin")
+    (description "This package contains type stubs and a mypy plugin to
+provide more precise static types and type inference for SQLAlchemy
+framework.")
+    (license license:asl2.0)))
+
 (define-public python-sqlalchemy-utils
   (package
     (name "python-sqlalchemy-utils")
diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm
index 652bb22f21..040aa38ebf 100644
--- a/gnu/packages/disk.scm
+++ b/gnu/packages/disk.scm
@@ -19,6 +19,7 @@
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
 ;;; Copyright © 2021 Michael Rohleder <mike@rohleder.de>
+;;; Copyright © 2021 Mathieu Othacehe <othacehe@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1067,19 +1068,27 @@ since they are better handled by external tools.")
 (define-public xfe
   (package
     (name "xfe")
-    (version "1.43.2")
+    (version "1.44")
     (source
      (origin
        (method url-fetch)
        (uri
         (string-append "mirror://sourceforge/xfe/xfe/" version "/"
-                       "xfe-" version ".tar.gz"))
+                       "xfe-" version ".tar.xz"))
        (sha256
-        (base32 "1fl51k5jm2vrfc2g66agbikzirmp0yb0lqhmsssixfb4mky3hpzs"))))
+        (base32 "1dihq03jqjllb69r78d9ihjjadi39v7sgzdf68qpxz5xhp8i8k2r"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-potfiles
+           (lambda _
+             ;; To add missing entry 'intl/plural.c' to potfiles list.
+             ;; Refer to https://sourceforge.net/p/xfe/bugs/257/
+             (substitute* "po/POTFILES.in"
+               (("src/help.h")
+                (string-append "src/help.h\n"
+                               "intl/plural.c")))))
          (add-after 'unpack 'patch-bin-dirs
            (lambda* (#:key inputs #:allow-other-keys)
              (let* ((bash (assoc-ref inputs "bash"))
@@ -1253,3 +1262,39 @@ and a partitioning of the heap between kinds of memory (for NUMA).")
       (description "mmc-utils is a command-line tool for configuring and
 inspecting MMC storage devices from userspace.")
       (license license:gpl2))))
+
+(define-public bmaptools
+  (package
+    (name "bmaptools")
+    (version "3.6")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/intel/bmap-tools")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "01xzrv5nvd2nvj91lz4x9s91y9825j9pj96z0ap6yvy3w2dgvkkl"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             ;; XXX: Remove failing test.
+             (invoke "nosetests" "-v"
+                     "--exclude" "test_bmap_helpers"))))))
+    (native-inputs
+     `(("python-mock" ,python-mock)
+       ("python-nose" ,python-nose)))
+    (propagated-inputs
+     `(("python-six" ,python-six)))
+    (home-page "https://github.com/intel/bmap-tools")
+    (synopsis "Create block map for a file or copy a file using block map")
+    (description "Bmaptool is a tool for creating the block map (bmap) for a
+file and copying files using the block map.  The idea is that large files,
+like raw system image files, can be copied or flashed a lot faster and more
+reliably with @code{bmaptool} than with traditional tools, like @code{dd} or
+@code{cp}.")
+    (license license:gpl2)))
diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm
index 6d1d7d20f6..fce150f24f 100644
--- a/gnu/packages/dns.scm
+++ b/gnu/packages/dns.scm
@@ -813,7 +813,7 @@ Extensions} (DNSSEC).")
 (define-public knot
   (package
     (name "knot")
-    (version "3.0.5")
+    (version "3.0.6")
     (source
      (origin
        (method git-fetch)
@@ -822,7 +822,7 @@ Extensions} (DNSSEC).")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "16rgcmgj21w2niyz45d3zjlci9i22gxcvfzqw7g5zwsjdy9610nx"))
+        (base32 "0mjgjx43yb3w688jw16g5m1724wb0wnv4y7di2rslrp0s11wl2a9"))
        (modules '((guix build utils)))
        (snippet
         '(begin
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index d1c4481cad..9375fe7b4b 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -97,6 +97,7 @@
 ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2021 Eugene Klimov <lipklim@mailbox.org>
+;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1881,14 +1882,14 @@ incrementally confined in Isearch manner.")
 (define emacs-emms-print-metadata
   (package
     (name "emacs-emms-print-metadata")
-    (version "7.1")
+    (version "7.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "emms-" version ".tar"))
        (sha256
-        (base32 "1dng8dy0w0wsdvvnjnrllwv5a8wq3kj20jik994b7prdx5dn6y52"))))
+        (base32 "11vqqh9rnzibsfw7wx62rgzl8i8ldpf0hv1sj43nhl5c6dlc8d5z"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags '("emms-print-metadata")
@@ -12779,13 +12780,13 @@ containing words from the Rime project.")
 (define-public emacs-pyim
   (package
     (name "emacs-pyim")
-    (version "3.7.3")
+    (version "3.7.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/pyim-" version ".tar"))
        (sha256
-        (base32 "0h6cp48hjdfnwbi799hrar5hlcag2339ygdq8qfds2iawrzk6y74"))))
+        (base32 "1crimmvyppjmds9shfvxy9j5zi3mk133bv5av0fgicm7ddkivksr"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-async" ,emacs-async)
@@ -25720,7 +25721,8 @@ REPL appropriate to the current major mode.")
         (base32 "1a50cziwg7lpgh26yvwxs46jfyfq1m0l6igbg5g5m288mz4d3an9"))))
     (build-system emacs-build-system)
     (arguments
-     '(#:phases
+     '(#:include (cons "\\.so$" %default-include)
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-rime-data-path
            (lambda* (#:key inputs #:allow-other-keys)
@@ -25732,13 +25734,7 @@ REPL appropriate to the current major mode.")
              #t))
          (add-before 'install 'build-emacs-module
            (lambda _
-             (invoke "make" "lib")))
-         (add-after 'install 'install-emacs-module
-           (lambda* (#:key outputs #:allow-other-keys)
-             (install-file "librime-emacs.so"
-                           (string-append (assoc-ref outputs "out")
-                                          "/share/emacs/site-lisp"))
-             #t)))))
+             (invoke "make" "lib"))))))
     (inputs
      `(("librime" ,librime)
        ("rime-data" ,rime-data)))
diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm
index 480bbf7835..901afba29b 100644
--- a/gnu/packages/embedded.scm
+++ b/gnu/packages/embedded.scm
@@ -1467,7 +1467,7 @@ handling communication with eBUS devices connected to a 2-wire bus system
 (define-public ucsim
   (package
     (name "ucsim")
-    (version "0.6-pre67")
+    (version "0.6-pre68")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1475,7 +1475,7 @@ handling communication with eBUS devices connected to a 2-wire bus system
                     "devel/ucsim-" version ".tar.gz"))
               (sha256
                (base32
-                "0aahj9pbfjphjrm4hgs9pfmp6d5aikaq4yvxlrvhywjinnnf0qp1"))))
+                "1bfj21f5pcfcg1xqqynlcfr8mn6qj5705cgc2lfr2s3n97qsd9df"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--enable-avr-port"
@@ -1547,6 +1547,12 @@ and Zilog Z80 families, plus many of their variants.")
            (lambda _
              (substitute* (find-files "." "(\\.mk$|\\.in$)")
                (("/bin/sh") (which "sh")))
+             ;; --disable-ucsim disables sdcc-misc, patch it back in.
+             (substitute* "Makefile.in"
+               (("debugger/mcs51" line)
+                (string-append line  "\n"
+                               "TARGETS += sdcc-misc\n"
+                               "PKGS += $(SDCC_MISC)")))
              #t)))))
     (home-page "http://sdcc.sourceforge.net")
     (synopsis "C compiler suite for 8-bit microcontrollers")
diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
index c05ca90c2b..97519775c1 100644
--- a/gnu/packages/file-systems.scm
+++ b/gnu/packages/file-systems.scm
@@ -39,6 +39,7 @@
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages acl)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages attr)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
@@ -56,12 +57,14 @@
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages golang)
+  #:use-module (gnu packages guile)
   #:use-module (gnu packages kerberos)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages nfs)
   #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages openldap)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages photo)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -72,6 +75,7 @@
   #:use-module (gnu packages rsync)
   #:use-module (gnu packages sssd)
   #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages valgrind)
   #:use-module (gnu packages version-control)
@@ -854,6 +858,161 @@ APFS.")
       (home-page "https://github.com/sgan81/apfs-fuse")
       (license license:gpl2+))))
 
+(define-public xfstests
+  ;; The last release (1.1.0) is from 2011.
+  (let ((revision "0")
+        (commit "1c18b9ec2fcc94bd05ecdd136aa51c97bf3fa70d"))
+    (package
+      (name "xfstests")
+      (version (git-version "1.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0rrv0rs9nhaza0jk5k0bj27w4lcd1s4a1ls8nr679qi02bgx630x"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'patch-tool-locations
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "common/config"
+                 ;; Make absolute file names relative.
+                 (("(MKFS_PROG=\").*(\")" _ pre post)
+                  (string-append pre "mkfs" post)))
+               (for-each (lambda (file)
+                           (substitute* file
+                             (("( -s|#.|[= ])(/bin/sh|/bin/bash)" _ pre match)
+                              (string-append pre
+                                             (assoc-ref inputs "bash")
+                                             match))
+                             (("/bin/(rm|true)" match)
+                              (string-append (assoc-ref inputs "coreutils")
+                                             match))
+                             (("/usr(/bin/time)" _ match)
+                              (string-append (assoc-ref inputs "time")
+                                             match))))
+                         (append (find-files "common" ".*")
+                                 (find-files "tests" ".*")
+                                 (find-files "tools" ".*")
+                                 (find-files "src" "\\.(c|sh)$")))))
+           (replace 'bootstrap
+             (lambda* (#:key make-flags #:allow-other-keys)
+               (substitute* "Makefile"
+                 ;; Avoid a mysterious (to me) ‘permission denied’ error.
+                 (("cp ") "cp -f "))
+               (substitute* "m4/package_utilies.m4"
+                 ;; Fix the bogus hard-coded paths for every single binary.
+                 (("(AC_PATH_PROG\\(.*, ).*(\\))" _ pre post)
+                  (string-append pre (getenv "PATH") post)))
+               (apply invoke "make" "configure" make-flags)))
+           (add-after 'install 'wrap-xfstests/check
+             ;; Keep wrapping distinct from 'create-helper-script below: users
+             ;; must be able to invoke xfstests/check directly if they prefer.
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out")))
+                 (wrap-program (string-append out "/xfstests/check")
+                   ;; Prefix the user's PATH with the minimum required tools.
+                   ;; The suite has many other optional dependencies and will
+                   ;; automatically select tests based on the original PATH.
+                   `("PATH" ":" prefix
+                     ,(map (lambda (name)
+                             (let ((input (assoc-ref inputs name)))
+                               (string-append input "/bin:"
+                                              input "/sbin")))
+                           (list "acl"
+                                 "attr"
+                                 "coreutils"
+                                 "inetutils"
+                                 "xfsprogs")))))))
+           (add-after 'install 'create-helper
+             ;; Upstream installs only a ‘check’ script that's not in $PATH and
+             ;; would try to write to the store without explaining how to change
+             ;; that.  Install a simple helper script to make it discoverable.
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((out      (assoc-ref outputs "out"))
+                      (check    (string-append out "/xfstests/check"))
+                      (bin      (string-append out "/bin"))
+                      (helper   (string-append bin "/xfstests-check")))
+                 (mkdir-p bin)
+                 (with-output-to-file helper
+                   (lambda _
+                     (format #t "#!~a --no-auto-compile\n!#\n"
+                             (string-append (assoc-ref inputs "guile")
+                                            "/bin/guile"))
+                     (write
+                      `(begin
+                         (define (try proc dir)
+                           "Try to PROC DIR.  Return DIR on success, else #f."
+                           (with-exception-handler (const #f)
+                             (lambda _ (proc dir) dir)
+                             #:unwind? #t))
+
+                         (define args
+                           (cdr (command-line)))
+
+                         (when (or (member "--help" args)
+                                   (member "-h" args))
+                           (format #t "Usage: ~a [OPTION]...
+This Guix helper sets up a new writable RESULT_BASE if it's unset, then executes
+xfstest's \"~a\" command (with any OPTIONs) as documented below.\n\n"
+                                   ,(basename helper)
+                                   ,(basename check)))
+
+                         (let* ((gotenv-base (getenv "RESULT_BASE"))
+                                (base (or gotenv-base
+                                          (let loop ((count 0))
+                                            (or (try mkdir
+                                                     (format #f "xfstests.~a"
+                                                             count))
+                                                (loop (+ 1 count))))))
+                                (result-base (if (string-prefix? "/" base)
+                                                 base
+                                                 (string-append (getcwd) "/"
+                                                                base))))
+                           (setenv "RESULT_BASE" result-base)
+                           ;; CHECK must run in its own directory or will fail.
+                           (chdir ,(dirname check))
+                           (let ((status
+                                  (status:exit-val (apply system* ,check args))))
+                             (unless gotenv-base
+                               (try rmdir result-base))
+                             status))))))
+                 (chmod helper #o755)))))))
+      (native-inputs
+       `(("autoconf" ,autoconf)
+         ("automake" ,automake)
+         ("libtool" ,libtool)))
+      (inputs
+       `(("acl" ,acl)
+         ("attr" ,attr)
+         ("guile" ,guile-3.0)           ; for our xfstests-check helper script
+         ("inetutils" ,inetutils)       ; for ‘hostname’
+         ("libuuid" ,util-linux "lib")
+         ("perl" ,perl)                 ; to automagically patch shebangs
+         ("time" ,time)
+         ("xfsprogs" ,xfsprogs)))
+      (home-page "https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git")
+      (synopsis "File system @acronym{QA, Quality Assurance} test suite")
+      (description
+       "The @acronym{FSQA, File System Quality Assurance} regression test suite,
+more commonly known as xfstests, comprises over 1,500 tests that exercise
+(@dfn{torture}) both the user- and kernel-space parts of many different file
+systems.
+
+As the package's name subtly implies, it was originally developed to test the
+XFS file system.  Today, xfstests is the primary test suite for all major file
+systems supported by the kernel Linux including XFS, ext4, and Btrfs, but also
+virtual and network file systems such as NFS, 9P, and the overlay file system.
+
+The packaged @command{check} script is not in @env{PATH} but can be invoked
+with the included @command{xfstests-check} helper.")
+      (license license:gpl2))))
+
 (define-public zfs
   (package
     (name "zfs")
@@ -983,6 +1142,84 @@ originally developed for Solaris and is now maintained by the OpenZFS
 community.")
     (license license:cddl1.0)))
 
+(define-public zfs-auto-snapshot
+  (package
+    (name "zfs-auto-snapshot")
+    (version "1.2.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url
+              (string-append "https://github.com/zfsonlinux/" name))
+             (commit
+              (string-append "upstream/" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0m4xw7h5qlbn5zdf9wb137pcr5l7hyrr7w2dgr16dfm5ay64vvfq"))))
+    (build-system gnu-build-system)
+    (inputs
+     ;; Note: if you are inheriting from the above zfs package in order
+     ;; to provide a specific stable kernel version, you should also
+     ;; inherit this package and replace the sole input below.
+     `(("zfs" ,zfs)))
+    (arguments
+     `(#:tests? #f ; No tests
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'build)
+         ;; Guix System may not have a traditional cron system, but
+         ;; the cron scripts installed by this package are convenient
+         ;; to use as targets for an mcron job specification, so make
+         ;; sure they can be run in-store.
+         (add-before 'install 'fix-scripts
+           (lambda* (#:key outputs inputs #:allow-other-keys)
+             (let* ((out                (assoc-ref outputs "out"))
+                    (zfs-auto-snapshot  (string-append
+                                         out
+                                         "/sbin/zfs-auto-snapshot"))
+                    (zfs-package        (assoc-ref inputs "zfs"))
+                    (zpool              (string-append
+                                         zfs-package
+                                         "/sbin/zpool"))
+                    (zfs                (string-append
+                                         zfs-package
+                                         "/sbin/zfs")))
+               (substitute* '("etc/zfs-auto-snapshot.cron.daily"
+                              "etc/zfs-auto-snapshot.cron.frequent"
+                              "etc/zfs-auto-snapshot.cron.hourly"
+                              "etc/zfs-auto-snapshot.cron.monthly"
+                              "etc/zfs-auto-snapshot.cron.weekly")
+                 (("zfs-auto-snapshot")
+                  zfs-auto-snapshot))
+               (substitute* "src/zfs-auto-snapshot.sh"
+                 (("LC_ALL=C zfs list")
+                  (string-append "LC_ALL=C " zfs " list"))
+                 (("LC_ALL=C zpool status")
+                  (string-append "LC_ALL=C " zpool " status"))
+                 (("zfs snapshot")
+                  (string-append zfs " snapshot"))
+                 (("zfs destroy")
+                  (string-append zfs " destroy"))))))
+         ;; Provide DESTDIR and PREFIX on make command.
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (invoke "make" "install"
+                       "PREFIX="
+                       (string-append "DESTDIR=" out)))
+             #t)))))
+    (home-page "https://github.com/zfsonlinux/zfs-auto-snapshot")
+    (synopsis "Automatically create, rotate and destroy ZFS snapshots")
+    (description "An alternative implementation of the zfs-auto-snapshot
+service for Linux that is compatible with zfs-linux (now OpenZFS) and
+zfs-fuse.
+
+On Guix System, you will need to invoke the included shell scripts as
+@code{job} definitions in your @code{operating-system} declaration.")
+    (license license:gpl2+)))
+
 (define-public mergerfs
   (package
     (name "mergerfs")
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 081cae50e7..24e8544db7 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -23,6 +23,7 @@
 ;;; Copyright © 2020 Anders Thuné <asse.97@gmail.com>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
 ;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
+;;; Copyright © 2021 pineapples <guixuser6392@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -95,6 +96,7 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages samba)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages valgrind)
   #:use-module (gnu packages video)
@@ -827,6 +829,36 @@ GNOME Shell.  The @command{localectl} command-line tool allows you to interact
 with localed.  This package is extracted from the broader systemd package.")
     (license license:lgpl2.1+)))
 
+(define-public seatd
+  (package
+    (name "seatd")
+    (version "0.5.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://git.sr.ht/~kennylevinsen/seatd")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1kglq8v4rnr3415mfaghyv2s2f8mxsy5s881gmm2908ig4n4j297"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:configure-flags '("-Dlogind=enabled")))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("scdoc" ,scdoc)))
+    (inputs
+     `(("elogind" ,elogind)))
+    (home-page "https://sr.ht/~kennylevinsen/seatd")
+    (synopsis "Seat management daemon and library")
+    (description
+     "This package provides a minimal seat management daemon whose task is to
+mediate access to shared devices, such as graphics and input, for applications
+that require it.  It also provides a universal seat management library that
+allows applications to use whatever seat management is available.")
+    (license license:expat)))
+
 (define-public packagekit
   (package
     (name "packagekit")
@@ -2358,3 +2390,35 @@ which uses GTK+ and various pieces of GNOME infrastructure, such as the
 @code{org.gnome.Shell.Screenshot} or @code{org.gnome.SessionManager} D-Bus
 interfaces.")
     (license license:lgpl2.1+)))
+
+(define-public xdg-desktop-portal-wlr
+  (package
+    (name "xdg-desktop-portal-wlr")
+    (version "0.3.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/emersion/xdg-desktop-portal-wlr")
+                     (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "18nlkqqxgxh7k0r2nk867wnp2nmaiinl6z67lrfv7rmiym0x82p8"))))
+    (build-system meson-build-system)
+    (native-inputs
+     `(("cmake" ,cmake)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("elogind" ,elogind)
+       ("iniparser" ,iniparser)
+       ("pipewire" ,pipewire-0.3)
+       ("wayland" ,wayland)
+       ("wayland-protocols" ,wayland-protocols)))
+    (home-page "https://github.com/emersion/xdg-desktop-portal-wlr")
+    (synopsis "@code{xdg-desktop-portal} backend for wlroots")
+    (description
+     "This package provides @code{xdg-desktop-portal-wlr}.  This project
+seeks to add support for the screenshot, screencast, and possibly
+remote-desktop @code{xdg-desktop-portal} interfaces for wlroots based
+compositors.")
+    (license license:expat)))
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index 6abc63f314..3998312db1 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -348,14 +348,14 @@ files) into @file{.grf} and/or @file{.nfo} files.")
 (define-public python-sge
   (package
     (name "python-sge")
-    (version "1.7")
+    (version "2.0.post0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "sge" version))
        (sha256
         (base32
-         "02fn6v6bxk3sngwd4kd3mglrp0jlnhx7x6h8nnkik6wdv150a0wv"))))
+         "0s5d5qzlzfmqb10iyrqi62n36ll94d99xjaznp5ca6dz1b91qkvr"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-pygame" ,python-pygame)
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index eb2563387f..e2c6a7ebc4 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -19,7 +19,7 @@
 ;;; Copyright © 2016 Albin Söderqvist <albin@fripost.org>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016 Steve Webber <webber.sl@gmail.com>
 ;;; Copyright © 2017 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@hyperbola.info>
@@ -2086,8 +2086,8 @@ Every puzzle has a complete solution, although there may be more than one.")
    (license license:gpl2+)))
 
 (define-public retux
-  (let ((release "1.4.1")
-        (revision 1))
+  (let ((release "1.5")
+        (revision 0))
     (package
       (name "retux")
       (version (if (zero? revision)
@@ -2099,10 +2099,10 @@ Every puzzle has a complete solution, although there may be more than one.")
                 (uri (string-append "https://github.com/retux-game/retux/"
                                     "releases/download/v"
                                     version "/retux-"
-                                    release "-src.tar.gz"))
+                                    release "-src.zip"))
                 (sha256
                  (base32
-                  "1vrldg2qh2gqfswj7vkpc589ldrrjd903j6cnfdik9zh0jhlq4h2"))))
+                  "1yima7s36hn2kh5h08lczc5iid8jbdxk7x1g5ms6knaznzj7rll3"))))
       (build-system python-build-system)
       (arguments
        `(#:tests? #f                    ; no check target
@@ -2125,6 +2125,8 @@ Every puzzle has a complete solution, although there may be more than one.")
                  (copy-file "retux.py" (string-append bin "/retux"))
                  (copy-recursively "data" data)
                  #t))))))
+      (native-inputs
+       `(("unzip" ,unzip)))
       (inputs
        `(("python-sge-pygame" ,python-sge-pygame)
          ("python-six" ,python-six)
@@ -3154,7 +3156,7 @@ asynchronously and at a user-defined speed.")
 (define-public chess
   (package
     (name "chess")
-    (version "6.2.7")
+    (version "6.2.8")
     (source
      (origin
        (method url-fetch)
@@ -3162,7 +3164,7 @@ asynchronously and at a user-defined speed.")
                            ".tar.gz"))
        (sha256
         (base32
-         "0ilq4bfl0lwyzf11q7n2skydjhalfn3bgxhrp5hjxs5bc5d6fdp5"))))
+         "0irqb0wl30c2i1rs8f6mm1c89l7l9nxxv7533lr408h1m36lc16m"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index a883f5bb55..4e6dac83e7 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -58,6 +58,7 @@
 ;;; Copyright © 2020 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
 ;;; Copyright © 2020, 2021 Andy Tai <atai@atai.org>
 ;;; Copyright © 2020, 2021 Sébastien Lerique <sl@eauchat.org>
+;;; Copyright © 2021 Trevor Hass <thass@okstate.edu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -10451,7 +10452,7 @@ apply fancy special effects and lets you share the fun with others.")
 (define-public passwordsafe
   (package
     (name "passwordsafe")
-    (version "3.99.2")
+    (version "5.0")
     (source
      (origin
        (method git-fetch)
@@ -10460,7 +10461,7 @@ apply fancy special effects and lets you share the fun with others.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0pi2l4gwf8paxm858mxrcsk5nr0c0zw5ycax40mghndb6b1qmmhf"))))
+        (base32 "1xh64bbg10gnfzlck5jvqy2zk6hbk9cyqgv85xc9kbdvs8n4lhgh"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -10490,7 +10491,7 @@ apply fancy special effects and lets you share the fun with others.")
      `(("glib" ,glib)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("gtk+" ,gtk+)
-       ("libhandy" ,libhandy-0.0)
+       ("libhandy" ,libhandy)
        ("libpwquality" ,libpwquality)
        ("python-pygobject" ,python-pygobject)
        ("python-pykeepass" ,python-pykeepass)))
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 6ab2b75d68..212f684a58 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
-;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017, 2018 Nikita <nikita@n0.is>
@@ -948,12 +948,6 @@ from forcing GEXP-PROMISE."
      `(#:tests? #f          ; no check target
        #:out-of-source? #t  ; must be built outside of the source directory
 
-       ;; XXX: There are RUNPATH issues such as
-       ;; $prefix/lib/icecat-31.6.0/plugin-container NEEDing libmozalloc.so,
-       ;; which is not in its RUNPATH, but they appear to be harmless in
-       ;; practice somehow.  See <http://hydra.gnu.org/build/378133>.
-       #:validate-runpath? #f
-
        #:configure-flags `("--enable-default-toolkit=cairo-gtk3-wayland"
 
                            "--with-distribution-id=org.gnu"
@@ -1201,6 +1195,9 @@ from forcing GEXP-PROMISE."
                (setenv "AUTOCONF" (which "autoconf")) ; must be autoconf-2.13
                (setenv "CC" "gcc")  ; apparently needed when Stylo is enabled
                (setenv "MOZ_BUILD_DATE" ,%icecat-build-id) ; avoid timestamp
+               (setenv "LDFLAGS" (string-append "-Wl,-rpath="
+                                                (assoc-ref outputs "out")
+                                                "/lib/icecat"))
                (mkdir "../build")
                (chdir "../build")
                (format #t "build directory: ~s~%" (getcwd))
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 7bbba8ff70..797210ee04 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -36,6 +36,8 @@
 ;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Leo Le Bouter <lle-bout@zaclys.net>
+;;; Copyright © 2021 Zelphir Kaltstahl <zelphirkaltstahl@posteo.de>
+;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -361,13 +363,13 @@ $(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)\n"))
 dictionary and suggesting spelling corrections.")
     (license license:gpl3+)))
 
-(define-public guile-bash
+(define-public guile2.0-bash
   ;; This project is currently retired.  It was initially announced here:
   ;; <https://lists.gnu.org/archive/html/guile-user/2015-02/msg00003.html>.
   (let ((commit "1eabc563ca5692b3e08d84f1f0e6fd2283284469")
         (revision "0"))
     (package
-      (name "guile-bash")
+      (name "guile2.0-bash")
       (version (string-append "0.1.6-" revision "." (string-take commit 7)))
       (home-page
        "https://anonscm.debian.org/cgit/users/kaction-guest/retired/dev.guile-bash.git")
@@ -430,6 +432,25 @@ enable -f ~/.guix-profile/lib/bash/libguile-bash.so scm
 and then run @command{scm example.scm}.")
       (license license:gpl3+))))
 
+(define-public guile-bash
+  (package
+    (inherit guile2.0-bash)
+    (name "guile-bash")
+    (inputs
+     `(("guile" ,guile-3.0-latest)
+       ,@(assoc-remove! (package-inputs guile2.0-bash) "guile")))
+    (arguments
+     `(#:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (add-after 'install 'install-guile
+                    (lambda* (#:key inputs outputs #:allow-other-keys)
+                      (copy-recursively
+                       (string-append (assoc-ref outputs "out")
+                                      (assoc-ref inputs "guile") "/share")
+                       (string-append (assoc-ref outputs "out") "/share"))
+                      #t)))
+       ,@(package-arguments guile2.0-bash)))))
+
 (define-public guile-8sync
   (package
     (name "guile-8sync")
@@ -2106,6 +2127,38 @@ microAdapton.  Both miniAdapton and microAdapton are designed to be easy to
 understand, extend, and port to host languages other than Scheme.")
       (license license:expat))))
 
+(define-public guile-raw-strings
+  (let ((commit "aa1cf783f2542811b473f797e12490920b779baa")
+        (revision "0"))
+    (package
+      (name "guile-raw-strings")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/lloda/guile-raw-strings")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1r2gx86zw5hb6byllra3nap3fw9p7q7rvdmg6qn9myrdxyjpns3l"))))
+      (build-system guile-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'build 'check
+             (lambda* (#:key tests? #:allow-other-keys)
+               (when tests?
+                 (invoke "guile" "-L" "." "-s" "test.scm")))))))
+      (native-inputs
+       `(("guile" ,guile-3.0)))
+      (home-page "https://github.com/lloda/guile-raw-strings")
+      (synopsis "Guile reader extension for `raw strings'")
+      (description "This package provides A Guile reader extension for `raw
+strings', it lets you write verbatim strings without having to escape double
+quotes. ")
+      (license license:public-domain))))
+
 (define-public guile-reader
   (package
     (name "guile-reader")
@@ -4665,3 +4718,27 @@ properties inspired by ghc-quickcheck.  You can use it to express properties,
 which functions should satisfy, as Scheme code and then check whether they hold
 in a large number of randomly generated test cases.")
     (license license:gpl3+)))
+
+(define-public guile-fslib
+  (package
+    (name "guile-fslib")
+    (version "0.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://notabug.org/ZelphirKaltstahl/guile-fslib/")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "118d84p443w7hrslv8hjyhgws631ia08mggiyklkmk0b9plfdsvz"))))
+    (build-system guile-build-system)
+    (inputs
+     `(("guile" ,guile-3.0)))
+    (home-page "https://notabug.org/ZelphirKaltstahl/guile-fslib")
+    (synopsis "Helper functions for working with locations in file systems")
+    (description
+     "This package contains helper functions for working with file system
+locations.")
+    (license license:agpl3+)))
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 955bf2e88d..32f96747c9 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -316,8 +316,42 @@ without requiring the source code to be rewritten.")
                      "share/guile/site/3.0")))))))
 
 (define-public guile-3.0-latest
-  ;; The latest 3.0.x version.
-  guile-3.0)
+  ;; TODO: Make this 'guile-3.0' on the next rebuild cycle.
+  (package
+    (inherit guile-3.0)
+    (version "3.0.7")
+    (source (origin
+              (inherit (package-source guile-3.0)) ;preserve snippet
+              (patches '())
+              (uri (string-append "mirror://gnu/guile/guile-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "1dwiwsrpm4f96alfnz6wibq378242z4f16vsxgy1n9r00v3qczgm"))))
+
+    ;; Build with the bundled mini-GMP to avoid interference with GnuTLS' own
+    ;; use of GMP via Nettle: <https://issues.guix.gnu.org/46330>.  Use
+    ;; LIBGC/DISABLE-MUNMAP to work around <https://bugs.gnu.org/40525>.
+    ;; Remove libltdl, which is no longer used.
+    (propagated-inputs
+     `(("bdw-gc" ,libgc/disable-munmap)
+       ,@(srfi-1:fold srfi-1:alist-delete (package-propagated-inputs guile-3.0)
+                      '("gmp" "libltdl" "bdw-gc"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments guile-3.0)
+       ((#:configure-flags flags ''())
+        `(cons "--enable-mini-gmp" ,flags))))))
+
+(define-public guile-3.0/libgc-7
+  ;; Using libgc-7 avoid crashes that can occur, particularly when loading
+  ;; data in to the Guix Data Service:
+  ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=40525
+  (hidden-package
+   (package
+     (inherit guile-3.0-latest)
+     (propagated-inputs
+      `(("bdw-gc" ,libgc-7)
+        ,@(srfi-1:alist-delete "bdw-gc" (package-propagated-inputs guile-3.0)))))))
 
 (define-public guile-3.0/fixed
   ;; A package of Guile that's rarely changed.  It is the one used in the
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index f0ce039080..c454e40bda 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -356,7 +356,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.12-version "5.12.2")
+(define-public linux-libre-5.12-version "5.12.3")
 (define deblob-scripts-5.12
   (linux-libre-deblob-scripts
    linux-libre-5.12-version
@@ -364,12 +364,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "1qp25fd4wgjyk7dzdq9yirm1z5w68sd1p3wv8lch8259i51gwjnf")))
 (define-public linux-libre-5.12-pristine-source
   (let ((version linux-libre-5.12-version)
-        (hash (base32 "03gp5vq8vkwvksjsa1birds37rmrr73s9ik6m1wvgz8mdncvk64c")))
+        (hash (base32 "13c7jbizf254rh4arvlgzk87vx7sz6psba47jnax23lbgal18dqk")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.12)))
 
-(define-public linux-libre-5.11-version "5.11.19")
+(define-public linux-libre-5.11-version "5.11.20")
 (define deblob-scripts-5.11
   (linux-libre-deblob-scripts
    linux-libre-5.11-version
@@ -377,7 +377,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "0yvr80g200hdryz54gdnzj4fl38pf7g4qbgj475rhcfwixhp1j7n")))
 (define-public linux-libre-5.11-pristine-source
   (let ((version linux-libre-5.11-version)
-        (hash (base32 "0jrb8wbxj0dadyadggcn49hlxzxgz8mz8xr0ckgbnnvb8snikvjs")))
+        (hash (base32 "15q7pw1wvl6ndvb6154p6vjr4qa4fa6lpbqpxvwy2kywc2jyxykk")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.11)))
@@ -385,7 +385,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.10-version "5.10.35")
+(define-public linux-libre-5.10-version "5.10.36")
 (define deblob-scripts-5.10
   (linux-libre-deblob-scripts
    linux-libre-5.10-version
@@ -393,12 +393,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "0hh27ccqimagr3aij7ygwikxw66y63sqwd0xlf49bhpjd090r9a7")))
 (define-public linux-libre-5.10-pristine-source
   (let ((version linux-libre-5.10-version)
-        (hash (base32 "1zcqsjzqgcvlhkjwhzs6sxgbhzkfg898pbisivjqfymp8nfs2dxc")))
+        (hash (base32 "0s5jw7y17hnl66iybw6f4pbc5j5rilphqbv3iql22wq053vyg749")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.10)))
 
-(define-public linux-libre-5.4-version "5.4.117")
+(define-public linux-libre-5.4-version "5.4.118")
 (define deblob-scripts-5.4
   (linux-libre-deblob-scripts
    linux-libre-5.4-version
@@ -406,7 +406,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "1xghbbnaisjd0k1klbyn1p7r6r4x5a1bpmkm56a3gh2zvw4s7mj8")))
 (define-public linux-libre-5.4-pristine-source
   (let ((version linux-libre-5.4-version)
-        (hash (base32 "0w679qymqh8dlb1mh2vxr382m1pzxdjwlp3bqzjr4043fmbrp62f")))
+        (hash (base32 "06w2vhw6pdy49n3dcnq12bn50glbg9pwaqvs4nlzbljg4yf50w6r")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.4)))
@@ -4416,14 +4416,14 @@ isolation or root privileges.")
 (define-public hdparm
   (package
     (name "hdparm")
-    (version "9.61")
+    (version "9.62")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/hdparm/hdparm/"
                                   "hdparm-" version ".tar.gz"))
               (sha256
                (base32
-                "0hskvzsg58hw8abkkmxh5kky0hhilv516870x2bq62zihww1q6ns"))))
+                "0zvppv8qw0y1shlhn34iq1g4883i1cywsa514n595nmyrmsrs3rc"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -5163,7 +5163,7 @@ and copy/paste text in the console and in xterm.")
 (define-public btrfs-progs
   (package
     (name "btrfs-progs")
-    (version "5.11.1")
+    (version "5.12")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/linux/kernel/"
@@ -5171,7 +5171,7 @@ and copy/paste text in the console and in xterm.")
                                   "btrfs-progs-v" version ".tar.xz"))
               (sha256
                (base32
-                "1zpbpmq8qndwls40yg2c9xj9ca6mcxdziadj5i8fbi3ffp2crap3"))))
+                "0mgdcqyww20fvh0js717yvla1hkky12c6dfhascicmrfw5fdcfcf"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "static"))      ; static versions of the binaries in "out"
@@ -5216,6 +5216,9 @@ and copy/paste text in the console and in xterm.")
                      ("asciidoc" ,asciidoc)
                      ("python" ,python)
                      ("xmlto" ,xmlto)
+                     ;; Remove this input entirely when the default headers
+                     ;; version provides blk_zone.capacity (>= 5.9).
+                     ("linux-libre-headers" ,linux-libre-headers-5.10)
                      ;; For building documentation.
                      ("libxml2" ,libxml2)
                      ("docbook-xsl" ,docbook-xsl)
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index 0824fa1d82..2df35d2500 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -67,6 +67,7 @@
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
@@ -16434,3 +16435,145 @@ operations in 3D space.")
 
 (define-public cl-3d-matrices
   (sbcl-package->cl-source-package sbcl-3d-matrices))
+
+(define-public sbcl-messagebox
+  (let ((commit "ea3688d9a9954bee7079c0173bc7b3f327021e9f")
+        (revision "1"))
+    (package
+      (name "sbcl-messagebox")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/messagebox")
+               (commit commit)))
+         (file-name (git-file-name "messagebox" version))
+         (sha256
+          (base32 "0jkbzlca0wvspgsfj0b0hjwlyyy8jlywsldsbkp79q48fc3aa8jd"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'patch-zenity-path
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "zenity.lisp"
+                 (("\"zenity\"")
+                  (string-append "\"" (assoc-ref inputs "zenity")
+                                 "/bin/zenity\""))))))))
+      (inputs
+       `(("documentation-utils" ,sbcl-documentation-utils)
+         ("trivial-features" ,sbcl-trivial-features)
+         ("zenity" ,zenity)))
+      (home-page "https://shinmera.github.io/messagebox/")
+      (synopsis "Display a native GUI message box")
+      (description
+       "This is a small library to display a native GUI message box.  This can be
+useful to show error messages and other informational pieces should the
+application fail and be unable to do so using its standard UI.")
+      (license license:zlib))))
+
+(define-public ecl-messagebox
+  (sbcl-package->ecl-package sbcl-messagebox))
+
+(define-public cl-messagebox
+  (sbcl-package->cl-source-package sbcl-messagebox))
+
+(define-public sbcl-glsl-toolkit
+  (let ((commit "d00ba1906e3b5eb08ea346ac300a1e77bb999d04")
+        (revision "1"))
+    (package
+      (name "sbcl-glsl-toolkit")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shirakumo/glsl-toolkit")
+               (commit commit)))
+         (file-name (git-file-name "glsl-toolkit" version))
+         (sha256
+          (base32 "0as5796yazchq1qkna3srxlz5v7cf7ffny9cbqi41wsa2s20vbh9"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("cl-ppcre" ,sbcl-cl-ppcre)
+         ("documentation-utils" ,sbcl-documentation-utils)
+         ("parse-float" ,sbcl-parse-float)
+         ("trivial-indent" ,sbcl-trivial-indent)))
+      (home-page "https://shirakumo.github.io/glsl-toolkit/")
+      (synopsis "Parser for OpenGL Shader Language source files")
+      (description
+       "This package provides a Common Lisp system collecting tools written to
+allow to wrangle OpenGL Shader Language (GLSL) source files.")
+      (license license:zlib))))
+
+(define-public ecl-glsl-toolkit
+  (sbcl-package->ecl-package sbcl-glsl-toolkit))
+
+(define-public cl-glsl-toolkit
+  (sbcl-package->cl-source-package sbcl-glsl-toolkit))
+
+(define-public sbcl-simple-tasks
+  (let ((commit "745d4b54eac9bf5d6909792e63ecd2ef8d303cf2")
+        (revision "1"))
+    (package
+      (name "sbcl-simple-tasks")
+      (version (git-version "1.3.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/simple-tasks")
+               (commit commit)))
+         (file-name (git-file-name "simple-tasks" version))
+         (sha256
+          (base32 "1ls1pij7dvb65g4nam7nvik1218jvfk5iplr48vy290fw3lq7v98"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("array-utils" ,sbcl-array-utils)
+         ("bordeaux-threads" ,sbcl-bordeaux-threads)
+         ("dissect" ,sbcl-dissect)))
+      (home-page "https://shinmera.github.io/simple-tasks/")
+      (synopsis "Simple task scheduling framework")
+      (description "This is a task scheduling framework for Common Lisp.")
+      (license license:zlib))))
+
+(define-public ecl-simple-tasks
+  (sbcl-package->ecl-package sbcl-simple-tasks))
+
+(define-public cl-simple-tasks
+  (sbcl-package->cl-source-package sbcl-simple-tasks))
+
+(define-public sbcl-trivial-main-thread
+  (let ((commit "25f114973bb69eb63e01d0bbfead31f8e682846a")
+        (revision "1"))
+    (package
+      (name "sbcl-trivial-main-thread")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/trivial-main-thread")
+               (commit commit)))
+         (file-name (git-file-name "trivial-main-thread" version))
+         (sha256
+          (base32 "0bw1887i7396lqg75qvmgjfzz4xbiq9w5dp8wxdgrcsm0qwlraw7"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
+         ("simple-tasks" ,sbcl-simple-tasks)
+         ("trivial-features" ,sbcl-trivial-features)))
+      (home-page "https://shinmera.github.io/trivial-main-thread/")
+      (synopsis "Compatibility library to run things in the main thread")
+      (description
+       "This package provides a Common Lisp system which wraps the
+BORDEAUX-THREADS system to be able to run things in the main thread of the
+implementation, for example drawing calls of GUI applications.")
+      (license license:zlib))))
+
+(define-public ecl-trivial-main-thread
+  (sbcl-package->ecl-package sbcl-trivial-main-thread))
+
+(define-public cl-trivial-main-thread
+  (sbcl-package->cl-source-package sbcl-trivial-main-thread))
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index a3f34f9bb0..e71ada9733 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -1698,14 +1698,14 @@ TCP connection, TLS handshake and so on) in the terminal.")
 (define-public squid
   (package
     (name "squid")
-    (version "4.14")
+    (version "4.15")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "http://www.squid-cache.org/Versions/v4/squid-"
                            version ".tar.xz"))
        (sha256
-        (base32 "1z4zf98q24ps19fq840n0hwh6z1la65rf061kcapr29lcjm7s2gi"))))
+        (base32 "09aaz0hi7q4s5jalgl5i5fakmgzv5akf03gnajlah498mgjs94xn"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
diff --git a/gnu/packages/ntp.scm b/gnu/packages/ntp.scm
index 6d046eed1b..ecad2854a7 100644
--- a/gnu/packages/ntp.scm
+++ b/gnu/packages/ntp.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -43,14 +43,14 @@
 (define-public chrony
   (package
     (name "chrony")
-    (version "4.0")
+    (version "4.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.tuxfamily.org/chrony/"
                            "chrony-" version ".tar.gz"))
        (sha256
-        (base32 "09f6w2x5h5kamb4rhcbaz911q1f730qdalgsn8s48yjyqlafl9xy"))))
+        (base32 "0k0nf5qqzl01106lkmwc32n6a1fxagalpbci38iccyilz79z4xpd"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((srfi srfi-26)
diff --git a/gnu/packages/onc-rpc.scm b/gnu/packages/onc-rpc.scm
index aeb2f6e115..aa49f5fb6a 100644
--- a/gnu/packages/onc-rpc.scm
+++ b/gnu/packages/onc-rpc.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2014, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2017, 2018 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;;
@@ -86,7 +86,7 @@ IPv4 and IPv6.  ONC RPC is notably used by the network file system (NFS).")
 (define-public rpcbind
   (package
     (name "rpcbind")
-    (version "1.2.5")
+    (version "1.2.6")
     (source
      (origin
       (method url-fetch)
@@ -95,8 +95,7 @@ IPv4 and IPv6.  ONC RPC is notably used by the network file system (NFS).")
                           name "-" version ".tar.bz2"))
       (patches (search-patches "rpcbind-CVE-2017-8779.patch"))
       (sha256
-       (base32
-        "0ynszy5hpc7wbz8xngqwyhgbi9cay73y43izqhcmrcv375l61qrc"))))
+       (base32 "1pp8xvprsfz8nlmmvxf829gilx0ibb08bfs3lhisxrfai5j784sn"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 09fa7208dc..c72c2211b3 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -131,9 +131,9 @@
   ;; Latest version of Guix, which may or may not correspond to a release.
   ;; Note: the 'update-guix-package.scm' script expects this definition to
   ;; start precisely like this.
-  (let ((version "1.2.0")
-        (commit "4dff6ecde85eec473ab231cf75f51e98e8aca1e9")
-        (revision 21))
+  (let ((version "1.3.0")
+        (commit "771b866c55e5f992df60f6c32f5fdd78b64e17f6")
+        (revision 1))
     (package
       (name "guix")
 
@@ -149,7 +149,7 @@
                       (commit commit)))
                 (sha256
                  (base32
-                  "1n16j7rb4n4pjmp8ck5g206rphmzxii2mbyz1nk4qk70zc3mwszq"))
+                  "0w8w05w6v3lc6478vfw67jzn0hbd9nsncpx9i9ch1lck53r8vs44"))
                 (file-name (string-append "guix-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
@@ -312,9 +312,11 @@ $(prefix)/etc/openrc\n")))
                                                   "guile-bytestructures"))
                                (ssh    (assoc-ref inputs "guile-ssh"))
                                (gnutls (assoc-ref inputs "gnutls"))
+                               (disarchive (assoc-ref inputs "disarchive"))
                                (locales (assoc-ref inputs "glibc-utf8-locales"))
                                (deps   (list gcrypt json sqlite gnutls git
-                                             bs ssh zlib lzlib zstd guile-lib))
+                                             bs ssh zlib lzlib zstd guile-lib
+                                             disarchive))
                                (deps*  (if avahi (cons avahi deps) deps))
                                (effective
                                 (read-line
@@ -416,6 +418,8 @@ $(prefix)/etc/openrc\n")))
          ("bootstrap/tar" ,(bootstrap-executable "tar" (%current-system)))
          ("bootstrap/xz" ,(bootstrap-executable "xz" (%current-system)))
 
+         ("disarchive" ,disarchive)               ;for 'guix perform-download'
+
          ("glibc-utf8-locales" ,glibc-utf8-locales)))
       (propagated-inputs
        `(("gnutls" ,gnutls)
diff --git a/gnu/packages/patches/giara-fix-login.patch b/gnu/packages/patches/giara-fix-login.patch
new file mode 100644
index 0000000000..f15caaf559
--- /dev/null
+++ b/gnu/packages/patches/giara-fix-login.patch
@@ -0,0 +1,27 @@
+From f4adc1f52d777cea3331b4acae0c3bdec4d0eb70 Mon Sep 17 00:00:00 2001
+From: Paper <paper@tilde.institute>
+Date: Fri, 12 Mar 2021 21:10:34 +0000
+Subject: [PATCH] fix login by removing everything after # from URL
+
+---
+ giara/__main__.py | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/giara/__main__.py b/giara/__main__.py
+index 10b9ae2..d235332 100644
+--- a/giara/__main__.py
++++ b/giara/__main__.py
+@@ -53,8 +53,9 @@ class GApplication(Gtk.Application):
+     def open(self, app, files, *args):
+         target = files[0].get_uri()
+         print(target)
++        code = target.split('=')[-1].split('#')[0]
+         get_authorized_client(
+-            reddit=self._unauth_reddit, code=target.split('=')[-1]
++            reddit=self._unauth_reddit, code=code
+         )
+         self.continue_activate(self._unauth_reddit)
+ 
+-- 
+GitLab
+
diff --git a/gnu/packages/patches/hplip-remove-imageprocessor.patch b/gnu/packages/patches/hplip-remove-imageprocessor.patch
deleted file mode 100644
index c9d27a4d1d..0000000000
--- a/gnu/packages/patches/hplip-remove-imageprocessor.patch
+++ /dev/null
@@ -1,245 +0,0 @@
-This patch is based heavily on the Debian patch, but was updated to
-apply to subsequent upstream changes not yet in Debian.
-
-https://salsa.debian.org/printing-team/hplip/raw/debian/3.18.10+dfsg0-1/debian/patches/0025-Remove-all-ImageProcessor-functionality-which-is-clo.patch
-
----
- Makefile.am                  | 22 +++-------------------
- Makefile.in                  | 33 +++++----------------------------
- prnt/hpcups/HPCupsFilter.cpp | 21 ---------------------
- 3 files changed, 8 insertions(+), 68 deletions(-)
-
-diff --git a/Makefile.am b/Makefile.am
-index ef6480f..ecada5c 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -166,7 +166,7 @@ if !HPLIP_CLASS_DRIVER
- dist_hplip_SCRIPTS = hpssd.py __init__.py hpdio.py
- endif #HPLIP_CLASS_DRIVER
- 
--dist_noinst_DATA += prnt/drv/hpijs.drv.in.template prnt/drv/hpcups.drv.in.template prnt/hpcups/libImageProcessor-x86_64.so prnt/hpcups/libImageProcessor-x86_32.so
-+dist_noinst_DATA += prnt/drv/hpijs.drv.in.template prnt/drv/hpcups.drv.in.template
- dist_noinst_SCRIPTS += dat2drv.py install.py  hplip-install init-suse-firewall init-iptables-firewall class_rpm_build.sh hplipclassdriver.spec createPPD.sh Makefile_dat2drv hpijs-drv
- 
- if !HPLIP_CLASS_DRIVER
-@@ -590,11 +590,10 @@ hpcups_SOURCES = prnt/hpcups/HPCupsFilter.cpp prnt/hpcups/HPCupsFilter.h prnt/hp
- 	prnt/hpcups/flate_colorspace.h prnt/hpcups/RunLenEncoding.h prnt/hpcups/common_defines.h \
- 	prnt/hpcups/genPCLm.h \
- 	common/utils.c common/utils.h prnt/hpcups/Hbpl1_Wrapper.cpp prnt/hpcups/genPCLm.cpp \
--	prnt/hpcups/genJPEGStrips.cpp prnt/hpcups/RunLenEncoding.cpp \
--	prnt/hpcups/ImageProcessor.h
-+	prnt/hpcups/genJPEGStrips.cpp prnt/hpcups/RunLenEncoding.cpp
- 
- hpcups_CXXFLAGS = $(APDK_ENDIAN_FLAG) $(DBUS_CFLAGS)
--hpcups_LDADD = -L./prnt/hpcups/ -ljpeg -ldl -lImageProcessor -lcups -lcupsimage -lz $(DBUS_LIBS)
-+hpcups_LDADD = -L./prnt/hpcups/ -ljpeg -ldl -lcups -lcupsimage -lz $(DBUS_LIBS)
- #else
- #hpcupsdir = $(cupsfilterdir)
- #hpcups_PROGRAMS = hpcups
-@@ -679,21 +678,10 @@ printpluginsdir=$(cupsfilterdir)
- 
- 
- dist_filter_DATA = hpcups hpps dat2drv
--dist_printplugins_DATA = prnt/plugins/hbpl1-arm32.so prnt/plugins/hbpl1-arm64.so prnt/plugins/hbpl1-x86_32.so prnt/plugins/hbpl1-x86_64.so prnt/plugins/lj-arm32.so prnt/plugins/lj-arm64.so prnt/plugins/lj-x86_32.so prnt/plugins/lj-x86_64.so
- endif #HPLIP_CLASS_DRIVER
- 
- install-data-hook:
- if HPLIP_BUILD
--	if [ \( "$(UNAME)" = "x86_64" -a  -d "$(libdir)/" \) ]; then \
--		cp prnt/hpcups/libImageProcessor-x86_64.so $(libdir)/ ; \
--		chmod 775 $(libdir)/libImageProcessor-x86_64.so ; \
--		ln -sf $(libdir)/libImageProcessor-x86_64.so $(libdir)/libImageProcessor.so ; \
--	fi; \
--	if [ \( \( "$(UNAME)" = "i686" -o "$(UNAME)" = "i386" \) -a -d "$(libdir)/" \) ]; then \
--		cp prnt/hpcups/libImageProcessor-x86_32.so $(libdir)/ ; \
--		chmod 775 $(libdir)/libImageProcessor-x86_32.so ; \
--		ln -sf $(libdir)/libImageProcessor-x86_32.so $(libdir)/libImageProcessor.so ; \
--	fi
- if !HPLIP_CLASS_DRIVER
- #	   If scanner build, add hpaio entry to sane dll.conf.
- 	if [ "$(scan_build)" = "yes" ]; then \
-@@ -874,10 +862,6 @@ if HPLIP_CLASS_DRIVER
- 	rm -rf $(distdir)/setup.py
- 	rm -rf $(distdir)/systray.py
- 	rm -rf $(distdir)/timedate.py
--	rm -rf $(distdir)/prnt/plugins/lj-arm32.so
--	rm -rf $(distdir)/prnt/plugins/lj-arm64.so
--	rm -rf $(distdir)/prnt/plugins/lj-x86_32.so
--	rm -rf $(distdir)/prnt/plugins/lj-x86_64.so
- 	rm -rf $(distdir)/hpijs-drv
- 	rm -rf $(distdir)/prnt/hpcups/
- 	rm -rf $(distdir)/prnt/ps/
-diff --git a/Makefile.in b/Makefile.in
-index 910a268..cd44203 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -103,7 +103,7 @@ DIST_COMMON = $(am__configure_deps) \
- 
- # ip library
- @HPLIP_BUILD_TRUE@am__append_12 = libhpip.la
--@FULL_BUILD_TRUE@@HPLIP_BUILD_TRUE@am__append_13 = prnt/drv/hpijs.drv.in.template prnt/drv/hpcups.drv.in.template prnt/hpcups/libImageProcessor-x86_64.so prnt/hpcups/libImageProcessor-x86_32.so
-+@FULL_BUILD_TRUE@@HPLIP_BUILD_TRUE@am__append_13 = prnt/drv/hpijs.drv.in.template prnt/drv/hpcups.drv.in.template
- @FULL_BUILD_TRUE@@HPLIP_BUILD_TRUE@am__append_14 = dat2drv.py install.py  hplip-install init-suse-firewall init-iptables-firewall class_rpm_build.sh hplipclassdriver.spec createPPD.sh Makefile_dat2drv hpijs-drv
- @FULL_BUILD_TRUE@@HPLIP_BUILD_TRUE@@HPLIP_CLASS_DRIVER_FALSE@am__append_15 = scan/sane/hpaio.desc \
- @FULL_BUILD_TRUE@@HPLIP_BUILD_TRUE@@HPLIP_CLASS_DRIVER_FALSE@	installer/text_install.py \
-@@ -500,8 +500,7 @@ am__hpcups_SOURCES_DIST = prnt/hpcups/HPCupsFilter.cpp \
- 	prnt/hpcups/RunLenEncoding.h prnt/hpcups/common_defines.h \
- 	prnt/hpcups/genPCLm.h common/utils.c common/utils.h \
- 	prnt/hpcups/Hbpl1_Wrapper.cpp prnt/hpcups/genPCLm.cpp \
--	prnt/hpcups/genJPEGStrips.cpp prnt/hpcups/RunLenEncoding.cpp \
--	prnt/hpcups/ImageProcessor.h
-+	prnt/hpcups/genJPEGStrips.cpp prnt/hpcups/RunLenEncoding.cpp
- @HPCUPS_INSTALL_TRUE@am_hpcups_OBJECTS =  \
- @HPCUPS_INSTALL_TRUE@	hpcups-HPCupsFilter.$(OBJEXT) \
- @HPCUPS_INSTALL_TRUE@	hpcups-dbuscomm.$(OBJEXT) \
-@@ -723,8 +722,7 @@ am__dist_locatedriver_DATA_DIST = locatedriver
- am__dist_models_DATA_DIST = data/models/models.dat
- am__dist_noinst_DATA_DIST = prnt/drv/hpijs.drv.in.template \
- 	prnt/drv/hpcups.drv.in.template \
--	prnt/hpcups/libImageProcessor-x86_64.so \
--	prnt/hpcups/libImageProcessor-x86_32.so scan/sane/hpaio.desc \
-+	scan/sane/hpaio.desc \
- 	installer/text_install.py data/localization/hplip_de.ts \
- 	data/localization/hplip_es.ts data/localization/hplip_fr.ts \
- 	data/localization/hplip_it.ts data/localization/hplip_pt.ts \
-@@ -1932,11 +1930,6 @@ am__dist_ppd_DATA_DIST = prnt/ps/hp-designjet_z6810ps_42in-ps.ppd.gz \
- 	ppd/classppd/ps/hp-postscript-inkjet.ppd.gz \
- 	ppd/classppd/ps/hp-postscript-laserjet-pro.ppd.gz \
- 	ppd/classppd/ps/hp-postscript-laserjet.ppd.gz
--am__dist_printplugins_DATA_DIST = prnt/plugins/hbpl1-arm32.so \
--	prnt/plugins/hbpl1-arm64.so prnt/plugins/hbpl1-x86_32.so \
--	prnt/plugins/hbpl1-x86_64.so prnt/plugins/lj-arm32.so \
--	prnt/plugins/lj-arm64.so prnt/plugins/lj-x86_32.so \
--	prnt/plugins/lj-x86_64.so
- am__dist_prnt_DATA_DIST = prnt/cups.py prnt/__init__.py prnt/ldl.py \
- 	prnt/pcl.py prnt/colorcal.py
- am__dist_rules_DATA_DIST = data/rules/56-hpmud.rules \
-@@ -4665,11 +4658,10 @@ libapdk_la_CFLAGS = $(libapdk_la_CXXFLAGS) -Iprnt/hpijs
- @HPCUPS_INSTALL_TRUE@	prnt/hpcups/flate_colorspace.h prnt/hpcups/RunLenEncoding.h prnt/hpcups/common_defines.h \
- @HPCUPS_INSTALL_TRUE@	prnt/hpcups/genPCLm.h \
- @HPCUPS_INSTALL_TRUE@	common/utils.c common/utils.h prnt/hpcups/Hbpl1_Wrapper.cpp prnt/hpcups/genPCLm.cpp \
--@HPCUPS_INSTALL_TRUE@	prnt/hpcups/genJPEGStrips.cpp prnt/hpcups/RunLenEncoding.cpp \
--@HPCUPS_INSTALL_TRUE@	prnt/hpcups/ImageProcessor.h
-+@HPCUPS_INSTALL_TRUE@	prnt/hpcups/genJPEGStrips.cpp prnt/hpcups/RunLenEncoding.cpp
- 
- @HPCUPS_INSTALL_TRUE@hpcups_CXXFLAGS = $(APDK_ENDIAN_FLAG) $(DBUS_CFLAGS)
--@HPCUPS_INSTALL_TRUE@hpcups_LDADD = -L./prnt/hpcups/ -ljpeg -ldl -lImageProcessor -lcups -lcupsimage -lz $(DBUS_LIBS)
-+@HPCUPS_INSTALL_TRUE@hpcups_LDADD = -L./prnt/hpcups/ -ljpeg -ldl -lcups -lcupsimage -lz $(DBUS_LIBS)
- #else
- #hpcupsdir = $(cupsfilterdir)
- #hpcups_PROGRAMS = hpcups
-@@ -4717,7 +4709,6 @@ ppddir = $(hpppddir)
- @HPLIP_CLASS_DRIVER_TRUE@filterdir = $(cupsfilterdir)
- @HPLIP_CLASS_DRIVER_TRUE@printpluginsdir = $(cupsfilterdir)
- @HPLIP_CLASS_DRIVER_TRUE@dist_filter_DATA = hpcups hpps dat2drv
--@HPLIP_CLASS_DRIVER_TRUE@dist_printplugins_DATA = prnt/plugins/hbpl1-arm32.so prnt/plugins/hbpl1-arm64.so prnt/plugins/hbpl1-x86_32.so prnt/plugins/hbpl1-x86_64.so prnt/plugins/lj-arm32.so prnt/plugins/lj-arm64.so prnt/plugins/lj-x86_32.so prnt/plugins/lj-x86_64.so
- all: all-am
- 
- .SUFFIXES:
-@@ -9380,16 +9371,6 @@ uninstall-am: uninstall-apparmor_abstractionDATA \
- 
- 
- install-data-hook:
--@HPLIP_BUILD_TRUE@	if [ \( "$(UNAME)" = "x86_64" -a  -d "$(libdir)/" \) ]; then \
--@HPLIP_BUILD_TRUE@		cp prnt/hpcups/libImageProcessor-x86_64.so $(libdir)/ ; \
--@HPLIP_BUILD_TRUE@		chmod 775 $(libdir)/libImageProcessor-x86_64.so ; \
--@HPLIP_BUILD_TRUE@		ln -sf $(libdir)/libImageProcessor-x86_64.so $(libdir)/libImageProcessor.so ; \
--@HPLIP_BUILD_TRUE@	fi; \
--@HPLIP_BUILD_TRUE@	if [ \( \( "$(UNAME)" = "i686" -o "$(UNAME)" = "i386" \) -a -d "$(libdir)/" \) ]; then \
--@HPLIP_BUILD_TRUE@		cp prnt/hpcups/libImageProcessor-x86_32.so $(libdir)/ ; \
--@HPLIP_BUILD_TRUE@		chmod 775 $(libdir)/libImageProcessor-x86_32.so ; \
--@HPLIP_BUILD_TRUE@		ln -sf $(libdir)/libImageProcessor-x86_32.so $(libdir)/libImageProcessor.so ; \
--@HPLIP_BUILD_TRUE@	fi
- #	   If scanner build, add hpaio entry to sane dll.conf.
- @HPLIP_BUILD_TRUE@@HPLIP_CLASS_DRIVER_FALSE@	if [ "$(scan_build)" = "yes" ]; then \
- @HPLIP_BUILD_TRUE@@HPLIP_CLASS_DRIVER_FALSE@	   $(mkinstalldirs) $(DESTDIR)/etc/sane.d; \
-@@ -9556,10 +9537,6 @@ dist-hook:
- @HPLIP_CLASS_DRIVER_TRUE@	rm -rf $(distdir)/setup.py
- @HPLIP_CLASS_DRIVER_TRUE@	rm -rf $(distdir)/systray.py
- @HPLIP_CLASS_DRIVER_TRUE@	rm -rf $(distdir)/timedate.py
--@HPLIP_CLASS_DRIVER_TRUE@	rm -rf $(distdir)/prnt/plugins/lj-arm32.so
--@HPLIP_CLASS_DRIVER_TRUE@	rm -rf $(distdir)/prnt/plugins/lj-arm64.so
--@HPLIP_CLASS_DRIVER_TRUE@	rm -rf $(distdir)/prnt/plugins/lj-x86_32.so
--@HPLIP_CLASS_DRIVER_TRUE@	rm -rf $(distdir)/prnt/plugins/lj-x86_64.so
- @HPLIP_CLASS_DRIVER_TRUE@	rm -rf $(distdir)/hpijs-drv
- @HPLIP_CLASS_DRIVER_TRUE@	rm -rf $(distdir)/prnt/hpcups/
- @HPLIP_CLASS_DRIVER_TRUE@	rm -rf $(distdir)/prnt/ps/
-diff --git a/prnt/hpcups/HPCupsFilter.cpp b/prnt/hpcups/HPCupsFilter.cpp
-index 5b282d8..0bacfaf 100644
---- a/prnt/hpcups/HPCupsFilter.cpp
-+++ b/prnt/hpcups/HPCupsFilter.cpp
-@@ -31,7 +31,6 @@
- \*****************************************************************************/
- 
- #include "HPCupsFilter.h"
--#include "ImageProcessor.h"
- 
- #include <signal.h>
- #include <sys/wait.h>
-@@ -651,21 +650,8 @@
- 
-     sprintf(hpPreProcessedRasterFile, "%s/hp_%s_cups_SwapedPagesXXXXXX",CUPS_TMP_DIR, m_JA.user_name);
-  
--    image_processor_t* imageProcessor=NULL;
--    IMAGE_PROCESSOR_ERROR result;
--    //added if condition to check if pinter language is "ljzjstream"
--    //If so, then bypass imageprocessing functions while running HPCUPS filter.
--    if(strncmp(m_JA.printer_platform, "ljzjstream",10) == 0){
--        imageProcessor = imageProcessorCreate();
--    }
-     while (cupsRasterReadHeader2(cups_raster, &cups_header))
-     {
--       if(strncmp(m_JA.printer_platform, "ljzjstream",10) == 0){
--        result = imageProcessorStartPage(imageProcessor, &cups_header);
--        if (result != IPE_SUCCESS){
--            dbglog("DEBUG: imageProcessorStartPage failed result = %d\n", result);
--        }
--     }
-         current_page_number++;
- 
-         if (current_page_number == 1) {
-@@ -764,14 +750,6 @@
-             color_raster = rgbRaster;
-             black_raster = kRaster;
- 
--	if(strncmp(m_JA.printer_platform, "ljzjstream",10) == 0)
--	{
--            result = imageProcessorProcessLine(imageProcessor, m_pPrinterBuffer, cups_header.cupsBytesPerLine);
--            if (result != IPE_SUCCESS){
--                dbglog("DEBUG: imageProcessorProcessLine failed result = %d\n", result);
--            }
--	}
--
-             if ((y == 0) && !is_ljmono) {
-                 //For ljmono, make sure that first line is not a blankRaster line.Otherwise printer
-                 //may not skip blank lines before actual data
-@@ -801,14 +779,6 @@
-             }
-         }  // for() loop end
- 
--	if(strncmp(m_JA.printer_platform, "ljzjstream",10) == 0)
--	{
--        result = imageProcessorEndPage(imageProcessor);
--        if (result != IPE_SUCCESS){
--                dbglog("DEBUG: imageProcessorEndPage failed result = %d\n", result);
--        }
--	}
--
-         m_Job.NewPage();
-         if (err != NO_ERROR) {
-             break;
-@@ -823,11 +793,6 @@
-         rgbRaster = NULL;
-     }
- 
-- 
--   if(strncmp(m_JA.printer_platform, "ljzjstream",10) == 0)
--   {
--    imageProcessorDestroy(imageProcessor);
--   }
-     unlink(hpPreProcessedRasterFile);
-     return ret_status;
- }
--- 
-2.19.1
-
diff --git a/gnu/packages/patches/snappy-add-inline-for-GCC.patch b/gnu/packages/patches/snappy-add-inline-for-GCC.patch
new file mode 100644
index 0000000000..04d35f56ee
--- /dev/null
+++ b/gnu/packages/patches/snappy-add-inline-for-GCC.patch
@@ -0,0 +1,67 @@
+From 0c716d435abe65250100c2caea0e5126ac4e14bd Mon Sep 17 00:00:00 2001
+From: "Georgi D. Sotirov" <gdsotirov@gmail.com>
+Date: Wed, 5 May 2021 14:16:46 +0300
+Subject: [PATCH] Add inline with SNAPPY_ATTRIBUTE_ALWAYS_INLINE
+
+Add inline with SNAPPY_ATTRIBUTE_ALWAYS_INLINE on AdvanceToNextTag to
+fix the following compilation errors and a warning with GCC:
+
+[  2%] Building CXX object CMakeFiles/snappy.dir/snappy.cc.o
+/usr/bin/c++   -DHAVE_CONFIG_H -Dsnappy_EXPORTS
+-I/tmp/snappy-1.1.9/build -I/tmp/snappy-1.1.9  -O3
+-march=i586 -mtune=i686 -Wall -Wextra -fno-exceptions -fno-rtti -O3
+-DNDEBUG -fPIC   -std=c++11 -o CMakeFiles/snappy.dir/snappy.cc.o -c
+/tmp/snappy-1.1.9/snappy.cc
+/tmp/snappy-1.1.9/snappy.cc:1017:8: warning: always_inline
+function might not be inlinable [-Wattributes]
+ size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) {
+        ^
+/tmp/snappy-1.1.9/snappy.cc: In function 'std::pair<const
+unsigned char*, int> snappy::DecompressBranchless(const uint8_t*, const
+uint8_t*, ptrdiff_t, T, ptrdiff_t) [with T = char*; uint8_t = unsigned
+char; ptrdiff_t = int]':
+/tmp/snappy-1.1.9/snappy.cc:1017:8: error: inlining failed in
+call to always_inline 'size_t snappy::AdvanceToNextTag(const uint8_t**,
+size_t*)': function body can be overwritten at link time
+/tmp/snappy-1.1.9/snappy.cc:1097:53: error: called from here
+         size_t tag_type = AdvanceToNextTag(&ip, &tag);
+                                                     ^
+/tmp/snappy-1.1.9/snappy.cc:1017:8: error: inlining failed in
+call to always_inline 'size_t snappy::AdvanceToNextTag(const uint8_t**,
+size_t*)': function body can be overwritten at link time
+ size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) {
+        ^
+/tmp/snappy-1.1.9/snappy.cc:1097:53: error: called from here
+         size_t tag_type = AdvanceToNextTag(&ip, &tag);
+                                                     ^
+/tmp/snappy-1.1.9/snappy.cc:1017:8: error: inlining failed in
+call to always_inline 'size_t snappy::AdvanceToNextTag(const uint8_t**,
+size_t*)': function body can be overwritten at link time
+ size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) {
+        ^
+/tmp/snappy-1.1.9/snappy.cc:1097:53: error: called from here
+         size_t tag_type = AdvanceToNextTag(&ip, &tag);
+                                                     ^
+CMakeFiles/snappy.dir/build.make:137: recipe for target
+'CMakeFiles/snappy.dir/snappy.cc.o' failed
+
+Just like with other functions using SNAPPY_ATTRIBUTE_ALWAYS_INLINE
+macro (i.e. __attribute__((always_inline)) ) it is necessary to use C++
+inline specifier.
+---
+ snappy.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/snappy.cc b/snappy.cc
+index 79dc0e8..51157be 100644
+--- a/snappy.cc
++++ b/snappy.cc
+@@ -1014,7 +1014,7 @@ void MemMove(ptrdiff_t dst, const void* src, size_t size) {
+ }
+ 
+ SNAPPY_ATTRIBUTE_ALWAYS_INLINE
+-size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) {
++inline size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) {
+   const uint8_t*& ip = *ip_p;
+   // This section is crucial for the throughput of the decompression loop.
+   // The latency of an iteration is fundamentally constrained by the
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index 123fef92b6..8f163bdd37 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -1101,13 +1101,13 @@ the PDF pages.")
 (define-public img2pdf
   (package
     (name "img2pdf")
-    (version "0.4.0")
+    (version "0.4.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "img2pdf" version))
        (sha256
-        (base32 "1jdhmpzgj8815bhargb3xp3ydlqxwkz0mcadrflx2ga0p056kvpa"))))
+        (base32 "0ljmxp7myxccfdy4kxpn4jzq35qs4pbmmmnih9vis8abm2f2589q"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-pikepdf" ,python-pikepdf)
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 8b31368424..85c57e9f17 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -41,6 +41,7 @@
 ;;; Copyright © 2020 Konrad Hinsen <konrad.hinsen@fastmail.net>
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;; Copyright © 2021 Ekaitz Zarraga <ekaitz@elenq.tech>
+;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1189,8 +1190,7 @@ Amazon S3 compatible object storage server.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://dl.bintray.com/pycurl/pycurl/pycurl-"
-                           version ".tar.gz"))
+       (uri (pypi-uri "pycurl" version))
        (sha256
         (base32 "1cwlb76vddqp2mxqvjbhf367caddzy82rhangddjjhjqaj8x4zgc"))))
     (build-system python-build-system)
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index eebb44b9dc..05aa54c09c 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -99,6 +99,7 @@
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2021 Ellis Kenyő <me@elken.dev>
 ;;; Copyright © 2021 LibreMiami <packaging-guix@libremiami.org>
+;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -181,6 +182,7 @@
   #:use-module (gnu packages qt)
   #:use-module (gnu packages rdf)
   #:use-module (gnu packages readline)
+  #:use-module (gnu packages regex)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages search)
   #:use-module (gnu packages scanner)
@@ -1287,6 +1289,30 @@ conventions and aliases in the same expression.")
 API for locking files.")
     (license license:expat)))
 
+(define-public python-fb-re2
+  (package
+    (name "python-fb-re2")
+    (version "1.0.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/facebook/pyre2")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
+    (build-system python-build-system)
+    (inputs
+     `(("re2" ,re2)))
+    (home-page "https://github.com/facebook/pyre2")
+    (synopsis "Python wrapper for RE2")
+    (description "This package provides a Python extension that wraps Google's
+RE2 regular expression library.  It implements many of the features of
+Python's built-in @code{re} module with compatible interfaces.")
+    (license license:bsd-3)))
+
 (define-public python-filelock
   (package
     (name "python-filelock")
@@ -6089,13 +6115,13 @@ the OleFileIO module from PIL, the Python Image Library.")
 (define-public python-pikepdf
   (package
     (name "python-pikepdf")
-    (version "2.11.4")
+    (version "2.12.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pikepdf" version))
        (sha256
-        (base32 "0kd5ydnsmlikkg69r255wvq4vy7plh7dx077s2saly5s5vdcqlkk"))))
+        (base32 "1fgk93v5zac38ak00nw94mi44z9701kn20dkdfpwqr3588vnxfzw"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #false))                ;require python-xmp-toolkit
@@ -7557,7 +7583,18 @@ without using the configuration machinery.")
                 "env = {'PATH': '', 'PYTHONPATH': os.environ['PYTHONPATH']}")
                (("env = \\{'PATH':  str\\(b\\)\\}")
                 "env = {'PATH': str(b), 'PYTHONPATH': os.environ['PYTHONPATH']}"))
-             #t)))))
+             #t))
+         ;; Migration is running whenever etc/jupyter exists, but the
+         ;; Guix-managed directory will never contain any migratable IPython
+         ;; config files and cannot be written to anyway, so just pretend we
+         ;; already did that.
+         (add-after 'install 'disable-migration
+           (lambda* (#:key outputs #:allow-other-keys)
+             (mkdir-p (string-append (assoc-ref outputs "out") "/etc/jupyter"))
+             (invoke "touch"
+               (string-append
+                 (assoc-ref outputs "out")
+                 "/etc/jupyter/migrated")))))))
     (propagated-inputs
      `(("python-traitlets" ,python-traitlets)))
     (native-inputs
@@ -8342,13 +8379,13 @@ interfaces in an easy and portable manner.")
 (define-public python-networkx
   (package
     (name "python-networkx")
-    (version "2.5")
+    (version "2.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "networkx" version))
        (sha256
-        (base32 "00hnii2lplig2s324k1hvi29pyfab6z7i22922f67jgv4da9ay3r"))))
+        (base32 "0ni3pdisdr8vfp5m9sw8jzr7jwzgqqmc9hq327vrf4n4ra2xb70h"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
diff --git a/gnu/packages/racket.scm b/gnu/packages/racket.scm
index f2bbf28564..18af14b2ec 100644
--- a/gnu/packages/racket.scm
+++ b/gnu/packages/racket.scm
@@ -66,14 +66,14 @@
 (define-public racket-minimal
   (package
     (name "racket-minimal")
-    (version "8.0")            ; note: remember to also update racket!
+    (version "8.1")            ; note: remember to also update racket!
     (source
      (origin
        (method url-fetch)
        (uri (map (lambda (base)
                    (string-append base version "/racket-minimal-src.tgz"))
                  %installer-mirrors))
-       (sha256 "0mwyffw4gcci8wmzxa3j28h03h0gsz55aard8qrk3lri8r2xyg21")
+       (sha256 "04zzqybpxss50n1jrwwq98539gw0y0ygpw9civl2sq3s4ww7m8l3")
        (patches (search-patches
                  "racket-sh-via-rktio.patch"))))
     (home-page "https://racket-lang.org")
@@ -100,36 +100,6 @@
         (srfi srfi-1))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-chez-configure
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (substitute* "src/cs/c/Makefile.in"
-               (("/bin/sh") (which "sh")))
-             ;; TODO: Racket CS uses a fork of Chez Scheme.
-             ;; Most of this is copy-pasted from the "chez.scm",
-             ;; but maybe there's a way to reuse more directly.
-             (with-directory-excursion "src/ChezScheme"
-               (substitute* (find-files "mats" "Mf-.*")
-                 (("^[[:space:]]+(cc ) *") "\tgcc "))
-               (substitute*
-                   (find-files "." (string-append
-                                    "("
-                                    "Mf-[a-zA-Z0-9.]+"
-                                    "|Makefile[a-zA-Z0-9.]*"
-                                    "|checkin"
-                                    "|stex\\.stex"
-                                    "|newrelease"
-                                    "|workarea"
-                                    "|unix\\.ms"
-                                    "|^6\\.ms"
-                                    ;;"|[a-zA-Z0-9.]+\\.ms" ; guile can't read
-                                    ")"))
-                 (("/bin/rm") (which "rm"))
-                 (("/bin/ln") (which "ln"))
-                 (("/bin/cp") (which "cp"))
-                 (("/bin/echo") (which "echo")))
-               (substitute* "makefiles/installsh"
-                 (("/bin/true") (which "true"))))
-             #t))
          (add-before 'configure 'pre-configure-minimal
            (lambda* (#:key inputs #:allow-other-keys)
              (chdir "src")
@@ -215,7 +185,7 @@ DrRacket IDE, are not included.")
                  %installer-mirrors))
        (sha256
         (base32
-         "047wpjblfzmf1msz7snrp2c2h0zxyzlmbsqr9bwsyvz3frcg0888"))))
+         "0xdqwrwm604bbnr97h75dps2ixxz2svlw0fn0f674bn04dcfd60f"))))
     (inputs
      `(;; sqlite and libraries for `racket/draw' are needed to build the doc.
        ("cairo" ,cairo)
diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm
index e008b23a59..b7647ea1ae 100644
--- a/gnu/packages/radio.scm
+++ b/gnu/packages/radio.scm
@@ -497,7 +497,6 @@ environment.")
        `(("doxygen" ,doxygen)
          ("pkg-config" ,pkg-config)
          ("pybind11" ,pybind11)
-         ("python" ,python)
          ("python-mako" ,python-mako)
          ("python-six" ,python-six)))
       (inputs
@@ -509,8 +508,21 @@ environment.")
          ("hackrf" ,hackrf)
          ("libsndfile" ,libsndfile)
          ("log4cpp" ,log4cpp)
+         ("python" ,python)
+         ("python-numpy" ,python-numpy)
+         ("python-pyqt" ,python-pyqt)
          ("rtl-sdr" ,rtl-sdr)
          ("volk" ,volk)))
+      (arguments
+       `(#:modules ((guix build cmake-build-system)
+                    ((guix build python-build-system) #:prefix python:)
+                    (guix build utils))
+         #:imported-modules (,@%cmake-build-system-modules
+                             (guix build python-build-system))
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'install 'wrap-python
+             (assoc-ref python:%standard-phases 'wrap)))))
       (synopsis "GNU Radio block for interfacing with various radio hardware")
       (description "This is a block for GNU Radio allowing to use a common API
 to access different radio hardware.")
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 31ce3a0d00..34c0a6f79f 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -2793,6 +2793,33 @@ high-level toolkit for building cryptographic systems and protocols.")
     (home-page "https://github.com/crypto-rb/rbnacl")
     (license license:expat)))
 
+(define-public ruby-hkdf
+  (package
+    (name "ruby-hkdf")
+    (version "1.0.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/jtdowney/hkdf")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32
+          "1xqwdmxfnhagivwgb5v9ilwpb4jxlsqwj7pnj43d65zzg5m8p9r5"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:test-target "default"))
+    (native-inputs
+     `(("ruby-rspec" ,ruby-rspec)))
+    (synopsis "HMAC-based Key Derivation Function")
+    (description
+     "This package provides a Ruby implementation of RFC5869: @acronym{HKDF,
+HMAC-based Extract-and-Expand Key Derivation Function}.  The goal of HKDF is to
+take some source key material and generate suitable cryptographic keys from it.")
+    (home-page "https://github.com/jtdowney/hkdf")
+    (license license:expat)))
+
 (define-public ruby-nenv
   (package
     (name "ruby-nenv")
@@ -11270,6 +11297,40 @@ indentation will probably be an issue and hence this gem.")
 YAML.load suitable for accepting user input in Ruby applications.")
     (license license:expat)))
 
+(define-public ruby-yaml-lint
+  (package
+    (name "ruby-yaml-lint")
+    (version "0.0.10")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/Pryz/yaml-lint")
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32
+          "1jz26mxjkdyjbgqp7f9isnzd1i6vkizsswyj1v639nmq31hwfh0d"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "rspec"))
+             #t)))))
+    (native-inputs
+     `(("ruby-coveralls" ,ruby-coveralls)
+       ("ruby-rspec" ,ruby-rspec)
+       ("ruby-simplecov" ,ruby-simplecov)))
+    (synopsis "Simple YAML check tool")
+    (description
+     "@code{yaml-lint} will simply try to load the YAML file with the built-in
+Ruby yaml library.")
+    (home-page "https://github.com/Pryz/yaml-lint")
+    (license license:expat)))
+
 (define-public ruby-mercenary
   (package
     (name "ruby-mercenary")
diff --git a/gnu/packages/rust-apps.scm b/gnu/packages/rust-apps.scm
index dc9526b267..d31f95ca05 100644
--- a/gnu/packages/rust-apps.scm
+++ b/gnu/packages/rust-apps.scm
@@ -83,21 +83,22 @@ low-end hardware and serving many concurrent requests.")
 (define-public bat
   (package
     (name "bat")
-    (version "0.18.0")
+    (version "0.18.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "bat" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1hr6vzkw8mdy9v0sg1pg9gibamabhip05s7zdkwzwlv69qnhgs1z"))))
+        (base32 "0nvqkddpjxsmd27gqn8czql07faad50mihin5ivb9sxxnni28wnc"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-ansi-colours" ,rust-ansi-colours-1)
         ("rust-ansi-term" ,rust-ansi-term-0.12)
         ("rust-atty" ,rust-atty-0.2)
-        ("rust-bugreport" ,rust-bugreport-0.3)
+        ("rust-bugreport" ,rust-bugreport-0.4)
+        ("rust-clap" ,rust-clap-2)
         ("rust-clap" ,rust-clap-2)
         ("rust-clircle" ,rust-clircle-0.3)
         ("rust-console" ,rust-console-0.14)
@@ -118,7 +119,7 @@ low-end hardware and serving many concurrent requests.")
         ("rust-wild" ,rust-wild-2))
        #:cargo-development-inputs
        (("rust-assert-cmd" ,rust-assert-cmd-1)
-        ("rust-nix" ,rust-nix-0.19)
+        ("rust-nix" ,rust-nix-0.20)
         ("rust-predicates" ,rust-predicates-1)
         ("rust-serial-test" ,rust-serial-test-0.5)
         ("rust-tempfile" ,rust-tempfile-3)
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index 57b1a41111..ccee1506bf 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -956,7 +956,7 @@ files and text.")
 (define-public nushell
   (package
     (name "nushell")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method git-fetch)
@@ -965,7 +965,7 @@ files and text.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0x7r8ipvypf6py2h03pdqr8pal6vyp6mskvss1rr8f0bcy3gr725"))))
+        (base32 "1dpbc6m0pxizkh4r02nw1i1fx9v43llylqnd28naqkklwc15pb2w"))))
     (build-system cargo-build-system)
     (arguments
      `(#:tests? #false                  ;missing files
@@ -976,39 +976,40 @@ files and text.")
         ("rust-futures" ,rust-futures-0.3)
         ("rust-itertools" ,rust-itertools-0.10)
         ("rust-log" ,rust-log-0.4)
-        ("rust-nu-cli" ,rust-nu-cli-0.29)
-        ("rust-nu-command" ,rust-nu-command-0.29)
-        ("rust-nu-data" ,rust-nu-data-0.29)
-        ("rust-nu-engine" ,rust-nu-engine-0.29)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-parser" ,rust-nu-parser-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
-        ("rust-nu-plugin-binaryview" ,rust-nu-plugin-binaryview-0.29)
-        ("rust-nu-plugin-chart" ,rust-nu-plugin-chart-0.29)
-        ("rust-nu-plugin-fetch" ,rust-nu-plugin-fetch-0.29)
-        ("rust-nu-plugin-from-bson" ,rust-nu-plugin-from-bson-0.29)
-        ("rust-nu-plugin-from-sqlite" ,rust-nu-plugin-from-sqlite-0.29)
-        ("rust-nu-plugin-inc" ,rust-nu-plugin-inc-0.29)
-        ("rust-nu-plugin-match" ,rust-nu-plugin-match-0.29)
-        ("rust-nu-plugin-post" ,rust-nu-plugin-post-0.29)
-        ("rust-nu-plugin-ps" ,rust-nu-plugin-ps-0.29)
-        ("rust-nu-plugin-s3" ,rust-nu-plugin-s3-0.29)
-        ("rust-nu-plugin-selector" ,rust-nu-plugin-selector-0.29)
-        ("rust-nu-plugin-start" ,rust-nu-plugin-start-0.29)
-        ("rust-nu-plugin-sys" ,rust-nu-plugin-sys-0.29)
-        ("rust-nu-plugin-textview" ,rust-nu-plugin-textview-0.29)
-        ("rust-nu-plugin-to-bson" ,rust-nu-plugin-to-bson-0.29)
-        ("rust-nu-plugin-to-sqlite" ,rust-nu-plugin-to-sqlite-0.29)
-        ("rust-nu-plugin-tree" ,rust-nu-plugin-tree-0.29)
-        ("rust-nu-plugin-xpath" ,rust-nu-plugin-xpath-0.29)
+        ("rust-nu-cli" ,rust-nu-cli-0.31)
+        ("rust-nu-command" ,rust-nu-command-0.31)
+        ("rust-nu-data" ,rust-nu-data-0.31)
+        ("rust-nu-engine" ,rust-nu-engine-0.31)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-parser" ,rust-nu-parser-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.31)
+        ("rust-nu-plugin-binaryview" ,rust-nu-plugin-binaryview-0.31)
+        ("rust-nu-plugin-chart" ,rust-nu-plugin-chart-0.31)
+        ("rust-nu-plugin-fetch" ,rust-nu-plugin-fetch-0.31)
+        ("rust-nu-plugin-from-bson" ,rust-nu-plugin-from-bson-0.31)
+        ("rust-nu-plugin-from-sqlite" ,rust-nu-plugin-from-sqlite-0.31)
+        ("rust-nu-plugin-inc" ,rust-nu-plugin-inc-0.31)
+        ("rust-nu-plugin-match" ,rust-nu-plugin-match-0.31)
+        ("rust-nu-plugin-post" ,rust-nu-plugin-post-0.31)
+        ("rust-nu-plugin-ps" ,rust-nu-plugin-ps-0.31)
+        ("rust-nu-plugin-query-json" ,rust-nu-plugin-query-json-0.31)
+        ("rust-nu-plugin-s3" ,rust-nu-plugin-s3-0.31)
+        ("rust-nu-plugin-selector" ,rust-nu-plugin-selector-0.31)
+        ("rust-nu-plugin-start" ,rust-nu-plugin-start-0.31)
+        ("rust-nu-plugin-sys" ,rust-nu-plugin-sys-0.31)
+        ("rust-nu-plugin-textview" ,rust-nu-plugin-textview-0.31)
+        ("rust-nu-plugin-to-bson" ,rust-nu-plugin-to-bson-0.31)
+        ("rust-nu-plugin-to-sqlite" ,rust-nu-plugin-to-sqlite-0.31)
+        ("rust-nu-plugin-tree" ,rust-nu-plugin-tree-0.31)
+        ("rust-nu-plugin-xpath" ,rust-nu-plugin-xpath-0.31)
         ("rust-pretty-env-logger" ,rust-pretty-env-logger-0.4))
        #:cargo-development-inputs
        (("rust-dunce" ,rust-dunce-1)
         ("rust-hamcrest2" ,rust-hamcrest2-0.3)
-        ("rust-nu-test-support" ,rust-nu-test-support-0.29)
+        ("rust-nu-test-support" ,rust-nu-test-support-0.31)
         ("rust-serial-test" ,rust-serial-test-0.5))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -1032,17 +1033,17 @@ directory.  These values can be piped through a series of steps, in a series
 of commands called a ``pipeline''.")
     (license license:expat)))
 
-(define-public rust-nu-ansi-term-0.29
+(define-public rust-nu-ansi-term-0.31
   (package
     (name "rust-nu-ansi-term")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-ansi-term" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0zlcma4kg6rsfp5sgfp3yy717bdrn9nq32rdi2nabpwg3qa9mmkb"))))
+        (base32 "193nwg7j3p7mw2282vsx8ylfxg0wyydrgxd78ph3rqfqi83468n6"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -1056,24 +1057,36 @@ of commands called a ``pipeline''.")
 underline).")
     (license license:expat)))
 
-(define-public rust-nu-cli-0.29
+(define-public rust-nu-ansi-term-0.29
   (package
-    (name "rust-nu-cli")
+    (inherit rust-nu-ansi-term-0.31)
+    (name "rust-nu-ansi-term")
     (version "0.29.0")
     (source
      (origin
        (method url-fetch)
+       (uri (crate-uri "nu-ansi-term" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0zlcma4kg6rsfp5sgfp3yy717bdrn9nq32rdi2nabpwg3qa9mmkb"))))))
+
+(define-public rust-nu-cli-0.31
+  (package
+    (name "rust-nu-cli")
+    (version "0.31.0")
+    (source
+     (origin
+       (method url-fetch)
        (uri (crate-uri "nu-cli" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0ya95r54k59h0gyz2wgj8y2lhddnk3aw7ww1npzcbfsy1xi1zvi5"))))
+        (base32 "1kg68san8p3nnhhfsld21hv5s6dx1kadlsc71l661p4f8pjcqp3r"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-arboard" ,rust-arboard-1)
-        ("rust-async-recursion"
-         ,rust-async-recursion-0.3)
+        ("rust-async-recursion" ,rust-async-recursion-0.3)
         ("rust-async-trait" ,rust-async-trait-0.1)
         ("rust-base64" ,rust-base64-0.13)
         ("rust-bigdecimal" ,rust-bigdecimal-0.2)
@@ -1083,13 +1096,11 @@ underline).")
         ("rust-chrono" ,rust-chrono-0.4)
         ("rust-chrono-tz" ,rust-chrono-tz-0.5)
         ("rust-clap" ,rust-clap-2)
-        ("rust-codespan-reporting"
-         ,rust-codespan-reporting-0.11)
+        ("rust-codespan-reporting" ,rust-codespan-reporting-0.11)
         ("rust-csv" ,rust-csv-1)
         ("rust-ctrlc" ,rust-ctrlc-3)
         ("rust-derive-new" ,rust-derive-new-0.5)
-        ("rust-directories-next"
-         ,rust-directories-next-2)
+        ("rust-directories-next" ,rust-directories-next-2)
         ("rust-dirs-next" ,rust-dirs-next-2)
         ("rust-dtparse" ,rust-dtparse-1)
         ("rust-dunce" ,rust-dunce-1)
@@ -1104,40 +1115,37 @@ underline).")
         ("rust-glob" ,rust-glob-0.3)
         ("rust-htmlescape" ,rust-htmlescape-0.3)
         ("rust-ical" ,rust-ical-0.7)
-        ("rust-ichwh" ,rust-ichwh-0.3)
         ("rust-indexmap" ,rust-indexmap-1)
         ("rust-inflector" ,rust-inflector-0.11)
         ("rust-itertools" ,rust-itertools-0.10)
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-log" ,rust-log-0.4)
         ("rust-meval" ,rust-meval-0.2)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
-        ("rust-nu-command" ,rust-nu-command-0.29)
-        ("rust-nu-data" ,rust-nu-data-0.29)
-        ("rust-nu-engine" ,rust-nu-engine-0.29)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-json" ,rust-nu-json-0.29)
-        ("rust-nu-parser" ,rust-nu-parser-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
-        ("rust-nu-stream" ,rust-nu-stream-0.29)
-        ("rust-nu-table" ,rust-nu-table-0.29)
-        ("rust-nu-test-support"
-         ,rust-nu-test-support-0.29)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.31)
+        ("rust-nu-command" ,rust-nu-command-0.31)
+        ("rust-nu-data" ,rust-nu-data-0.31)
+        ("rust-nu-engine" ,rust-nu-engine-0.31)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-json" ,rust-nu-json-0.31)
+        ("rust-nu-parser" ,rust-nu-parser-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-pretty-hex" ,rust-nu-pretty-hex-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
+        ("rust-nu-stream" ,rust-nu-stream-0.31)
+        ("rust-nu-table" ,rust-nu-table-0.31)
+        ("rust-nu-test-support" ,rust-nu-test-support-0.31)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.31)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-num-format" ,rust-num-format-0.4)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-parking-lot" ,rust-parking-lot-0.11)
         ("rust-pin-utils" ,rust-pin-utils-0.1)
-        ("rust-pretty-hex" ,rust-pretty-hex-0.2)
         ("rust-ptree" ,rust-ptree-0.3)
-        ("rust-query-interface"
-         ,rust-query-interface-0.3)
+        ("rust-query-interface" ,rust-query-interface-0.3)
+        ("rust-quick-xml" ,rust-quick-xml-0.21)
         ("rust-quickcheck" ,rust-quickcheck-1)
         ("rust-quickcheck-macros" ,rust-quickcheck-macros-1)
-        ("rust-quick-xml" ,rust-quick-xml-0.21)
         ("rust-rand" ,rust-rand-0.8)
         ("rust-rayon" ,rust-rayon-1)
         ("rust-regex" ,rust-regex-1)
@@ -1149,15 +1157,13 @@ underline).")
         ("rust-serde-bytes" ,rust-serde-bytes-0.11)
         ("rust-serde-ini" ,rust-serde-ini-0.2)
         ("rust-serde-json" ,rust-serde-json-1)
-        ("rust-serde-urlencoded"
-         ,rust-serde-urlencoded-0.7)
+        ("rust-serde-urlencoded" ,rust-serde-urlencoded-0.7)
         ("rust-serde-yaml" ,rust-serde-yaml-0.8)
         ("rust-sha2" ,rust-sha2-0.9)
         ("rust-shadow-rs" ,rust-shadow-rs-0.5)
         ("rust-shadow-rs" ,rust-shadow-rs-0.5)
         ("rust-shellexpand" ,rust-shellexpand-2)
-        ("rust-strip-ansi-escapes"
-         ,rust-strip-ansi-escapes-0.1)
+        ("rust-strip-ansi-escapes" ,rust-strip-ansi-escapes-0.1)
         ("rust-sxd-document" ,rust-sxd-document-0.3)
         ("rust-sxd-xpath" ,rust-sxd-xpath-0.4)
         ("rust-tempfile" ,rust-tempfile-3)
@@ -1168,8 +1174,7 @@ underline).")
         ("rust-toml" ,rust-toml-0.5)
         ("rust-trash" ,rust-trash-1)
         ("rust-umask" ,rust-umask-1)
-        ("rust-unicode-segmentation"
-         ,rust-unicode-segmentation-1)
+        ("rust-unicode-segmentation" ,rust-unicode-segmentation-1)
         ("rust-url" ,rust-url-2)
         ("rust-users" ,rust-users-0.11)
         ("rust-uuid" ,rust-uuid-0.8)
@@ -1180,25 +1185,22 @@ underline).")
     (description "CLI for nushell")
     (license license:expat)))
 
-(define-public rust-nu-command-0.29
+(define-public rust-nu-command-0.31
   (package
     (name "rust-nu-command")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-command" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0nydc7vyrhfw99bimjs6061zgcqqi8hjjx20sq3qn2njgk1p730l"))))
+        (base32 "079izj7fwdrdi9zi2260gkbqma7bm3lnx57hdlcslyg41mxka44c"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-arboard" ,rust-arboard-1)
-        ("rust-async-recursion"
-         ,rust-async-recursion-0.3)
-        ("rust-async-trait" ,rust-async-trait-0.1)
         ("rust-base64" ,rust-base64-0.13)
         ("rust-bigdecimal" ,rust-bigdecimal-0.2)
         ("rust-byte-unit" ,rust-byte-unit-4)
@@ -1223,13 +1225,10 @@ underline).")
         ("rust-filesize" ,rust-filesize-0.2)
         ("rust-fs-extra" ,rust-fs-extra-1)
         ("rust-futures" ,rust-futures-0.3)
-        ("rust-futures-util" ,rust-futures-util-0.3)
-        ("rust-futures-codec" ,rust-futures-codec-0.4)
         ("rust-getset" ,rust-getset-0.1)
         ("rust-glob" ,rust-glob-0.3)
         ("rust-htmlescape" ,rust-htmlescape-0.3)
         ("rust-ical" ,rust-ical-0.7)
-        ("rust-ichwh" ,rust-ichwh-0.3)
         ("rust-indexmap" ,rust-indexmap-1)
         ("rust-inflector" ,rust-inflector-0.11)
         ("rust-itertools" ,rust-itertools-0.10)
@@ -1238,26 +1237,26 @@ underline).")
         ("rust-md5" ,rust-md5-0.7)
         ("rust-meval" ,rust-meval-0.2)
         ("rust-minus" ,rust-minus-3)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
-        ("rust-nu-data" ,rust-nu-data-0.29)
-        ("rust-nu-engine" ,rust-nu-engine-0.29)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-json" ,rust-nu-json-0.29)
-        ("rust-nu-parser" ,rust-nu-parser-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
-        ("rust-nu-stream" ,rust-nu-stream-0.29)
-        ("rust-nu-table" ,rust-nu-table-0.29)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.31)
+        ("rust-nu-data" ,rust-nu-data-0.31)
+        ("rust-nu-engine" ,rust-nu-engine-0.31)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-json" ,rust-nu-json-0.31)
+        ("rust-nu-parser" ,rust-nu-parser-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-pretty-hex" ,rust-nu-pretty-hex-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
+        ("rust-nu-stream" ,rust-nu-stream-0.31)
+        ("rust-nu-table" ,rust-nu-table-0.31)
         ("rust-nu-test-support"
-         ,rust-nu-test-support-0.29)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
+         ,rust-nu-test-support-0.31)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.31)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-num-format" ,rust-num-format-0.4)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-parking-lot" ,rust-parking-lot-0.11)
         ("rust-pin-utils" ,rust-pin-utils-0.1)
-        ("rust-pretty-hex" ,rust-pretty-hex-0.2)
         ("rust-ptree" ,rust-ptree-0.3)
         ("rust-query-interface"
          ,rust-query-interface-0.3)
@@ -1303,17 +1302,17 @@ underline).")
     (description "CLI for nushell")
     (license license:expat)))
 
-(define-public rust-nu-data-0.29
+(define-public rust-nu-data-0.31
   (package
     (name "rust-nu-data")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-data" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1niljv9vm42py1hmf8na03xbxb4vvypmrxk765ih9m2jg2zq9386"))))
+        (base32 "0sdl6s7j4bx03lmc65x3mnyn75mckq4gb96kr46a0g74mmds1j73"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -1321,6 +1320,7 @@ underline).")
        (("rust-bigdecimal" ,rust-bigdecimal-0.2)
         ("rust-byte-unit" ,rust-byte-unit-4)
         ("rust-chrono" ,rust-chrono-0.4)
+        ("rust-common-path" ,rust-common-path-1)
         ("rust-derive-new" ,rust-derive-new-0.5)
         ("rust-directories-next"
          ,rust-directories-next-2)
@@ -1328,20 +1328,21 @@ underline).")
         ("rust-getset" ,rust-getset-0.1)
         ("rust-indexmap" ,rust-indexmap-1)
         ("rust-log" ,rust-log-0.4)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
-        ("rust-nu-table" ,rust-nu-table-0.29)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.31)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
+        ("rust-nu-table" ,rust-nu-table-0.31)
         ("rust-nu-test-support"
-         ,rust-nu-test-support-0.29)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
+         ,rust-nu-test-support-0.31)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.31)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-num-format" ,rust-num-format-0.4)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-query-interface"
          ,rust-query-interface-0.3)
         ("rust-serde" ,rust-serde-1)
+        ("rust-sha2" ,rust-sha2-0.9)
         ("rust-toml" ,rust-toml-0.5)
         ("rust-users" ,rust-users-0.11))))
     (home-page "https://www.nushell.sh")
@@ -1349,30 +1350,34 @@ underline).")
     (description "CLI for nushell")
     (license license:expat)))
 
-(define-public rust-nu-engine-0.29
+(define-public rust-nu-engine-0.31
   (package
     (name "rust-nu-engine")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-engine" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1wz033zamlakpca5k2bgal2ykd5ia76g5fw3r5xzb6jb63q7xqhf"))))
+        (base32 "10jw88xiv7hnvrngjfsih147zipnxcmax3a0az064cnf00kx8bkl"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-async-recursion"
+       (("rust-ansi-term" ,rust-ansi-term-0.12)
+        ("rust-async-recursion"
          ,rust-async-recursion-0.3)
         ("rust-async-trait" ,rust-async-trait-0.1)
+        ("rust-bigdecimal" ,rust-bigdecimal-0.2)
         ("rust-bytes" ,rust-bytes-0.5)
+        ("rust-chrono" ,rust-chrono-0.4)
         ("rust-codespan-reporting"
          ,rust-codespan-reporting-0.11)
         ("rust-derive-new" ,rust-derive-new-0.5)
         ("rust-dirs-next" ,rust-dirs-next-2)
         ("rust-dunce" ,rust-dunce-1)
+        ("rust-dyn-clone" ,rust-dyn-clone-1)
         ("rust-encoding-rs" ,rust-encoding-rs-0.8)
         ("rust-filesize" ,rust-filesize-0.2)
         ("rust-fs-extra" ,rust-fs-extra-1)
@@ -1384,15 +1389,18 @@ underline).")
         ("rust-indexmap" ,rust-indexmap-1)
         ("rust-itertools" ,rust-itertools-0.10)
         ("rust-log" ,rust-log-0.4)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
-        ("rust-nu-data" ,rust-nu-data-0.29)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-parser" ,rust-nu-parser-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
-        ("rust-nu-stream" ,rust-nu-stream-0.29)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.31)
+        ("rust-nu-data" ,rust-nu-data-0.31)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-parser" ,rust-nu-parser-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
+        ("rust-nu-stream" ,rust-nu-stream-0.31)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.31)
+        ("rust-num-bigint" ,rust-num-bigint-0.3)
+        ("rust-num-format" ,rust-num-format-0.4)
+        ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-parking-lot" ,rust-parking-lot-0.11)
         ("rust-rayon" ,rust-rayon-1)
         ("rust-serde" ,rust-serde-1)
@@ -1409,17 +1417,17 @@ underline).")
     (description "Core commands for nushell")
     (license license:expat)))
 
-(define-public rust-nu-errors-0.29
+(define-public rust-nu-errors-0.31
   (package
     (name "rust-nu-errors")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-errors" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1xxdirdd57x20irn1z1p2987cyyi8l6k6shlblikjjf97d8kjk0n"))))
+        (base32 "0hkkx66gcj6nail9r65yf92zxz8f8mdxv4y8by3vijqmv22kshgb"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -1430,8 +1438,8 @@ underline).")
         ("rust-derive-new" ,rust-derive-new-0.5)
         ("rust-getset" ,rust-getset-0.1)
         ("rust-glob" ,rust-glob-0.3)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-serde" ,rust-serde-1)
@@ -1443,17 +1451,17 @@ underline).")
     (description "Core error subsystem for Nushell")
     (license license:expat)))
 
-(define-public rust-nu-json-0.29
+(define-public rust-nu-json-0.31
   (package
     (name "rust-nu-json")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-json" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1c1xj96gmyznqys3mxgnir4jf88npg4jkcwh9xa420agb03n9gzh"))))
+        (base32 "1jr0314xhz2jfksr6wiq1x30dh1k63bx92li9ls1k3nw6s4pjdlv"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -1469,17 +1477,17 @@ underline).")
     (description "This package is a fork of @code{serde-hjson}.")
     (license license:expat)))
 
-(define-public rust-nu-parser-0.29
+(define-public rust-nu-parser-0.31
   (package
     (name "rust-nu-parser")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-parser" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1cmqx4gw7xg6ag58y7pq94prwkagc40wcrxbk2vzqj206h97xvmi"))))
+        (base32 "0apiq41vvaglxbfhf8mil0amqjsm3lx00kcjshjlsxmpp6gyc951"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -1494,11 +1502,11 @@ underline).")
         ("rust-indexmap" ,rust-indexmap-1)
         ("rust-itertools" ,rust-itertools-0.10)
         ("rust-log" ,rust-log-0.4)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-nu-test-support"
-         ,rust-nu-test-support-0.29)
+         ,rust-nu-test-support-0.31)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-serde" ,rust-serde-1)
@@ -1509,10 +1517,10 @@ underline).")
     (description "Nushell parser")
     (license license:expat)))
 
-(define-public rust-nu-plugin-0.29
+(define-public rust-nu-plugin-0.31
   (package
     (name "rust-nu-plugin")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
@@ -1520,19 +1528,19 @@ underline).")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "03qqvh4jhpzwb1mh4f8pz2m88sa825giz5g7lr2l96nb0qfya19j"))))
+        (base32 "108sak4c0kym8pmgdja06yzfb45q2r67b5xy1lb3pf5067rcl0sn"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bigdecimal" ,rust-bigdecimal-0.2)
         ("rust-indexmap" ,rust-indexmap-1)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-nu-test-support"
-         ,rust-nu-test-support-0.29)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
+         ,rust-nu-test-support-0.31)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.31)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-json" ,rust-serde-json-1))))
@@ -1541,17 +1549,17 @@ underline).")
     (description "Nushell Plugin")
     (license license:expat)))
 
-(define-public rust-nu-plugin-binaryview-0.29
+(define-public rust-nu-plugin-binaryview-0.31
   (package
     (name "rust-nu-plugin-binaryview")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_binaryview" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0x7g9lncglbpdjxk1r47k49ha9yir03znis6zs7i25qwsb2sgynz"))))
+        (base32 "15ifd9j9r131912mmschd9w4br82h305rabz62lc1x2aw5qdp094"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -1559,12 +1567,12 @@ underline).")
        (("rust-crossterm" ,rust-crossterm-0.19)
         ("rust-image" ,rust-image-0.22)
         ("rust-neso" ,rust-neso-0.5)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
-        ("rust-pretty-hex" ,rust-pretty-hex-0.2)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.31)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-pretty-hex" ,rust-nu-pretty-hex-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-rawkey" ,rust-rawkey-0.1))))
     (home-page "https://www.nushell.sh")
     (synopsis "Binary viewer plugin for Nushell")
@@ -1572,29 +1580,29 @@ underline).")
      "This package provides a binary viewer plugin for Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-chart-0.29
+(define-public rust-nu-plugin-chart-0.31
   (package
     (name "rust-nu-plugin-chart")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_chart" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1b4zqnm788728jzqxcipik4x3lgj8yf0cjpxznbb10bgyfdp0jxk"))))
+        (base32 "02a0gyibbmkhzbqasx648jwhw6g4056ngsjdnh54wfk9mxzwb37v"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-crossterm" ,rust-crossterm-0.19)
-        ("rust-nu-cli" ,rust-nu-cli-0.29)
-        ("rust-nu-data" ,rust-nu-data-0.29)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
+        ("rust-nu-cli" ,rust-nu-cli-0.31)
+        ("rust-nu-data" ,rust-nu-data-0.31)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.31)
         ("rust-tui" ,rust-tui-0.14))))
     (home-page "https://www.nushell.sh")
     (synopsis "Plugin to display charts")
@@ -1602,17 +1610,17 @@ underline).")
      "This package provides a plugin to display charts in Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-fetch-0.29
+(define-public rust-nu-plugin-fetch-0.31
   (package
     (name "rust-nu-plugin-fetch")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_fetch" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "086z2a2fmi4v95kg6bgzp1ylilbbflxnf242vnkmw6ys5gs8g4dy"))))
+        (base32 "0w6739dznxympqv775621r5mgfi5f7i56s6irgpmfpzkvl4xvk53"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -1620,10 +1628,10 @@ underline).")
        (("rust-base64" ,rust-base64-0.13)
         ("rust-futures" ,rust-futures-0.3)
         ("rust-mime" ,rust-mime-0.3)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-surf" ,rust-surf-2)
         ("rust-url" ,rust-url-2))))
     (home-page "https://www.nushell.sh")
@@ -1631,28 +1639,28 @@ underline).")
     (description "This package provides a URL fetch plugin for Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-from-bson-0.29
+(define-public rust-nu-plugin-from-bson-0.31
   (package
     (name "rust-nu-plugin-from-bson")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_from_bson" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "02932wzrqrg4777cm1lpncig9cxn7s80fmlrkavrkw9dh2lnbbms"))))
+        (base32 "03v3r77c7ghg1asjllvipvfffilx2l9wqb38qzd8rp7hb9dj01g6"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bigdecimal" ,rust-bigdecimal-0.2)
         ("rust-bson" ,rust-bson-0.14)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.31)
         ("rust-num-traits" ,rust-num-traits-0.2))))
     (home-page "https://www.nushell.sh")
     (synopsis "Converter plugin to the bson format for Nushell")
@@ -1661,27 +1669,27 @@ underline).")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-from-sqlite-0.29
+(define-public rust-nu-plugin-from-sqlite-0.31
   (package
     (name "rust-nu-plugin-from-sqlite")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_from_sqlite" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1mnavx7pa5isic2rnrxd8462axh826rimscjpjxq4nk77wkzp5s8"))))
+        (base32 "1gs88cbs55hx4vjbr286b8xckigfgm2908aaa87dv87bhxfmjqim"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bigdecimal" ,rust-bigdecimal-0.2)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.31)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-rusqlite" ,rust-rusqlite-0.24)
         ("rust-tempfile" ,rust-tempfile-3))))
@@ -1692,28 +1700,28 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-inc-0.29
+(define-public rust-nu-plugin-inc-0.31
   (package
     (name "rust-nu-plugin-inc")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_inc" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0w0dmqa6rv12whpmsvli5nb7pnazrhdp08x2fzrabz60rq1qsfx9"))))
+        (base32 "0qfi48rh813vbmlaj0idkkcjy6dkx0jz7k023dwdf47v0m6c34hq"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
+       (("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-nu-test-support"
-         ,rust-nu-test-support-0.29)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
+         ,rust-nu-test-support-0.31)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.31)
         ("rust-semver" ,rust-semver-0.11))))
     (home-page "https://www.nushell.sh")
     (synopsis "Version incrementer plugin for Nushell")
@@ -1722,25 +1730,25 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-match-0.29
+(define-public rust-nu-plugin-match-0.31
   (package
     (name "rust-nu-plugin-match")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_match" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0hmxhd3z7p88xg5g75kljl0g6rp5k22ff0k9f2a6j9j7y3rrdlmb"))))
+        (base32 "175wcqjzpchhcmgpwk15xhbrbq63wzcpgldrz5m97z5qirwgskpj"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
+       (("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-regex" ,rust-regex-1))))
     (home-page "https://www.nushell.sh")
     (synopsis "Regex match plugin for Nushell")
@@ -1748,27 +1756,27 @@ Nushell.")
      "This package provides a regex match plugin for Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-post-0.29
+(define-public rust-nu-plugin-post-0.31
   (package
     (name "rust-nu-plugin-post")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_post" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1d2198ks2cw6phg1hdsz75rqh5l49whcsl5hl21g86y2j5sl0hpd"))))
+        (base32 "1sr9aaqfqxpq16yh0sc9m83cj9xgackqbk7hmy2j97kj3vjmwd4w"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-base64" ,rust-base64-0.13)
         ("rust-futures" ,rust-futures-0.3)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-serde-json" ,rust-serde-json-1)
         ("rust-surf" ,rust-surf-1)
@@ -1778,27 +1786,27 @@ Nushell.")
     (description "This package is an HTTP POST plugin for Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-ps-0.29
+(define-public rust-nu-plugin-ps-0.31
   (package
     (name "rust-nu-plugin-ps")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_ps" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "00dy60fnii1iifv0rh1xm77jn37l068np46fp3izbsbq642vzf7m"))))
+        (base32 "1a60pjl9ihlppx9ssmfw4sy3d8rxpp513ydhvq57fc6rcilrxjz9"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-futures" ,rust-futures-0.3)
         ("rust-futures-timer" ,rust-futures-timer-3)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-sysinfo" ,rust-sysinfo-0.16))))
     (home-page "https://www.nushell.sh")
@@ -1807,82 +1815,108 @@ Nushell.")
      "This package provides a process list plugin for Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-s3-0.29
+(define-public rust-nu-plugin-query-json-0.31
+  (package
+    (name "rust-nu-plugin-query-json")
+    (version "0.31.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "nu_plugin_query_json" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1f23chy7mglympvs5dcr5d5c3prxhci9lb51ajfmgcai3z334i7v"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-gjson" ,rust-gjson-0.7)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31))))
+    (home-page "https://www.nushell.sh")
+    (synopsis "Query JSON files with Gjson")
+    (description "query json files with gjson")
+    (license license:expat)))
+
+(define-public rust-nu-plugin-s3-0.31
   (package
     (name "rust-nu-plugin-s3")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_s3" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "00856l98gmmnv5bfg1vd6mqyk0zpkdrd1xgxqfi2c9nmsy2b1qfa"))))
+        (base32 "0khzvi9gsgv5zqikdx34ndgjw7168r9ckmik9z3wfzhsi2sjfz4k"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-futures" ,rust-futures-0.3)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-s3handler" ,rust-s3handler-0.6))))
     (home-page "https://www.nushell.sh")
     (synopsis "S3 plugin for Nushell")
     (description "This package is an S3 plugin for Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-selector-0.29
+(define-public rust-nu-plugin-selector-0.31
   (package
     (name "rust-nu-plugin-selector")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_selector" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "14hn8plcax4kljq5kw96881pngs7w2gy11k3hs1pmaxhr0bi6c8h"))))
+        (base32 "1lvxkxmknv18fc2whsib8qjrqydv7jz1xlijss2yyc8i0p9m0rxv"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-nipper" ,rust-nipper-0.1)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29))))
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31))))
     (home-page "https://www.nushell.sh")
     (synopsis "Web scraping using CSS selector")
     (description
      "This package provides web scraping using CSS selector.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-start-0.29
+(define-public rust-nu-plugin-start-0.31
   (package
     (name "rust-nu-plugin-start")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_start" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "002cjbdh4zn81zhc5a0gklfxdjslqbcbp1wcx5ijzpch40c5dyzj"))))
+        (base32 "1v5k4h6vw3ws1mvgjsgj2rr7zl7ab9zhfixai94wixs0vlwdfjic"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-glob" ,rust-glob-0.3)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-open" ,rust-open-1)
-        ("rust-url" ,rust-url-2))))
+        ("rust-url" ,rust-url-2)
+        ("rust-webbrowser" ,rust-webbrowser-0.5))))
     (home-page "https://www.nushell.sh")
     (synopsis "Plugin to open files/URLs directly from Nushell")
     (description
@@ -1890,10 +1924,10 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-sys-0.29
+(define-public rust-nu-plugin-sys-0.31
   (package
     (name "rust-nu-plugin-sys")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
@@ -1901,17 +1935,17 @@ Nushell.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0s2jyaff4lngm1c5446618r5761d8dcbpsrs7p7vzp6g2dic1w69"))))
+        (base32 "049h5lar2f5mf3yx93pdzyjvydk0yfm5qp8brmyyrr6a23pk2c0b"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-futures" ,rust-futures-0.3)
         ("rust-futures-util" ,rust-futures-util-0.3)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-sysinfo" ,rust-sysinfo-0.16))))
     (home-page "https://www.nushell.sh")
@@ -1919,28 +1953,28 @@ Nushell.")
     (description "This package provides a system info plugin for Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-textview-0.29
+(define-public rust-nu-plugin-textview-0.31
   (package
     (name "rust-nu-plugin-textview")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_textview" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "19kwh6rn0xk340yk0w1r3dfm328s9jqln8hgfqw5m3lld1hh1a4v"))))
+        (base32 "1qzpjmld8isin224cf7ss79radps983dw34m1sh7r5czzgwnf89m"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bat" ,rust-bat-0.17)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
-        ("rust-nu-data" ,rust-nu-data-0.29)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.31)
+        ("rust-nu-data" ,rust-nu-data-0.31)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-term-size" ,rust-term-size-0.3)
         ("rust-url" ,rust-url-2))))
     (home-page "https://www.nushell.sh")
@@ -1949,27 +1983,27 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-to-bson-0.29
+(define-public rust-nu-plugin-to-bson-0.31
   (package
     (name "rust-nu-plugin-to-bson")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_to_bson" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1j019frp663s511b7z9sz5vh77pvz0nn3w2asrk50xlyj5hfig55"))))
+        (base32 "19kj3m6a0xshi7fg3smaapag0mj7a2ddci6611dnlasnzj9f9gr3"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bson" ,rust-bson-0.14)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.31)
         ("rust-num-traits" ,rust-num-traits-0.2))))
     (home-page "https://www.nushell.sh")
     (synopsis "Converter plugin to the bson format for Nushell")
@@ -1978,27 +2012,27 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-to-sqlite-0.29
+(define-public rust-nu-plugin-to-sqlite-0.31
   (package
     (name "rust-nu-plugin-to-sqlite")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_to_sqlite" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0p86iyag0ci15i1nqyb74kp1lax9mgm73w5g3qkp2v97lihv12pf"))))
+        (base32 "19k427hwpllsyrdsh6qcclwx18nsq3zimz1z9b6kva0s32jzsdg6"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-hex" ,rust-hex-0.4)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.31)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-rusqlite" ,rust-rusqlite-0.24)
         ("rust-tempfile" ,rust-tempfile-3))))
@@ -2009,26 +2043,26 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-tree-0.29
+(define-public rust-nu-plugin-tree-0.31
   (package
     (name "rust-nu-plugin-tree")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_tree" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "096l86ci540v0aj9xrvwd4ccgg388kabz4rbg88nrpw0rlacrbc3"))))
+        (base32 "17vgnqdws522ng373lg4cha5l136hs0zwvxf0393xjyr9i88q9jp"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-derive-new" ,rust-derive-new-0.5)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-ptree" ,rust-ptree-0.3))))
     (home-page "https://www.nushell.sh")
     (synopsis "Tree viewer plugin for Nushell")
@@ -2036,27 +2070,27 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-xpath-0.29
+(define-public rust-nu-plugin-xpath-0.31
   (package
     (name "rust-nu-plugin-xpath")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_xpath" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0459awkffb2sydd2l5gbcx1kz466qkigb1bxn5ka208y9k5qz54v"))))
+        (base32 "0zgpbmsx5036c6a5cr2nmi5vv2jyra2a4gnpqq4pazw432h5m48a"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bigdecimal" ,rust-bigdecimal-0.2)
         ("rust-indexmap" ,rust-indexmap-1)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-sxd-document" ,rust-sxd-document-0.3)
         ("rust-sxd-xpath" ,rust-sxd-xpath-0.4))))
     (home-page "https://www.nushell.sh")
@@ -2064,17 +2098,42 @@ Nushell.")
     (description "Traverses XML")
     (license license:expat)))
 
-(define-public rust-nu-protocol-0.29
+(define-public rust-nu-pretty-hex-0.31
+  (package
+    (name "rust-nu-pretty-hex")
+    (version "0.31.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "nu-pretty-hex" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1crsmihbil68p3qb345d33m5p6xa7dkbdxrbxfxh7km4hflc2pq4"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-heapless" ,rust-heapless-0.6)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
+        ("rust-rand" ,rust-rand-0.8))))
+    (home-page "https://www.nushell.sh")
+    (synopsis "Pretty hex dump of bytes slice in the common style")
+    (description
+     "This crate provides pretty hex dump of bytes slice in the common
+style.")
+    (license license:expat)))
+
+(define-public rust-nu-protocol-0.31
   (package
     (name "rust-nu-protocol")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-protocol" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1iii3r37dcl7sf870qrzfkdc1iylbbkcycp1k5ifjvd5yxlkfpxx"))))
+        (base32 "1gsnd2p9mbc8b8bhirx8im65nhsbd8mfz655qk1mrl87s3sqiybh"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -2086,8 +2145,8 @@ Nushell.")
         ("rust-getset" ,rust-getset-0.1)
         ("rust-indexmap" ,rust-indexmap-1)
         ("rust-log" ,rust-log-0.4)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-num-integer" ,rust-num-integer-0.1)
         ("rust-num-traits" ,rust-num-traits-0.2)
@@ -2101,17 +2160,17 @@ Nushell.")
     (description "Core values and protocols for Nushell")
     (license license:expat)))
 
-(define-public rust-nu-source-0.29
+(define-public rust-nu-source-0.31
   (package
     (name "rust-nu-source")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-source" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1m8phdw9iwawsq0ip4zn2w8ggjjr45z1ny2sgdb3h1y1awpnvdbq"))))
+        (base32 "1bpihjq3dfrry0mxdgg32sx8663rd2gxqkmnqgs4q7lj17ny2a9g"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -2128,46 +2187,46 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-stream-0.29
+(define-public rust-nu-stream-0.31
   (package
     (name "rust-nu-stream")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-stream" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "15zx16s4wb23316ih4wqnnpajh1qz5vckpzk3k41qqkmar1w4sah"))))
+        (base32 "0ylmfqhhj4aaspwq51yb5wmsn7zhh19035yb0mr28ajygf38s1g7"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-futures" ,rust-futures-0.3)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29))))
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31))))
     (home-page "https://www.nushell.sh")
     (synopsis "Nushell stream")
     (description "This package provides Nushell stream.")
     (license license:expat)))
 
-(define-public rust-nu-table-0.29
+(define-public rust-nu-table-0.31
   (package
     (name "rust-nu-table")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-table" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1ihrr2406v5yjdfm699q6alx5bh49q8d04x1dzvn6qydgmf6r8z6"))))
+        (base32 "0sma2i78naf813kw3mlzzbvs27fhz9z8flv7iqgk9pf52g4b6w0p"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
+       (("rust-nu-ansi-term" ,rust-nu-ansi-term-0.31)
         ("rust-regex" ,rust-regex-1)
         ("rust-unicode-width" ,rust-unicode-width-0.1))))
     (home-page "https://www.nushell.sh")
@@ -2175,17 +2234,17 @@ Nushell.")
     (description "Nushell table printing")
     (license license:expat)))
 
-(define-public rust-nu-test-support-0.29
+(define-public rust-nu-test-support-0.31
   (package
     (name "rust-nu-test-support")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-test-support" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0dlmhrskpdp82a6064srx1c4bqvfz66madx2i6cgxg56d7x38km6"))))
+        (base32 "0n5crvk40vy28f81lp5dyj9clfmslc9al5dvrq3b0gqz11d5y2ab"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -2197,10 +2256,10 @@ Nushell.")
         ("rust-glob" ,rust-glob-0.3)
         ("rust-hamcrest2" ,rust-hamcrest2-0.3)
         ("rust-indexmap" ,rust-indexmap-1)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.31)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-tempfile" ,rust-tempfile-3))))
     (home-page "https://www.nushell.sh")
@@ -2209,10 +2268,10 @@ Nushell.")
 tests.")
     (license license:expat)))
 
-(define-public rust-nu-value-ext-0.29
+(define-public rust-nu-value-ext-0.31
   (package
     (name "rust-nu-value-ext")
-    (version "0.29.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
@@ -2220,16 +2279,16 @@ tests.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1riq3xg6cqwrfb55bwva13m5dn4d7d71g2825dn7z2i96f6vylwi"))))
+        (base32 "0wy0zs76f1k0xlm8s7fw34v7rqc592ggzvdgh17fjh4ynnhvr42y"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-indexmap" ,rust-indexmap-1)
         ("rust-itertools" ,rust-itertools-0.10)
-        ("rust-nu-errors" ,rust-nu-errors-0.29)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
-        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.31)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.31)
+        ("rust-nu-source" ,rust-nu-source-0.31)
         ("rust-num-traits" ,rust-num-traits-0.2))))
     (home-page "https://www.nushell.sh")
     (synopsis "@code{Extension} traits for values in Nushell")
diff --git a/gnu/packages/spice.scm b/gnu/packages/spice.scm
index 3fe970497f..c1e9e173a2 100644
--- a/gnu/packages/spice.scm
+++ b/gnu/packages/spice.scm
@@ -265,7 +265,7 @@ Internet and from a wide variety of machine architectures.")
 (define-public spice-vdagent
   (package
     (name "spice-vdagent")
-    (version "0.20.0")
+    (version "0.21.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -273,11 +273,14 @@ Internet and from a wide variety of machine architectures.")
                 "spice-vdagent-" version ".tar.bz2"))
               (sha256
                (base32
-                "0n9k2kna2gd1zi6jv45zsp2jlv439nz5l5jjijirxqaycwi74srf"))))
+                "0n8jlc1pv6mkry161y656b1nk9hhhminjq6nymzmmyjl7k95ymzx"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
        '("--localstatedir=/var")
+       ;; The test-session-info test fails for unknown reasons (see:
+       ;; https://gitlab.freedesktop.org/spice/linux/vd_agent/-/issues/24).
+       #:make-flags '("XFAIL_TESTS=tests/test-session-info")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-makefile.in
@@ -285,19 +288,27 @@ Internet and from a wide variety of machine architectures.")
              (substitute* "Makefile.in"
                (((string-append "\\$\\(mkdir_p\\) \\$\\(DESTDIR\\)"
                                 "\\$\\(localstatedir\\)/run/spice-vdagentd"))
-                 "-$(mkdir_p) $(DESTDIR)$(localstatedir)/run/spice-vdagentd"))
-             #t))
+                 "-$(mkdir_p) $(DESTDIR)$(localstatedir)/run/spice-vdagentd"))))
          (add-after 'unpack 'patch-spice-vdagent.desktop
            (lambda* (#:key outputs #:allow-other-keys)
             (substitute* "data/spice-vdagent.desktop"
               (("Exec=/usr/bin/spice-vdagent")
                (string-append "Exec=" (assoc-ref outputs "out")
-                              "/bin/spice-vdagent")))
-             #t)))))
+                              "/bin/spice-vdagent")))))
+         (add-after 'unpack 'fix-test-termination
+           (lambda _
+             ;; The termination tests depend on finding the socket file name
+             ;; in the spice-vdagent command line it launched, but by default
+             ;; ps truncates its output, which causes the test to fail (see:
+             ;; https://gitlab.freedesktop.org/spice/linux/vd_agent/-/merge_requests/36).
+             (substitute* "tests/test-termination.c"
+               (("ps -ef")
+                "ps -efww")))))))
     (inputs
       `(("alsa-lib" ,alsa-lib)
         ("dbus" ,dbus)
         ("glib" ,glib)
+        ("gtk+" ,gtk+)
         ("libdrm" ,libdrm)
         ("libpciaccess" ,libpciaccess)
         ("libx11" ,libx11)
@@ -307,7 +318,8 @@ Internet and from a wide variety of machine architectures.")
         ("libxrandr" ,libxrandr)
         ("spice-protocol" ,spice-protocol)))
     (native-inputs
-      `(("pkg-config" ,pkg-config)))
+     `(("pkg-config" ,pkg-config)
+       ("procps" ,procps)))             ;tests use 'ps'
     (synopsis "Spice agent for Linux")
     (description "Spice-vdagent enables sharing the clipboard and guest display
 resolution scaling on graphical console window resize.")
diff --git a/gnu/packages/syndication.scm b/gnu/packages/syndication.scm
index e4915b2496..7ec2435522 100644
--- a/gnu/packages/syndication.scm
+++ b/gnu/packages/syndication.scm
@@ -23,6 +23,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module (guix build-system cargo)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
@@ -36,6 +37,7 @@
   #:use-module (gnu packages crates-io)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
@@ -57,8 +59,162 @@
   #:use-module (gnu packages web)
   #:use-module (gnu packages webkit)
   #:use-module (gnu packages xml)
+  #:use-module (gnu packages xorg)
   #:use-module (srfi srfi-1))
 
+(define-public cawbird
+  (package
+    (name "cawbird")
+    (version "1.4.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/IBBoard/cawbird")
+             (commit (string-append "v"version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0lmrgcj1ky1vhzynl36k6ba3ws089x4qdrnkjk3lbr334kicx9na"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:glib-or-gtk? #t
+       #:configure-flags
+       ;; Cawbirds's default key and secret for OAuth process with twitter.
+       (list
+        "-Dconsumer_key_base64=VmY5dG9yRFcyWk93MzJEZmhVdEk5Y3NMOA=="
+        "-Dconsumer_secret_base64=MThCRXIxbWRESDQ2Y0podzVtVU13SGUyVGlCRXhPb3BFRHhGYlB6ZkpybG5GdXZaSjI=")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             ;; These tests require networking.
+             (substitute* "tests/meson.build"
+               (("[ \t]*.*avatardownload.*$") "")
+               (("[ \t]*.*filters.*$") "")
+               (("[ \t]*.*friends.*$") "")
+               (("[ \t]*.*inlinemediadownloader.*$") "")
+               (("[ \t]*.*tweetparsing.*$") "")
+               (("[ \t]*.*usercounter.*$") ""))))
+         (delete 'check)
+         (add-after 'install 'custom-check
+           (lambda* (#:key outputs tests? #:allow-other-keys)
+             (when tests?
+               ;; Tests require a running X server.
+               (system "Xvfb :1 +extension GLX &")
+               (setenv "DISPLAY" ":1")
+               ;; Tests write to $HOME.
+               (setenv "HOME" (getcwd))
+               ;; Tests look for gsettings-schemas installed by the package.
+               (setenv "XDG_DATA_DIRS"
+                       (string-append (getenv "XDG_DATA_DIRS")
+                                      ":" (assoc-ref outputs "out") "/share"))
+               (invoke "meson" "test"))
+             #t))
+         (add-after 'glib-or-gtk-wrap 'wrap-paths
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin/"))
+                    (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH"))
+                    (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
+               (wrap-program (string-append bin "cawbird")
+                 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
+                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
+             #t)))))
+    (native-inputs
+     `(("gettext" ,gettext-minimal)
+       ("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
+       ("gtk+:bin" ,gtk+ "bin")
+       ("pkg-config" ,pkg-config)
+       ("vala" ,vala)
+       ("xmllint" ,libxml2)
+       ("xorg-server" ,xorg-server-for-tests)))
+    (inputs
+     `(("glib" ,glib)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("gspell" ,gspell)
+       ("gstreamer" ,gstreamer)
+       ("gst-libav" ,gst-libav)
+       ("gst-plugins-bad" ,gst-plugins-bad)
+       ("gst-plugins-base" ,gst-plugins-base)
+       ("gst-plugins-good" ,gst-plugins-good)
+       ("gtk+" ,gtk+)
+       ("json-glib" ,json-glib)
+       ("liboauth" ,liboauth)
+       ("libsoup" ,libsoup)
+       ("rest" ,rest)
+       ("sqlite" ,sqlite)
+       ("x11" ,libx11)))
+    (propagated-inputs
+     `(("dconf" ,dconf)))
+    (synopsis "Client for Twitter")
+    (description "Cawbird is a Twitter client built with GTK and Vala.
+It supports all features except non-mention notifications, polls, threads and
+cards.")
+    (home-page "https://ibboard.co.uk/cawbird/")
+    (license license:gpl3+)))
+
+(define-public giara
+  (package
+    (name "giara")
+    (version "0.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.gnome.org/World/giara")
+             (commit version)))
+       (file-name (git-file-name name version))
+       ;; To fix authentication while adding accounts.
+       (patches (search-patches "giara-fix-login.patch"))
+       (sha256
+        (base32 "004qmkfrgd37axv0b6hfh6v7nx4pvy987k5yv4bmlmkj9sbqm6f9"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:glib-or-gtk? #t
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'glib-or-gtk-wrap 'wrap-paths
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin/"))
+                    (lib (string-append out "/lib/python"
+                                        ,(version-major+minor
+                                          (package-version python))
+                                        "/site-packages")))
+               (wrap-program (string-append bin "giara")
+                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH") ,lib))
+                 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))))
+             #t)))))
+    (native-inputs
+     `(("gettext" ,gettext-minimal)
+       ("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
+       ("gtk+:bin" ,gtk+ "bin")
+       ("pkg-config" ,pkg-config)
+       ("xmllint" ,libxml2)))
+    (inputs
+     `(("glib" ,glib)
+       ("gtk+" ,gtk+)
+       ("gtksourceview" ,gtksourceview)
+       ("libhandy" ,libhandy)
+       ("python" ,python)
+       ("python-beautifulsoup" ,python-beautifulsoup4)
+       ("python-dateutil" ,python-dateutil)
+       ("python-mistune" ,python-mistune)
+       ("python-pillow" ,python-pillow)
+       ("python-praw" ,python-praw)
+       ("python-pycairo" ,python-pycairo)
+       ("python-pygobject" ,python-pygobject)
+       ("python-requests" ,python-requests)
+       ("webkitgtk" ,webkitgtk)))
+    (propagated-inputs
+     `(("dconf" ,dconf)))
+    (synopsis "Client for Reddit")
+    (description "Giara is a reddit app, built with Python, GTK and Handy.")
+    (home-page "https://giara.gabmus.org/")
+    (license license:gpl3+)))
+
 (define-public newsboat
   (package
     (name "newsboat")
diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm
index 14774a5843..37636c7cdc 100644
--- a/gnu/packages/terminals.scm
+++ b/gnu/packages/terminals.scm
@@ -1265,7 +1265,7 @@ basic input/output.")
 (define-public alacritty
   (package
     (name "alacritty")
-    (version "0.7.1")
+    (version "0.7.2")
     (source
      (origin
        ;; XXX: The crate at "crates.io" has limited contents.  In particular,
@@ -1276,14 +1276,14 @@ basic input/output.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1b9hy3ya72hhpl8nkayc7dy4f97xp75np48dm5na5pgyv8b45agi"))))
+        (base32 "1isa61rivqchzfms8aakr4nks4kflwnfr9f2pik91157hg1plxam"))))
     (build-system cargo-build-system)
     (arguments
      `(#:install-source? #f     ; virtual manifest
        #:cargo-test-flags '("--release" "--" "--skip=config_read_eof")
        #:cargo-inputs
        (("rust-alacritty-config-derive" ,rust-alacritty-config-derive-0.1)
-        ("rust-alacritty-terminal" ,rust-alacritty-terminal-0.12)
+        ("rust-alacritty-terminal" ,rust-alacritty-terminal-0.13)
         ("rust-clap" ,rust-clap-2)
         ("rust-cocoa" ,rust-cocoa-0.24)
         ("rust-copypasta" ,rust-copypasta-0.7)
diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm
index d85c11aec0..bd11dd3a75 100644
--- a/gnu/packages/tor.scm
+++ b/gnu/packages/tor.scm
@@ -54,14 +54,14 @@
 (define-public tor
   (package
     (name "tor")
-    (version "0.4.5.7")
+    (version "0.4.5.8")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://dist.torproject.org/tor-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "0x7hhl0svfc4yh9xvq7kkzgmwjcw1ak9i0794wjg4biy2fmclzs4"))))
+               "09z22gc01yh5zms7i31md6qpr0ir8i5fzrrz06qfpp5wx28x1pjp"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/upnp.scm b/gnu/packages/upnp.scm
index 358514f9d0..cc20ca3e21 100644
--- a/gnu/packages/upnp.scm
+++ b/gnu/packages/upnp.scm
@@ -96,14 +96,14 @@ over IRC, instant messaging, network games, and most server software.")
 (define-public libupnp
   (package
     (name "libupnp")
-    (version "1.14.6")
+    (version "1.14.7")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "https://github.com/pupnp/pupnp/releases/download"
                           "/release-" version "/libupnp-" version".tar.bz2"))
       (sha256
-       (base32 "00x5y1a7ygyjzc1ljfamynclqrzd44vhdsnnmx2nwaif6mvgcs1i"))))
+       (base32 "093wmhk7rdmg2ixyam4hpxa43g25555jgb3i4y7223mwhr5aqrkv"))))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (build-system gnu-build-system)
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 6726bc339b..05b7494f22 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -29,7 +29,7 @@
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2020 John D. Boy <jboy@bius.moe>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
@@ -1518,7 +1518,7 @@ control to Git repositories.")
 (define-public pre-commit
   (package
     (name "pre-commit")
-    (version "2.8.1")
+    (version "2.12.1")
     (source
      (origin
        ;; No tests in the PyPI tarball.
@@ -1528,12 +1528,12 @@ control to Git repositories.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0b3ks6viccq3n4p8i8zgfd40vp1k5nkhmmlz7p4nxcdizw8zxgn8"))))
+        (base32 "0gwy5bnjnlj6yjcmghsibrcijvz9isxcygln7ihvi728p04rgymf"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'check 'set-up-git
+         (add-before 'check 'prepare-check-env
            (lambda _
              ;; Change from /homeless-shelter to /tmp for write permission.
              (setenv "HOME" "/tmp")
@@ -1542,72 +1542,36 @@ control to Git repositories.")
              (setenv "GIT_COMMITTER_NAME" "Your Name")
              (setenv "GIT_AUTHOR_EMAIL" "you@example.com")
              (setenv "GIT_COMMITTER_EMAIL" "you@example.com")
+             ;; Some tests still fail with PermissionError.  Make the source
+             ;; tree writable.
+             (for-each make-file-writable (find-files "."))
+             ;; Some tests will need a working git repository.
+             (invoke "git" "init")
              (invoke "git" "config" "--global" "user.name" "Your Name")
              (invoke "git" "config" "--global" "user.email" "you@example.com")
-           #t))
+             #t))
          (replace 'check
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (add-installed-pythonpath inputs outputs)
-             (invoke "pytest" "tests" "-k"
+             ;; The file below contains about 30 tests that fail because they
+             ;; depend on tools from multiple languages (cargo, npm, cpan,
+             ;; Rscript, etc).  There are other tests that pass, but it's more
+             ;; convenient to skip the whole file than list 30 tests to skip.
+             (invoke "pytest" "--ignore=tests/repository_test.py"
+                     ;; Ruby and Node tests require node and gem.
+                     "--ignore=tests/languages/node_test.py"
+                     "--ignore=tests/languages/ruby_test.py"
+                     ;; FIXME: Python tests fail because of distlib version
+                     ;; mismatch.  Even with python-distlib/next it is
+                     ;; pulling version 0.3.0, while 0.3.1 is required.
+                     "--ignore=tests/languages/python_test.py" "-k"
                      (string-append
-                     ;; Disable conda tests.
-                      "not test_conda_hook"
-                      " and not test_conda_with_additional_dependencies_hook"
-                      " and not test_local_conda_additional_dependencies"
-                      ;; Disable cpan tests.
-                      " and not test_local_perl_additional_dependencies"
-                      " and not test_perl_hook"
-                      ;; Disable Ruby tests.
-                      " and not test_additional_ruby_dependencies_installed"
-                      " and not test_install_rbenv"
-                      " and not test_install_rbenv_with_version"
-                      " and not test_run_a_ruby_hook"
-                      " and not test_run_ruby_hook_with_disable_shared_gems"
-                      " and not test_run_versioned_ruby_hook"
-                      ;; Disable Cargo tests.
-                      " and not test_additional_rust_cli_dependencies_installed"
-                      " and not test_additional_rust_lib_dependencies_installed"
-                      " and not test_local_rust_additional_dependencies"
-                      " and not test_rust_hook"
-                      ;; Disable dotnet tests.
-                      " and not test_dotnet_hook"
-                      ;; Disable nodejs tests.
-                      " and not test_unhealthy_if_system_node_goes_missing"
-                      " and not test_installs_without_links_outside_env"
-                      " and not test_healthy_system_node"
-                      ;; Disable python2 test.
-                      " and not test_switch_language_versions_doesnt_clobber"
-                      ;; These tests try to open a network socket.
-                      " and not test_additional_golang_dependencies_installed"
-                      " and not test_additional_node_dependencies_installed"
-                      " and not test_golang_hook"
-                      " and not test_golang_hook_still_works_when_gobin_is_set"
-                      " and not test_local_golang_additional_dependencies"
-                      " and not test_main"
-                      " and not test_node_hook_with_npm_userconfig_set"
-                      " and not test_run_a_node_hook"
-                      " and not test_run_versioned_node_hook"
-                      ;; Tests failing with a permission error.
-                      ;; They try to write to the filesystem.
-                      " and not test_autoupdate_hook_disappearing_repo"
-                      " and not test_hook_disppearing_repo_raises"
-                      " and not test_img_conflict"
-                      " and not test_img_something_unstaged"
-                      " and not test_installed_from_venv"
-                      " and not test_too_new_version"
-                      " and not test_try_repo_uncommitted_changes"
-                      " and not test_versions_ok"
-                      ;; This test tries to activate a virtualenv.
-                      " and not test_healthy_venv_creator"
-                      ;; Fatal error: Not a Git repository.
-                      " and not test_all_cmds"
-                      " and not test_try_repo"
-                      ;; No module named 'pip._internal.cli.main'.
-                      " and not test_additional_dependencies_roll_forward"
-                      ;; Assertion errors.
-                      " and not test_install_existing_hooks_no_overwrite"
-                      " and not test_uninstall_restores_legacy_hooks"))))
-         (add-before 'reset-gzip-timestamps 'make-files-writable
+                      ;; TODO: these tests fail with AssertionError.  It may
+                      ;; be possible to fix them.
+                      "not test_install_existing_hooks_no_overwrite"
+                      " and not test_uninstall_restores_legacy_hooks"
+                      " and not test_installed_from_venv"))))
+         (add-before 'reset-gzip-timestamps 'make-gz-writable
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Make sure .gz files are writable so that the
              ;; 'reset-gzip-timestamps' phase can do its work.
@@ -1617,8 +1581,13 @@ control to Git repositories.")
                #t))))))
     (native-inputs
      `(("git" ,git-minimal)
+       ("python-covdefaults" ,python-covdefaults)
+       ("python-coverage" ,python-coverage)
+       ("python-distlib" ,python-distlib/next)
        ("python-pytest" ,python-pytest)
-       ("python-re-assert" ,python-re-assert)))
+       ("python-pytest-env" ,python-pytest-env)
+       ("python-re-assert" ,python-re-assert)
+       ("which" ,which)))
     ;; Propagate because pre-commit is also used as a module.
     (propagated-inputs
      `(("python-cfgv" ,python-cfgv)
@@ -1638,18 +1607,21 @@ execution of any hook written in any language before every commit.")
 (define-public mercurial
   (package
     (name "mercurial")
-    (version "5.6.1")
+    (version "5.8")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://www.mercurial-scm.org/"
                                  "release/mercurial-" version ".tar.gz"))
              (sha256
               (base32
-               "1bgz8f1a7lnmh6lzcvwg6q1yx6i7yibhwy06l4k55i04957jap75"))))
-    (build-system python-build-system)
+               "17rhlmmkqz5ll3k68jfzpcifg3nndbcbc2nx7kw8xn3qcj7nlpgw"))))
+    (build-system gnu-build-system)
     (arguments
-     `(#:phases
+     `(#:make-flags
+       (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:phases
        (modify-phases %standard-phases
+         (delete 'configure)
          (add-after 'unpack 'patch-tests
            (lambda _
              (substitute* '("tests/test-extdiff.t"
@@ -1702,17 +1674,20 @@ execution of any hook written in any language before every commit.")
                          ;; The test suite takes a long time and produces little
                          ;; output by default.  Prevent timeouts due to silence.
                          "-v"))))))))
-    ;; The following inputs are only needed to run the tests.
     (native-inputs
-     `(("python-nose" ,python-nose)
+     `(("python-docutils", python-docutils)
+       ;; The following inputs are only needed to run the tests.
+       ("python-nose" ,python-nose)
        ("unzip" ,unzip)
        ("which" ,which)))
+    (inputs
+     `(("python" ,python)))
     (home-page "https://www.mercurial-scm.org/")
     (synopsis "Decentralized version control system")
     (description
-     "Mercurial is a free, distributed source control management tool.
-It efficiently handles projects of any size
-and offers an easy and intuitive interface.")
+     "Mercurial is a free, distributed source control management tool.  It
+efficiently handles projects of any size and offers an easy and intuitive
+interface.")
     (license license:gpl2+)))
 
 (define-public python-hg-evolve
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 5109c798fd..717491e913 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -3816,7 +3816,7 @@ practically any type of media.")
 (define-public libmediainfo
   (package
     (name "libmediainfo")
-    (version "20.09")
+    (version "21.03")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://mediaarea.net/download/source/"
@@ -3824,7 +3824,7 @@ practically any type of media.")
                                   name "_" version ".tar.xz"))
               (sha256
                (base32
-                "15ni9pnch6688m72swwax109a7mg4a08yx75qknrx7qa6dbyhz6h"))))
+                "1jm4mk539wf3crgpcddgwdixshwdzm37mkb5441lifhcz2mykdsn"))))
     ;; TODO add a Big Buck Bunny webm for tests.
     (native-inputs
      `(("autoconf" ,autoconf)
@@ -3874,7 +3874,7 @@ MPEG-2, MPEG-4, DVD (VOB)...
 (define-public mediainfo
   (package
     (name "mediainfo")
-    (version "20.09")
+    (version "21.03")
     (source (origin
               (method url-fetch)
               ;; Warning: This source has proved unreliable 1 time at least.
@@ -3885,7 +3885,7 @@ MPEG-2, MPEG-4, DVD (VOB)...
                                   name "_" version ".tar.xz"))
               (sha256
                (base32
-                "0rqg9z7s5bk7vlvjrs4gackzg7ib05a0dffi2ihsjf5a7kw7wcir"))))
+                "07h2a1lbw5ak6c9bcn8qydchl0wpgk945rf9sfcqjyv05h5wll6y"))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -4756,7 +4756,7 @@ transcode or reformat the videos in any way, producing perfect backups.")
 (define-public svt-av1
   (package
     (name "svt-av1")
-    (version "0.8.6")
+    (version "0.8.7")
     (source
      (origin
        (method git-fetch)
@@ -4765,7 +4765,7 @@ transcode or reformat the videos in any way, producing perfect backups.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1wzamg89azi1f93wxvdy7silsgklckc754ca066k33drvyacicyw"))))
+        (base32 "1xlxb6kn6hqz9dxz0nd905m4i2mwjwq1330rbabwzmg4b66cdslg"))))
     (build-system cmake-build-system)
     ;; SVT-AV1 only supports 64-bit Intel-compatible CPUs.
     (supported-systems '("x86_64-linux"))
diff --git a/gnu/packages/vnc.scm b/gnu/packages/vnc.scm
index b8979b2921..6ff3e38b0a 100644
--- a/gnu/packages/vnc.scm
+++ b/gnu/packages/vnc.scm
@@ -29,22 +29,130 @@
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages avahi)
   #:use-module (gnu packages base)
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages commencement)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages crypto)
+  #:use-module (gnu packages cups)
   #:use-module (gnu packages fltk)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages rdesktop)
   #:use-module (gnu packages sdl)
+  #:use-module (gnu packages spice)
+  #:use-module (gnu packages ssh)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages webkit)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg))
 
+(define-public remmina
+  (package
+    (name "remmina")
+    (version "1.4.16")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://gitlab.com/Remmina/Remmina")
+         (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "09sjsgvh13jnhs6mhj9icyka0ad3qlnkbzvg7djj9rajzaf1y048"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f                      ; No target
+       #:configure-flags
+       (list
+        ;; Disable online version checking.
+        "-DWITH_NEWS=OFF")
+       #:imported-modules
+       ((guix build glib-or-gtk-build-system)
+        ,@%cmake-build-system-modules)
+       #:modules
+       (((guix build glib-or-gtk-build-system)
+         #:prefix glib-or-gtk:)
+        (guix build cmake-build-system)
+        (guix build utils))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'glib-or-gtk-compile-schemas
+           (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
+         (add-after 'glib-or-gtk-compile-schemas 'glib-or-gtk-wrap
+           (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
+         (add-after 'glib-or-gtk-wrap 'wrap-typelibs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (for-each
+                (lambda (name)
+                  (let ((file (string-append out "/bin/" name))
+                        (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
+                    (wrap-program file
+                      `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path)))))
+                '("remmina" "remmina-file-wrapper")))
+             #t)))))
+    (native-inputs
+     `(("gettext" ,gettext-minimal)
+       ("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
+       ("gtk+:bin" ,gtk+ "bin")
+       ("intl" ,intltool)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("app-indicator" ,libappindicator)
+       ("atk" ,atk)
+       ("avahi" ,avahi)
+       ("cairo" ,cairo)
+       ("cups" ,cups)
+       ("ffmpeg" ,ffmpeg)
+       ("freerdp" ,freerdp)             ; for rdp plugin
+       ("gcrypt" ,libgcrypt)
+       ("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("glib" ,glib)
+       ("gnome-keyring" ,gnome-keyring)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("gtk+" ,gtk+)
+       ("harfbuzz" ,harfbuzz)
+       ("json-glib" ,json-glib)
+       ("libsecret" ,libsecret)         ; for secret plugin
+       ("libsoup" ,libsoup)
+       ("libssh" ,libssh)               ; for ssh plugin
+       ("libvnc" ,libvnc)               ; for vnc plugin
+       ("openssl" ,openssl)
+       ("pango" ,pango)
+       ("pcre2" ,pcre2)                 ; for exec plugin
+       ("shared-mime-info" ,shared-mime-info)
+       ("sodium" ,libsodium)
+       ("spice-client-gtk" ,spice-gtk)  ; for spice plugin
+       ("telepathy" ,telepathy-glib)
+       ("vte" ,vte)                     ; for st plugin
+       ("wayland" ,wayland)
+       ("webkitgtk" ,webkitgtk)         ; for www plugin
+       ("x11" ,libx11)
+       ("xext" ,libxext)                ; for xdmcp plugin
+       ("xdg-utils" ,xdg-utils)
+       ("xkbfile" ,libxkbfile)))        ; for nx plugin
+    (propagated-inputs
+     `(("dconf" ,dconf)))
+    (home-page "https://remmina.org/")
+    (synopsis "Remote Desktop Client")
+    (description "Remmina is a client to use other desktops remotely.
+RDP, VNC, SPICE, NX, XDMCP, SSH and EXEC network protocols are supported.")
+    (license license:gpl2+)))
+
 (define-public tigervnc-client
   (package
     (name "tigervnc-client")
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 39aa38e34c..d3d626c7dc 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -49,6 +49,7 @@
 ;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@posteo.ro>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
+;;; Copyright © 2021 la snesne <lasnesne@lagunposprasihopre.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -6534,7 +6535,7 @@ snippets on @url{https://commandlinefu.com}.")
 (define-public rss-bridge
   (package
     (name "rss-bridge")
-    (version "2019-09-12")
+    (version "2020-11-10")
     (source
      (origin
        (method git-fetch)
@@ -6543,19 +6544,23 @@ snippets on @url{https://commandlinefu.com}.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1mx7f3l45nqhcrng531l4cq8kpzm164hhbwn26g5akb2pamdlnra"))))
-    (build-system trivial-build-system)
+        (base32 "1mir6mcm37sbdrhl5kgs6schpp3l4r5mfamhiic0yfbz4hqwmg44"))))
+    (build-system copy-build-system)
     (arguments
-     '(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils)
-                      (ice-9 match))
-         (let* ((out (assoc-ref %outputs "out"))
-                (share-rss-bridge (string-append out "/share/rss-bridge")))
-           (mkdir-p share-rss-bridge)
-           (copy-recursively (assoc-ref %build-inputs "source") share-rss-bridge)
-           #t))))
+     '(#:install-plan
+       '(("." "share/rss-bridge"))
+       #:phases
+       (modify-phases %standard-phases
+         ;;Change paths to not use source directory.
+         (add-before 'install 'patch-paths
+           (lambda _
+             (substitute* "lib/rssbridge.php"
+               (("PATH_ROOT . 'cache/'")
+                "'/var/cache/rss-bridge/'")
+               (("PATH_ROOT . 'whitelist.txt'")
+                "'/etc/rss-bridge/whitelist.txt'")
+               (("PATH_ROOT . 'config.ini.php'")
+                "'/etc/rss-bridge/config.ini.php'")))))))
     (home-page "https://github.com/RSS-Bridge/rss-bridge")
     (synopsis "Generate Atom feeds for social networking websites")
     (description "rss-bridge generates Atom feeds for social networking
diff --git a/gnu/packages/webkit.scm b/gnu/packages/webkit.scm
index 74ffe92b84..f5c0a74ec5 100644
--- a/gnu/packages/webkit.scm
+++ b/gnu/packages/webkit.scm
@@ -226,14 +226,14 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
 (define-public webkitgtk
   (package
     (name "webkitgtk")
-    (version "2.32.0")
+    (version "2.32.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.webkitgtk.org/releases/"
                                   "webkitgtk-" version ".tar.xz"))
               (sha256
                (base32
-                "1w3b0w8izp0i070grhv19j631sdcd0mcqnjnax13k8mdx7dg8zcx"))
+                "05v9hgpkc6mi2klrd8nqql1n8xzq8rgdz3hvyy369xkhgwqifq8k"))
               (patches (search-patches "webkitgtk-share-store.patch"
                                        "webkitgtk-bind-all-fonts.patch"))))
     (build-system cmake-build-system)
diff --git a/gnu/services.scm b/gnu/services.scm
index e7da0a026d..8d413e198e 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,6 +35,8 @@
   #:use-module (guix diagnostics)
   #:autoload   (guix openpgp) (openpgp-format-fingerprint)
   #:use-module (guix modules)
+  #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages hurd)
@@ -107,6 +110,12 @@
             profile-service-type
             firmware-service-type
             gc-root-service-type
+            linux-builder-service-type
+            linux-builder-configuration
+            linux-builder-configuration?
+            linux-builder-configuration-kernel
+            linux-builder-configuration-modules
+            linux-loadable-module-service-type
 
             %boot-service
             %activation-service
@@ -883,6 +892,87 @@ as Wifi cards.")))
 will not be reclaimed by the garbage collector.")
                 (default-value '())))
 
+;; Configuration for the Linux kernel builder.
+(define-record-type* <linux-builder-configuration>
+  linux-builder-configuration
+  make-linux-builder-configuration
+  linux-builder-configuration?
+  this-linux-builder-configuration
+
+  (kernel   linux-builder-configuration-kernel)                   ; package
+  (modules  linux-builder-configuration-modules  (default '())))  ; list of packages
+
+(define (package-for-kernel target-kernel module-package)
+  "Return a package like MODULE-PACKAGE, adapted for TARGET-KERNEL, if
+possible (that is if there's a LINUX keyword argument in the build system)."
+  (package
+    (inherit module-package)
+    (arguments
+     (substitute-keyword-arguments (package-arguments module-package)
+       ((#:linux kernel #f)
+        target-kernel)))))
+
+(define (linux-builder-configuration->system-entry config)
+  "Return the kernel entry of the 'system' directory."
+  (let* ((kernel  (linux-builder-configuration-kernel config))
+         (modules (linux-builder-configuration-modules config))
+         (kernel  (profile
+                    (content (packages->manifest
+                              (cons kernel
+                                    (map (lambda (module)
+                                           (cond
+                                             ((package? module)
+                                              (package-for-kernel kernel module))
+                                             ;; support (,package "kernel-module-output")
+                                             ((and (list? module) (package? (car module)))
+                                              (cons (package-for-kernel kernel
+                                                                        (car module))
+                                                    (cdr module)))
+                                             (else
+                                              module)))
+                                         modules))))
+                    (hooks (list linux-module-database)))))
+    (with-monad %store-monad
+      (return `(("kernel" ,kernel))))))
+
+(define linux-builder-service-type
+  (service-type (name 'linux-builder)
+                (extensions
+                  (list (service-extension system-service-type
+                                           linux-builder-configuration->system-entry)))
+                (default-value '())
+                (compose identity)
+                (extend (lambda (config modifiers)
+                          (if (null? modifiers)
+                              config
+                              ((apply compose modifiers) config))))
+                (description "Builds the linux-libre kernel profile, containing
+the kernel itself and any linux-loadable kernel modules.  This can be extended
+with a function that accepts the current configuration and returns a new
+configuration.")))
+
+(define (linux-loadable-module-builder-modifier modules)
+  "Extends linux-builder-service-type by appending the given MODULES to the
+configuration of linux-builder-service-type."
+  (lambda (config)
+    (linux-builder-configuration
+      (inherit config)
+      (modules (append (linux-builder-configuration-modules config)
+                       modules)))))
+
+(define linux-loadable-module-service-type
+  (service-type (name 'linux-loadable-modules)
+                (extensions
+                  (list (service-extension linux-builder-service-type
+                                           linux-loadable-module-builder-modifier)))
+                (default-value '())
+                (compose concatenate)
+                (extend append)
+                (description "Adds packages and package outputs as modules
+included in the booted linux-libre profile.  Other services can extend this
+service type to add particular modules to the set of linux-loadable modules.")))
+
+
 
 ;;;
 ;;; Service folding.
diff --git a/gnu/services/spice.scm b/gnu/services/spice.scm
index fd85dc234f..3b88e29043 100644
--- a/gnu/services/spice.scm
+++ b/gnu/services/spice.scm
@@ -34,41 +34,42 @@
   (spice-vdagent spice-vdagent-configuration-spice-vdagent
                  (default spice-vdagent)))
 
-(define (spice-vdagent-activation config)
-  "Return the activation gexp for CONFIG."
-  #~(begin
-      (use-modules (guix build utils))
-      (mkdir-p "/var/run/spice-vdagentd")))
-
 (define (spice-vdagent-shepherd-service config)
   "Return a <shepherd-service> for spice-vdagentd with CONFIG."
   (define spice-vdagent (spice-vdagent-configuration-spice-vdagent config))
 
   (define spice-vdagentd-command
     (list
-      (file-append spice-vdagent "/sbin/spice-vdagentd")
-      "-x"))
+     (file-append spice-vdagent "/sbin/spice-vdagentd")
+     "-x"))
 
   (list
-    (shepherd-service
-      (documentation "Spice vdagentd service")
-      (requirement '(udev))
-      (provision '(spice-vdagentd))
-      (start #~(make-forkexec-constructor '#$spice-vdagentd-command))
-      (stop #~(make-kill-destructor)))))
+   (shepherd-service
+    (documentation "Spice vdagentd service")
+    (requirement '(dbus-system))
+    (provision '(spice-vdagentd))
+    (start #~(lambda args
+               ;; spice-vdagentd supports being activated upon the client
+               ;; connecting to its socket; when not using such feature, the
+               ;; socket should not exist before vdagentd creates it itself.
+               (mkdir-p "/run/spice-vdagentd")
+               (false-if-exception
+                (delete-file "/run/spice-vdagentd/spice-vdagent-sock"))
+               (fork+exec-command '#$spice-vdagentd-command)))
+    (stop #~(make-kill-destructor)))))
 
 (define spice-vdagent-profile
   (compose list spice-vdagent-configuration-spice-vdagent))
 
 (define spice-vdagent-service-type
-  (service-type (name 'spice-vdagent)
-    (extensions
-      (list (service-extension shepherd-root-service-type
-                               spice-vdagent-shepherd-service)
-            (service-extension activation-service-type
-                               spice-vdagent-activation)
-            (service-extension profile-service-type
-                               spice-vdagent-profile)))))
+  (service-type
+   (name 'spice-vdagent)
+   (default-value (spice-vdagent-configuration))
+   (extensions
+    (list (service-extension shepherd-root-service-type
+                             spice-vdagent-shepherd-service)
+          (service-extension profile-service-type
+                             spice-vdagent-profile)))))
 
 (define* (spice-vdagent-service
           #:optional (config (spice-vdagent-configuration)))
diff --git a/gnu/system.scm b/gnu/system.scm
index 5bf2a85272..8a3ae27d04 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -13,6 +13,7 @@
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <jannek@gnu.org>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -62,6 +63,7 @@
   #:use-module (gnu packages package-management)
   #:use-module (gnu packages pciutils)
   #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages wget)
   #:use-module (gnu packages zile)
   #:use-module (gnu services)
   #:use-module (gnu services shepherd)
@@ -601,16 +603,6 @@ OS."
       (file-append (operating-system-kernel os)
                       "/" (system-linux-image-file-name))))
 
-(define (package-for-kernel target-kernel module-package)
-  "Return a package like MODULE-PACKAGE, adapted for TARGET-KERNEL, if
-possible (that is if there's a LINUX keyword argument in the build system)."
-  (package
-    (inherit module-package)
-    (arguments
-     (substitute-keyword-arguments (package-arguments module-package)
-       ((#:linux kernel #f)
-        target-kernel)))))
-
 (define %default-modprobe-blacklist
   ;; List of kernel modules to blacklist by default.
   '("usbmouse" ;races with bcm5974, see <https://bugs.gnu.org/35574>
@@ -628,23 +620,12 @@ value of the SYSTEM-SERVICE-TYPE service."
   (let* ((locale  (operating-system-locale-directory os))
          (kernel  (operating-system-kernel os))
          (hurd    (operating-system-hurd os))
-         (modules (operating-system-kernel-loadable-modules os))
-         (kernel  (if hurd
-                      kernel
-                      (profile
-                       (content (packages->manifest
-                                 (cons kernel
-                                       (map (lambda (module)
-                                              (if (package? module)
-                                                  (package-for-kernel kernel
-                                                                      module)
-                                                  module))
-                                            modules))))
-                       (hooks (list linux-module-database)))))
          (initrd  (and (not hurd) (operating-system-initrd-file os)))
          (params  (operating-system-boot-parameters-file os)))
-    `(("kernel" ,kernel)
-      ,@(if hurd `(("hurd" ,hurd)) '())
+    `(,@(if hurd
+          `(("hurd" ,hurd)
+            ("kernel" ,kernel))
+          '())
       ("parameters" ,params)
       ,@(if initrd `(("initrd" ,initrd)) '())
       ("locale" ,locale))))   ;used by libc
@@ -664,6 +645,10 @@ bookkeeping."
          (host-name (host-name-service (operating-system-host-name os)))
          (entries   (operating-system-directory-base-entries os)))
     (cons* (service system-service-type entries)
+           (service linux-builder-service-type
+                    (linux-builder-configuration
+                      (kernel   (operating-system-kernel os))
+                      (modules  (operating-system-kernel-loadable-modules os))))
            %boot-service
 
            ;; %SHEPHERD-ROOT-SERVICE must come last so that the gexp that
@@ -806,6 +791,7 @@ of PROVENANCE-SERVICE-TYPE to its services."
   ;; Default set of networking packages.
   (list inetutils isc-dhcp
         iproute
+        wget
         ;; wireless-tools is deprecated in favor of iw, but it's still what
         ;; many people are familiar with, so keep it around.
         iw wireless-tools))
diff --git a/gnu/system/examples/vm-image.tmpl b/gnu/system/examples/vm-image.tmpl
index bcb2ba614c..697019e877 100644
--- a/gnu/system/examples/vm-image.tmpl
+++ b/gnu/system/examples/vm-image.tmpl
@@ -5,7 +5,7 @@
 ;;
 
 (use-modules (gnu) (guix) (srfi srfi-1))
-(use-service-modules desktop networking ssh xorg)
+(use-service-modules desktop mcron networking spice ssh xorg)
 (use-package-modules bootloaders certs fonts nvi
                      package-management wget xorg)
 
@@ -24,6 +24,18 @@ Run '\x1b[1;37minfo guix\x1b[0m' to browse documentation.
 accounts.\x1b[0m
 "))
 
+;;; XXX: Xfce does not implement what is needed for the SPICE dynamic
+;;; resolution to work (see:
+;;; https://gitlab.xfce.org/xfce/xfce4-settings/-/issues/142).  Workaround it
+;;; by manually invoking xrandr every second.
+(define auto-update-resolution-crutch
+  #~(job '(next-second)
+         (lambda ()
+           (setenv "DISPLAY" ":0.0")
+           (setenv "XAUTHORITY" "/home/guest/.Xauthority")
+           (execl (string-append #$xrandr "/bin/xrandr") "xrandr" "-s" "0"))
+         #:user "guest"))
+
 (operating-system
   (host-name "gnu")
   (timezone "Etc/UTC")
@@ -75,11 +87,23 @@ root ALL=(ALL) ALL
                            (default-user "guest")
                            (xorg-configuration
                             (xorg-configuration
+                             ;; The QXL virtual GPU driver is added to provide
+                             ;; a better SPICE experience.
+                             (modules (cons xf86-video-qxl
+                                            %default-xorg-modules))
                              (keyboard-layout keyboard-layout)))))
 
                  ;; Uncomment the line below to add an SSH server.
                  ;;(service openssh-service-type)
 
+                 ;; Add support for the SPICE protocol, which enables dynamic
+                 ;; resizing of the guest screen resolution, clipboard
+                 ;; integration with the host, etc.
+                 (service spice-vdagent-service-type)
+
+                 (simple-service 'cron-jobs mcron-service-type
+                                 (list auto-update-resolution-crutch))
+
                  ;; Use the DHCP client service rather than NetworkManager.
                  (service dhcp-client-service-type))
 
diff --git a/gnu/system/locale.scm b/gnu/system/locale.scm
index 4771192cfb..dcbc93e3bf 100644
--- a/gnu/system/locale.scm
+++ b/gnu/system/locale.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2017, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
diff --git a/gnu/tests/linux-modules.scm b/gnu/tests/linux-modules.scm
index 953b132ef7..30d8eae03b 100644
--- a/gnu/tests/linux-modules.scm
+++ b/gnu/tests/linux-modules.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2019 Jakob L. Kreuze <zerodaysfordays@sdf.org>
 ;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,7 +35,10 @@
   #:use-module (guix utils)
   #:export (%test-loadable-kernel-modules-0
             %test-loadable-kernel-modules-1
-            %test-loadable-kernel-modules-2))
+            %test-loadable-kernel-modules-2
+            %test-loadable-kernel-modules-service-0
+            %test-loadable-kernel-modules-service-1
+            %test-loadable-kernel-modules-service-2))
 
 ;;; Commentary:
 ;;;
@@ -66,17 +70,11 @@ that MODULES are actually loaded."
                        (member module modules string=?))
                      '#$modules))))))
 
-(define* (run-loadable-kernel-modules-test module-packages module-names)
-  "Run a test of an OS having MODULE-PACKAGES, and verify that MODULE-NAMES
-are loaded in memory."
+(define* (run-loadable-kernel-modules-test-base base-os module-names)
+  "Run a test of BASE-OS, verifying that MODULE-NAMES are loaded in memory."
   (define os
     (marionette-operating-system
-     (operating-system
-      (inherit (simple-operating-system))
-      (services (cons (service kernel-module-loader-service-type module-names)
-                      (operating-system-user-services
-                       (simple-operating-system))))
-      (kernel-loadable-modules module-packages))
+     base-os
      #:imported-modules '((guix combinators))))
   (define vm (virtual-machine os))
   (define (test script)
@@ -98,6 +96,36 @@ are loaded in memory."
   (gexp->derivation "loadable-kernel-modules"
                     (test (modules-loaded?-program os module-names))))
 
+(define* (run-loadable-kernel-modules-test module-packages module-names)
+  "Run a test of an OS having MODULE-PACKAGES, and verify that MODULE-NAMES
+are loaded in memory."
+  (run-loadable-kernel-modules-test-base
+    (operating-system
+      (inherit (simple-operating-system))
+      (services (cons (service kernel-module-loader-service-type module-names)
+                      (operating-system-user-services
+                       (simple-operating-system))))
+      (kernel-loadable-modules module-packages))
+    module-names))
+
+(define* (run-loadable-kernel-modules-service-test module-packages module-names)
+  "Run a test of an OS having MODULE-PACKAGES, which are loaded by creating a
+service that extends LINUXL-LOADABLE-MODULE-SERVICE-TYPE. Then verify that
+MODULE-NAMES are loaded in memory."
+  (define module-installing-service-type
+    (service-type
+      (name 'module-installing-service)
+      (extensions (list (service-extension linux-loadable-module-service-type
+                                           (const module-packages))))
+      (default-value #f)))
+  (run-loadable-kernel-modules-test-base
+    (operating-system
+      (inherit (simple-operating-system))
+      (services (cons* (service module-installing-service-type)
+                       (operating-system-user-services
+                        (simple-operating-system)))))
+    module-names))
+
 (define %test-loadable-kernel-modules-0
   (system-test
    (name "loadable-kernel-modules-0")
@@ -129,3 +157,35 @@ with two extra modules.")
                                                  (package-arguments
                                                   ddcci-driver-linux))))))
            '("acpi_call" "ddcci")))))
+
+(define %test-loadable-kernel-modules-service-0
+  (system-test
+   (name "loadable-kernel-modules-service-0")
+   (description "Tests loadable kernel modules extensible service with no
+extra modules.")
+   (value (run-loadable-kernel-modules-service-test '() '()))))
+
+(define %test-loadable-kernel-modules-service-1
+  (system-test
+   (name "loadable-kernel-modules-service-1")
+   (description "Tests loadable kernel modules extensible service with one
+extra module.")
+   (value (run-loadable-kernel-modules-service-test
+           (list ddcci-driver-linux)
+           '("ddcci")))))
+
+(define %test-loadable-kernel-modules-service-2
+  (system-test
+   (name "loadable-kernel-modules-service-2")
+   (description "Tests loadable kernel modules extensible service with two
+extra modules.")
+   (value (run-loadable-kernel-modules-service-test
+           (list acpi-call-linux-module
+                 (package
+                   (inherit ddcci-driver-linux)
+                   (arguments
+                    `(#:linux #f
+                      ,@(strip-keyword-arguments '(#:linux)
+                                                 (package-arguments
+                                                  ddcci-driver-linux))))))
+           '("acpi_call" "ddcci")))))