summary refs log tree commit diff
path: root/gnu/packages
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages')
-rw-r--r--gnu/packages/admin.scm43
-rw-r--r--gnu/packages/animation.scm33
-rw-r--r--gnu/packages/astronomy.scm210
-rw-r--r--gnu/packages/autotools.scm9
-rw-r--r--gnu/packages/backup.scm6
-rw-r--r--gnu/packages/bioinformatics.scm170
-rw-r--r--gnu/packages/bittorrent.scm1
-rw-r--r--gnu/packages/browser-extensions.scm10
-rw-r--r--gnu/packages/check.scm83
-rw-r--r--gnu/packages/chemistry.scm301
-rw-r--r--gnu/packages/chromium.scm44
-rw-r--r--gnu/packages/ci.scm67
-rw-r--r--gnu/packages/cmake.scm29
-rw-r--r--gnu/packages/compression.scm40
-rw-r--r--gnu/packages/connman.scm8
-rw-r--r--gnu/packages/cpp.scm75
-rw-r--r--gnu/packages/crates-graphics.scm762
-rw-r--r--gnu/packages/crates-io.scm851
-rw-r--r--gnu/packages/disk.scm5
-rw-r--r--gnu/packages/dlang.scm25
-rw-r--r--gnu/packages/dns.scm25
-rw-r--r--gnu/packages/emacs-xyz.scm100
-rw-r--r--gnu/packages/emacs.scm16
-rw-r--r--gnu/packages/emulators.scm6
-rw-r--r--gnu/packages/engineering.scm23
-rw-r--r--gnu/packages/fcitx.scm61
-rw-r--r--gnu/packages/fcitx5.scm102
-rw-r--r--gnu/packages/finance.scm1
-rw-r--r--gnu/packages/fpga.scm87
-rw-r--r--gnu/packages/freedesktop.scm9
-rw-r--r--gnu/packages/game-development.scm36
-rw-r--r--gnu/packages/games.scm65
-rw-r--r--gnu/packages/geo.scm27
-rw-r--r--gnu/packages/gnome.scm4
-rw-r--r--gnu/packages/gnupg.scm86
-rw-r--r--gnu/packages/gnuzilla.scm20
-rw-r--r--gnu/packages/graphics.scm16
-rw-r--r--gnu/packages/guile-xyz.scm21
-rw-r--r--gnu/packages/hardware.scm74
-rw-r--r--gnu/packages/haskell-apps.scm4
-rw-r--r--gnu/packages/julia-xyz.scm181
-rw-r--r--gnu/packages/kde-frameworks.scm7
-rw-r--r--gnu/packages/kde.scm6
-rw-r--r--gnu/packages/language.scm279
-rw-r--r--gnu/packages/license.scm33
-rw-r--r--gnu/packages/linux.scm60
-rw-r--r--gnu/packages/lisp-xyz.scm428
-rw-r--r--gnu/packages/machine-learning.scm33
-rw-r--r--gnu/packages/mail.scm7
-rw-r--r--gnu/packages/messaging.scm7
-rw-r--r--gnu/packages/mono.scm4
-rw-r--r--gnu/packages/music.scm6
-rw-r--r--gnu/packages/networking.scm6
-rw-r--r--gnu/packages/openstack.scm25
-rw-r--r--gnu/packages/parallel.scm19
-rw-r--r--gnu/packages/patches/avogadro-boost148.patch69
-rw-r--r--gnu/packages/patches/avogadro-eigen3-update.patch603
-rw-r--r--gnu/packages/patches/avogadro-python-eigen-lib.patch161
-rw-r--r--gnu/packages/patches/c++-gsl-find-system-gtest.patch96
-rw-r--r--gnu/packages/patches/freebayes-devendor-deps.patch2
-rw-r--r--gnu/packages/patches/icecat-makeicecat.patch4
-rw-r--r--gnu/packages/patches/mutt-CVE-2021-3181.patch45
-rw-r--r--gnu/packages/patches/pinentry-efl.patch798
-rw-r--r--gnu/packages/pdf.scm90
-rw-r--r--gnu/packages/perl.scm29
-rw-r--r--gnu/packages/protobuf.scm1
-rw-r--r--gnu/packages/python-build.scm160
-rw-r--r--gnu/packages/python-check.scm21
-rw-r--r--gnu/packages/python-crypto.scm1
-rw-r--r--gnu/packages/python-web.scm27
-rw-r--r--gnu/packages/python-xyz.scm331
-rw-r--r--gnu/packages/qt.scm87
-rw-r--r--gnu/packages/radio.scm41
-rw-r--r--gnu/packages/rust-apps.scm4
-rw-r--r--gnu/packages/search.scm59
-rw-r--r--gnu/packages/sequoia.scm2
-rw-r--r--gnu/packages/sphinx.scm1
-rw-r--r--gnu/packages/ssh.scm11
-rw-r--r--gnu/packages/syncthing.scm115
-rw-r--r--gnu/packages/syndication.scm11
-rw-r--r--gnu/packages/telegram.scm557
-rw-r--r--gnu/packages/terminals.scm202
-rw-r--r--gnu/packages/tor.scm6
-rw-r--r--gnu/packages/version-control.scm17
-rw-r--r--gnu/packages/virtualization.scm1
-rw-r--r--gnu/packages/vulkan.scm6
-rw-r--r--gnu/packages/web.scm14
-rw-r--r--gnu/packages/wine.scm13
-rw-r--r--gnu/packages/xfce.scm16
89 files changed, 5145 insertions, 3112 deletions
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index f78b411559..b24d5601cf 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -28,7 +28,7 @@
 ;;; Copyright © 2019 Jakob L. Kreuze <zerodaysfordays@sdf.org>
 ;;; Copyright © 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
-;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2019, 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2019, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
@@ -1421,7 +1421,7 @@ system administrator.")
 (define-public sudo
   (package
     (name "sudo")
-    (version "1.9.5p1")
+    (version "1.9.5p2")
     (source (origin
               (method url-fetch)
               (uri
@@ -1431,7 +1431,7 @@ system administrator.")
                                     version ".tar.gz")))
               (sha256
                (base32
-                "10kqdfbfpf3vk5ihz5gwynv4pxdf1lg6ircrlanyygb549yg7pad"))
+                "0y093z4f3822rc88g9asdch12nljdamp817vjxk04mca7ks2x7jk"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -1520,7 +1520,7 @@ commands and their arguments.")
 (define-public opendoas
   (package
     (name "opendoas")
-    (version "6.8")
+    (version "6.8.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1529,7 +1529,7 @@ commands and their arguments.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1dlwnvy8r6slxcy260gfkximp1ms510wdslpfq9y6xvd2qi5izcb"))))
+                "0gfcssm21vdfg6kcrcc7hz1h4jmhy2zv29rfqyrrj3a6r9b5ah8p"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -2103,7 +2103,7 @@ track changes in important system configuration files.")
 (define-public libcap-ng
   (package
     (name "libcap-ng")
-    (version "0.8")
+    (version "0.8.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2111,7 +2111,7 @@ track changes in important system configuration files.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "08cy59iassiwbmfxa5v0kb374r80290vv32f5q1mnip11av26kgi"))))
+                "1sasp1n154aqy9fz0knlb966svm7xg1zjhg1vr4q839bgjvq7h2j"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -4354,3 +4354,32 @@ This program allows you to view and manipulate this EEPROM list.")
 the XMODEM/YMODEM/ZMODEM file transfer protocols.")
     (home-page "https://ohse.de/uwe/software/lrzsz.html")
     (license license:gpl2+)))
+
+(define-public nq
+  (package
+    (name "nq")
+    (version "0.3.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/leahneukirchen/nq")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1db96ykz35r273jyhf7cdknqk4p2jj9l8gbz7pjy1hq4pb6ffk99"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("perl" ,perl)))
+    (arguments
+     `(#:make-flags (list (string-append "CC=" ,(cc-for-target))
+                          (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure))))
+    (synopsis "Unix command line queue utility")
+    (description
+     "@code{nq} can create very lightweight job queue systems which require no
+setup, maintenance, supervision, or any long-running processes.")
+    (home-page "https://github.com/leahneukirchen/nq")
+    (license license:public-domain)))
diff --git a/gnu/packages/animation.scm b/gnu/packages/animation.scm
index 6bfe8f0a12..c92c4ae7e7 100644
--- a/gnu/packages/animation.scm
+++ b/gnu/packages/animation.scm
@@ -26,10 +26,12 @@
   #:use-module (guix utils)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system meson)
   #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages dejagnu)
@@ -53,6 +55,37 @@
   #:use-module (gnu packages video)
   #:use-module (gnu packages xiph))
 
+(define-public rlottie
+  (package
+    (name "rlottie")
+    (version "0.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/Samsung/rlottie.git")
+         (commit
+          (string-append "v" version))))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32 "10bxr1zf9wxl55d4cw2j02r6sgqln7mbxplhhfvhw0z92fi40kr3"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:configure-flags
+       (list
+        "-Dlog=true"
+        "-Dtest=true")))
+    (native-inputs
+     `(("googletest" ,googletest)
+       ("pkg-config" ,pkg-config)))
+    (synopsis "Lottie Animation Library")
+    (description "Rlottie is a platform independent standalone c++ library for
+rendering vector based animations and art in realtime.")
+    (home-page "https://github.com/Samsung/rlottie/")
+    (license license:expat)))
+
 ;; ETL, synfig, and Synfig Studio are updated in tandem.
 (define synfig-version "1.2.2")
 
diff --git a/gnu/packages/astronomy.scm b/gnu/packages/astronomy.scm
index 0e1a55481f..9777b0008f 100644
--- a/gnu/packages/astronomy.scm
+++ b/gnu/packages/astronomy.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019 by Amar Singh <nly@disroot.org>
 ;;; Copyright © 2020 R Veera Kumar <vkor@vkten.in>
 ;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
@@ -31,6 +31,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages fontutils)
@@ -40,6 +41,7 @@
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages libusb)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages netpbm)
@@ -88,6 +90,29 @@ in FITS files.")
     (license (license:non-copyleft "file://License.txt"
                           "See License.txt in the distribution."))))
 
+(define-public eye
+  (package
+    (name "eye")
+    (version "1.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.astromatic.net/download/eye/"
+                           "eye-" version ".tar.gz"))
+       (sha256
+        (base32 "092qhzcbrkcfidbx4bv9wz42w297n80jk7a6kwyi9a3fjfz81d7k"))))
+    (build-system gnu-build-system)
+    (home-page "https://www.astromatic.net/software/eye")
+    (synopsis "Small image feature detector using machine learning")
+    (description
+     "In EyE (Enhance Your Extraction) an artificial neural network connected to
+pixels of a moving window (retina) is trained to associate these input stimuli
+to the corresponding response in one or several output image(s).  The resulting
+filter can be loaded in SExtractor to operate complex, wildly non-linear filters
+on astronomical images.  Typical applications of EyE include adaptive filtering,
+feature detection and cosmetic corrections.")
+    (license license:cecill)))
+
 (define-public wcslib
   (package
     (name "wcslib")
@@ -127,10 +152,30 @@ coordinate systems in a @dfn{FITS} (Flexible Image Transport System) image
 header.")
     (license license:lgpl3+)))
 
+(define-public weightwatcher
+  (package
+    (name "weightwatcher")
+    (version "1.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.astromatic.net/download/weightwatcher/"
+                           "weightwatcher-" version ".tar.gz"))
+       (sha256
+        (base32 "1zaqd8d9rpgcwjsp92q3lkfaa22i20gppb91dz34ym54swisjc2p"))))
+    (build-system gnu-build-system)
+    (home-page "https://www.astromatic.net/software/weightwatcher")
+    (synopsis "Weight-map/flag-map multiplexer and rasteriser")
+    (description
+     "Weightwatcher is a program hat combines weight-maps, flag-maps and
+polygon data in order to produce control maps which can directly be used in
+astronomical image-processing packages like Drizzle, Swarp or SExtractor.")
+    (license license:gpl3+)))
+
 (define-public gnuastro
   (package
     (name "gnuastro")
-    (version "0.13")
+    (version "0.14")
     (source
      (origin
        (method url-fetch)
@@ -138,13 +183,15 @@ header.")
                            version ".tar.lz"))
        (sha256
         (base32
-         "07di6zx2irc5q0zyymx2951ydzxdfjmzd3az5qnk67ncf3hknvj5"))))
+         "1xp6n42qxv0x6yigi2w2l5k8006smv27lhrcssysgsvzbydghzg5"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static")))
     (inputs
      `(("cfitsio" ,cfitsio)
+       ("curl" ,curl-minimal)
        ("gsl" ,gsl)
+       ("libgit2" ,libgit2)
        ("libjpeg" ,libjpeg-turbo)
        ("libtiff" ,libtiff)
        ("wcslib" ,wcslib)
@@ -204,6 +251,36 @@ large scale galaxy-survey data, it can perform reasonably well on moderately
 crowded star fields.")
     (license license:gpl3+)))
 
+(define-public skymaker
+  (package
+    (name "skymaker")
+    (version "3.10.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.astromatic.net/download/skymaker/"
+                           "skymaker-" version ".tar.gz"))
+       (sha256
+        (base32 "03zvx7c89plp9559niqv5532r233kza3ir992rg3nxjksqmrqvx1"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list
+        (string-append
+         "--with-fftw-libdir=" (assoc-ref %build-inputs "fftw") "/lib")
+        (string-append
+         "--with-fftw-incdir=" (assoc-ref %build-inputs "fftw") "/include"))))
+    (inputs
+     `(("fftw" ,fftwf)))
+    (home-page "https://www.astromatic.net/software/skymaker")
+    (synopsis "Astronomical image simulator")
+    (description
+     "SkyMaker is a program that simulates astronomical images.  It accepts
+object lists in ASCII generated by the Stuff program to produce realistic
+astronomical fields.  SkyMaker is part of the EFIGI
+(@url{https://www.astromatic.net/projects/efigi}) development project.")
+    (license license:gpl3+)))
+
 (define-public stellarium
   (package
     (name "stellarium")
@@ -251,6 +328,46 @@ can be used to control telescopes over a serial port for tracking celestial
 objects.")
     (license license:gpl2+)))
 
+(define-public stuff
+  (package
+    (name "stuff")
+    (version "1.26.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.astromatic.net/download/stuff/"
+                           "stuff-" version ".tar.gz"))
+       (sha256
+        (base32 "1syibi3b86z9pikhicvkkmgxm916j732fdiw0agw0lq6z13fdcjm"))))
+    (build-system gnu-build-system)
+    (home-page "https://www.astromatic.net/software/stuff")
+    (synopsis "Astronomical catalogue simulation")
+    (description
+     "Stuff is a program that simulates \"perfect\" astronomical catalogues.
+It generates object lists in ASCII which can read by the SkyMaker program to
+produce realistic astronomical fields.  Stuff is part of the EFIGI development
+project.")
+    (license license:gpl3+)))
+
+(define-public swarp
+  (package
+    (name "swarp")
+    (version "2.38.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.astromatic.net/download/swarp/"
+                           "swarp-" version ".tar.gz"))
+       (sha256
+        (base32 "1i670waqp54vin1cn08mqckcggm9zqd69nk7yya2vvqpdizn6jpm"))))
+    (build-system gnu-build-system)
+    (home-page "https://www.astromatic.net/software/swarp")
+    (synopsis "FITS image resampling and co-addition")
+    (description
+     "SWarp is a program that resamples and co-adds together FITS images using
+any arbitrary astrometric projection defined in the WCS standard.")
+    (license license:gpl3+)))
+
 (define-public celestia
   (let ((commit "9dbdf29c4ac3d20afb2d9a80d3dff241ecf81dce"))
     (package
@@ -396,6 +513,33 @@ standard astronomy libraries:
 @end itemize\n")
       (license license:gpl2+))))
 
+(define-public missfits
+  (package
+    (name "missfits")
+    (version "2.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.astromatic.net/download/missfits/"
+                           "missfits-" version ".tar.gz"))
+       (sha256
+        (base32 "04jrd7fsvzr14vdmwgj2f6v97gdcfyjyz6jppml3ghr9xh12jxv5"))))
+    (build-system gnu-build-system)
+    (home-page "https://www.astromatic.net/software/missfits")
+    (synopsis "FITS files Maintenance program")
+    (description
+     "MissFITS is a program that performs basic maintenance and packaging tasks
+on FITS files:
+
+@itemize
+@item add/edit FITS header keywords
+@item split/join Multi-Extension-FITS (MEF) files
+@item unpack/pack FITS data-cubes
+@item create/check/update FITS checksums, using R. Seaman's protocol
+      (see http://www.adass.org/adass/proceedings/adass94/seamanr.html)
+@end itemize\n")
+    (license license:gpl3+)))
+
 (define-public xplanet
   (package
     (name "xplanet")
@@ -488,3 +632,63 @@ Gpredict can also predict the time of future passes for a satellite, and
 provide you with detailed information about each pass.")
     (home-page "http://gpredict.oz9aec.net/index.php")
     (license license:gpl2+)))
+
+(define-public indi
+  (package
+    (name "indi")
+    (version "1.8.8")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/indilib/indi")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "19gm7rbnm3295g2i8mdzfslpz0vrcgfmbl59311qpszvlxbmyd2r"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       (let ((out (assoc-ref %outputs "out")))
+         (list
+          "-DINDI_BUILD_UNITTESTS=ON"
+          "-DCMAKE_BUILD_TYPE=Release"
+          (string-append "-DCMAKE_INSTALL_PREFIX=" out)
+          (string-append "-DUDEVRULES_INSTALL_DIR=" out "/lib/udev/rules.d")))
+       #:phases
+       (modify-phases %standard-phases
+         (replace  'check
+           (lambda _
+             (chdir "test")
+             (invoke "ctest")
+             (chdir "..")
+             #t))
+         (add-before 'install 'set-install-directories
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (mkdir-p (string-append out "/lib/udev/rules.d")))
+             #t)))))
+    (native-inputs
+     `(("googletest" ,googletest)))
+    (inputs
+     `(("cfitsio" ,cfitsio)
+       ("curl" ,curl)
+       ("fftw" ,fftw)
+       ("gsl" ,gsl)
+       ("libjpeg-turbo" ,libjpeg-turbo)
+       ("libnova" ,libnova)
+       ("libtiff" ,libtiff)
+       ("libusb" ,libusb)
+       ("zlib" ,zlib)))
+    (home-page "https://www.indilib.org")
+    (synopsis "Library for astronimical intrumentation control")
+    (description
+     "INDI (Instrument-Neutral Device Interface) is a distributed XML-based
+control protocol designed to operate astronomical instrumentation.  INDI is
+small, flexible, easy to parse, scalable, and stateless.  It supports common
+DCS functions such as remote control, data acquisition, monitoring, and a lot
+more.")
+    (license (list license:bsd-3
+                   license:gpl2+
+                   license:lgpl2.0+
+                   license:lgpl2.1+))))
diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm
index 6074379c46..09f4bf4122 100644
--- a/gnu/packages/autotools.scm
+++ b/gnu/packages/autotools.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
 ;;; Copyright © 2014 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2015, 2017, 2018 Mark H Weaver <mhw@netris.org>
@@ -105,10 +105,11 @@ scripts are self-contained and portable, freeing the user from needing to
 know anything about Autoconf or M4.")
     (license gpl3+))) ; some files are under GPLv2+
 
-(define-public autoconf-2.70
+;; This is the renaissance version, which is not widely supported yet.
+(define-public autoconf-2.71
   (package
     (inherit autoconf-2.69)
-    (version "2.70")
+    (version "2.71")
     (source
      (origin
        (method url-fetch)
@@ -116,7 +117,7 @@ know anything about Autoconf or M4.")
                            version ".tar.xz"))
        (sha256
         (base32
-         "1ipckz0wr2mvhj9n3ys54fmf2aksin6bhqvzl304bn6rc1w257ps"))))
+         "197sl23irn6s9pd54rxj5vcp5y8dv65jb9yfqgr2g56cxg7q6k7i"))))
     (arguments
      (substitute-keyword-arguments (package-arguments autoconf-2.69)
        ((#:tests? _ #f)
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index ce6ea7fd49..78c5b31bb5 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -1008,7 +1008,7 @@ is format-agnostic, so you can feed virtually any files to it.")
 (define-public dump
   (package
     (name "dump")
-    (version "0.4b46")
+    (version "0.4b47")
     (source
      (origin
        (method url-fetch)
@@ -1016,7 +1016,7 @@ is format-agnostic, so you can feed virtually any files to it.")
                            version "/dump-" version ".tar.gz"))
        (sha256
         (base32
-         "15rg5y15ak0ppqlhcih78layvg7cwp6hc16p3c58xs8svlkxjqc0"))))
+         "1l2gzzxyqhinx1yqvj4yn9k8vx3iyqi1965dxf9kvvdv9zgaq8fh"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -1026,7 +1026,7 @@ is format-agnostic, so you can feed virtually any files to it.")
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
-     `(("openssl" ,openssl-1.0)
+     `(("openssl" ,openssl)
        ("zlib" ,zlib)
        ("util-linux" ,util-linux "lib")
        ("e2fsprogs" ,e2fsprogs)))
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 8514306f94..39611d23f4 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017, 2018 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2015, 2016, 2018, 2019, 2020 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
@@ -2822,6 +2822,86 @@ sequencing data.  It uses paired-ends and split-reads to sensitively and
 accurately delineate genomic rearrangements throughout the genome.")
     (license license:gpl3+)))
 
+(define-public trf
+  (package
+    (name "trf")
+    (version "4.09.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/Benson-Genomics-Lab/TRF")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32 "0fhwr4s1mf8nw8fr5imwjvjr42b59p97zr961ifm8xl1bajz4wpg"))))
+    (build-system gnu-build-system)
+    (home-page "https://github.com/Benson-Genomics-Lab/TRF")
+    (synopsis "Tandem Repeats Finder: a program to analyze DNA sequences")
+    (description "A tandem repeat in DNA is two or more adjacent, approximate
+copies of a pattern of nucleotides.  Tandem Repeats Finder is a program to
+locate and display tandem repeats in DNA sequences.  In order to use the
+program, the user submits a sequence in FASTA format.  The output consists of
+two files: a repeat table file and an alignment file.  Submitted sequences may
+be of arbitrary length. Repeats with pattern size in the range from 1 to 2000
+bases are detected.")
+    (license license:agpl3+)))
+
+(define-public repeat-masker
+  (package
+    (name "repeat-masker")
+    (version "4.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://www.repeatmasker.org/"
+                                  "RepeatMasker/RepeatMasker-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32 "03144sl9kh5ni2i33phi7x2pjndzbm5bjw3r4kqvmm6hxyb4k4x2"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #false ; there are none
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'build
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((share (string-append (assoc-ref outputs "out")
+                                         "/share/RepeatMasker")))
+               (mkdir-p share)
+               (copy-recursively "." share)
+               (with-directory-excursion share
+                 (invoke "perl" "configure"
+                         "--trf_prgm" (which "trf")
+                         "--hmmer_dir"
+                         (string-append (assoc-ref inputs "hmmer")
+                                        "/bin"))))))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out   (assoc-ref outputs "out"))
+                    (share (string-append out "/share/RepeatMasker"))
+                    (bin   (string-append out "/bin"))
+                    (path  (getenv "PERL5LIB")))
+               (install-file (string-append share "/RepeatMasker") bin)
+               (wrap-program (string-append bin "/RepeatMasker")
+                 `("PERL5LIB" ":" prefix (,path ,share)))))))))
+    (inputs
+     `(("perl" ,perl)
+       ("perl-text-soundex" ,perl-text-soundex)
+       ("python" ,python)
+       ("python-h5py" ,python-h5py)
+       ("hmmer" ,hmmer)
+       ("trf" ,trf)))
+    (home-page "https://github.com/Benson-Genomics-Lab/TRF")
+    (synopsis "Tandem Repeats Finder: a program to analyze DNA sequences")
+    (description "A tandem repeat in DNA is two or more adjacent, approximate
+copies of a pattern of nucleotides.  Tandem Repeats Finder is a program to
+locate and display tandem repeats in DNA sequences.  In order to use the
+program, the user submits a sequence in FASTA format.  The output consists of
+two files: a repeat table file and an alignment file.  Submitted sequences may
+be of arbitrary length. Repeats with pattern size in the range from 1 to 2000
+bases are detected.")
+    (license license:osl2.1)))
+
 (define-public diamond
   (package
     (name "diamond")
@@ -7189,6 +7269,45 @@ between two different types of motif instances using as much relevant
 information as possible.")
     (license (list license:gpl2+ license:gpl3+))))
 
+(define-public r-demultiplex
+  (let ((commit "6e2a1422c8e6f418cfb271997eebc91f9195f299")
+        (revision "1"))
+    (package
+      (name "r-demultiplex")
+      (version (git-version "1.0.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/chris-mcginnis-ucsf/MULTI-seq")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "01kv88wp8vdaq07sjk0d3d1cb553mq1xqg0war81pgmg63bgi38w"))))
+      (properties `((upstream-name . "deMULTIplex")))
+      (build-system r-build-system)
+      (propagated-inputs
+       `(("r-kernsmooth" ,r-kernsmooth)
+         ("r-reshape2" ,r-reshape2)
+         ("r-rtsne" ,r-rtsne)
+         ("r-shortread" ,r-shortread)
+         ("r-stringdist" ,r-stringdist)))
+      (home-page "https://github.com/chris-mcginnis-ucsf/MULTI-seq")
+      (synopsis "MULTI-seq pre-processing and classification tools")
+      (description
+       "deMULTIplex is an R package for analyzing single-cell RNA sequencing
+data generated with the MULTI-seq sample multiplexing method.  The package
+includes software to
+
+@enumerate
+@item Convert raw MULTI-seq sample barcode library FASTQs into a sample
+  barcode UMI count matrix, and
+@item Classify cell barcodes into sample barcode groups.
+@end enumerate
+")
+      (license license:cc0))))
+
 (define-public r-genefilter
   (package
     (name "r-genefilter")
@@ -15090,18 +15209,18 @@ library automatically handles index file generation and use.")
              (let* ((out (assoc-ref outputs "out"))
                     (pkgconfig (string-append out "/lib/pkgconfig")))
                (mkdir-p pkgconfig)
-               (with-output-to-file (string-append pkgconfig "/libvcflib.pc")
+               (with-output-to-file (string-append pkgconfig "/vcflib.pc")
                  (lambda _
                    (format #t "prefix=~a~@
                            exec_prefix=${prefix}~@
                            libdir=${exec_prefix}/lib~@
                            includedir=${prefix}/include~@
                            ~@
-                           Name: libvcflib~@
+                           Name: vcflib~@
                            Version: ~a~@
-                           Requires: smithwaterman, fastahack~@
+                           Requires: smithwaterman, fastahack, tabixpp~@
                            Description: C++ library for parsing and manipulating VCF files~@
-                           Libs: -L${libdir} -llibvcflib~@
+                           Libs: -L${libdir} -lvcflib~@
                            Cflags: -I${includedir}~%"
                            out ,version)))
                  #t))))))
@@ -15488,44 +15607,3 @@ biological processes.  SBML is useful for models of metabolism, cell
 signaling, and more.  It continues to be evolved and expanded by an
 international community.")
     (license license:lgpl2.1+)))
-
-(define-public grocsvs
-  ;; The last release is out of date and new features have been added.
-  (let ((commit "ecd956a65093a0b2c41849050e4512d46fecea5d")
-        (revision "1"))
-    (package
-      (name "grocsvs")
-      (version (git-version "0.2.6.1" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                       (url "https://github.com/grocsvs/grocsvs")
-                       (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32 "14505725gr7qxc17cxxf0k6lzcwmgi64pija4mwf29aw70qn35cc"))
-                (patches (search-patches "grocsvs-dont-use-admiral.patch"))))
-      (build-system python-build-system)
-      (arguments
-       `(#:tests? #f            ; No test suite.
-         #:python ,python-2))   ; Only python-2 supported.
-      (inputs
-       `(("python2-h5py" ,python2-h5py)
-         ("python2-ipython-cluster-helper" ,python2-ipython-cluster-helper)
-         ("python2-networkx" ,python2-networkx)
-         ("python2-psutil" ,python2-psutil)
-         ("python2-pandas" ,python2-pandas)
-         ("python2-pybedtools" ,python2-pybedtools)
-         ("python2-pyfaidx" ,python2-pyfaidx)
-         ("python2-pygraphviz" ,python2-pygraphviz)
-         ("python2-pysam" ,python2-pysam)
-         ("python2-scipy" ,python2-scipy)))
-      (home-page "https://github.com/grocsvs/grocsvs")
-      (synopsis "Genome-wide reconstruction of complex structural variants")
-      (description
-       "@dfn{Genome-wide Reconstruction of Complex Structural Variants}
-(GROC-SVs) is a software pipeline for identifying large-scale structural
-variants, performing sequence assembly at the breakpoints, and reconstructing
-the complex structural variants using the long-fragment information from the
-10x Genomics platform.")
-       (license license:expat))))
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index 08e61d7ba2..29b0d62ad2 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -55,6 +55,7 @@
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
diff --git a/gnu/packages/browser-extensions.scm b/gnu/packages/browser-extensions.scm
index 10b8304eb6..3824dc7f72 100644
--- a/gnu/packages/browser-extensions.scm
+++ b/gnu/packages/browser-extensions.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,7 +49,7 @@ supported content to the Kodi media center.")
   (make-chromium-extension play-to-kodi))
 
 (define uassets
-  (let ((commit "8e79f25fceb7c27960753de6f4d21491257741ab"))
+  (let ((commit "a5b1e3cae3e63435caa03940eff549133e524970"))
     (origin
       (method git-fetch)
       (uri (git-reference
@@ -58,12 +58,12 @@ supported content to the Kodi media center.")
       (file-name (git-file-name "uAssets" (string-take commit 9)))
       (sha256
        (base32
-        "19ymyv6qpmmyw4lnpx6adm6mzf8ygfj0c9ljw24wl239v9vzn46w")))))
+        "1qjq9x6qb07x4iyha3zzwjcgr0p54c2pdadvcp2kj7h34vjlpksj")))))
 
 (define ublock-origin
   (package
     (name "ublock-origin")
-    (version "1.32.4")
+    (version "1.33.0")
     (home-page "https://github.com/gorhill/uBlock")
     (source (origin
               (method git-fetch)
@@ -71,7 +71,7 @@ supported content to the Kodi media center.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0v5phzsrav1z0gd7rirmsy7k500xhibw73ffk61754hkqd0l635v"))))
+                "1indr8p4imljgc1d5vyn48cbpzy9ygqmkk4q07czlrhcrz7hb4nx"))))
     (build-system gnu-build-system)
     (outputs '("xpi" "firefox" "chromium"))
     (arguments
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index d9a1fb3acf..7163086ae0 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -67,6 +67,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages time)
@@ -1404,9 +1405,6 @@ subprocess and see the output as well as any file modifications.")
      "This package is only for bootstrapping.  Do not use this.")
     (license license:psfl)))
 
-(define-public python2-testtools-bootstrap
-  (package-with-python2 python-testtools-bootstrap))
-
 (define-public python-testtools
   (package
     (inherit python-testtools-bootstrap)
@@ -1432,9 +1430,6 @@ subprocess and see the output as well as any file modifications.")
 provide matchers, more debugging information, and cross-Python
 compatibility.")))
 
-(define-public python2-testtools
-  (package-with-python2 python-testtools))
-
 (define-public python-testscenarios-bootstrap
   (package
     (name "python-testscenarios-bootstrap")
@@ -1462,9 +1457,6 @@ compatibility.")))
      "This package is only for bootstrapping.  Don't use this.")
     (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
 
-(define-public python2-testscenarios-bootstrap
-  (package-with-python2 python-testscenarios-bootstrap))
-
 (define-public python-testscenarios
   (package
     (inherit python-testscenarios-bootstrap)
@@ -1476,9 +1468,6 @@ compatibility.")))
      "Testscenarios provides clean dependency injection for Python unittest
 style tests.")))
 
-(define-public python2-testscenarios
-  (package-with-python2 python-testscenarios))
-
 ;; Testresources requires python-pbr at runtime, but pbr needs it for its
 ;; own tests.  Hence this bootstrap variant.
 (define-public python-testresources-bootstrap
@@ -1503,9 +1492,6 @@ style tests.")))
 testresources package instead.")
     (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
 
-(define-public python2-testresources-bootstrap
-  (package-with-python2 python-testresources-bootstrap))
-
 (define-public python-testresources
   (package
     (inherit python-testresources-bootstrap)
@@ -1520,9 +1506,6 @@ testresources package instead.")
      "Testresources is an extension to Python's unittest to allow declarative
 use of resources by test cases.")))
 
-(define-public python2-testresources
-  (package-with-python2 python-testresources))
-
 (define-public python-subunit-bootstrap
   (package
     (name "python-subunit-bootstrap")
@@ -1549,9 +1532,6 @@ use of resources by test cases.")))
 python-subunit package instead.")
     (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
 
-(define-public python2-subunit-bootstrap
-  (package-with-python2 python-subunit-bootstrap))
-
 (define-public python-subunit
   (package
     (inherit python-subunit-bootstrap)
@@ -1567,9 +1547,6 @@ python-subunit package instead.")
      "Python-subunit is a Python implementation of the subunit test streaming
 protocol.")))
 
-(define-public python2-subunit
-  (package-with-python2 python-subunit))
-
 ;; Fixtures requires python-pbr at runtime, but pbr uses fixtures for its
 ;; own tests.  Hence this bootstrap variant.
 (define-public python-fixtures-bootstrap
@@ -1594,9 +1571,6 @@ protocol.")))
 python-fixtures package instead.")
     (license (list license:bsd-3 license:asl2.0)))) ; at user's option
 
-(define-public python2-fixtures-bootstrap
-  (package-with-python2 python-fixtures-bootstrap))
-
 (define-public python-fixtures
   (package
     (inherit python-fixtures-bootstrap)
@@ -1619,9 +1593,6 @@ python-fixtures package instead.")
      "Fixtures provides a way to create reusable state, useful when writing
 Python tests.")))
 
-(define-public python2-fixtures
-  (package-with-python2 python-fixtures))
-
 (define-public python-testrepository-bootstrap
   (package
     (name "python-testrepository-bootstrap")
@@ -1647,9 +1618,6 @@ Python tests.")))
      "Bootstrap package for python-testrepository.  Don't use this.")
     (license (list license:bsd-3 license:asl2.0)))) ; at user's option
 
-(define-public python2-testrepository-bootstrap
-  (package-with-python2 python-testrepository-bootstrap))
-
 (define-public python-testrepository
   (package
     (inherit python-testrepository-bootstrap)
@@ -1667,9 +1635,6 @@ Python tests.")))
 be used as part of a developer's workflow to check things such as what tests
 have failed since the last commit or what tests are currently failing.")))
 
-(define-public python2-testrepository
-  (package-with-python2 python-testrepository))
-
 (define-public python-coverage
   (package
     (name "python-coverage")
@@ -2198,51 +2163,8 @@ Pylint has many rules enabled by default, way too much to silence them
 all on a minimally sized program.  It's highly configurable and handle
 pragmas to control it from within your code.  Additionally, it is
 possible to write plugins to add your own checks.")
-    (properties `((python2-variant . ,(delay python2-pylint))))
     (license license:gpl2+)))
 
-;; Python2 is not supported anymore by Pylint. See:
-;; https://github.com/PyCQA/pylint/issues/1763.
-(define-public python2-pylint
-  (let ((pylint (package-with-python2
-                 (strip-python2-variant python-pylint))))
-    (package (inherit pylint)
-             (version "1.9.5")
-             (source
-              (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/PyCQA/pylint")
-                      (commit (string-append "pylint-" version))))
-                (file-name (git-file-name (package-name pylint) version))
-                (sha256
-                 (base32
-                  "02a89d8a47s7nfiv1ady3j0sg2sbyja3np145brarfp5x9qxz9x2"))))
-             (arguments
-              `(,@(strip-keyword-arguments '(#:tests?) (package-arguments pylint))
-                #:phases
-                (modify-phases %standard-phases
-                  (replace 'check
-                    (lambda _
-                      ;; Somehow, tests fail if run from the build directory.
-                      (let ((work "/tmp/work"))
-                        (mkdir-p work)
-                        (setenv "PYTHONPATH"
-                                (string-append (getenv "PYTHONPATH") ":" work))
-                        (copy-recursively "." work)
-                        (with-directory-excursion "/tmp"
-                          (invoke "python" "-m" "unittest" "discover"
-                                  "-s" (string-append work "/pylint/test")
-                                  "-p" "*test_*.py"))))))))
-             (native-inputs
-              `(("python2-futures" ,python2-futures)
-                ,@(package-native-inputs pylint)))
-             (propagated-inputs
-              `(("python2-backports-functools-lru-cache"
-                 ,python2-backports-functools-lru-cache)
-                ("python2-configparser" ,python2-configparser)
-                ,@(package-propagated-inputs pylint))))))
-
 (define-public python-paramunittest
   (package
     (name "python-paramunittest")
@@ -2471,9 +2393,6 @@ tests written in a natural language style, backed up by Python code.")
 JSON APIs with Behave.")
     (license license:expat)))
 
-(define-public python2-behave-web-api
-  (package-with-python2 python-behave-web-api))
-
 (define-public python-rednose
   (package
     (name "python-rednose")
diff --git a/gnu/packages/chemistry.scm b/gnu/packages/chemistry.scm
index ddbf5ca098..4b0e719959 100644
--- a/gnu/packages/chemistry.scm
+++ b/gnu/packages/chemistry.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018 Konrad Hinsen <konrad.hinsen@fastmail.net>
-;;; Copyright © 2018 Kei Kebreau <kkebreau@posteo.net>
+;;; Copyright © 2018, 2021 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
@@ -29,6 +29,8 @@
   #:use-module (guix git-download)
   #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages backup)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
@@ -43,96 +45,89 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
+  #:use-module (gnu packages serialization)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages xml)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python))
 
-(define-public avogadro
+(define-public avogadrolibs
   (package
-    (name "avogadro")
-    (version "1.2.0")
+    (name "avogadrolibs")
+    (version "1.93.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/cryos/avogadro")
+             (url "https://github.com/OpenChemistry/avogadrolibs")
              (commit version)))
        (sha256
-        (base32 "0258py3lkba85qhs5ynancinyym61vlp0zaq9yrfs3hhnhpzv9n2"))
-       (file-name (git-file-name name version))
-       (patches
-        (search-patches "avogadro-eigen3-update.patch"
-                        "avogadro-python-eigen-lib.patch"
-                        "avogadro-boost148.patch"))))
+        (base32 "1xivga626n5acnmwmym8svl0pdri8hkp59czf04ri2zflnviyh39"))
+       (file-name (git-file-name name version))))
     (build-system cmake-build-system)
+    (native-inputs
+     `(("eigen" ,eigen)
+       ("mmtf-cpp" ,mmtf-cpp)
+       ("msgpack" ,msgpack)
+       ("googletest" ,googletest)
+       ("pkg-config" ,pkg-config)
+       ("pybind11" ,pybind11)))
+    (inputs
+     `(("glew" ,glew)
+       ("libarchive" ,libarchive)
+       ("libmsym" ,libmsym)
+       ("molequeue" ,molequeue)
+       ("python" ,python)
+       ("spglib" ,spglib)
+       ("qtbase" ,qtbase)))
     (arguments
-     `(#:tests? #f
-       #:configure-flags
-       (list "-DENABLE_GLSL=ON"
-             (string-append "-DPYTHON_LIBRARIES="
-                            (assoc-ref %build-inputs "python")
-                            "/lib")
-             (string-append "-DPYTHON_INCLUDE_DIRS="
-                            (assoc-ref %build-inputs "python")
-                            "/include/python"
-                            ,(version-major+minor
-                               (package-version python))))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-python-lib-path
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; This is necessary to install the Python module in the correct
-             ;; directory.
-             (substitute* "libavogadro/src/python/CMakeLists.txt"
-               (("^EXECUTE_PROCESS.*$") "")
-               (("^.*from sys import stdout.*$") "")
-               (("^.*OUTPUT_VARIABLE.*")
-                (string-append "set(PYTHON_LIB_PATH \""
-                               (assoc-ref outputs "out")
-                               "/lib/python"
-                               ,(version-major+minor
-                                  (package-version python))
-                               "/site-packages\")")))
-             #t))
-         (add-after 'install 'wrap-program
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             ;; Make sure 'avogadro' runs with the correct PYTHONPATH.
-             (let* ((out (assoc-ref outputs "out")))
-               (setenv "PYTHONPATH"
-                       (string-append
-                        (assoc-ref outputs "out")
-                        "/lib/python"
-                        ,(version-major+minor
-                           (package-version python))
-                        "/site-packages:"
-                        (getenv "PYTHONPATH")))
-               (wrap-program (string-append out "/bin/avogadro")
-                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))))
-             #t)))))
+     '(#:configure-flags (list "-DENABLE_TESTING=ON"
+                               (string-append "-DSPGLIB_INCLUDE_DIR="
+                                              (assoc-ref %build-inputs "spglib")
+                                              "/include"))))
+    (home-page "https://www.openchemistry.org/projects/avogadro2/")
+    (synopsis "Libraries for chemistry, bioinformatics, and related areas")
+    (description
+     "Avogadro libraries provide 3D rendering, visualization, analysis and data
+processing useful in computational chemistry, molecular modeling,
+bioinformatics, materials science, and related areas.")
+    (license license:bsd-3)))
+
+(define-public avogadro2
+  (package
+    (name "avogadro2")
+    (version "1.93.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/OpenChemistry/avogadroapp")
+             (commit version)))
+       (sha256
+        (base32
+         "1z3pjlwja778a1dmvx9aqz2hlw5q9g3kqxhm9slz08452600jsv7"))
+       (file-name (git-file-name name version))))
+    (build-system cmake-build-system)
     (native-inputs
-     `(("doxygen" ,doxygen)
+     `(("eigen" ,eigen)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("boost" ,boost)
-       ("eigen" ,eigen)
-       ("glew" ,glew)
-       ("openbabel" ,openbabel)
-       ("python" ,python-2)
-       ("python-numpy" ,python2-numpy)
-       ("python-pyqt" ,python2-pyqt-4)
-       ("python-sip" ,python2-sip)
-       ("qt" ,qt-4)
-       ("zlib" ,zlib)))
-    (home-page "https://avogadro.cc")
+     `(("avogadrolibs" ,avogadrolibs)
+       ("hdf5" ,hdf5)
+       ("molequeue" ,molequeue)
+       ("qtbase" ,qtbase)))
+    ;; TODO: Enable tests with "-DENABLE_TESTING" configure flag.
+    (arguments
+     '(#:tests? #f))
+    (home-page "https://www.openchemistry.org/projects/avogadro2/")
     (synopsis "Advanced molecule editor")
     (description
-     "Avogadro is an advanced molecule editor and visualizer designed for use
+     "Avogadro 2 is an advanced molecule editor and visualizer designed for use
 in computational chemistry, molecular modeling, bioinformatics, materials
 science, and related areas.  It offers flexible high quality rendering and a
 powerful plugin architecture.")
-    (license license:gpl2+)))
+    (license license:bsd-3)))
 
 (define-public domainfinder
   (package
@@ -166,15 +161,16 @@ only with Python 2 and NumPy < 1.9.")
 (define-public inchi
   (package
     (name "inchi")
-    (version "1.05")
+    ;; Update the inchi-doc native input when updating inchi.
+    (version "1.06")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://www.inchi-trust.org/download/"
+              (uri (string-append "https://www.inchi-trust.org/download/"
                                   (string-join (string-split version #\.) "")
                                   "/INCHI-1-SRC.zip"))
               (sha256
                (base32
-                "081pcjx1z5jm23fs1pl2r3bccia0ww8wfkzcjpb7byhn7b513hsa"))
+                "1zbygqn0443p0gxwr4kx3m1bkqaj8x9hrpch3s41py7jq08f6x28"))
               (file-name (string-append name "-" version ".zip"))))
     (build-system gnu-build-system)
     (arguments
@@ -227,7 +223,7 @@ only with Python 2 and NumPy < 1.9.")
                                   "/INCHI-1-DOC.zip"))
            (sha256
             (base32
-             "1id1qb2y4lwsiw91qr2yqpn6kxbwjwhjk0hb2rwk4fxhdqib6da6"))
+             "1kyda09i9p89xfq90ninwi7w13k1w3ljpl4gqdhpfhi5g8fgxx7f"))
            (file-name (string-append name "-" version ".zip"))))))
     (home-page "https://www.inchi-trust.org")
     (synopsis "Utility for manipulating machine-readable chemical structures")
@@ -241,6 +237,103 @@ analogy is that InChI is the bar-code for chemistry and chemical structures.")
               "file://LICENCE"
               "See LICENCE in the distribution."))))
 
+(define-public libmsym
+  (package
+    (name "libmsym")
+    (version "0.2.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/mcodev31/libmsym")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32
+         "0a9j28irdsr461qpzlc9z1yjyb9kp64fh5zw7ylspc9zn3189qwk"))
+       (file-name (git-file-name name version))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")
+       #:tests? #f))                    ; no check target
+    (home-page "https://github.com/mcodev31/libmsym")
+    (synopsis "C library dealing with point group symmetry in molecules")
+    (description "libmsym is a C library dealing with point group symmetry in
+molecules.")
+    (license license:expat)))
+
+(define-public mmtf-cpp
+  (package
+    (name "mmtf-cpp")
+    (version "1.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rcsb/mmtf-cpp")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "17ylramda69plf5w0v5hxbl4ggkdi5s15z55cv0pljl12yvyva8l"))))
+    (build-system cmake-build-system)
+    ;; Tests require the soon-to-be-deprecated version 1 of the catch-framework.
+    (arguments
+     '(#:tests? #f))
+    (home-page "https://mmtf.rcsb.org/")
+    (synopsis "C++ API for the Macromolecular Transmission Format")
+    (description "This package is a library for the
+@acronym{MMTF,macromolecular transmission format}, a binary encoding of
+biological structures.")
+    (license license:expat)))
+
+(define-public molequeue
+  (package
+    (name "molequeue")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/OpenChemistry/molequeue/"
+                           "releases/download/" version "/molequeue-"
+                           version ".tar.bz2"))
+       (sha256
+        (base32
+         "1w1fgxzqrb5yxvpmnc3c9ymnvixy0z1nfafkd9whg9zw8nbgl998"))))
+    (build-system cmake-build-system)
+    (inputs
+     `(("qtbase" ,qtbase)))
+    (arguments
+     '(#:configure-flags '("-DENABLE_TESTING=ON")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-tests
+           (lambda _
+             ;; TODO: Fix/enable the failing message and clientserver tests.
+             ;; In the message test, the floating-point value "5.36893473232" on
+             ;; line 165 of molequeue/app/testing/messagetest.cpp should
+             ;; (apparently) be truncated, but it is not.
+             (substitute* "molequeue/app/testing/messagetest.cpp"
+               (("5\\.36893473232") "5.36893"))
+             ;; It is unclear why the clientserver test fails, so it is
+             ;; completely disabled.
+             (substitute* "molequeue/app/testing/CMakeLists.txt"
+               ((".*clientserver.*") ""))
+             #t))
+         (add-before 'check 'set-display
+           (lambda _
+             ;; Make Qt render "offscreen" for the sake of tests.
+             (setenv "QT_QPA_PLATFORM" "offscreen")
+             #t)))))
+    (home-page "https://www.openchemistry.org/projects/molequeue/")
+    (synopsis "Application for coordinating computational jobs")
+    (description "MoleQueue is a system-tray resident desktop application for
+abstracting, managing, and coordinating the execution of tasks both locally and
+ on remote computational resources.  Users can set up local and remote queues
+that describe where the task will be executed.  Each queue can have programs,
+with templates to facilitate the execution of the program.  Input files can be
+staged, and output files collected using a standard interface.")
+    (license license:bsd-3)))
+
 (define with-numpy-1.8
   (package-input-rewriting `((,python2-numpy . ,python2-numpy-1.8))))
 
@@ -429,19 +522,23 @@ usual algorithms you expect from a modern molecular dynamics implementation.")
 (define-public openbabel
   (package
     (name "openbabel")
-    (version "2.4.1")
+    (version "3.1.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://sourceforge/" name "/" name "/"
-                                  version "/" name "-" version ".tar.gz"))
+              (uri (string-append "https://github.com/openbabel/openbabel/"
+                                  "releases/download/openbabel-"
+                                  (string-replace-substring version "." "-")
+                                  "/openbabel-" version "-source.tar.bz2"))
               (sha256
                (base32
-                "1z3d6xm70dpfikhwdnbzc66j2l49vq105ch041wivrfz5ic3ch90"))
-              (patches
-               (search-patches "openbabel-fix-crash-on-nwchem-output.patch"))))
+                "0s0f4zib8vshfaywsr5bjjz55jwsg6yiz2qw4i5jm8wysn0q7v56"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:configure-flags
+     `(;; FIXME: Disable tests on i686 to work around
+       ;; https://github.com/openbabel/openbabel/issues/2041.
+       #:tests? ,(or (%current-target-system)
+                     (not (string=? "i686-linux" (%current-system))))
+       #:configure-flags
        (list "-DOPENBABEL_USE_SYSTEM_INCHI=ON"
              (string-append "-DINCHI_LIBRARY="
                             (assoc-ref %build-inputs "inchi")
@@ -464,3 +561,49 @@ chemical data.  It's a collaborative project allowing anyone to search, convert,
 analyze, or store data from molecular modeling, chemistry, solid-state
 materials, biochemistry, or related areas.")
     (license license:gpl2)))
+
+(define-public spglib
+  (package
+    (name "spglib")
+    (version "1.16.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/spglib/spglib")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32 "1kzc956m1pnazhz52vspqridlw72wd8x5l3dsilpdxl491aa2nws"))
+       (file-name (git-file-name name version))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:test-target "check"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-header-install-dir
+           (lambda _
+             ;; As of the writing of this package, CMake and GNU build systems
+             ;; install the header to two different location.  This patch makes
+             ;; the CMake build system's choice of header directory compatible
+             ;; with the GNU build system's choice and with what avogadrolibs
+             ;; expects.
+             ;; See https://github.com/spglib/spglib/issues/75 and the relevant
+             ;; part of https://github.com/OpenChemistry/avogadroapp/issues/97.
+             (substitute* "CMakeLists.txt"
+               (("\\$\\{CMAKE_INSTALL_INCLUDEDIR\\}" include-dir)
+                (string-append include-dir "/spglib")))
+             #t)))))
+    (home-page "https://spglib.github.io/spglib/index.html")
+    (synopsis "Library for crystal symmetry search")
+    (description "Spglib is a library for finding and handling crystal
+symmetries written in C.  Spglib can be used to:
+
+@enumerate
+@item Find symmetry operations
+@item Identify space-group type
+@item Wyckoff position assignment
+@item Refine crystal structure
+@item Find a primitive cell
+@item Search irreducible k-points
+@end enumerate")
+    (license license:bsd-3)))
diff --git a/gnu/packages/chromium.scm b/gnu/packages/chromium.scm
index a994b387bb..0b8f55ff02 100644
--- a/gnu/packages/chromium.scm
+++ b/gnu/packages/chromium.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019, 2020, 2021 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -160,6 +160,7 @@
     "third_party/dom_distiller_js" ;BSD-3
     "third_party/emoji-segmenter" ;ASL2.0
     "third_party/flatbuffers" ;ASL2.0
+    "third_party/fusejs" ;ASL2.0
     "third_party/glslang" ;BSD-3, Expat, ASL2.0
     "third_party/google_input_tools" ;ASL2.0
     "third_party/google_input_tools/third_party/closure_library" ;ASL2.0
@@ -277,6 +278,13 @@
     "third_party/woff2" ;ASL2.0
     "third_party/xcbproto" ;X11
     "third_party/xdg-utils" ;Expat
+
+    ;; These are forked components of the X11 keybinding code.
+    "third_party/libxcb-keysyms" ;X11
+    "third_party/libx11/src/KeyBind.c" ;X11
+    "third_party/libx11/src/xkb/XKBBind.c" ;X11
+    "third_party/x11proto/keysymdef.h" ;X11
+
     "third_party/zlib/google" ;BSD-3
     "third_party/zxcvbn-cpp" ;Expat
     "url/third_party/mozilla" ;BSD-3, MPL1.1/GPL2+/LGPL2.1+
@@ -302,8 +310,8 @@
                   (string-append "ungoogled-chromium-" category "-" name))))
     (sha256 (base32 hash))))
 
-(define %chromium-version "87.0.4280.141")
-(define %ungoogled-revision "483a1bae4eee601c7d0a4a63499380e40e4f8a44")
+(define %chromium-version "88.0.4324.104")
+(define %ungoogled-revision "4e2679ce15a53925b34a95aa3e1731751530dc22")
 (define %debian-revision "debian/84.0.4147.105-1")
 
 (define %debian-patches
@@ -321,7 +329,7 @@
                               (string-take %ungoogled-revision 7)))
     (sha256
      (base32
-      "0r09d27jrdz01rcwifchbq7ksh2bac15h8svq18jx426mr56dzla"))))
+      "09x6kxd99a274mln3k3ckly6swyp5qdnkkp8p6grs9nr5jrgqqx5"))))
 
 (define %guix-patches
   (list (local-file
@@ -405,6 +413,22 @@
         `(cons "--enable-custom-modes"
                ,flags))))))
 
+;; WebRTC in Chromium 88 requires an unreleased version of libvpx.  Use the
+;; commit mentioned in "third_party/libvpx/README.chromium".
+(define libvpx/chromium
+  (package
+    (inherit libvpx)
+    (version "1.9.0-88-g12059d956")
+    (source (origin
+              (inherit (package-source libvpx))
+              (uri (git-reference
+                    (url "https://chromium.googlesource.com/webm/libvpx")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name "libvpx" version))
+              (sha256
+               (base32
+                "14knnvfaskfz97vs3lfqrdpcbcx22s6qp16213wdnvnsf4c1lx1b"))))))
+
 ;; 'make-ld-wrapper' can only work with an 'ld' executable, so we need
 ;; this trick to make it wrap 'lld'.
 (define (make-lld-wrapper lld)
@@ -443,7 +467,7 @@
                                   %chromium-version ".tar.xz"))
               (sha256
                (base32
-                "0x9k809m36pfirnw2vnr9pk93nxdbgrvna0xf1rs3q91zkbr2x8l"))
+                "0iq1rmfiqmxsj6skbi17g007zqgjsb50b59slfni2n4mz06xmgbx"))
               (modules '((guix build utils)))
               (snippet (force ungoogled-chromium-snippet))))
     (build-system gnu-build-system)
@@ -580,6 +604,12 @@
                (("third_party/icu/source/(common|i18n)/")
                 ""))
 
+             ;; Fix faulty ICU call.  Likely fixed in M89.
+             (substitute*
+                 "third_party/blink/renderer/platform/wtf/text/text_codec_icu.cc"
+               (("ideographicSpaceCharacter")
+                "kIdeographicSpaceCharacter"))
+
              ;; XXX: Should be unnecessary when use_system_lcms2=true.
              (substitute* "third_party/pdfium/core/fxcodec/icc/iccmodule.h"
                (("include \"third_party/lcms/include/lcms2\\.h\"")
@@ -805,14 +835,14 @@
        ("glib" ,glib)
        ("gtk+" ,gtk+)
        ("harfbuzz" ,harfbuzz)
-       ("icu4c" ,icu4c-67)
+       ("icu4c" ,icu4c-68)
        ("lcms" ,lcms)
        ("libevent" ,libevent)
        ("libffi" ,libffi)
        ("libjpeg-turbo" ,libjpeg-turbo)
        ("libpng" ,libpng)
        ("libva" ,libva)
-       ("libvpx" ,libvpx)
+       ("libvpx" ,libvpx/chromium)
        ("libwebp" ,libwebp)
        ("libx11" ,libx11)
        ("libxcb" ,libxcb)
diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm
index 161b45846e..9a08ac4c23 100644
--- a/gnu/packages/ci.scm
+++ b/gnu/packages/ci.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016, 2017 Mathieu Lirzin <mthl@gnu.org>
-;;; Copyright © 2017, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2017, 2020, 2021 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;;
@@ -26,6 +26,7 @@
   #:use-module (gnu packages)
   #:use-module (guix packages)
   #:use-module (guix git-download)
+  #:use-module (guix download)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages docbook)
@@ -39,7 +40,6 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-compression)
   #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages version-control)
@@ -47,29 +47,9 @@
   #:use-module (gnu packages xml)
   #:use-module (guix build-system gnu))
 
-;; Guile-Sqlite3 package adding SQL query logging support.
-;; Remove it when next Guile-Sqlite3 release is out.
-(define-public guile-sqlite3-dev
-  (let ((commit "22ef45d268de7707cbbb943c404f9b0c1668e2e1")
-        (revision "1"))
-    (package
-      (inherit guile-sqlite3)
-      (name "guile-sqlite3")
-      (version (git-version "0.1.2" revision commit))
-      (home-page "https://notabug.org/mothacehe/guile-sqlite3.git")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url home-page)
-                      (commit commit)))
-                (sha256
-                 (base32
-                  "1q90f8zhw9n1c39szd2ba7aj5fi92m09pnlv0z7jbhnnjam5jwcd"))
-                (file-name (string-append name "-" version "-checkout")))))))
-
 (define-public cuirass
-  (let ((commit "697fa14584551d9595cd042f1ffeba240e45a127")
-        (revision "56"))
+  (let ((commit "79b77b4377db2e79a1f3396cfeeca64bfab00341")
+        (revision "64"))
     (package
       (name "cuirass")
       (version (git-version "0.0.1" revision commit))
@@ -81,43 +61,33 @@
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0gw9cja8fiyra9vnn3y384gwanvsqdq6gwjcvmz91sy5lvfwv34m"))))
+                  "0wrpzhcs1cvc5c4s72zs100iw0f4nnv5j2lp6yz3j31zl92vxbis"))))
       (build-system gnu-build-system)
       (arguments
        '(#:modules ((guix build utils)
                     (guix build gnu-build-system)
                     (ice-9 rdelim)
                     (ice-9 popen))
-
          #:configure-flags '("--localstatedir=/var") ;for /var/log/cuirass
-
+         #:tests? #f  ;requires a PostgreSQL database.
          #:phases
          (modify-phases %standard-phases
-           (add-after 'unpack 'disable-repo-tests
-             (lambda _
-               ;; Disable tests that use a connection to the Guix daemon.
-               (substitute* "Makefile.am"
-                 (("tests/repo.scm \\\\") "\\"))
-               #t))
-           (add-after 'disable-repo-tests 'patch-/bin/sh
-             (lambda _
-               (substitute* "build-aux/git-version-gen"
-                 (("#!/bin/sh") (string-append "#!" (which "sh"))))
-               #t))
            (add-after 'install 'wrap-program
              (lambda* (#:key inputs outputs #:allow-other-keys)
                ;; Wrap the 'cuirass' command to refer to the right modules.
                (let* ((out    (assoc-ref outputs "out"))
+                      (avahi  (assoc-ref inputs "guile-avahi"))
                       (gcrypt (assoc-ref inputs "guile-gcrypt"))
                       (json   (assoc-ref inputs "guile-json"))
-                      (sqlite (assoc-ref inputs "guile-sqlite3"))
+                      (zmq    (assoc-ref inputs "guile-simple-zmq"))
+                      (squee  (assoc-ref inputs "guile-squee"))
                       (git    (assoc-ref inputs "guile-git"))
                       (bytes  (assoc-ref inputs "guile-bytestructures"))
                       (fibers (assoc-ref inputs "guile-fibers"))
                       (zlib   (assoc-ref inputs "guile-zlib"))
                       (guix   (assoc-ref inputs "guix"))
-                      (deps   (list gcrypt json sqlite git bytes fibers
-                                    zlib guix))
+                      (deps   (list avahi gcrypt json zmq squee git bytes
+                                    fibers zlib guix))
                       (guile  (assoc-ref %build-inputs "guile"))
                       (effective (read-line
                                   (open-pipe* OPEN_READ
@@ -137,17 +107,22 @@
                                1)))
                  ;; Make sure 'cuirass' can find the 'evaluate' command, as
                  ;; well as the relevant Guile modules.
-                 (wrap-program (string-append out "/bin/cuirass")
-                   `("PATH" ":" prefix (,(string-append out "/bin")))
-                   `("GUILE_LOAD_PATH" ":" prefix (,mods))
-                   `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,objs)))
+                 (for-each
+                  (lambda (name)
+                    (wrap-program (string-append out "/bin/" name)
+                      `("PATH" ":" prefix (,(string-append out "/bin")))
+                      `("GUILE_LOAD_PATH" ":" prefix (,mods))
+                      `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,objs))))
+                  '("cuirass" "remote-server" "remote-worker"))
                  #t))))))
       (inputs
        `(("guile" ,guile-3.0/libgc-7)
+         ("guile-avahi" ,guile-avahi)
          ("guile-fibers" ,guile-fibers)
          ("guile-gcrypt" ,guile-gcrypt)
          ("guile-json" ,guile-json-4)
-         ("guile-sqlite3" ,guile-sqlite3-dev)
+         ("guile-simple-zmq" ,guile-simple-zmq)
+         ("guile-squee" ,guile-squee)
          ("guile-git" ,guile-git)
          ("guile-zlib" ,guile-zlib)
          ;; FIXME: this is propagated by "guile-git", but it needs to be among
diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm
index 56b32792fe..ab74650066 100644
--- a/gnu/packages/cmake.scm
+++ b/gnu/packages/cmake.scm
@@ -31,6 +31,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix deprecation)
   #:use-module (guix build-system gnu)
@@ -43,6 +44,7 @@
   #:use-module (gnu packages curl)
   #:use-module (gnu packages file)
   #:use-module (gnu packages hurd)
+  #:use-module (gnu packages kde-frameworks)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages serialization)
@@ -52,6 +54,33 @@
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1))
 
+(define-public cmake-shared
+  (package
+    (name "cmake-shared")
+    (version "1.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/lirios/cmake-shared.git")
+         (commit
+          (string-append "v" version))))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32 "1srd3jmlalf0szgyp88ymhbnwds4qiywmf8lq1pif9g8irjjhdry"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f))                    ; No target
+    (native-inputs
+     `(("extra-cmake-modules" ,extra-cmake-modules)))
+    (synopsis "Shared CMake functions and macros")
+    (description "CMake-Shared are shared functions and macros for projects
+using the CMake build system.")
+    (home-page "https://github.com/lirios/cmake-shared/")
+    (license license:bsd-3)))
+
 ;;; Build phases shared between 'cmake-bootstrap' and the later variants
 ;;; that use cmake-build-system.
 (define %common-build-phases
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 56350089f5..d5fb7635ea 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -29,6 +29,7 @@
 ;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2020 Lars-Dominik Braun <lars@6xq.net>
 ;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2020 Léo Le Bouter <lle-bout@zaclys.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -55,6 +56,7 @@
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system go)
+  #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
@@ -70,7 +72,9 @@
   #: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 man)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
@@ -78,6 +82,7 @@
   #:use-module (gnu packages qt)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages valgrind)
+  #:use-module (gnu packages version-control)
   #:use-module (gnu packages xml)
   #:use-module (ice-9 match)
   #:use-module ((srfi srfi-1) #:select (last)))
@@ -1025,6 +1030,41 @@ smaller than those produced by @code{Xdelta}.")
     ;; Some source files specify gpl2+, lgpl2+, however COPYING is gpl3.
     (license license:gpl3+)))
 
+(define-public libjcat
+  (package
+    (name "libjcat")
+    (version "0.1.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/hughsie/libjcat")
+         (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0rxyqikdhkh2nq1y0hy05df2kkxf3d2cp6lm5x1s5i717k6y3zy5"))))
+    (build-system meson-build-system)
+    (native-inputs
+     `(("gobject-introspection" ,gobject-introspection)
+       ("help2man" ,help2man)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("git" ,git)
+       ("glib" ,glib)
+       ("gnupg" ,gnupg)
+       ("gnutls" ,gnutls)
+       ("gpgme" ,gpgme)
+       ("json-glib" ,json-glib)
+       ("vala" ,vala)))
+    (home-page "https://github.com/hughsie/libjcat")
+    (synopsis "Library for reading and writing Jcat files")
+    (description
+     "This library allows reading and writing gzip-compressed JSON catalog
+files, which can be used to store GPG, PKCS-7 and SHA-256 checksums for each
+file.")
+    (license license:lgpl2.1+)))
+
 (define-public xdelta
   (package
     (name "xdelta")
diff --git a/gnu/packages/connman.scm b/gnu/packages/connman.scm
index 5f17a0ea95..1331c849a0 100644
--- a/gnu/packages/connman.scm
+++ b/gnu/packages/connman.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
@@ -138,15 +138,15 @@ sharing) to clients via USB, ethernet, WiFi, cellular and Bluetooth.")
 (define-public cmst
   (package
     (name "cmst")
-    (version "2019.01.13")
+    (version "2020.11.01")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "https://github.com/andrew-bibb/cmst/releases/download/cmst-"
+             "https://github.com/andrew-bibb/cmst/releases/download/"
              version "/cmst-" version ".tar.xz"))
        (sha256
-        (base32 "1cn6xz2rpkf5kx5d6p2x2lh85zppjacp59l6gj3n6x12p90al1vl"))))
+        (base32 "0jn12wxwjznady6aniwmvahg1dj25p902sdwj0070biv6vx5c7dq"))))
     (inputs
      `(("qtbase" ,qtbase)))
     (native-inputs
diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm
index ca8f7a9f80..ae47490755 100644
--- a/gnu/packages/cpp.scm
+++ b/gnu/packages/cpp.scm
@@ -14,7 +14,7 @@
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
-;;; Copyright © 2020 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2020, 2021 Greg Hogan <code@greghogan.com>
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -49,6 +49,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages crypto)
   #:use-module (gnu packages curl)
+  #:use-module (gnu packages documentation)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libunwind)
@@ -63,6 +64,74 @@
   #:use-module (gnu packages tls)
   #:use-module (gnu packages web))
 
+(define-public range-v3
+  (package
+    (name "range-v3")
+    (version "0.11.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/ericniebler/range-v3.git")
+         (commit version)))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32 "18230bg4rq9pmm5f8f65j444jpq56rld4fhmpham8q3vr1c1bdjh"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("doxygen" ,doxygen)
+       ("perl" ,perl)))
+    (inputs
+     `(("boost" ,boost)))
+    (synopsis "Range library for C++14/17/20")
+    (description "Range-v3 is an extension of the Standard Template Library that
+makes its iterators and algorithms more powerful by making them composable.
+Unlike other range-like solutions which, seek to do away with iterators, in
+range-v3 ranges are an abstration layer on top of iterators.")
+    (home-page "https://github.com/ericniebler/range-v3/")
+    (license
+     (list
+      ;; Elements of Programming
+      (license:x11-style "file:///LICENSE.txt")
+      ;; SGI STL
+      license:sgifreeb2.0
+      ;;; LibC++ (dual-licensed)
+      license:expat
+      license:ncsa
+      ;; Others
+      license:boost1.0))))
+
+(define-public c++-gsl
+  (package
+    (name "c++-gsl")
+    (version "3.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/microsoft/GSL.git")
+         (commit
+          (string-append "v" version))))
+       (file-name
+        (git-file-name name version))
+       (patches
+        (search-patches
+         "c++-gsl-find-system-gtest.patch"))
+       (sha256
+        (base32 "0gbvr48f03830g3154bjhw92b8ggmg6wwh5xyb8nppk9v6w752l0"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("googletest" ,googletest)
+       ("pkg-config" ,pkg-config)))
+    (synopsis "Guidelines Support Library")
+    (description "c++-gsl contains functions and types that are suggested for
+use by the C++ Core Guidelines maintained by the Standard C++ Foundation.")
+    (home-page "https://github.com/microsoft/GSL/")
+    (license license:expat)))
+
 (define-public libzen
   (package
     (name "libzen")
@@ -689,7 +758,7 @@ standard GNU style syntax for options.")
 (define-public folly
   (package
     (name "folly")
-    (version "2020.10.05.00")
+    (version "2021.01.25.00")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -698,7 +767,7 @@ standard GNU style syntax for options.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0q4w4cvjxffc462hvs8h4zryq4965j7015zvkwagcm6cj6wmz3cn"))))
+                "14dl1g6vf7mc90mcync5h2lp14fwcx8n9h91pmiq6rfgv1fjjrwz"))))
     (build-system cmake-build-system)
     (arguments
      '(;; Tests must be explicitly enabled
diff --git a/gnu/packages/crates-graphics.scm b/gnu/packages/crates-graphics.scm
index ca1fd9b3a7..4846fc3e20 100644
--- a/gnu/packages/crates-graphics.scm
+++ b/gnu/packages/crates-graphics.scm
@@ -42,8 +42,36 @@
 ;;;
 ;;; Please: Try to add new module packages in alphabetic order.
 
+(define-public rust-andrew-0.3
+  (package
+    (name "rust-andrew")
+    (version "0.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "andrew" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1kx79z6mh7wwp4pz683bdya54h7w7wpzjcwf834fwbv4vl4znjlc"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-rusttype" ,rust-rusttype-0.9)
+        ("rust-walkdir" ,rust-walkdir-2)
+        ("rust-xdg" ,rust-xdg-2)
+        ("rust-xml-rs" ,rust-xml-rs-0.8))))
+    (home-page "https://github.com/trimental/andrew")
+    (synopsis "Provides convenient drawing of objects to buffers")
+    (description
+     "The @code{andrew} crate provides convenient drawing of objects such as
+shapes, lines and text to buffers.")
+    (license license:expat)))
+
 (define-public rust-andrew-0.2
   (package
+    (inherit rust-andrew-0.3)
     (name "rust-andrew")
     (version "0.2.1")
     (source
@@ -55,7 +83,6 @@
        (sha256
         (base32
          "0pmklwcwy8g1jras46fz8xcny779zfqpg4riksrbdhkjk3w0jzwv"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1)
@@ -67,13 +94,7 @@
        #:cargo-development-inputs
        (("rust-smithay-client-toolkit" ,rust-smithay-client-toolkit-0.4))))
     (inputs
-     `(("wayland" ,wayland)))
-    (home-page "https://github.com/trimental/andrew")
-    (synopsis "Provides convenient drawing of objects to buffers")
-    (description
-     "The @code{andrew} crate provides convenient drawing of objects such as
-shapes, lines and text to buffers.")
-    (license license:expat)))
+     `(("wayland" ,wayland)))))
 
 (define-public rust-ansi-colours-1
   (package
@@ -350,8 +371,76 @@ for computer graphics.")
        (;("rust-glium" ,rust-glium-0.19)
         ("rust-serde-json" ,rust-serde-json-1))))))
 
+(define-public rust-core-graphics-0.22
+  (package
+    (name "rust-core-graphics")
+    (version "0.22.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "core-graphics" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "11lx6xw8nc9fpd552g60qa0cxh0maah8j2m26vkq0aslkgv3b7r6"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-core-foundation" ,rust-core-foundation-0.9)
+        ("rust-core-graphics-types" ,rust-core-graphics-types-0.1)
+        ("rust-foreign-types" ,rust-foreign-types-0.3)
+        ("rust-libc" ,rust-libc-0.2))))
+    (home-page "https://github.com/servo/core-graphics-rs")
+    (synopsis "Bindings to Core Graphics for macOS")
+    (description
+     "This package provides bindings to Core Graphics for macOS.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-core-graphics-0.21
+  (package
+    (inherit rust-core-graphics-0.22)
+    (name "rust-core-graphics")
+    (version "0.21.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "core-graphics" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1i9gwzkil9k276317by0mi1pxz036h412dmcp1bzmlq4adj5anha"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-core-foundation" ,rust-core-foundation-0.9)
+        ("rust-core-graphics-types" ,rust-core-graphics-types-0.1)
+        ("rust-foreign-types" ,rust-foreign-types-0.3)
+        ("rust-libc" ,rust-libc-0.2))))))
+
+(define-public rust-core-graphics-0.19
+  (package
+    (inherit rust-core-graphics-0.21)
+    (name "rust-core-graphics")
+    (version "0.19.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "core-graphics" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "08z9pgwfc0wb5v3ns7rnb2010q9g42b5vfwhp9fv4spawrs9725k"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-core-foundation" ,rust-core-foundation-0.7)
+        ("rust-foreign-types" ,rust-foreign-types-0.3)
+        ("rust-libc" ,rust-libc-0.2))))))
+
 (define-public rust-core-graphics-0.17
   (package
+    (inherit rust-core-graphics-0.21)
     (name "rust-core-graphics")
     (version "0.17.3")
     (source
@@ -363,46 +452,66 @@ for computer graphics.")
        (sha256
         (base32
          "1acm3vygngnilzlr6klym5ywh7kfzh2xxrh2l41152hwmdl0jyan"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t     ; only for macOS
        #:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1)
         ("rust-core-foundation" ,rust-core-foundation-0.6)
         ("rust-foreign-types" ,rust-foreign-types-0.3)
+        ("rust-libc" ,rust-libc-0.2))))))
+
+(define-public rust-core-graphics-types-0.1
+  (package
+    (name "rust-core-graphics-types")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "core-graphics-types" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "12vqf0n5mjjcqjksdd82n2zh8hfda2zpiiqsr522c2266j5vcs1s"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-core-foundation" ,rust-core-foundation-0.9)
+        ("rust-foreign-types" ,rust-foreign-types-0.3)
         ("rust-libc" ,rust-libc-0.2))))
-    (home-page "https://github.com/servo/core-graphics-rs")
-    (synopsis "Bindings to Core Graphics for macOS")
+    (home-page "https://github.com/servo/core-foundation-rs")
+    (synopsis "Bindings for some fundamental Core Graphics types")
     (description
-     "Bindings to Core Graphics for macOS.")
+     "This package provides bindings for some fundamental Core Graphics
+types.")
     (license (list license:expat license:asl2.0))))
 
 (define-public rust-core-video-sys-0.1
   (package
     (name "rust-core-video-sys")
-    (version "0.1.3")
+    (version "0.1.4")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "core-video-sys" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1l59cg88482hkl95ssb30ac9x65hpbdsmxz9s5r6y222jlhnbh4d"))))
+        (base32 "0a1qbn50jrb5hxrfshyb7y0f3pbf4ily6i6nciv7bn8ac4isvv1l"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:skip-build? #t     ; only for macOS
+     `(#:skip-build? #t
        #:cargo-inputs
        (("rust-cfg-if" ,rust-cfg-if-0.1)
-        ("rust-core-foundation-sys" ,rust-core-foundation-sys-0.6)
-        ("rust-core-graphics" ,rust-core-graphics-0.17)
+        ("rust-core-foundation-sys" ,rust-core-foundation-sys-0.7)
+        ("rust-core-graphics" ,rust-core-graphics-0.19)
         ("rust-libc" ,rust-libc-0.2)
-        ("rust-metal" ,rust-metal-0.14)
+        ("rust-metal" ,rust-metal-0.18)
         ("rust-objc" ,rust-objc-0.2))))
     (home-page "https://github.com/luozijun/rust-core-video-sys")
     (synopsis "Bindings to CoreVideo.framework for macOS and iOS")
-    (description "Bindings to CoreVideo.framework for macOS and iOS.")
+    (description
+     "This package provides bindings to CoreVideo.framework for macOS
+and iOS.")
     (license license:expat)))
 
 (define-public rust-dav1d-sys-0.3
@@ -718,8 +827,48 @@ for computer graphics.")
      "Generated OpenGL bindings and wrapper for Servo.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-glutin-0.26
+  (package
+    (name "rust-glutin")
+    (version "0.26.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "glutin" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "18szbh4dixcr7pmymvbrpv21hv0wrpii5w03rv2534bb2ywwpq8s"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-android-glue" ,rust-android-glue-0.2)
+        ("rust-cgl" ,rust-cgl-0.3)
+        ("rust-cocoa" ,rust-cocoa-0.23)
+        ("rust-core-foundation" ,rust-core-foundation-0.9)
+        ("rust-glutin-egl-sys" ,rust-glutin-egl-sys-0.1)
+        ("rust-glutin-emscripten-sys" ,rust-glutin-emscripten-sys-0.1)
+        ("rust-glutin-gles2-sys" ,rust-glutin-gles2-sys-0.1)
+        ("rust-glutin-glx-sys" ,rust-glutin-glx-sys-0.1)
+        ("rust-glutin-wgl-sys" ,rust-glutin-wgl-sys-0.1)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-libloading" ,rust-libloading-0.6)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-objc" ,rust-objc-0.2)
+        ("rust-osmesa-sys" ,rust-osmesa-sys-0.1)
+        ("rust-parking-lot" ,rust-parking-lot-0.11)
+        ("rust-wayland-client" ,rust-wayland-client-0.28)
+        ("rust-wayland-egl" ,rust-wayland-egl-0.28)
+        ("rust-winapi" ,rust-winapi-0.3)
+        ("rust-winit" ,rust-winit-0.24))))
+    (home-page "https://github.com/tomaka/glutin")
+    (synopsis "Cross-platform OpenGL context provider")
+    (description "This package provides an OpenGL context provider.")
+    (license license:asl2.0)))
+
 (define-public rust-glutin-0.22
   (package
+    (inherit rust-glutin-0.26)
     (name "rust-glutin")
     (version "0.22.0-alpha5")
     (source
@@ -731,7 +880,6 @@ for computer graphics.")
        (sha256
         (base32
          "0lilr4f335m1fq1acmshd51zblfaglw1hha6lhalnc1fw3cg0aag"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-android-glue" ,rust-android-glue-0.2)
@@ -752,13 +900,7 @@ for computer graphics.")
         ("rust-parking-lot" ,rust-parking-lot-0.9)
         ("rust-wayland-client" ,rust-wayland-client-0.23)
         ("rust-winapi" ,rust-winapi-0.3)
-        ("rust-winit" ,rust-winit-0.20))))
-    (home-page "https://github.com/tomaka/glutin")
-    (synopsis
-     "Cross-platform OpenGL context provider")
-    (description
-     "Cross-platform OpenGL context provider.")
-    (license license:asl2.0)))
+        ("rust-winit" ,rust-winit-0.20))))))
 
 (define-public rust-glutin-0.21
   (package
@@ -821,88 +963,84 @@ for computer graphics.")
 (define-public rust-glutin-emscripten-sys-0.1
   (package
     (name "rust-glutin-emscripten-sys")
-    (version "0.1.0")
+    (version "0.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "glutin_emscripten_sys" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1ix0jmm8p5if4qarzdfl5mz9rbq4hhgqarakb3bzwvyz13dkynr4"))))
+        (base32 "1wb3qfxg3jh6ibb7bxmlmvf4jcpzck3pn0035g1sds3nvx343pl0"))))
     (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
     (home-page "https://github.com/tomaka/glutin")
     (synopsis "Emscripten bindings for glutin")
-    (description "The emscripten bindings for glutin.")
+    (description "This package provides Emscripten bindings for glutin.")
     (license license:asl2.0)))
 
 (define-public rust-glutin-gles2-sys-0.1
   (package
     (name "rust-glutin-gles2-sys")
-    (version "0.1.3")
+    (version "0.1.5")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "glutin_gles2_sys" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1pswvl5zyqmqwzjr674yzslj0al2xbqsp2ai9ggb9qbshlq6r6c9"))))
+        (base32 "00wisv3a7818bpw5nnqwibmh1bw032izix2l3657q2kkidq4w2g8"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
-       (("rust-objc" ,rust-objc-0.2)
-        ("rust-gl-generator" ,rust-gl-generator-0.11))))
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-gl-generator" ,rust-gl-generator-0.14)
+        ("rust-objc" ,rust-objc-0.2))))
     (home-page "https://github.com/tomaka/glutin")
-    (synopsis "The gles2 bindings for glutin")
-    (description "The gles2 bindings for glutin.")
+    (synopsis "Gles2 bindings for glutin")
+    (description "This package provides gles2 bindings for glutin.")
     (license license:asl2.0)))
 
 (define-public rust-glutin-glx-sys-0.1
   (package
     (name "rust-glutin-glx-sys")
-    (version "0.1.5")
+    (version "0.1.7")
     (source
      (origin
        (method url-fetch)
-       (uri (crate-uri "glutin-glx-sys" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
+       (uri (crate-uri "glutin_glx_sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "0mxs3mil68xqqb49466n5rpwpcllj6fwqjgrcrzzmz26bv5ab40j"))))
+        (base32 "0l8kk60kq5v6hl1qr6ym2arzvbsgkh71aa8485cp901bq27kqfby"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
-       (("rust-x11-dl" ,rust-x11-dl-2)
-        ("rust-gl-generator" ,rust-gl-generator-0.11))))
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-gl-generator" ,rust-gl-generator-0.14)
+        ("rust-x11-dl" ,rust-x11-dl-2))))
     (home-page "https://github.com/tomaka/glutin")
     (synopsis "Glx bindings for glutin")
-    (description "The glx bindings for glutin.")
+    (description "This package provides glx bindings for glutin.")
     (license license:asl2.0)))
 
 (define-public rust-glutin-wgl-sys-0.1
   (package
     (name "rust-glutin-wgl-sys")
-    (version "0.1.3")
+    (version "0.1.5")
     (source
      (origin
        (method url-fetch)
-       (uri (crate-uri "glutin-wgl-sys" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
+       (uri (crate-uri "glutin_wgl_sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "08chlfzpj59q36qm212i4k879gvjzha7i90q90fds8pw3v4vn0gq"))))
+        (base32 "15hns8b3i7iy366m61dg7jlr7wgzz8z8cakgbj3apnv92ld9b99x"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
-       (("rust-gl-generator" ,rust-gl-generator-0.11))))
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-gl-generator" ,rust-gl-generator-0.14))))
     (home-page "https://github.com/tomaka/glutin")
     (synopsis "Wgl bindings for glutin")
-    (description "The wgl bindings for glutin.")
+    (description "This package provides wgl bindings for glutin.")
     (license license:asl2.0)))
 
 (define-public rust-image-0.23
@@ -1536,16 +1674,14 @@ interactive applications.")
 (define-public rust-png-0.16
   (package
     (name "rust-png")
-    (version "0.16.6")
+    (version "0.16.8")
     (source
-      (origin
-        (method url-fetch)
-        (uri (crate-uri "png" version))
-        (file-name
-         (string-append name "-" version ".tar.gz"))
-        (sha256
-         (base32
-          "1393s3v3kg4bxnn86d7yn2vyz8xj6g64ighdfkc3vzpsg5sbyl61"))))
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "png" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1ipl44q3vy4kvx6j296vk7d4v8gvcg203lrkvvixwixq1j98fciw"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -1553,19 +1689,11 @@ interactive applications.")
        (("rust-bitflags" ,rust-bitflags-1)
         ("rust-crc32fast" ,rust-crc32fast-1)
         ("rust-deflate" ,rust-deflate-0.8)
-        ("rust-miniz-oxide" ,rust-miniz-oxide-0.3))
-       #:cargo-development-inputs
-       (("rust-criterion" ,rust-criterion-0.3)
-        ("rust-getopts" ,rust-getopts-0.2)
-        ;; TODO: glium has many cyclic dependencies with other packages
-        ;; ("rust-glium" ,rust-glium-0.24)
-        ("rust-glob" ,rust-glob-0.3)
-        ("rust-rand" ,rust-rand-0.7)
-        ("rust-term" ,rust-term-0.6))))
+        ("rust-miniz-oxide" ,rust-miniz-oxide-0.3))))
     (home-page "https://github.com/image-rs/image-png.git")
     (synopsis "PNG decoding and encoding library in pure Rust")
     (description
-     "PNG decoding and encoding library in pure Rust.")
+     "This package is a PNG decoding and encoding library in pure Rust.")
     (license (list license:expat license:asl2.0))))
 
 (define-public rust-png-0.15
@@ -1728,8 +1856,41 @@ implements standard Rust traits to make `RGB`/`RGBA` pixels and slices
 first-class Rust objects.")
     (license license:expat)))
 
+(define-public rust-smithay-client-toolkit-0.12
+  (package
+    (name "rust-smithay-client-toolkit")
+    (version "0.12.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "smithay-client-toolkit" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1rjdszpf8pns99gyy8f5axf01ckc33f30dddfazyfg45xfii6vii"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-andrew" ,rust-andrew-0.3)
+        ("rust-bitflags" ,rust-bitflags-1)
+        ("rust-calloop" ,rust-calloop-0.6)
+        ("rust-dlib" ,rust-dlib-0.4)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-memmap2" ,rust-memmap2-0.1)
+        ("rust-nix" ,rust-nix-0.18)
+        ("rust-wayland-client" ,rust-wayland-client-0.28)
+        ("rust-wayland-cursor" ,rust-wayland-cursor-0.28)
+        ("rust-wayland-protocols" ,rust-wayland-protocols-0.28))))
+    (home-page "https://github.com/smithay/client-toolkit")
+    (synopsis "Toolkit for making client Wayland applications")
+    (description
+     "This package provides a toolkit for making client Wayland applications.")
+    (license license:expat)))
+
 (define-public rust-smithay-client-toolkit-0.6
   (package
+    (inherit rust-smithay-client-toolkit-0.12)
     (name "rust-smithay-client-toolkit")
     (version "0.6.4")
     (source
@@ -1741,7 +1902,6 @@ first-class Rust objects.")
        (sha256
         (base32
          "0m20687zs36l6xak2s5k9s7qp78ly8xfjpbmrhacp7whfn4hx5lk"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-andrew" ,rust-andrew-0.2)
@@ -1755,12 +1915,7 @@ first-class Rust objects.")
        #:cargo-development-inputs
        (("rust-byteorder" ,rust-byteorder-1)
         ("rust-image" ,rust-image-0.21)
-        ("rust-wayland-client" ,rust-wayland-client-0.23))))
-    (home-page "https://github.com/smithay/client-toolkit")
-    (synopsis "Toolkit for making client wayland applications")
-    (description
-     "Toolkit for making client wayland applications.")
-    (license license:expat)))
+        ("rust-wayland-client" ,rust-wayland-client-0.23))))))
 
 (define-public rust-smithay-client-toolkit-0.4
   (package
@@ -1792,8 +1947,33 @@ first-class Rust objects.")
         ("rust-image" ,rust-image-0.20)
         ("rust-wayland-client" ,rust-wayland-client-0.21))))))
 
+(define-public rust-smithay-clipboard-0.6
+  (package
+    (name "rust-smithay-clipboard")
+    (version "0.6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "smithay-clipboard" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "14dwisd56cbr80zf719l3fh0n8pm1fjmvry9lsbhdbccf8cv525b"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-smithay-client-toolkit" ,rust-smithay-client-toolkit-0.12)
+        ("rust-wayland-client" ,rust-wayland-client-0.28))))
+    (home-page "https://github.com/smithay/smithay-clipboard")
+    (synopsis "Access to the Wayland clipboard for client applications")
+    (description
+     "This package provides access to the Wayland clipboard for client
+applications.")
+    (license license:expat)))
+
 (define-public rust-smithay-clipboard-0.3
   (package
+    (inherit rust-smithay-clipboard-0.6)
     (name "rust-smithay-clipboard")
     (version "0.3.6")
     (source
@@ -1805,7 +1985,6 @@ first-class Rust objects.")
        (sha256
         (base32
          "1h7qhcx44cgwncgpn5llky0c56vgsg9mqrkybb2z37vsxxia4rwn"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-nix" ,rust-nix-0.14)
@@ -1813,13 +1992,7 @@ first-class Rust objects.")
        #:cargo-development-inputs
        (("rust-andrew" ,rust-andrew-0.2))))
     (inputs
-     `(("wayland" ,wayland)))
-    (home-page "https://github.com/smithay/smithay-clipboard")
-    (synopsis
-     "Provides access to the wayland clipboard for client applications")
-    (description
-     "This package provides access to the wayland clipboard for client applications.")
-    (license license:expat)))
+     `(("wayland" ,wayland)))))
 
 (define-public rust-tiff-0.5
   (package
@@ -1893,8 +2066,40 @@ first-class Rust objects.")
         ("rust-num-derive" ,rust-num-derive-0.2)
         ("rust-num-traits" ,rust-num-traits-0.2))))))
 
+(define-public rust-wayland-client-0.28
+  (package
+    (name "rust-wayland-client")
+    (version "0.28.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "wayland-client" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1mxnflzv9s3qpcp0z7kqvrzki5bknfar9n9yky06f8ivs00vxgdx"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-downcast-rs" ,rust-downcast-rs-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-nix" ,rust-nix-0.18)
+        ("rust-scoped-tls" ,rust-scoped-tls-1)
+        ("rust-wayland-commons" ,rust-wayland-commons-0.28)
+        ("rust-wayland-scanner" ,rust-wayland-scanner-0.28)
+        ("rust-wayland-sys" ,rust-wayland-sys-0.28))))
+    (home-page "https://github.com/smithay/wayland-rs")
+    (synopsis
+     "Rust bindings to the standard C implementation of the wayland protocol")
+    (description
+     "This package provides Rust bindings to the standard C implementation of
+the wayland protocol, client side.")
+    (license license:expat)))
+
 (define-public rust-wayland-client-0.23
   (package
+    (inherit rust-wayland-client-0.28)
     (name "rust-wayland-client")
     (version "0.23.6")
     (source
@@ -1906,12 +2111,11 @@ first-class Rust objects.")
        (sha256
         (base32
          "1nmw2kz70llc5mxwzg6bglnqy0qnyr9224zjmq9czazgw3mq045g"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1)
         ("rust-calloop" ,rust-calloop-0.4)
-        ("rust-downcast-rs" ,rust-downcast-rs-1.1)
+        ("rust-downcast-rs" ,rust-downcast-rs-1)
         ("rust-libc" ,rust-libc-0.2)
         ("rust-mio" ,rust-mio-0.6)
         ("rust-nix" ,rust-nix-0.14)
@@ -1920,14 +2124,7 @@ first-class Rust objects.")
         ("rust-wayland-scanner" ,rust-wayland-scanner-0.23))
        #:cargo-development-inputs
        (("rust-byteorder" ,rust-byteorder-1)
-        ("rust-tempfile" ,rust-tempfile-3))))
-    (home-page "https://github.com/smithay/wayland-rs")
-    (synopsis
-     "Rust bindings to the standard C implementation of the wayland protocol")
-    (description
-     "This package provides Rust bindings to the standard C implementation of
-the wayland protocol, client side.")
-    (license license:expat)))
+        ("rust-tempfile" ,rust-tempfile-3))))))
 
 (define-public rust-wayland-client-0.21
   (package
@@ -1947,7 +2144,7 @@ the wayland protocol, client side.")
      `(#:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1)
         ("rust-calloop" ,rust-calloop-0.4)
-        ("rust-downcast-rs" ,rust-downcast-rs-1.1)
+        ("rust-downcast-rs" ,rust-downcast-rs-1)
         ("rust-libc" ,rust-libc-0.2)
         ("rust-mio" ,rust-mio-0.6)
         ("rust-nix" ,rust-nix-0.14)
@@ -1958,8 +2155,35 @@ the wayland protocol, client side.")
        (("rust-byteorder" ,rust-byteorder-1)
         ("rust-tempfile" ,rust-tempfile-3))))))
 
+(define-public rust-wayland-commons-0.28
+  (package
+    (name "rust-wayland-commons")
+    (version "0.28.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "wayland-commons" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0mid1sgy3bmiywnrhsr31b8w6zvk1ll2ci2as15ddv8pczvm0128"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-nix" ,rust-nix-0.18)
+        ("rust-once-cell" ,rust-once-cell-1)
+        ("rust-smallvec" ,rust-smallvec-1)
+        ("rust-wayland-sys" ,rust-wayland-sys-0.28))))
+    (home-page "https://github.com/smithay/wayland-rs")
+    (synopsis "Types and structures used by wayland-client and wayland-server")
+    (description
+     "This package provides common types and structures used by wayland-client
+and wayland-server.")
+    (license license:expat)))
+
 (define-public rust-wayland-commons-0.23
   (package
+    (inherit rust-wayland-commons-0.28)
     (name "rust-wayland-commons")
     (version "0.23.6")
     (source
@@ -1971,17 +2195,10 @@ the wayland protocol, client side.")
        (sha256
         (base32
          "1nyvcs6xxxzqgh0wvc7z0fgi89bf3h9p4qrbf77bnfbwlb8v0rmv"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-nix" ,rust-nix-0.14)
-        ("rust-wayland-sys" ,rust-wayland-sys-0.23))))
-    (home-page "https://github.com/smithay/wayland-rs")
-    (synopsis
-     "Common types and structures used by wayland-client and wayland-server")
-    (description
-     "Common types and structures used by wayland-client and wayland-server.")
-    (license license:expat)))
+        ("rust-wayland-sys" ,rust-wayland-sys-0.23))))))
 
 (define-public rust-wayland-commons-0.21
   (package
@@ -2002,8 +2219,88 @@ the wayland protocol, client side.")
        (("rust-nix" ,rust-nix-0.14)
         ("rust-wayland-sys" ,rust-wayland-sys-0.21))))))
 
+(define-public rust-wayland-cursor-0.28
+  (package
+    (name "rust-wayland-cursor")
+    (version "0.28.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "wayland-cursor" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0pvf96a9hg7b40vyvamcg491sa0006fr9bzf1xkaf8q22qn15syn"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-nix" ,rust-nix-0.18)
+        ("rust-wayland-client" ,rust-wayland-client-0.28)
+        ("rust-xcursor" ,rust-xcursor-0.3))))
+    (home-page "https://github.com/smithay/wayland-rs")
+    (synopsis "Bindings to libwayland-cursor")
+    (description
+     "This crate provides helpers to load the system provided cursor images
+and load them into WlBuffers as well as obtain the necessary metadata to
+properly display animated cursors.")
+    (license license:expat)))
+
+(define-public rust-wayland-egl-0.28
+  (package
+    (name "rust-wayland-egl")
+    (version "0.28.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "wayland-egl" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1xd7iap0x4sidmy9dv02cdnxjhnbk9li7r7f39x9cg0i8xs50ly6"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-wayland-client" ,rust-wayland-client-0.28)
+        ("rust-wayland-sys" ,rust-wayland-sys-0.28))))
+    (home-page "https://github.com/smithay/wayland-rs")
+    (synopsis "Bindings to libwayland-egl")
+    (description
+     "This crate provides bindings for OpenGL/Vulkan support for
+Wayland client apps.  It allows to create an EGLSurface from any
+WlSurface, which can then play the role of the base surface for
+initializing an OpenGL or Vulkan context.")
+    (license license:expat)))
+
+(define-public rust-wayland-protocols-0.28
+  (package
+    (name "rust-wayland-protocols")
+    (version "0.28.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "wayland-protocols" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0c0sw13qssrvf3jgygwqpiimpaagz3haxn9jridd4k85sfs856ii"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-wayland-client" ,rust-wayland-client-0.28)
+        ("rust-wayland-commons" ,rust-wayland-commons-0.28)
+        ("rust-wayland-scanner" ,rust-wayland-scanner-0.28)
+        ("rust-wayland-server" ,rust-wayland-server-0.28))))
+    (home-page "https://github.com/smithay/wayland-rs")
+    (synopsis "Generated API for the officials Wayland protocol extensions")
+    (description
+     "This package provides a generated API for the officials Wayland protocol
+extensions.")
+    (license license:expat)))
+
 (define-public rust-wayland-protocols-0.23
   (package
+    (inherit rust-wayland-protocols-0.28)
     (name "rust-wayland-protocols")
     (version "0.23.6")
     (source
@@ -2015,20 +2312,13 @@ the wayland protocol, client side.")
        (sha256
         (base32
          "1ygwbzqlnks5xzafka3c8ag6k92g2h6ygj2xsmvjfx2n6rj8dhkc"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1)
         ("rust-wayland-client" ,rust-wayland-client-0.23)
         ("rust-wayland-commons" ,rust-wayland-commons-0.23)
         ("rust-wayland-server" ,rust-wayland-server-0.23)
-        ("rust-wayland-scanner" ,rust-wayland-scanner-0.23))))
-    (home-page "https://github.com/smithay/wayland-rs")
-    (synopsis
-     "Generated API for the officials wayland protocol extensions")
-    (description
-     "Generated API for the officials wayland protocol extensions.")
-    (license license:expat)))
+        ("rust-wayland-scanner" ,rust-wayland-scanner-0.23))))))
 
 (define-public rust-wayland-protocols-0.21
   (package
@@ -2053,8 +2343,36 @@ the wayland protocol, client side.")
         ("rust-wayland-sys" ,rust-wayland-sys-0.21)
         ("rust-wayland-scanner" ,rust-wayland-scanner-0.21))))))
 
+(define-public rust-wayland-scanner-0.28
+  (package
+    (name "rust-wayland-scanner")
+    (version "0.28.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "wayland-scanner" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0g8ky63qk27in7zajycj3fyydsxlj19hanfcvr8d7z5kcxbvl43h"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-xml-rs" ,rust-xml-rs-0.8))))
+    (home-page "https://github.com/smithay/wayland-rs")
+    (synopsis "Generate Rust APIs from XML Wayland protocol files")
+    (description
+     "Wayland Scanner generates Rust APIs from XML Wayland protocol files.
+It is intended for use with wayland-sys.  You should only need this crate if
+you are working on custom Wayland protocol extensions.  Look at the
+wayland-client crate for usable bindings.")
+    (license license:expat)))
+
 (define-public rust-wayland-scanner-0.23
   (package
+    (inherit rust-wayland-scanner-0.28)
     (name "rust-wayland-scanner")
     (version "0.23.6")
     (source
@@ -2066,20 +2384,11 @@ the wayland protocol, client side.")
        (sha256
         (base32
          "0g8wcphykjrcpslznyi3qccx1pckw97rckq5b295nfbg6r3j5c4k"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-proc-macro2" ,rust-proc-macro2-0.4)
         ("rust-quote" ,rust-quote-0.6)
-        ("rust-xml-rs" ,rust-xml-rs-0.8))))
-    (home-page "https://github.com/smithay/wayland-rs")
-    (synopsis "Generate Rust APIs from XML Wayland protocol files")
-    (description
-     "Wayland Scanner generates Rust APIs from XML Wayland protocol files.
-It is intended for use with wayland-sys.  You should only need this crate if
-you are working on custom Wayland protocol extensions.
-Look at the wayland-client crate for usable bindings.")
-    (license license:expat)))
+        ("rust-xml-rs" ,rust-xml-rs-0.8))))))
 
 (define-public rust-wayland-scanner-0.21
   (package
@@ -2096,8 +2405,42 @@ Look at the wayland-client crate for usable bindings.")
         (base32
          "17mp49v7w0p0x5ry628lj2llljnwkr9aj9g4bqqhfibid32jhf5z"))))))
 
+(define-public rust-wayland-server-0.28
+  (package
+    (name "rust-wayland-server")
+    (version "0.28.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "wayland-server" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "09jfdjfqhjfcpiz4csgh60ymfkmz1cl3jmxyzq9hzcp0kyyxix93"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-downcast-rs" ,rust-downcast-rs-1)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-nix" ,rust-nix-0.18)
+        ("rust-parking-lot" ,rust-parking-lot-0.11)
+        ("rust-scoped-tls" ,rust-scoped-tls-1)
+        ("rust-wayland-commons" ,rust-wayland-commons-0.28)
+        ("rust-wayland-scanner" ,rust-wayland-scanner-0.28)
+        ("rust-wayland-sys" ,rust-wayland-sys-0.28))))
+    (home-page "https://github.com/smithay/wayland-rs")
+    (synopsis
+     "Bindings to the standard C implementation of the wayland protocol")
+    (description
+     "This package provides Rust bindings to the standard C implementation of
+the wayland protocol, server side.")
+    (license license:expat)))
+
 (define-public rust-wayland-server-0.23
   (package
+    (inherit rust-wayland-server-0.28)
     (name "rust-wayland-server")
     (version "0.23.6")
     (source
@@ -2109,25 +2452,17 @@ Look at the wayland-client crate for usable bindings.")
        (sha256
         (base32
          "1ccsalq6gnf07klnbjx2dxcbibhw03rqsgi578p913s3zsjlcg8a"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1)
         ("rust-calloop" ,rust-calloop-0.4)
-        ("rust-downcast-rs" ,rust-downcast-rs-1.1)
+        ("rust-downcast-rs" ,rust-downcast-rs-1)
         ("rust-libc" ,rust-libc-0.2)
         ("rust-mio" ,rust-mio-0.6)
         ("rust-nix" ,rust-nix-0.14)
         ("rust-wayland-commons" ,rust-wayland-commons-0.23)
         ("rust-wayland-sys" ,rust-wayland-sys-0.23)
-        ("rust-wayland-scanner" ,rust-wayland-scanner-0.23))))
-    (home-page "https://github.com/smithay/wayland-rs")
-    (synopsis
-     "Bindings to the standard C implementation of the wayland protocol")
-    (description
-     "This package provides Rust bindings to the standard C implementation of
-the wayland protocol, server side.")
-    (license license:expat)))
+        ("rust-wayland-scanner" ,rust-wayland-scanner-0.23))))))
 
 (define-public rust-wayland-server-0.21
   (package
@@ -2147,7 +2482,7 @@ the wayland protocol, server side.")
      `(#:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1)
         ("rust-calloop" ,rust-calloop-0.4)
-        ("rust-downcast-rs" ,rust-downcast-rs-1.1)
+        ("rust-downcast-rs" ,rust-downcast-rs-1)
         ("rust-libc" ,rust-libc-0.2)
         ("rust-mio" ,rust-mio-0.6)
         ("rust-nix" ,rust-nix-0.14)
@@ -2155,8 +2490,37 @@ the wayland protocol, server side.")
         ("rust-wayland-sys" ,rust-wayland-sys-0.21)
         ("rust-wayland-scanner" ,rust-wayland-scanner-0.21))))))
 
+(define-public rust-wayland-sys-0.28
+  (package
+    (name "rust-wayland-sys")
+    (version "0.28.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "wayland-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "16f03jsy7q6p2wpaazc4w4kycyyk0fz7lacpdbcizl9m1i7874v7"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-dlib" ,rust-dlib-0.4)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-pkg-config" ,rust-pkg-config-0.3))))
+    (home-page "https://github.com/smithay/wayland-rs")
+    (synopsis "FFI bindings to the various @file{libwayland-*.so} libraries")
+    (description
+     "This package provides FFI bindings to the various
+@file{libwayland-*.so} libraries.  You should only need this crate if
+you are working on custom Wayland protocol extensions.  Look at the
+crate @code{rust-wayland-client} for usable bindings.")
+    (license license:expat)))
+
 (define-public rust-wayland-sys-0.23
   (package
+    (inherit rust-wayland-sys-0.28)
     (name "rust-wayland-sys")
     (version "0.23.6")
     (source
@@ -2168,19 +2532,11 @@ the wayland protocol, server side.")
        (sha256
         (base32
          "1x2qafvj8hd2x5qfaan2dfpw9amg0f5g9sqrkdy7qvbddsl8jknr"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-dlib" ,rust-dlib-0.4)
         ("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-libc" ,rust-libc-0.2))))
-    (home-page "https://github.com/smithay/wayland-rs")
-    (synopsis "FFI bindings to the various libwayland-*.so libraries")
-    (description
-     "FFI bindings to the various libwayland-*.so libraries.
-You should only need this crate if you are working on custom wayland
-protocol extensions.  Look at the crate wayland-client for usable bindings.")
-    (license license:expat)))
+        ("rust-libc" ,rust-libc-0.2))))))
 
 (define-public rust-wayland-sys-0.21
   (package
@@ -2197,8 +2553,64 @@ protocol extensions.  Look at the crate wayland-client for usable bindings.")
         (base32
          "0a0ndgkg98pvmkv44yya4f7mxzjaxylknqh64bpa05w0azyv02jj"))))))
 
+(define-public rust-winit-0.24
+  (package
+    (name "rust-winit")
+    (version "0.24.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "winit" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "15zmpx5ip6ziqhds7md1s0ri0blhxfa8fg1ylg84pf0frrpxlkns"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-cocoa" ,rust-cocoa-0.24)
+        ("rust-core-foundation" ,rust-core-foundation-0.9)
+        ("rust-core-graphics" ,rust-core-graphics-0.22)
+        ("rust-core-video-sys" ,rust-core-video-sys-0.1)
+        ("rust-dispatch" ,rust-dispatch-0.2)
+        ("rust-instant" ,rust-instant-0.1)
+        ("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-mio" ,rust-mio-0.6)
+        ("rust-mio-extras" ,rust-mio-extras-2)
+        ("rust-ndk" ,rust-ndk-0.2)
+        ("rust-ndk-glue" ,rust-ndk-glue-0.2)
+        ("rust-ndk-sys" ,rust-ndk-sys-0.2)
+        ("rust-objc" ,rust-objc-0.2)
+        ("rust-parking-lot" ,rust-parking-lot-0.11)
+        ("rust-percent-encoding" ,rust-percent-encoding-2)
+        ("rust-raw-window-handle" ,rust-raw-window-handle-0.3)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-smithay-client-toolkit" ,rust-smithay-client-toolkit-0.12)
+        ("rust-stdweb" ,rust-stdweb-0.4)
+        ("rust-wasm-bindgen" ,rust-wasm-bindgen-0.2)
+        ("rust-wayland-client" ,rust-wayland-client-0.28)
+        ("rust-web-sys" ,rust-web-sys-0.3)
+        ("rust-winapi" ,rust-winapi-0.3)
+        ("rust-x11-dl" ,rust-x11-dl-2))))
+    (home-page "https://github.com/rust-windowing/winit")
+    (synopsis "Window creation library")
+    (description
+     "Winit is a window creation and management library. It can create
+windows and lets you handle events (for example: the window being
+resized, a key being pressed, a mouse movement, etc.) produced by
+window.
+
+Winit is designed to be a low-level brick in a hierarchy of libraries.
+Consequently, in order to show something on the window you need to use
+the platform-specific getters provided by winit, or another library.")
+    (license license:asl2.0)))
+
 (define-public rust-winit-0.20
   (package
+    (inherit rust-winit-0.24)
     (name "rust-winit")
     (version "0.20.0-alpha6")
     (source
@@ -2219,7 +2631,6 @@ protocol extensions.  Look at the crate wayland-client for usable bindings.")
              (sha256
               (base32
                "03q4bvdq86kii53d0vsywv08g8vqirf9h1lz2cl6rcc7gjfynpds")))))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-android-glue" ,rust-android-glue-0.2)
@@ -2249,13 +2660,7 @@ protocol extensions.  Look at the crate wayland-client for usable bindings.")
        #:cargo-development-inputs
        (("rust-console-log" ,rust-console-log-0.1)
         ("rust-env-logger" ,rust-env-logger-0.5)
-        ("rust-image" ,rust-image-0.21))))
-    (home-page "https://github.com/rust-windowing/winit")
-    (synopsis
-     "Cross-platform window creation library")
-    (description
-     "Cross-platform window creation library.")
-    (license license:asl2.0)))
+        ("rust-image" ,rust-image-0.21))))))
 
 (define-public rust-winit-0.19
   (package
@@ -2315,8 +2720,30 @@ protocol extensions.  Look at the crate wayland-client for usable bindings.")
     (description "This crate provides X11 library bindings for Rust.")
     (license license:expat)))
 
+(define-public rust-x11-clipboard-0.5
+  (package
+    (name "rust-x11-clipboard")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "x11-clipboard" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "17c5yxxhknrp7y9mc7mp85ra8q4jw12c174m9yzbfr1vs2pkgsg5"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-xcb" ,rust-xcb-0.9))))
+    (home-page "https://github.com/quininer/x11-clipboard")
+    (synopsis "x11 clipboard support for Rust")
+    (description "This package provides x11 clipboard support for Rust.")
+    (license license:expat)))
+
 (define-public rust-x11-clipboard-0.4
   (package
+    (inherit rust-x11-clipboard-0.5)
     (name "rust-x11-clipboard")
     (version "0.4.0")
     (source
@@ -2328,16 +2755,11 @@ protocol extensions.  Look at the crate wayland-client for usable bindings.")
        (sha256
         (base32
          "0nqdnswiyj28b1izjp5rzbc67cxpb5c8p4vh1xyndkirzs84vqqk"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:tests? #f  ; Tests require display server.
        #:cargo-inputs (("rust-xcb" ,rust-xcb-0.9))))
     (native-inputs
-     `(("python" ,python)))
-    (home-page "https://github.com/quininer/x11-clipboard")
-    (synopsis "x11 clipboard support for Rust")
-    (description "This package provides x11 clipboard support for Rust.")
-    (license license:expat)))
+     `(("python" ,python)))))
 
 (define-public rust-x11-dl-2
   (package
diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index 36f0b98112..dbf8c9d888 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -65,6 +65,29 @@
 ;;; Please: Try to add new module packages in alphabetic order.
 ;;;
 
+(define-public rust-ab-glyph-rasterizer-0.1
+  (package
+    (name "rust-ab-glyph-rasterizer")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "ab_glyph_rasterizer" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1zzz78231w849xslz9s0pwjj6gp02wfbbxdpysqhwwq1vqr5xznr"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-libm" ,rust-libm-0.2))))
+    (home-page "https://github.com/alexheretic/ab-glyph")
+    (synopsis "Coverage rasterization for lines, quadratic & cubic beziers")
+    (description
+     "This package provides coverage rasterization for lines, quadratic and
+cubic beziers.")
+    (license license:asl2.0)))
+
 (define-public rust-abomonation-0.7
   (package
     (name "rust-abomonation")
@@ -1173,6 +1196,70 @@ using AES-NI for high performance.")
         ("rust-rand" ,rust-rand-0.3)
         ("rust-rustc-serialize" ,rust-rustc-serialize-0.3))))))
 
+(define-public rust-alacritty-config-derive-0.1
+  (package
+    (name "rust-alacritty-config-derive")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "alacritty_config_derive" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0dn3cg233jyi06xz8q1vfgjikdpcjdid36kqnl0yawdqpm2lq13p"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1)
+        ("rust-syn" ,rust-syn-1))))
+    (home-page "https://github.com/alacritty/alacritty")
+    (synopsis "Failure resistant deserialization derive")
+    (description
+     "This package provides a failure resistant deserialization derive.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-alacritty-terminal-0.12
+  (package
+    (name "rust-alacritty-terminal")
+    (version "0.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "alacritty_terminal" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1q7sm7rm5yny4lka8w4vji2v2crkkbwj3y8l5qnq01qlwmkjmkfd"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-alacritty-config-derive" ,rust-alacritty-config-derive-0.1)
+        ("rust-base64" ,rust-base64-0.12)
+        ("rust-bitflags" ,rust-bitflags-1)
+        ("rust-dirs" ,rust-dirs-2)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-mio" ,rust-mio-0.6)
+        ("rust-mio-anonymous-pipes" ,rust-mio-anonymous-pipes-0.1)
+        ("rust-mio-extras" ,rust-mio-extras-2)
+        ("rust-miow" ,rust-miow-0.3)
+        ("rust-nix" ,rust-nix-0.18)
+        ("rust-parking-lot" ,rust-parking-lot-0.11)
+        ("rust-regex-automata" ,rust-regex-automata-0.1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-yaml" ,rust-serde-yaml-0.8)
+        ("rust-signal-hook" ,rust-signal-hook-0.1)
+        ("rust-unicode-width" ,rust-unicode-width-0.1)
+        ("rust-vte" ,rust-vte-0.10)
+        ("rust-winapi" ,rust-winapi-0.3))))
+    (home-page "https://github.com/alacritty/alacritty")
+    (synopsis "Library for writing terminal emulators")
+    (description
+     "This package provides a library for writing terminal emulators.")
+    (license license:asl2.0)))
+
 (define-public rust-alga-0.9
   (package
     (name "rust-alga")
@@ -5062,8 +5149,31 @@ cached data.")
 directories and @code{CACHEDIR.TAG} files.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-calloop-0.6
+  (package
+    (name "rust-calloop")
+    (version "0.6.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "calloop" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0z3jlsv3g28097dhsmi2l8nzkd3p937jhb4pg52njhb0wxkn20qb"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-log" ,rust-log-0.4)
+        ("rust-nix" ,rust-nix-0.18))))
+    (home-page "https://github.com/Smithay/calloop")
+    (synopsis "Callback-based event loop")
+    (description "This package provides a callback-based event loop.")
+    (license license:expat)))
+
 (define-public rust-calloop-0.4
   (package
+    (inherit rust-calloop-0.6)
     (name "rust-calloop")
     (version "0.4.4")
     (source
@@ -5081,19 +5191,13 @@ directories and @code{CACHEDIR.TAG} files.")
             (substitute* "Cargo.toml"
               (("=1.0.0") "^1.0.0"))
             #t))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-mio" ,rust-mio-0.6)
         ("rust-mio-extras" ,rust-mio-extras-2)
         ("rust-nix" ,rust-nix-0.14))
        #:cargo-development-inputs
-       (("rust-lazycell" ,rust-lazycell-1))))
-    (home-page "https://github.com/Smithay/calloop")
-    (synopsis "Callback-based event loop")
-    (description
-     "This package provides a callback-based event loop")
-    (license license:expat)))
+       (("rust-lazycell" ,rust-lazycell-1))))))
 
 (define-public rust-capnp-0.13
   (package
@@ -5826,8 +5930,32 @@ Command Line Argument Parser.")
 colorization.")
     (license license:expat)))
 
+(define-public rust-clipboard-win-3
+  (package
+    (name "rust-clipboard-win")
+    (version "3.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "clipboard-win" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0hh3npqfa1lfn62fwvkmjlpfnizq343a994b898ffsvb100mxpwz"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-lazy-bytes-cast" ,rust-lazy-bytes-cast-5)
+        ("rust-winapi" ,rust-winapi-0.3))))
+    (home-page "https://github.com/DoumanAsh/clipboard-win")
+    (synopsis "Simple way to interact with Windows clipboard")
+    (description
+     "This package provides simple way to interact with Windows clipboard.")
+    (license license:expat)))
+
 (define-public rust-clipboard-win-2.1
   (package
+    (inherit rust-clipboard-win-3)
     (name "rust-clipboard-win")
     (version "2.1.2")
     (source
@@ -5839,15 +5967,9 @@ colorization.")
        (sha256
         (base32
          "0431sg4jhabrqf2dliiwhbx9hinb9z4qfcm6914lm5mb17ya5798"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:tests? #f  ; Tests are for Windows.
-       #:cargo-inputs (("rust-winapi" ,rust-winapi-0.3))))
-    (home-page "https://github.com/DoumanAsh/clipboard-win")
-    (synopsis "Interact with Windows clipboard")
-    (description
-     "This package provides simple way to interact with Windows clipboard.")
-    (license license:expat)))
+       #:cargo-inputs (("rust-winapi" ,rust-winapi-0.3))))))
 
 (define-public rust-clippy-0.0
   (package
@@ -5993,8 +6115,84 @@ CMAKE environmental variable is set.")
     (license (list license:asl2.0
                    license:expat))))
 
+(define-public rust-cocoa-0.24
+  (package
+    (name "rust-cocoa")
+    (version "0.24.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cocoa" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0cp8hsajmi7gini22bmlsf9dac7cap7x1k169vxhwlr3j8p90qvg"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-block" ,rust-block-0.1)
+        ("rust-cocoa-foundation" ,rust-cocoa-foundation-0.1)
+        ("rust-core-foundation" ,rust-core-foundation-0.9)
+        ("rust-core-graphics" ,rust-core-graphics-0.22)
+        ("rust-foreign-types" ,rust-foreign-types-0.3)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-objc" ,rust-objc-0.2))))
+    (home-page "https://github.com/servo/core-foundation-rs")
+    (synopsis "Bindings to Cocoa for macOS")
+    (description "This package provides bindings to Cocoa for macOS.")
+    (license (list license:expat license:asl2.0))))
+
+(define-public rust-cocoa-0.23
+  (package
+    (inherit rust-cocoa-0.24)
+    (name "rust-cocoa")
+    (version "0.23.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cocoa" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1cj4c2axmg7aiid2786mpzj7wxpd582biv7c7yimqfnggp002hn5"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-block" ,rust-block-0.1)
+        ("rust-cocoa-foundation" ,rust-cocoa-foundation-0.1)
+        ("rust-core-foundation" ,rust-core-foundation-0.9)
+        ("rust-core-graphics" ,rust-core-graphics-0.22)
+        ("rust-foreign-types" ,rust-foreign-types-0.3)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-objc" ,rust-objc-0.2))))))
+
+(define-public rust-cocoa-0.22
+  (package
+    (inherit rust-cocoa-0.23)
+    (name "rust-cocoa")
+    (version "0.22.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cocoa" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "19qyyv01yzrm6aahn6cdxvb4jhl6v4fj0cgqkxmq38i7hq3dqzv6"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-block" ,rust-block-0.1)
+        ("rust-core-foundation" ,rust-core-foundation-0.9)
+        ("rust-core-graphics" ,rust-core-graphics-0.21)
+        ("rust-foreign-types" ,rust-foreign-types-0.3)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-objc" ,rust-objc-0.2))))))
+
 (define-public rust-cocoa-0.19
   (package
+    (inherit rust-cocoa-0.22)
     (name "rust-cocoa")
     (version "0.19.1")
     (source
@@ -6006,7 +6204,6 @@ CMAKE environmental variable is set.")
        (sha256
         (base32
          "0034vahbfv574q4b63rj241b8rnka5cjiqsqc6wiggnin9l7g7zj"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t     ; only for macOS
        #:cargo-inputs
@@ -6016,11 +6213,7 @@ CMAKE environmental variable is set.")
         ("rust-core-graphics" ,rust-core-graphics-0.17)
         ("rust-foreign-types" ,rust-foreign-types-0.3)
         ("rust-libc" ,rust-libc-0.2)
-        ("rust-objc" ,rust-objc-0.2))))
-    (home-page "https://github.com/servo/core-foundation-rs")
-    (synopsis "Bindings to Cocoa for macOS")
-    (description "Bindings to Cocoa for macOS.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-objc" ,rust-objc-0.2))))))
 
 (define-public rust-cocoa-0.18
   (package
@@ -6037,6 +6230,34 @@ CMAKE environmental variable is set.")
         (base32
          "0m6fgdr4d2fp8jhkqvwr23hrqqqjv72g0j9vdgijc58k05j9j1hp"))))))
 
+(define-public rust-cocoa-foundation-0.1
+  (package
+    (name "rust-cocoa-foundation")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "cocoa-foundation" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0633ipbd28z35rsdmsl505f1aasrjsrrnirs826aa32nbnv4kpks"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-block" ,rust-block-0.1)
+        ("rust-core-foundation" ,rust-core-foundation-0.9)
+        ("rust-core-graphics-types" ,rust-core-graphics-types-0.1)
+        ("rust-foreign-types" ,rust-foreign-types-0.3)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-objc" ,rust-objc-0.2))))
+    (home-page "https://github.com/servo/core-foundation-rs")
+    (synopsis "Bindings to Cocoa Foundation for macOS")
+    (description
+     "This package provides bindings to Cocoa Foundation for macOS.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-codespan-reporting-0.9
   (package
     (name "rust-codespan-reporting")
@@ -6741,6 +6962,34 @@ Split from the user_agent crate.")
 the standard library.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-copypasta-0.7
+  (package
+    (name "rust-copypasta")
+    (version "0.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "copypasta" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "02zz6yndszmzr5yjhn11g1hsj0232jbzl8gch6mxksw3xngxf8s4"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-clipboard-win" ,rust-clipboard-win-3)
+        ("rust-objc" ,rust-objc-0.2)
+        ("rust-objc-foundation" ,rust-objc-foundation-0.1)
+        ("rust-objc-id" ,rust-objc-id-0.1)
+        ("rust-smithay-clipboard" ,rust-smithay-clipboard-0.6)
+        ("rust-x11-clipboard" ,rust-x11-clipboard-0.5))))
+    (home-page "https://github.com/alacritty/copypasta")
+    (synopsis "Get and set the contents of the OS-level clipboard")
+    (description
+     "Copypasta is a cross-platform library for getting and setting the
+contents of the OS-level clipboard.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-cordic-0.1
   (package
     (name "rust-cordic")
@@ -7024,8 +7273,33 @@ intrinsics.")
        #:cargo-inputs
        (("rust-libc" ,rust-libc-0.2))))))
 
+(define-public rust-core-text-19
+  (package
+    (name "rust-core-text")
+    (version "19.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "core-text" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0q1sr55v8zq82y0dwnwwksz1radh515i0a45nbsda3w2idpg9iyj"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-core-foundation" ,rust-core-foundation-0.9)
+        ("rust-core-graphics" ,rust-core-graphics-0.22)
+        ("rust-foreign-types" ,rust-foreign-types-0.3)
+        ("rust-libc" ,rust-libc-0.2))))
+    (home-page "https://github.com/servo/core-foundation-rs")
+    (synopsis "Bindings to the Core Text framework")
+    (description "This package provides bindings to the Core Text framework.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-core-text-13
   (package
+    (inherit rust-core-text-19)
     (name "rust-core-text")
     (version "13.3.2")
     (source
@@ -7037,19 +7311,13 @@ intrinsics.")
        (sha256
         (base32
          "0v9lxn277p39cf81pb45r7k0lzf17pwgd5cpry1c04ajv556b16v"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t     ; only for macOS
        #:cargo-inputs
        (("rust-core-foundation" ,rust-core-foundation-0.6)
         ("rust-core-graphics" ,rust-core-graphics-0.17)
         ("rust-foreign-types" ,rust-foreign-types-0.3)
-        ("rust-libc" ,rust-libc-0.2))))
-    (home-page "https://github.com/servo/core-foundation-rs")
-    (synopsis "Bindings to the Core Text framework")
-    (description
-     "Bindings to the Core Text framework.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-libc" ,rust-libc-0.2))))))
 
 (define-public rust-cpp-demangle-0.2
   (package
@@ -7706,6 +7974,41 @@ message passing.")
        #:cargo-development-inputs
        (("rust-rand" ,rust-rand-0.6))))))
 
+(define-public rust-crossfont-0.2
+  (package
+    (name "rust-crossfont")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "crossfont" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "04p8k0yn19n2pdbiqzwkknakz9c7kdii0i2nf3s3p298ab7ld28h"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-cocoa" ,rust-cocoa-0.24)
+        ("rust-core-foundation" ,rust-core-foundation-0.9)
+        ("rust-core-foundation-sys" ,rust-core-foundation-sys-0.8)
+        ("rust-core-graphics" ,rust-core-graphics-0.22)
+        ("rust-core-text" ,rust-core-text-19)
+        ("rust-dwrote" ,rust-dwrote-0.11)
+        ("rust-foreign-types" ,rust-foreign-types-0.5)
+        ("rust-freetype-rs" ,rust-freetype-rs-0.26)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-pkg-config" ,rust-pkg-config-0.3)
+        ("rust-servo-fontconfig" ,rust-servo-fontconfig-0.5)
+        ("rust-winapi" ,rust-winapi-0.3))))
+    (home-page "https://github.com/alacritty/crossfont")
+    (synopsis "Native font loading and rasterization")
+    (description
+     "Crossfont is a cross-platform Rust library for loading fonts and
+rasterizing glyphs, using native font engines whenever possible.")
+    (license license:asl2.0)))
+
 (define-public rust-crossterm-0.13
   (package
     (name "rust-crossterm")
@@ -9558,7 +9861,7 @@ Directory guidelines on macOS.")
 standard locations of directories for config, cache and other data.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-dirs-2.0
+(define-public rust-dirs-2
   (package
     (inherit rust-dirs-3)
     (name "rust-dirs")
@@ -9577,7 +9880,7 @@ standard locations of directories for config, cache and other data.")
 
 (define-public rust-dirs-1.0
   (package
-    (inherit rust-dirs-2.0)
+    (inherit rust-dirs-2)
     (name "rust-dirs")
     (version "1.0.5")
     (source
@@ -9687,27 +9990,41 @@ memory but not other memory.  This package provides a discard trait which allows
 for intentionally leaking memory")
     (license license:expat)))
 
-(define-public rust-dispatch-0.1
+(define-public rust-dispatch-0.2
   (package
     (name "rust-dispatch")
-    (version "0.1.4")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "dispatch" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "019nzy993hxaiazcdnayx3csv2iki34i535asw11ki96hakkrs84"))))
+        (base32 "0fwjr9b7582ic5689zxj8lf7zl94iklhlns3yivrnv8c9fxr635x"))))
     (build-system cargo-build-system)
-    (arguments '(#:tests? #f))  ; Tests only run on Mac.
+    (arguments `(#:skip-build? #t))
     (home-page "https://github.com/SSheldon/rust-dispatch")
     (synopsis "Rust wrapper for Apple's Grand Central Dispatch")
     (description "This package provides a Rust wrapper for Apple's Grand
 Central Dispatch.")
     (license license:expat)))
 
+(define-public rust-dispatch-0.1
+  (package
+    (inherit rust-dispatch-0.2)
+    (name "rust-dispatch")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "dispatch" version))
+       (file-name
+        (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "019nzy993hxaiazcdnayx3csv2iki34i535asw11ki96hakkrs84"))))
+    (arguments '(#:tests? #f))))  ; Tests only run on Mac.
+
 (define-public rust-dissimilar-1.0
   (package
     (name "rust-dissimilar")
@@ -9879,28 +10196,7 @@ from macros.")
         ("rust-rustc-serialize" ,rust-rustc-serialize-0.3)
         ("rust-strsim" ,rust-strsim-0.5))))))
 
-(define-public rust-downcast-rs-1.1
-  (package
-    (name "rust-downcast-rs")
-    (version "1.1.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (crate-uri "downcast-rs" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1xhs2qj02k9m4mm5fgh19y88850y9jsnwwlblf2ffc91gjs6xfjj"))))
-    (build-system cargo-build-system)
-    (home-page "https://github.com/marcianx/downcast-rs")
-    (synopsis "Trait object downcasting support using only safe Rust")
-    (description
-     "Trait object downcasting support using only safe Rust.  It supports type
-parameters, associated types, and type constraints.")
-    (license (list license:expat license:asl2.0))))
-
-(define-public rust-downcast-rs-1.2
+(define-public rust-downcast-rs-1
   (package
     (name "rust-downcast-rs")
     (version "1.2.0")
@@ -10122,8 +10418,36 @@ floating-point primitives to an @code{io::Write}.")
     (description "Clone trait that is object-safe")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-dwrote-0.11
+  (package
+    (name "rust-dwrote")
+    (version "0.11.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "dwrote" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0nx6d9ddqjv0gfi1if3zbsnc9sfj6qfm900jfgnx66k1llmir6j3"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-lazy-static" ,rust-lazy-static-1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-derive" ,rust-serde-derive-1)
+        ("rust-winapi" ,rust-winapi-0.3)
+        ("rust-wio" ,rust-wio-0.2))))
+    (home-page "https://github.com/servo/dwrote-rs")
+    (synopsis "Lightweight binding to DirectWrite")
+    (description
+     "This package provides lightweight binding to DirectWrite.")
+    (license license:mpl2.0)))
+
 (define-public rust-dwrote-0.9
   (package
+    (inherit rust-dwrote-0.11)
     (name "rust-dwrote")
     (version "0.9.0")
     (source
@@ -10135,7 +10459,6 @@ floating-point primitives to an @code{io::Write}.")
        (sha256
         (base32
          "03gzl5pd90nlkmwqmbmjmyz47h7wlblbqrwv5a29npnv0ag3dl8b"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -10144,12 +10467,7 @@ floating-point primitives to an @code{io::Write}.")
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-derive" ,rust-serde-derive-1)
         ;("rust-wio" ,rust-wio-0.2)
-        ("rust-winapi" ,rust-winapi-0.3))))
-    (home-page "https://github.com/servo/dwrote-rs")
-    (synopsis "Lightweight binding to DirectWrite")
-    (description
-     "This package provides lightweight binding to DirectWrite.")
-    (license license:mpl2.0)))
+        ("rust-winapi" ,rust-winapi-0.3))))))
 
 (define-public rust-easy-parallel-3
   (package
@@ -10312,7 +10630,7 @@ signing, and verification in pure Rust.")
 @code{Right} is a general purpose sum type with two cases.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-embed-resource-1.3
+(define-public rust-embed-resource-1
   (package
     (name "rust-embed-resource")
     (version "1.3.3")
@@ -11153,7 +11471,7 @@ blocking data structures.")
 @code{?} in @code{main}.")
     (license (list license:expat license:asl2.0))))
 
-(define-public rust-expat-sys-2.1
+(define-public rust-expat-sys-2
   (package
     (name "rust-expat-sys")
     (version "2.1.6")
@@ -12217,8 +12535,32 @@ values to other threads.")
      "Bindings for Freetype used by Servo.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-freetype-rs-0.26
+  (package
+    (name "rust-freetype-rs")
+    (version "0.26.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "freetype-rs" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1yzmbd73hlblbns0dqkcwfj54l97hx3yb0lqpda8rhm5s34xxskl"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-freetype-sys" ,rust-freetype-sys-0.13)
+        ("rust-libc" ,rust-libc-0.2))))
+    (home-page "https://github.com/PistonDevelopers/freetype-rs")
+    (synopsis "Bindings for FreeType font library")
+    (description "This package provides bindings for FreeType font library.")
+    (license license:expat)))
+
 (define-public rust-freetype-rs-0.23
   (package
+    (inherit rust-freetype-rs-0.26)
     (name "rust-freetype-rs")
     (version "0.23.0")
     (source
@@ -12230,7 +12572,6 @@ values to other threads.")
        (sha256
         (base32
          "06yn6l44wad0h0i4nzs5jfq64zgf89xr01fy1w22i90j22ilnkmd"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-bitflags" ,rust-bitflags-1)
@@ -12240,14 +12581,35 @@ values to other threads.")
        (("rust-unicode-normalization" ,rust-unicode-normalization-0.1))))
     (inputs
      `(("freetype" ,freetype)
-       ("zlib" ,zlib)))
-    (home-page "https://github.com/PistonDevelopers/freetype-rs")
-    (synopsis "Bindings for FreeType font library")
-    (description "This package provides bindings for FreeType font library.")
+       ("zlib" ,zlib)))))
+
+(define-public rust-freetype-sys-0.13
+  (package
+    (name "rust-freetype-sys")
+    (version "0.13.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "freetype-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "06kkds31s6b1i39dyanwmzbnic7laia1kk3gfvx8sqncq08l0zd3"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-cmake" ,rust-cmake-0.1)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-pkg-config" ,rust-pkg-config-0.3))))
+    (home-page "https://github.com/PistonDevelopers/freetype-sys")
+    (synopsis "Low level binding for FreeType font library")
+    (description
+     "This package provides low level binding for FreeType font library.")
     (license license:expat)))
 
 (define-public rust-freetype-sys-0.9
   (package
+    (inherit rust-freetype-sys-0.13)
     (name "rust-freetype-sys")
     (version "0.9.0")
     (source
@@ -12259,7 +12621,6 @@ values to other threads.")
        (sha256
         (base32
          "1i309xc6gcsgdfiim3j5f0sk08imr4frlzfa185iaxqciysqgikx"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-libc" ,rust-libc-0.2)
@@ -12267,12 +12628,7 @@ values to other threads.")
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (inputs
      `(("freetype" ,freetype)
-       ("zlib" ,zlib)))
-    (home-page "https://github.com/PistonDevelopers/freetype-sys")
-    (synopsis "Low level binding for FreeType font library")
-    (description
-     "This package provides low level binding for FreeType font library.")
-    (license license:expat)))
+       ("zlib" ,zlib)))))
 
 (define-public rust-fs2-0.4
   (package
@@ -17398,6 +17754,25 @@ generated by LALRPOP.")
        (sha256
         (base32 "0z4bjn3g9232n1im5p6mn9mwlvw5aj5iac6hbjmljqxkhf3d2xy2"))))))
 
+(define-public rust-lazy-bytes-cast-5
+  (package
+    (name "rust-lazy-bytes-cast")
+    (version "5.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "lazy-bytes-cast" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0sr0dy1jfg7bjwm9js4hk0ngl0cmgparq2idv1m1bkc9y2cp898h"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/DoumanAsh/lazy-bytes-cast")
+    (synopsis "Lazy casts from and to byte arrays")
+    (description
+     "This crate provides simple methods to cast from and into byte arrays.")
+    (license license:boost1.0)))
+
 (define-public rust-lazy-static-1.4
   (package
     (name "rust-lazy-static")
@@ -17801,18 +18176,11 @@ library.")
        (uri (crate-uri "libloading" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1ygliqa518jjxwa5ih4b2f8m984ib596vxmjb28pa5lb8zqdhhr4"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; Enable unstable features
-           (substitute* "src/lib.rs"
-             (("//! A memory" all)
-              (string-append "#![feature(non_exhaustive)]\n" all)))))))
+        (base32 "1ygliqa518jjxwa5ih4b2f8m984ib596vxmjb28pa5lb8zqdhhr4"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
+     `(#:skip-build? #true
+       #:cargo-inputs
        (("rust-cfg-if" ,rust-cfg-if-0.1)
         ("rust-winapi" ,rust-winapi-0.3))
        #:cargo-development-inputs
@@ -19474,6 +19842,27 @@ file IO.")
        #:cargo-development-inputs
        (("rust-tempdir" ,rust-tempdir-0.3))))))
 
+(define-public rust-memmap2-0.1
+  (package
+    (name "rust-memmap2")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "memmap2" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0nmymqy9q62x577ydja0ysfyir7h5qa0n5fwcnvchfhhlsi0rdyr"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2))))
+    (home-page "https://github.com/RazrFalcon/memmap2-rs")
+    (synopsis "Cross-platform Rust API for memory-mapped file IO")
+    (description "This package provides a Rust API for memory-mapped file IO.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-memoffset-0.6
   (package
     (name "rust-memoffset")
@@ -19670,8 +20059,35 @@ based on Rustls and Ring.")
     (description "Run pkg-config from declarative dependencies in Cargo.toml.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-metal-0.18
+  (package
+    (name "rust-metal")
+    (version "0.18.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "metal" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "08n3kfv78jm3pf7fafwfv67n40lgcdg7w9lqn9g4sdvfwdk90vrf"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-block" ,rust-block-0.1)
+        ("rust-cocoa" ,rust-cocoa-0.22)
+        ("rust-foreign-types" ,rust-foreign-types-0.3)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-objc" ,rust-objc-0.2))))
+    (home-page "https://github.com/gfx-rs/metal-rs")
+    (synopsis "Rust bindings for Metal")
+    (description "This package provides Rust bindings for Metal.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-metal-0.14
   (package
+    (inherit rust-metal-0.18)
     (name "rust-metal")
     (version "0.14.0")
     (source
@@ -19683,7 +20099,6 @@ based on Rustls and Ring.")
        (sha256
         (base32
          "0my1xwlv562i80y3jbk0nygayi383j5skdwk48clb286b7922gyd"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
@@ -19699,11 +20114,7 @@ based on Rustls and Ring.")
         ("rust-objc-id" ,rust-objc-id-0.1))
        #:cargo-development-inputs
        (("rust-sema" ,rust-sema-0.1)
-        ("rust-winit" ,rust-winit-0.19)))) ; 0.17?
-    (home-page "https://github.com/gfx-rs/metal-rs")
-    (synopsis "Rust bindings for Metal")
-    (description "Rust bindings for Metal.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-winit" ,rust-winit-0.19)))))) ; 0.17?
 
 (define-public rust-mimalloc-0.1
   (package
@@ -22934,6 +23345,28 @@ under its new name.")
      "Utility to activate escape codes in Windows' CMD and PowerShell.")
     (license license:expat)))
 
+(define-public rust-owned-ttf-parser-0.6
+  (package
+    (name "rust-owned-ttf-parser")
+    (version "0.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "owned_ttf_parser" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1qydjksjcllf0pnm0jkjvbg4n52wfcwv59dl5b06cqn40sw3z4lz"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-ttf-parser" ,rust-ttf-parser-0.6))))
+    (home-page "https://github.com/alexheretic/owned-ttf-parser")
+    (synopsis "TTF-parser plus support for owned data")
+    (description
+     "This package provides a TTF-parser plus support for owned data.")
+    (license license:asl2.0)))
+
 (define-public rust-owning-ref-0.4
   (package
     (name "rust-owning-ref")
@@ -29641,8 +30074,41 @@ native certificate store.")
     (license
      (list license:asl2.0 license:isc license:expat))))
 
+(define-public rust-rusttype-0.9
+  (package
+    (name "rust-rusttype")
+    (version "0.9.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rusttype" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0ngcwn7d2dybjrylga3gpxm3k3mcw3m405hcp32iignhvrx74z6w"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-ab-glyph-rasterizer" ,rust-ab-glyph-rasterizer-0.1)
+        ("rust-crossbeam-deque" ,rust-crossbeam-deque-0.7)
+        ("rust-crossbeam-utils" ,rust-crossbeam-utils-0.7)
+        ("rust-libm" ,rust-libm-0.2)
+        ("rust-linked-hash-map" ,rust-linked-hash-map-0.5)
+        ("rust-num-cpus" ,rust-num-cpus-1)
+        ("rust-owned-ttf-parser" ,rust-owned-ttf-parser-0.6)
+        ("rust-rustc-hash" ,rust-rustc-hash-1))))
+    (home-page "https://gitlab.redox-os.org/redox-os/rusttype")
+    (synopsis "Pure Rust alternative to libraries like FreeType")
+    (description
+     "This package provides a pure Rust alternative to libraries like FreeType.
+RustType provides an API for loading, querying and rasterising TrueType fonts.
+It also provides an implementation of a dynamic GPU glyph cache for hardware
+font rendering.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-rusttype-0.8
   (package
+    (inherit rust-rusttype-0.9)
     (name "rust-rusttype")
     (version "0.8.2")
     (source
@@ -29654,7 +30120,6 @@ native certificate store.")
        (sha256
         (base32
          "12hwfg85iii7sbgsyyr23yw862dzp7f8zwn9xv5iqydm5w1i3a8l"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:tests? #f      ; Artifacts for tests not included.
        #:cargo-inputs
@@ -29667,15 +30132,7 @@ native certificate store.")
         ("rust-num-cpus" ,rust-num-cpus-1)
         ("rust-ordered-float" ,rust-ordered-float-1.0)
         ("rust-rustc-hash" ,rust-rustc-hash-1)
-        ("rust-stb-truetype" ,rust-stb-truetype-0.3))))
-    (home-page "https://gitlab.redox-os.org/redox-os/rusttype")
-    (synopsis "Pure Rust alternative to libraries like FreeType")
-    (description
-     "This package provides a pure Rust alternative to libraries like FreeType.
-RustType provides an API for loading, querying and rasterising TrueType fonts.
-It also provides an implementation of a dynamic GPU glyph cache for hardware
-font rendering.")
-    (license (list license:expat license:asl2.0))))
+        ("rust-stb-truetype" ,rust-stb-truetype-0.3))))))
 
 (define-public rust-rusttype-0.7
   (package
@@ -31798,8 +32255,31 @@ functionality and without weak references.")
     (description "Serialising Rust tests")
     (license license:expat)))
 
+(define-public rust-servo-fontconfig-0.5
+  (package
+    (name "rust-servo-fontconfig")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "servo-fontconfig" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0z11bjndkp87dnqqmqww6raswgpy7sfh9ahdpx7d0wzxwlpy5qy7"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-servo-fontconfig-sys" ,rust-servo-fontconfig-sys-5))))
+    (home-page "https://github.com/servo/rust-fontconfig/")
+    (synopsis "Rust bindings for fontconfig")
+    (description "This package provides Rust bindings for fontconfig.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-servo-fontconfig-0.4
   (package
+    (inherit rust-servo-fontconfig-0.5)
     (name "rust-servo-fontconfig")
     (version "0.4.0")
     (source
@@ -31811,7 +32291,6 @@ functionality and without weak references.")
        (sha256
         (base32
          "1nach6s4hdf86jz5hlm4p5r7vin91cs7gg89mr533id5fpbzi250"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
        (("rust-libc" ,rust-libc-0.2)
@@ -31819,14 +32298,35 @@ functionality and without weak references.")
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
-     `(("fontconfig" ,fontconfig)))
-    (home-page "https://github.com/servo/rust-fontconfig/")
-    (synopsis "Rust bindings for fontconfig")
-    (description "This package provides Rust bindings for fontconfig.")
-    (license (list license:expat license:asl2.0))))
+     `(("fontconfig" ,fontconfig)))))
+
+(define-public rust-servo-fontconfig-sys-5
+  (package
+    (name "rust-servo-fontconfig-sys")
+    (version "5.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "servo-fontconfig-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "125k4hydb4w08568rgazh95n6haxhf5c78axz50glbc9p6fqfsz3"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-expat-sys" ,rust-expat-sys-2)
+        ("rust-freetype-sys" ,rust-freetype-sys-0.13)
+        ("rust-pkg-config" ,rust-pkg-config-0.3))))
+    (home-page "https://crates.io/crates/servo-fontconfig-sys")
+    (synopsis "Rust wrapper around Fontconfig")
+    (description
+     "This package provides a Rust wrapper around Fontxonfig.")
+    (license license:expat)))
 
 (define-public rust-servo-fontconfig-sys-4
   (package
+    (inherit rust-servo-fontconfig-sys-5)
     (name "rust-servo-fontconfig-sys")
     (version "4.0.9")
     (source
@@ -31844,21 +32344,15 @@ functionality and without weak references.")
             (for-each delete-file-recursively
                       (find-files "." "[^Cargo.toml,^build\\.rs]"))
             #t))))
-    (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
-       (("rust-expat-sys" ,rust-expat-sys-2.1)
+       (("rust-expat-sys" ,rust-expat-sys-2)
         ("rust-servo-freetype-sys" ,rust-servo-freetype-sys-4)
         ("rust-pkg-config" ,rust-pkg-config-0.3))))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
-     `(("fontconfig" ,fontconfig)))
-    (home-page "https://crates.io/crates/servo-fontconfig-sys")
-    (synopsis "Rust wrapper around Fontconfig")
-    (description
-     "This package provides a Rust wrapper around Fontxonfig.")
-    (license license:mpl2.0)))  ; build.rs is mpl2.0
+     `(("fontconfig" ,fontconfig)))))
 
 (define-public rust-servo-freetype-sys-4
   (package
@@ -35240,7 +35734,7 @@ template language.")
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs
-      (("rust-dirs" ,rust-dirs-2.0)
+      (("rust-dirs" ,rust-dirs-2)
        ("rust-winapi" ,rust-winapi-0.3))))
    (home-page "https://github.com/Stebalien/term")
    (synopsis "Terminal formatting library")
@@ -38719,6 +39213,26 @@ extension for the Trust-DNS client to use rustls for TLS.")
      "Test harness for ui tests of compiler diagnostics.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-ttf-parser-0.6
+  (package
+    (name "rust-ttf-parser")
+    (version "0.6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "ttf-parser" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1p4z969pwd5adayy3ijq94iiak42yfxz8hk5wnkdsirymgbpqp9y"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/RazrFalcon/ttf-parser")
+    (synopsis "High-level, safe, zero-allocation TrueType font parser")
+    (description
+     "This package provides a high-level, safe, zero-allocation TrueType font
+parser.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-tuikit-0.2
   (package
     (name "rust-tuikit")
@@ -40206,8 +40720,34 @@ updated when the crate version changes.")
      "This package provides a pure FFI to Jon Blow's VS discovery script.")
     (license license:expat)))
 
+(define-public rust-vte-0.10
+  (package
+    (name "rust-vte")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "vte" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1mnjw3f071xbvapdgdf8mcdglw60dadcc5hhvz5zpljm53nmzwid"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-arrayvec" ,rust-arrayvec-0.5)
+        ("rust-utf8parse" ,rust-utf8parse-0.2)
+        ("rust-vte-generate-state-changes"
+         ,rust-vte-generate-state-changes-0.1))))
+    (home-page "https://github.com/jwilm/vte")
+    (synopsis "Parser for implementing terminal emulators")
+    (description
+     "This package provides a parser for implementing terminal emulators.")
+    (license (list license:asl2.0 license:expat))))
+
 (define-public rust-vte-0.3
   (package
+    (inherit rust-vte-0.10)
     (name "rust-vte")
     (version "0.3.3")
     (source
@@ -40219,15 +40759,32 @@ updated when the crate version changes.")
        (sha256
         (base32
          "1kz8svnqnxclllsgh0ck20rplw3qzp46b5v30yscnzrgw8vgahjg"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:tests? #f      ; tests not included in release
        #:cargo-inputs
-       (("rust-utf8parse" ,rust-utf8parse-0.1))))
+       (("rust-utf8parse" ,rust-utf8parse-0.1))))))
+
+(define-public rust-vte-generate-state-changes-0.1
+  (package
+    (name "rust-vte-generate-state-changes")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "vte_generate_state_changes" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1zs5q766q7jmc80c5c80gpzy4qpg5lnydf94mgdzrpy7h5q82myj"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-proc-macro2" ,rust-proc-macro2-1)
+        ("rust-quote" ,rust-quote-1))))
     (home-page "https://github.com/jwilm/vte")
-    (synopsis "Parser for implementing terminal emulators")
+    (synopsis "Proc macro for generating VTE state changes")
     (description
-     "This package provides a parser for implementing terminal emulators.")
+     "This package provides a proc macro for generating VTE state changes.")
     (license (list license:asl2.0 license:expat))))
 
 (define-public rust-wait-timeout-0.2
@@ -41512,6 +42069,30 @@ API.")
      "A simple library wrapping a handful of useful winapi functions.")
     (license license:expat)))
 
+(define-public rust-wio-0.2
+  (package
+    (name "rust-wio")
+    (version "0.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "wio" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "199p404fp96w1f1c93bf1jrvaqwypxf3hmmldhww4jk4yhr9j4jx"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-winapi" ,rust-winapi-0.3))))
+    (home-page "https://github.com/retep998/wio-rs")
+    (synopsis "Windows IO wrapper")
+    (description
+     "Wio is a middle-level wrapper around various things in Windows API.  It
+is designed to be a very thin layer around Windows API to provide a safe Rusty
+API but without hiding any functionality.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-ws2-32-sys-0.2
   (package
     (name "rust-ws2-32-sys")
@@ -41648,6 +42229,28 @@ extended attributes.")
      "This package provides Rust bindings and wrappers for XCB.")
     (license license:expat)))
 
+(define-public rust-xcursor-0.3
+  (package
+    (name "rust-xcursor")
+    (version "0.3.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "xcursor" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "022x7jm71dyqrxwsjkqfgj8bx57y7g8yyz318qb80y5ffhaj76is"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-nom" ,rust-nom-6))))
+    (home-page "https://crates.io/crates/xcursor")
+    (synopsis "Library for loading XCursor themes")
+    (description
+     "This package provides a library for loading XCursor themes.")
+    (license license:expat)))
+
 (define-public rust-xdg-2
   (package
     (name "rust-xdg")
diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm
index 3139063298..c9409358db 100644
--- a/gnu/packages/disk.scm
+++ b/gnu/packages/disk.scm
@@ -18,6 +18,7 @@
 ;;; Copyright © 2020 Pkill -9 <pkill9@runbox.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
+;;; Copyright © 2021 Michael Rohleder <mike@rohleder.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -493,14 +494,14 @@ and can dramatically shorten the lifespan of the drive if left unchecked.")
 (define-public gparted
   (package
     (name "gparted")
-    (version "1.1.0")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/gparted/gparted/gparted-"
                            version "/gparted-" version ".tar.gz"))
        (sha256
-        (base32 "092rgwjh1825fal6v3yafq2wr0i61hh0a2n0j4296zn0zdx7pzp2"))))
+        (base32 "06f72hqx5jf2irzsmi7lgpxxj38ncixh0acb4307wyjd4mfp343c"))))
     (build-system glib-or-gtk-build-system)
     (arguments
       ;; Tests require access to paths outside the build container, such
diff --git a/gnu/packages/dlang.scm b/gnu/packages/dlang.scm
index 6cdb2efd14..da3b818c26 100644
--- a/gnu/packages/dlang.scm
+++ b/gnu/packages/dlang.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
+;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -83,7 +84,7 @@ and freshness without requiring additional information from the user.")
 (define-public ldc-bootstrap
     (package
       (name "ldc")
-      (version "0.17.4")
+      (version "0.17.6")
       (source
        (origin
          (method git-fetch)
@@ -92,7 +93,7 @@ and freshness without requiring additional information from the user.")
                (commit (string-append "v" version))))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "0nnrjavfmpfp7bib04isqlxvyzh6mlvsdan0gxysdz96hlg4hcq8"))))
+          (base32 "1q6hm4fkrcwys83x0p4kfg9xrc1b9g2qicqif2zy5z4nsfsb5vgs"))))
       (build-system cmake-build-system)
       (supported-systems '("x86_64-linux" "i686-linux" "armhf-linux"))
       (properties
@@ -117,14 +118,6 @@ and freshness without requiring additional information from the user.")
                  (unpack "druntime-src" "runtime/druntime")
                  (unpack "dmd-testsuite-src" "tests/d2/dmd-testsuite")
                  #t)))
-           (add-after 'unpack-submodule-sources 'patch-dmd2
-             (lambda* (#:key inputs #:allow-other-keys)
-               (substitute* "dmd2/root/port.c"
-                 ((" ::isnan") " isnan")
-                 ((" ::isinf") " isinf")
-                 (("#undef isnan") "")
-                 (("#undef isinf") ""))
-               #t))
            (add-after 'unpack-submodule-sources 'patch-phobos
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "runtime/phobos/std/process.d"
@@ -137,8 +130,6 @@ and freshness without requiring additional information from the user.")
                   "(tzName == \"+VERSION\" || std.algorithm.endsWith(tzName, \"/leapseconds\"))"))
                (substitute* "tests/d2/dmd-testsuite/Makefile"
                  (("/bin/bash") (which "bash")))
-               ;; FIXME: this test cannot be linked.
-               (delete-file "tests/d2/dmd-testsuite/runnable/cppa.d")
                ;; the following two tests fail on i686
                (for-each delete-file '("tests/ir/attributes.d" "tests/ir/align.d")))))))
       (inputs
@@ -147,8 +138,8 @@ and freshness without requiring additional information from the user.")
          ("tzdata" ,tzdata)
          ("zlib" ,zlib)))
       (native-inputs
-       `(("llvm" ,llvm-3.8)
-         ("clang" ,clang-3.8)
+       `(("llvm" ,llvm-6)
+         ("clang" ,clang-6)
          ("python-lit" ,python-lit)
          ("python-wrapper" ,python-wrapper)
          ("unzip" ,unzip)
@@ -160,7 +151,7 @@ and freshness without requiring additional information from the user.")
                    (commit (string-append "ldc-v" version))))
              (file-name (git-file-name "phobos" version))
              (sha256
-              (base32 "0i7gh99w4mi0hdv16261jcdiqyv1nkjdcwy9prw32s0lvplx8fdy"))
+              (base32 "15jzs38wanks2jfp2izzl7zqrp4c8ai54ppsgm8ws86p3sbbkmj8"))
              (patches (search-patches "ldc-bootstrap-disable-tests.patch"))))
          ("druntime-src"
           ,(origin
@@ -170,7 +161,7 @@ and freshness without requiring additional information from the user.")
                    (commit (string-append "ldc-v" version))))
              (file-name (git-file-name "druntime" version))
              (sha256
-              (base32 "0alabm3bbvs94msvxz5psiwk4f51cw9h82z1p5hhsnf8ja6d0am7"))))
+              (base32 "00wr2kiggwnd8h7by51fhj1xc65hv1ysip5gbgdbkfar58p2d0bb"))))
          ("dmd-testsuite-src"
           ,(origin
              (method git-fetch)
@@ -179,7 +170,7 @@ and freshness without requiring additional information from the user.")
                    (commit (string-append "ldc-v" version))))
              (file-name (git-file-name "dmd-testsuite" version))
              (sha256
-              (base32 "05qr4cgb4scfqzbw1l5pk72kil074mvj9d55b165ljyr51sgwgbl"))))))
+              (base32 "1d1c0979wbippldrkjf7szyj4n87hxz8dwqg1r5b3aai37g9kcky"))))))
       (home-page "http://wiki.dlang.org/LDC")
       (synopsis "LLVM-based compiler for the D programming language")
       (description
diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm
index 5e65eed7ed..9583cd3af9 100644
--- a/gnu/packages/dns.scm
+++ b/gnu/packages/dns.scm
@@ -277,7 +277,7 @@ prompt the user with the option to go with insecure DNS only.")
 (define-public dnsmasq
   (package
     (name "dnsmasq")
-    (version "2.83")
+    (version "2.84")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -285,7 +285,7 @@ prompt the user with the option to go with insecure DNS only.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "1sjamz1v588qf35m8z6wcqkjk5w12bqhj7d7p48dj8jyn3lgghgz"))))
+                "0305a0c3snwqcv77sipyynr55xip1fp2843yn04pc4vk9g39acb0"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -375,15 +375,18 @@ and BOOTP/TFTP for network booting of diskless machines.")
              (with-directory-excursion "fuzz"
                (invoke "make" "check"))
              #t)))))
-    (synopsis "Domain Name System (DNS) implementation")
-    (description "BIND is an implementation of the @dfn{Domain Name System}
-(DNS) protocols for the Internet.  It is a reference implementation of those
-protocols, but it is also production-grade software, suitable for use in
-high-volume and high-reliability applications.  The name BIND stands for
-\"Berkeley Internet Name Domain\", because the software originated in the
-early 1980s at the University of California at Berkeley.  The @code{utils}
-output of this package contains the following DNS name servers related command
-line utilities:
+    (synopsis "@acronym{DNS, Domain Name System} implementation")
+    (description "BIND implements the @acronym{DNS, Domain Name System}
+protocols for the Internet.  It is both a reference implementation of those
+protocols and production-grade software, suitable for use in high-volume and
+high-reliability applications.
+
+The name stands for \"Berkeley Internet Name Domain\" because the software
+originated in the early 1980s at the University of California at Berkeley.
+
+The @code{utils} output of this package contains the following command line
+utilities related to DNS name servers:
+
 @table @code
 @item delv
 DNS lookup and validation utility
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 9e276d9d26..395be23aaa 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -76,7 +76,7 @@
 ;;; Copyright © 2020 Fredrik Salomonsson <plattfot@gmail.com>
 ;;; Copyright © 2020 Ryan Desfosses <rdes@protonmail.com>
 ;;; Copyright © 2020 Eric Bavier <bavier@posteo.net>
-;;; Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com>
+;;; Copyright © 2020, 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
 ;;; Copyright © 2020 Peng Mei Yu <i@pengmeiyu.com>
 ;;; Copyright © 2020 Niklas Eklund <niklas.eklund@posteo.net>
 ;;; Copyright © 2020 Marco Grassi <marco.au.grassi98@protonmail.com>
@@ -725,6 +725,50 @@ this one is much simpler and much more consistent.  When using this package,
 then only the color of the mode line changes when a window becomes in-/active.")
     (license license:gpl3+)))
 
+(define-public emacs-theme-magic
+  ;; No tagged release upstream, but the commit below correspond to the 0.2.3
+  ;; release.
+  (let ((commit "844c4311bd26ebafd4b6a1d72ddcc65d87f074e3")
+        (revision "0"))
+    (package
+      (name "emacs-theme-magic")
+      (version "0.2.3")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/jcaw/theme-magic")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "10gkg7jh1s1484gm66a87zr7x8vmv00s7gfd0w2pj47nqf98g8hz"))))
+      (build-system emacs-build-system)
+      (arguments
+       `(
+         ;; Include Pywal interaction scripts.
+         #:include (cons "^python/" %default-include)
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'patch-exec-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((files '("theme-magic.el" "python/wal_change_colors.py"))
+                     (python (assoc-ref inputs "python"))
+                     (python-pywal (assoc-ref inputs "python-pywal")))
+                 (substitute* files
+                   (("\"python\"") (string-append "\"" python "/bin/python3\""))
+                   (("\"wal\"") (string-append "\"" python-pywal "/bin/wal\""))))
+               #t)))))
+      (inputs
+       `(("python" ,python)
+         ("python-pywal" ,python-pywal)))
+      (home-page "https://github.com/jcaw/theme-magic")
+      (synopsis "Generate and apply color palettes based on your Emacs theme")
+      (description
+       "This package provides a command to extract the colors from your Emacs
+theme and apply them to the rest of Linux with Pywal.  Pywal only applies your
+theme to the current session.")
+      (license license:gpl3+))))
+
 (define-public emacs-treepy
   (package
     (name "emacs-treepy")
@@ -4703,7 +4747,7 @@ for Flow files.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1f1gapvs9j89qr474103dqgsiyb96phlnsmq5hiv4ba242blg9lb"))))
+        (base32 "0ih0nakal36is0dci82gx4ijrvnpz9jpw1adprfara2cf8dx4rk6"))))
     (build-system emacs-build-system)
     (arguments
      `(#:include (cons "\\.py$" %default-include)
@@ -4725,7 +4769,7 @@ for Flow files.")
            (lambda* (#:key inputs #:allow-other-keys)
              (make-file-writable "flycheck-grammalecte.el")
              (emacs-substitute-variables "flycheck-grammalecte.el"
-               ("flycheck-grammalecte--grammalecte-directory"
+               ("flycheck-grammalecte-grammalecte-directory"
                 (string-append (assoc-ref inputs "grammalecte")
                                "/lib/python"
                                ,(version-major+minor (package-version python))
@@ -9366,6 +9410,28 @@ Dust.js, React/JSX, Angularjs, ejs, etc.")
     (home-page "http://web-mode.org/")
     (license license:gpl3+)))
 
+(define-public emacs-templatel
+  (package
+    (name "emacs-templatel")
+    (version "0.1.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/clarete/templatel")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1k33h503038l2bcr8gs020z2cjxfs94lamkdgv52cvd9i20d0kqq"))))
+    (build-system emacs-build-system)
+    (home-page "https://clarete.li/templatel")
+    (synopsis "Jinja inspired template language for Emacs Lisp")
+    (description
+     "templatel is the modern templating language.  It provides variable
+substitution and control flow through a clean and powerful language inspired
+by Python's Jinja.")
+    (license license:gpl3+)))
+
 (define-public emacs-wgrep
   (package
     (name "emacs-wgrep")
@@ -9621,7 +9687,7 @@ target will call @code{compile} on it.")
 (define-public emacs-cider
   (package
     (name "emacs-cider")
-    (version "0.26.1")
+    (version "1.0.0")
     (source
      (origin
        (method git-fetch)
@@ -9630,7 +9696,7 @@ target will call @code{compile} on it.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0m77jbxl380dp1wyj12m82bb06r80js8yxl530ryp1mwvy74f00d"))))
+        (base32 "143kh9k34yk0g6kdlkma6g432kmb2r9r1lhyq4irsw6d3vaql7dj"))))
     (build-system emacs-build-system)
     (arguments
      '(#:exclude                        ;don't exclude 'cider-test.el'
@@ -11708,7 +11774,7 @@ information via a consistent and well-integrated user interface.")
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
-                           "adaptive-wrap-" version ".el"))
+                           "adaptive-wrap-" version ".tar"))
        (sha256
         (base32 "1gs1pqzywvvw4prj63vpj8abh8h14pjky11xfl23pgpk9l3ldrb0"))))
     (build-system emacs-build-system)
@@ -16053,8 +16119,8 @@ navigate and display hierarchy structures.")
     (license license:gpl3+)))
 
 (define-public emacs-pulseaudio-control
-  (let ((commit "7e1a87068379075a5e9ce36c64c686c03d20d379")
-        (revision "3"))
+  (let ((commit "a931533140547510decdc368f39b2d2b97ca725f")
+        (revision "4"))
     (package
       (name "emacs-pulseaudio-control")
       (version (git-version "0.0.1" revision commit))
@@ -16067,7 +16133,7 @@ navigate and display hierarchy structures.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "0wcaqyh15x56255rrj350089z15pnwixa2vf0ly6dv0hjmzmh3mr"))))
+           "1jvjn9jszjjapi167an49jxcvr88cvgjwykglhp4b8lwhbjfqw76"))))
       (build-system emacs-build-system)
       (arguments
        '(#:phases (modify-phases %standard-phases
@@ -20290,7 +20356,7 @@ correctly.")
 (define-public emacs-helm-sly
   (package
     (name "emacs-helm-sly")
-    (version "0.7.0")
+    (version "0.7.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -20299,7 +20365,7 @@ correctly.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "090vq8c4scf9byn8xic71b02n4c8frhz1y1x1brxn6iar44dmzm5"))))
+                "12w1j1irgv6gy48zb4xi28ryan3fxd9kaay42798am5i1xa0yjjm"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-helm" ,emacs-helm)
@@ -21167,14 +21233,14 @@ buffer and launches Magit from the status buffer for the project at point.")
 (define-public emacs-repology
   (package
     (name "emacs-repology")
-    (version "1.0.1")
+    (version "1.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "repology-" version ".tar"))
        (sha256
-        (base32 "0y12496wafx95izah8vvv1x86k1m8kysm5mlhvshkp0zbpvmb5iq"))))
+        (base32 "031245rrhazj53bk1csa6x3ygzvg74w2hwjf08ficwvmdn97li90"))))
     (build-system emacs-build-system)
     (home-page "https://elpa.gnu.org/packages/repology.html")
     (synopsis "Repology API access via Elisp")
@@ -22934,14 +23000,14 @@ well as an option for visually flashing evaluated s-expressions.")
 (define-public emacs-tramp
   (package
     (name "emacs-tramp")
-    (version "2.5.0")
+    (version "2.5.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "tramp-" version ".tar"))
        (sha256
-        (base32 "1jpnqyk108nksaym2b9v243y5zkpr4px9d070wsb9cwm3xrcd8rh"))))
+        (base32 "0kqlc03bbsdywp0m3mf0m62hqyam8vg81phh7nqmpdjzskrdc1yy"))))
     (build-system emacs-build-system)
     (arguments
      `(#:emacs ,emacs                   ;need D-Bus
@@ -23995,7 +24061,7 @@ Emacs that integrate with major modes like Org-mode.")
 (define-public emacs-modus-themes
   (package
     (name "emacs-modus-themes")
-    (version "1.0.2")
+    (version "1.1.1")
     (source
      (origin
        (method git-fetch)
@@ -24004,7 +24070,7 @@ Emacs that integrate with major modes like Org-mode.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1v82payjgx8z0qdklsrkim7xkb6hqrbs34d5qpq0sii43jwhiy5j"))))
+        (base32 "1n716nasa1pccz7983kicagc9sqnxlyfmflvifqk4kza2ks0rh9m"))))
     (build-system emacs-build-system)
     (home-page "https://protesilaos.com/modus-themes/")
     (synopsis "Accessible themes (WCAG AAA)")
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index ca14584ada..5cca2bc9f7 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014 Taylan Ulrich Bayirli/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Mark H Weaver <mhw@netris.org>
@@ -195,17 +195,11 @@
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Directly copy emacs-X.Y to emacs, so that it is not wrapped
              ;; twice.  This also fixes a minor issue, where WMs would not be
-             ;; able to track emacs back to emacs.desktop.  The version is
-             ;; accessed using using THIS-PACKAGE so it "just works" for
-             ;; inherited Emacs packages of different versions.
+             ;; able to track emacs back to emacs.desktop.
              (with-directory-excursion (assoc-ref outputs "out")
-               (copy-file (string-append
-                           "bin/emacs-"
-                           ,(let ((this-version (package-version this-package)))
-                              (or (false-if-exception
-                                   (version-major+minor+point this-version))
-                                  (version-major+minor this-version))))
-                          "bin/emacs")
+               (copy-file
+                (car (find-files "bin" "^emacs-([0-9]+\\.)+[0-9]+$"))
+                "bin/emacs")
                #t)))
          (add-before 'reset-gzip-timestamps 'make-compressed-files-writable
            ;; The 'reset-gzip-timestamps phase will throw a permission error
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 1d94090f48..e52a5fc4af 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2015, 2018 David Thompson <dthompson2@worcester.edu>
 ;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2016, 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2017, 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2017, 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2017, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
@@ -1552,7 +1552,7 @@ This is a part of the TiLP project.")
 (define-public mame
   (package
     (name "mame")
-    (version "0.227")
+    (version "0.228")
     (source
      (origin
        (method git-fetch)
@@ -1561,7 +1561,7 @@ This is a part of the TiLP project.")
              (commit (apply string-append "mame" (string-split version #\.)))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0p7xhsahmkr5hh3j6hc1mpgi5z4navy77v4k35i0sgpdv1ax4y2l"))
+        (base32 "1xqd0b8xz9bc6ks9qbnrm7kkjcr81l0ksisvflr6gr6lxg2268xz"))
        (modules '((guix build utils)))
        (snippet
         ;; Remove bundled libraries.
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index baddaf1737..11585f6234 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -20,7 +20,7 @@
 ;;; Copyright © 2020 Ekaitz Zarraga <ekaitz@elenq.tech>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
-;;; Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com>
+;;; Copyright © 2020, 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -50,6 +50,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system ant)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system emacs)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
   #:use-module (guix build-system qt)
@@ -2513,6 +2514,26 @@ full programmatic control over your models.")
     (home-page "https://www.openscad.org/")
     (license license:gpl2+)))
 
+(define-public emacs-scad-mode
+  (package
+    (inherit openscad)
+    (name "emacs-scad-mode")
+    (native-inputs '())
+    (inputs '())
+    (build-system emacs-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir-elisp
+           ;; Elisp directory is not in root of the source.
+           (lambda _
+             (chdir "contrib")
+             #t)))))
+    (synopsis "Emacs major mode for editing editing OpenSCAD code")
+    (description "@code{scad-mode} provides an Emacs major mode for editing
+OpenSCAD code.  It supports syntax highlighting, indenting and refilling of
+comments.")))
+
 (define-public freecad
   (let ((commit-ref "7616153b3c31ace006169cdc2fdafab484498858")
         (revision "1"))
diff --git a/gnu/packages/fcitx.scm b/gnu/packages/fcitx.scm
index d52edf1750..93cea7a24d 100644
--- a/gnu/packages/fcitx.scm
+++ b/gnu/packages/fcitx.scm
@@ -19,11 +19,13 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages fcitx)
-  #:use-module ((guix licenses) #:select (gpl2+))
+  #:use-module ((guix licenses) #:select (gpl2+ bsd-3))
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system glib-or-gtk)
+  #:use-module (guix build-system qt)
   #:use-module (gnu packages check)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages enchant)
@@ -33,14 +35,69 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages iso-codes)
+  #:use-module (gnu packages kde-frameworks)
   #:use-module (gnu packages man)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages qt)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
-  #:use-module (gnu packages xorg))
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages xdisorg))
+
+(define-public fcitx-qt5
+  (package
+    (name "fcitx-qt5")
+    (version "1.2.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/fcitx/fcitx-qt5.git")
+         (commit version)))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32 "1d56bp11jp85b2r4syw1clfg4vqxqfh7gygpwz8wk5sxmfmmdq83"))))
+    (build-system qt-build-system)
+    (arguments
+     `(#:tests? #f                      ; No target
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-install-dir
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "quickphrase-editor/CMakeLists.txt"
+               (("\\$\\{FCITX4_ADDON_INSTALL_DIR\\}")
+                (string-append
+                 (assoc-ref outputs "out")
+                 "/lib/fcitx")))
+             (substitute* "platforminputcontext/CMakeLists.txt"
+               (("\\$\\{CMAKE_INSTALL_QTPLUGINDIR\\}")
+                (string-append
+                 (assoc-ref outputs "out")
+                 "/lib/qt5/plugins")))
+             #t)))))
+    (native-inputs
+     `(("extra-cmake-modules" ,extra-cmake-modules)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("fcitx" ,fcitx)
+       ("libintl" ,intltool)
+       ("libxkbcommon" ,libxkbcommon)))
+    (propagated-inputs
+     `(("qtbase" ,qtbase)))
+    (synopsis "Fcitx Qt5 Input Context")
+    (description "This package provides a Qt5 frontend for fcitx.")
+    (home-page "https://github.com/fcitx/fcitx-qt5/")
+    (license
+     (list
+      ;; Plugin
+      bsd-3
+      ;; Others
+      gpl2+))))
 
 (define-public presage
   (package
diff --git a/gnu/packages/fcitx5.scm b/gnu/packages/fcitx5.scm
index ed0d928fc7..79d5799774 100644
--- a/gnu/packages/fcitx5.scm
+++ b/gnu/packages/fcitx5.scm
@@ -51,7 +51,7 @@
 (define-public xcb-imdkit
   (package
     (name "xcb-imdkit")
-    (version "1.0.1")
+    (version "1.0.2")
     (source
      (origin
        (method url-fetch)
@@ -59,7 +59,7 @@
              "https://download.fcitx-im.org/fcitx5/xcb-imdkit/xcb-imdkit-"
              version ".tar.xz"))
        (sha256
-        (base32 "1qgbbp8y8ci7haz99vgbrgpjsbrwwyjianyhdvxcirnbm5bybvmz"))
+        (base32 "16f7jdnrr8lrll7qvnj0gh3gwzgn5idfsc9rwi1gp1n2mnjrs7w0"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -86,7 +86,7 @@ client.")
 (define-public fcitx5
   (package
     (name "fcitx5")
-    (version "5.0.3")
+    (version "5.0.4")
     (source
      (origin
        (method url-fetch)
@@ -94,7 +94,7 @@ client.")
              "https://download.fcitx-im.org/fcitx5/fcitx5/fcitx5-"
              version "_dict.tar.xz"))
        (sha256
-        (base32 "06zkb33m2rnhg385iy79n3r4svz5jbav74di61xqa3lhbv7534s3"))))
+        (base32 "14pqbjbdc3b5xlycm92gs1rgkmpykfnyls3gfr608902lk2lw5as"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
@@ -146,7 +146,7 @@ client.")
 (define-public fcitx5-lua
   (package
     (name "fcitx5-lua")
-    (version "5.0.1")
+    (version "5.0.2")
     (source
      (origin
        (method url-fetch)
@@ -154,7 +154,7 @@ client.")
              "https://download.fcitx-im.org/fcitx5/fcitx5-lua/fcitx5-lua-"
              version ".tar.xz"))
        (sha256
-        (base32 "177mj56j8yrl79hvk7bbrifvm137np23pwalv83ibgk4l51z92hf"))))
+        (base32 "0y5yc9102bz681f4wj6xqjxmfdmrshz3fhf39pa61718hkyy9lih"))))
     (build-system cmake-build-system)
     (inputs
      `(("fcitx5" ,fcitx5)
@@ -171,14 +171,14 @@ client.")
 (define-public libime
   (package
     (name "libime")
-    (version "1.0.2")
+    (version "1.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.fcitx-im.org/fcitx5/libime/libime-"
                            version "_dict.tar.xz"))
        (sha256
-        (base32 "006pncby7p6h3rnicckzjwi6jzsrqiqbj6p9bpic80lanlllgw31"))))
+        (base32 "1gi9ylqha9x3dhjsa2i7x9wh2g9vgqkkfr6s1facs2ky65vgvdrv"))))
     (build-system cmake-build-system)
     (inputs
      `(("fcitx5" ,fcitx5)
@@ -196,7 +196,7 @@ editors.")
 (define-public fcitx5-gtk
   (package
     (name "fcitx5-gtk")
-    (version "5.0.1")
+    (version "5.0.3")
     (source
      (origin
        (method url-fetch)
@@ -204,7 +204,7 @@ editors.")
                            "/fcitx5-gtk/fcitx5-gtk-"
                            version ".tar.xz"))
        (sha256
-        (base32 "0h53liraqc5nz4nyi3ixdfdw3zzkdcsiff7j25acc3gmaa5gyij7"))))
+        (base32 "18bwwj9a5v82c6ssc8560hd8vwykakvg6sfijwdb5jswk9mafvgj"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ;No test
@@ -212,7 +212,9 @@ editors.")
        (list (string-append "-DGOBJECT_INTROSPECTION_GIRDIR="
                             %output "/share/gir-1.0")
              (string-append "-DGOBJECT_INTROSPECTION_TYPELIBDIR="
-                            %output "/lib/girepository-1.0"))
+                            %output "/lib/girepository-1.0")
+             ;; TODO: Enable it when Guix has GTK4.
+             "-DENABLE_GTK4_IM_MODULE=Off")
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'patch-install-prefix
@@ -247,7 +249,7 @@ for GTK+2/GTK+3 application.")
 (define-public fcitx5-qt
   (package
     (name "fcitx5-qt")
-    (version "5.0.1")
+    (version "5.0.2")
     (source
      (origin
        (method url-fetch)
@@ -255,7 +257,7 @@ for GTK+2/GTK+3 application.")
                            "/fcitx5-qt/fcitx5-qt-"
                            version ".tar.xz"))
        (sha256
-        (base32 "0ilhb4yw9k3m1c4fidnv3nd5dgm9xxds11dgdys6gswjjnmcgqqm"))))
+        (base32 "15rn111mrp6lcgm0ka3vb6a6qwkv6kqkqn563wsm49n16iy1dhqj"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
@@ -282,7 +284,7 @@ for Qt based application.")
 (define-public fcitx5-chinese-addons
   (package
     (name "fcitx5-chinese-addons")
-    (version "5.0.2")
+    (version "5.0.3")
     (source
      (origin
        (method url-fetch)
@@ -290,7 +292,7 @@ for Qt based application.")
                            "/fcitx5-chinese-addons/fcitx5-chinese-addons-"
                            version "_dict.tar.xz"))
        (sha256
-        (base32 "0mf91gzwzhfci0jn6g3l516xjw8r4v40ginnbl70h1zx6vr24rfp"))))
+        (base32 "1kmzbllk0g86m2z3piwn9j84ihxixyxzv7rzj832xfvwqgk7gixk"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
@@ -342,42 +344,42 @@ including input methods previous bundled inside Fcitx 4:
 
 (define-public fcitx5-configtool
   (package
-   (name "fcitx5-configtool")
-   (version "5.0.1")
-   (source
-    (origin
-     (method url-fetch)
-     (uri (string-append
-           "https://download.fcitx-im.org/fcitx5"
-           "/fcitx5-configtool/fcitx5-configtool-" version ".tar.xz"))
-     (sha256
-      (base32 "0mrqhzvab41hkvhkz7vkb8d2mv5bgx4aqp9jpz4kf3kskwm1q14b"))))
-   (build-system cmake-build-system)
-   (arguments
-    `(#:configure-flags
-      ;; KDE is currently not working on Guix, KCM supports doesn't make sense.
-      '("-DENABLE_KCM=Off")))
-   (inputs
-    `(("fcitx5" ,fcitx5)
-      ("fcitx5-qt" ,fcitx5-qt)
-      ("qtbase" ,qtbase)
-      ("qtx11extras" ,qtx11extras)
-      ("kitemviews" ,kitemviews)
-      ("kwidgetsaddons" ,kwidgetsaddons)
-      ("libx11" ,libx11)
-      ("xkeyboard-config" ,xkeyboard-config)
-      ("libxkbfile" ,libxkbfile)
-      ("gettext" ,gettext-minimal)
-      ("iso-codes" ,iso-codes)))
-   (native-inputs
-    `(("gcc" ,gcc-9)
-      ("extra-cmake-modules" ,extra-cmake-modules)
-      ("pkg-config" ,pkg-config)))
-   (home-page "https://github.com/fcitx/fcitx5-configtool")
-   (synopsis "Graphical configuration tool for Fcitx 5")
-   (description "Fcitx5-configtool is a graphical configuration tool
+    (name "fcitx5-configtool")
+    (version "5.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://download.fcitx-im.org/fcitx5"
+             "/fcitx5-configtool/fcitx5-configtool-" version ".tar.xz"))
+       (sha256
+        (base32 "0rpk3yn572pcr29jak63x84g0qgj8hj011aw8gmxjah9311nxhpb"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       ;; KDE is currently not working on Guix, KCM supports doesn't make sense.
+       '("-DENABLE_KCM=Off")))
+    (inputs
+     `(("fcitx5" ,fcitx5)
+       ("fcitx5-qt" ,fcitx5-qt)
+       ("qtbase" ,qtbase)
+       ("qtx11extras" ,qtx11extras)
+       ("kitemviews" ,kitemviews)
+       ("kwidgetsaddons" ,kwidgetsaddons)
+       ("libx11" ,libx11)
+       ("xkeyboard-config" ,xkeyboard-config)
+       ("libxkbfile" ,libxkbfile)
+       ("gettext" ,gettext-minimal)
+       ("iso-codes" ,iso-codes)))
+    (native-inputs
+     `(("gcc" ,gcc-9)
+       ("extra-cmake-modules" ,extra-cmake-modules)
+       ("pkg-config" ,pkg-config)))
+    (home-page "https://github.com/fcitx/fcitx5-configtool")
+    (synopsis "Graphical configuration tool for Fcitx 5")
+    (description "Fcitx5-configtool is a graphical configuration tool
 to manage different input methods in Fcitx 5.")
-   (license license:gpl2+)))
+    (license license:gpl2+)))
 
 (define-public fcitx5-material-color-theme
   (package
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index 8ead37beb3..1798ad82bc 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -92,6 +92,7 @@
   #:use-module (gnu packages popt)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
diff --git a/gnu/packages/fpga.scm b/gnu/packages/fpga.scm
index 96ba0026f9..bee87d9311 100644
--- a/gnu/packages/fpga.scm
+++ b/gnu/packages/fpga.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Amin Bandali <bandali@gnu.org>
 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021 Andrew Miloradovsky <andrew@interpretmath.pw>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -467,3 +468,89 @@ a hardware description and verification language. ")
     (description "This package provides a VHDL compiler and simulator.")
     (home-page "https://github.com/nickg/nvc")
     (license license:gpl3+)))
+
+(define-public systemc
+  (package
+    (name "systemc")
+    (version "2.3.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://accellera.org/images/downloads/standards/"
+             "systemc/systemc-" version ".tar.gz"))
+       (sha256
+        (base32 "0gvv3xmhiwx1izmzy06yslzqzh6ygrgmw53xqfmyvbz5a6ivk0ap"))))
+    (native-inputs `(("perl" ,perl)))
+    (build-system gnu-build-system)
+    (arguments '(#:configure-flags '("--enable-debug")))
+    (home-page "https://accellera.org/community/systemc")
+    (synopsis "Library for event-driven simulation")
+    (description
+     "SystemC is a C++ library for modeling concurrent systems, and the
+reference implementation of IEEE 1666-2011.  It provides a notion of timing as
+well as an event-driven simulations environment.  Due to its concurrent and
+sequential nature, SystemC allows the description and integration of complex
+hardware and software components.  To some extent, SystemC can be seen as
+a Hardware Description Language.  However, unlike VHDL or Verilog, SystemC
+provides sophisticated mechanisms that offer high abstraction levels on
+components interfaces.  This, in turn, facilitates the integration of systems
+using different abstraction levels.")
+    ;; homepages.cae.wisc.edu/~ece734/SystemC/Esperan_SystemC_tutorial.pdf
+    (license license:asl2.0)))
+
+(define-public verilator
+  (package
+    (name "verilator")
+    (version "4.108")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/verilator/verilator")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0kcs0p8i2hiw348xqqh49pmllqspbzh2ljwmia03b42md5h4x5vf"))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("bison" ,bison)
+       ("flex" ,flex)
+       ("gettext" ,gettext-minimal)
+       ("python" ,python)))
+    (inputs
+     `(("perl" ,perl)
+       ("systemc" ,systemc)))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags
+       (list (string-append "LDFLAGS=-L"
+                            (assoc-ref %build-inputs "systemc")
+                            "/lib-linux64"))
+       #:make-flags
+       (list (string-append "LDFLAGS=-L"
+                            (assoc-ref %build-inputs "systemc")
+                            "/lib-linux64"))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'bootstrap
+           (lambda _ (invoke "autoconf"))))
+       #:test-target "test"))
+    ;; #error "Something failed during ./configure as config_build.h is incomplete.
+    ;; Perhaps you used autoreconf, don't." -- so we won't. ^^
+    (home-page "https://www.veripool.org/projects/verilator/")
+    (synopsis "Fast Verilog/SystemVerilog simulator")
+    (description
+     "Verilator is invoked with parameters similar to GCC or Synopsys’s VCS.
+It ``Verilates'' the specified Verilog or SystemVerilog code by reading it,
+performing lint checks, and optionally inserting assertion checks and
+coverage-analysis points.  It outputs single- or multi-threaded @file{.cpp}
+and @file{.h} files, the ``Verilated'' code.
+
+The user writes a little C++/SystemC wrapper file, which instantiates the
+Verilated model of the user’s top level module.  These C++/SystemC files are
+then compiled by a C++ compiler (GCC/Clang/etc.).  The resulting executable
+performs the design simulation.  Verilator also supports linking its generated
+libraries, optionally encrypted, into other simulators.")
+    (license license:lgpl3)))
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index a5455a0b6f..56e53a73e2 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -1480,7 +1480,7 @@ wish to perform colour calibration.")
 (define-public libfprint
   (package
     (name "libfprint")
-    (version "1.90.6")
+    (version "1.90.7")
     (source
      (origin
        (method git-fetch)
@@ -1489,7 +1489,7 @@ wish to perform colour calibration.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0hagm1i78mrd772y3cinr7bda4myx0v4bixwqnqbxknds8m9h8sg"))))
+        (base32 "00pmdpxxjj4sh8qjq9ch3pylgg9w019rg1bbaw53a4wr637rrz43"))))
     (build-system meson-build-system)
     (arguments
      '(#:configure-flags
@@ -2021,14 +2021,15 @@ useful with system integration.")
        ("xvfb" ,xorg-server-for-tests)))
     (inputs
      `(("dbus-glib" ,dbus-glib)
-       ("gtk+" ,gtk+)
-       ("libdbusmenu" ,libdbusmenu)
        ("libindicator" ,libindicator)
        ("python@2" ,python-2)
        ("python2-pygtk" ,python2-pygtk)
        ("python2-pygobject-2" ,python2-pygobject-2)
        ;; ("mono" ,mono) ; requires non-packaged gapi
        ("vala" ,vala)))
+    (propagated-inputs
+     `(("gtk+" ,gtk+)
+       ("libdbusmenu" ,libdbusmenu)))
     (arguments
      ;; FIXME: do not hardcode gtk version
      `(#:configure-flags '("--with-gtk=3")
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index fa7875d077..7080db423b 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -490,7 +490,7 @@ clone.")
 (define-public tsukundere
   (package
     (name "tsukundere")
-    (version "0.2.0")
+    (version "0.2.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -499,21 +499,47 @@ clone.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0qmqch8hh7vsa8qaz853vwbkz0krb106955dnz8dsl7skbm5jpn6"))))
+                "05ckds2df810441wfavllx9lsw5jsc9h3nb7m31df01nsj56azdw"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:modules (((guix build guile-build-system)
+                   #:select (target-guile-effective-version))
+                  ,@%gnu-build-system-modules)
+       #:imported-modules ((guix build guile-build-system)
+                           ,@%gnu-build-system-modules)
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-command
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (version (target-guile-effective-version))
+                    (scm (string-append out "/share/guile/site/"
+                                        version))
+                    (go (string-append out "/lib/guile/"
+                                       version "/site-ccache")))
+
+               (substitute* "bin/tsukundere"
+                 (("exec guile .*" all)
+                  (string-append
+                   (format #f "export GUILE_LOAD_PATH=~@?~%"
+                           "\"~a:~a\"" scm (getenv "GUILE_LOAD_PATH"))
+                   (format #f "export GUILE_LOAD_COMPILED_PATH=~@?~%"
+                           "\"~a:~a\"" go (getenv "GUILE_LOAD_COMPILED_PATH"))
+                   all)))
+               #t))))))
     (native-inputs
      `(("autoconf" ,autoconf-wrapper)
        ("automake" ,automake)
        ("guile" ,guile-3.0)
-       ("pkg-config" ,pkg-config)))
+       ("pkg-config" ,pkg-config)
+       ("texinfo" ,texinfo)))
     (propagated-inputs
      `(("guile-sdl2" ,guile3.0-sdl2)))
     (home-page "https://gitlab.com/leoprikler/tsukundere")
     (synopsis "Visual novel engine")
     (description "Tsukundere is a game engine geared heavily towards the
 development of visual novels, written on top of Guile-SDL2.  It is still
-experimental and at the time of writing contains little more than the Guile
-modules, that make up its runtime.")
+experimental.")
     (license license:lgpl3+)))
 
 (define-public sfml
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index be7a3cc181..e3e18bf09e 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -6104,11 +6104,13 @@ small robot living in the nano world, repair its maker.")
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/teeworlds/teeworlds")
-                    (commit version)))
+                    (commit version)
+                    ;; There are two submodules in datasrc/{languages,maps}
+                    (recursive? #t)))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "169dl83q08zl4h813az8hjs4rs3dms9yjn6bnsld4fjcj0imvvc6"))
+                "1l19ksmimg6b8zzjy0skyhh7z11ql7n5gvilkv7ay5x2b9ndbqwz"))
               (modules '((guix build utils)
                          (ice-9 ftw)
                          (ice-9 regex)
@@ -6121,15 +6123,12 @@ small robot living in the nano world, repair its maker.")
                             (remove (cut string-match "(^.)|(^md5$)" <>)
                                     (scandir base-dir)))
                   #t))))
-    (build-system gnu-build-system)
+    (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ; no tests included
-       #:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (srfi srfi-26))
        #:phases
        (modify-phases %standard-phases
-         (replace 'configure
+         (add-after 'unpack 'patch-paths
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Embed path to assets.
              (substitute* "src/engine/shared/storage.cpp"
@@ -6138,51 +6137,7 @@ small robot living in the nano world, repair its maker.")
                                (assoc-ref outputs "out")
                                "/share/teeworlds/data"
                                "\"")))
-
-             ;; Bam expects all files to have a recent time stamp.
-             (for-each (cut utime <> 1 1)
-                       (find-files "."))
-
-             ;; Do not use bundled libraries.
-             (substitute* "bam.lua"
-               (("local json = Compile.+$")
-                "local json = nil
-settings.link.libs:Add(\"jsonparser\")")
-               (("local png = Compile.+$")
-                "local png = nil
-settings.link.libs:Add(\"pnglite\")")
-               (("local wavpack = Compile.+$")
-                "local wavpack = nil
-settings.link.libs:Add(\"wavpack\")")
-               (("if config\\.zlib\\.value == 1")
-                "if config.zlib.value"))
-             (substitute* "src/engine/client/graphics_threaded.cpp"
-               (("engine/external/pnglite/pnglite\\.h")
-                "pnglite.h"))
-             (substitute* "src/engine/client/sound.cpp"
-               (("engine/external/wavpack/wavpack\\.h")
-                "wavpack/wavpack.h"))
-             #t))
-         (replace 'build
-           (lambda _
-             (invoke "bam" "-a" "-v" "conf=release")))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((arch ,(system->linux-architecture
-                            (or (%current-target-system)
-                                (%current-system))))
-                    (build (string-append "build/" (if (string=? arch "i386")
-                                                       "x86" arch)
-                                          "/release/"))
-                    (data-built (string-append build "data/"))
-                    (out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin/"))
-                    (data (string-append out "/share/teeworlds/data/")))
-               (for-each (cut install-file <> bin)
-                         (map (cut string-append build <>)
-                              '("teeworlds" "teeworlds_srv")))
-               (copy-recursively data-built data)
-               #t))))))
+             #t)))))
     (inputs
      `(("freetype" ,freetype)
        ("glu" ,glu)
@@ -6193,17 +6148,17 @@ settings.link.libs:Add(\"wavpack\")")
        ("sdl2-image" ,sdl2-image)
        ("sdl2-mixer" ,sdl2-mixer)
        ("wavpack" ,wavpack)
+       ("openssl" ,openssl)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("bam" ,bam)
-       ("python" ,python-wrapper)
+     `(("python" ,python-wrapper)
        ("pkg-config" ,pkg-config)))
     (home-page "https://www.teeworlds.com")
     (synopsis "2D retro multiplayer shooter game")
     (description "Teeworlds is an online multiplayer game.  Battle with up to
 16 players in a variety of game modes, including Team Deathmatch and Capture
 The Flag.  You can even design your own maps!")
-    (license license:bsd-3)))
+    (license (list license:bsd-3 license:cc-by-sa3.0)))) ; game+maps&languages
 
 (define-public enigma
   (package
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index c682613ff1..6b0b4a8007 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2020 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1693,6 +1694,32 @@ input file (in @code{.osm} or @code{.osm.pbf} format).")
                    license:lgpl2.1+
                    license:mpl1.1))))
 
+(define-public shapelib
+  (package
+    (name "shapelib")
+    (version "1.5.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/OSGeo/shapelib")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1lzch0jf6yqhw391phhafzw4ghmiz98zkf698h4fmq109fa2vhqd"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)))
+    (home-page "http://shapelib.maptools.org/")
+    (synopsis "Provides C library to write and update ESRI Shapefiles")
+    (description
+     "The Shapefile C Library provides the ability to write simple C programs
+for reading, writing and updating (to a limited extent) ESRI Shapefiles, and the
+associated attribute file (@file{.dbf}).")
+    (license license:gpl2+)))
+
 (define-public spatialite-tools
   (package
     (name "spatialite-tools")
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index fd7a82da69..18ceb6def4 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -6450,7 +6450,7 @@ DAV, and others.")
 (define-public gusb
   (package
     (name "gusb")
-    (version "0.3.0")
+    (version "0.3.5")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -6459,7 +6459,7 @@ DAV, and others.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "002pg0p4qzzk5dkyiynm483ir26zxrn4k71c7f6j85mfsdzbgli7"))))
+                "0ifhdqhpyxwsg0z9s1anj7cf5pya5qsqyp5ksh9n7mqwa4lrjkl8"))))
     (build-system meson-build-system)
     (native-inputs
      `(("gobject-introspection" ,gobject-introspection)
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index a2da166bb4..83dd1d1578 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2015, 2018 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014, 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014, 2015, 2016, 2020 Mark H Weaver <mhw@netris.org>
@@ -434,19 +434,20 @@ gpgpme starting with version 1.7.")
               (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
-     ;; When cross-compiling, the bash script libgcrypt-config provided by
-     ;; libgcrypt must be accessible during configure phase.
-     `(,@(if (%current-target-system)
-             '(#:phases
-               (modify-phases %standard-phases
-                 (add-before 'configure 'add-libgrypt-config
-                   (lambda _
-                     (setenv "PATH" (string-append
-                                     (assoc-ref %build-inputs "libgcrypt")
-                                     "/bin:"
-                                     (getenv "PATH")))
-                     #t))))
-             '())))
+     ;; Work around <https://bugs.gnu.org/20272> to achieve reproducible
+     ;; builds.
+     '(#:parallel-build? #f
+
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'add-libgrypt-config
+           (lambda* (#:key inputs target #:allow-other-keys)
+             (when target
+               ;; When cross-compiling, the bash script 'libgcrypt-config'
+               ;; must be accessible during the configure phase.
+               (setenv "PATH"
+                       (string-append (assoc-ref inputs "libgcrypt")
+                                      "/bin:" (getenv "PATH")))))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("autoconf" ,autoconf)
@@ -784,14 +785,14 @@ including tools for signing keys, keyring analysis, and party preparation.
 (define-public pinentry-tty
   (package
     (name "pinentry-tty")
-    (version "1.1.0")
+    (version "1.1.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnupg/pinentry/pinentry-"
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "0w35ypl960pczg5kp6km3dyr000m1hf0vpwwlh72jjkjza36c1v8"))))
+                "0zx5vg6wws2sp2yxwi01b8i1pnsqkydncpj7x0p8xl9y05ja04nd"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--enable-pinentry-tty")))
@@ -869,10 +870,6 @@ passphrase when @code{gpg} is run and needs it.")))
   (package
     (inherit pinentry-tty)
     (name "pinentry-efl")
-    (source
-      (origin
-        (inherit (package-source pinentry-tty))
-        (patches (search-patches "pinentry-efl.patch"))))
     (arguments
      '(#:configure-flags '("--enable-pinentry-efl"
                            "--enable-fallback-curses")
@@ -890,14 +887,14 @@ passphrase when @code{gpg} is run and needs it.")))
      `(("efl" ,efl)
        ,@(package-inputs pinentry-tty)))
     (description
-   "Pinentry provides a console and a graphical interface for the
-@dfn{Enlightenment Foundation Libraries} (EFL) that allows users to enter a
+   "Pinentry provides a console and a graphical interface for @acronym{EFL,
+the Enlightenment Foundation Libraries} that allows users to enter a
 passphrase when @code{gpg} is run and needs it.")))
 
 (define-public pinentry-rofi
   (package
     (name "pinentry-rofi")
-    (version "2.0.1")
+    (version "2.0.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -905,7 +902,7 @@ passphrase when @code{gpg} is run and needs it.")))
                     (commit version)))
               (file-name (git-file-name name version))
               (sha256
-               (base32 "044bnldz7k74s873jwsjgff176l1jsvpbaka7d1wcj8b5pwqv2av"))))
+               (base32 "0kjzvgni9srl8h5c52pqrvgdxs6avv0nhgk19apd97sx10qdwdhk"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules
@@ -917,41 +914,22 @@ passphrase when @code{gpg} is run and needs it.")))
            %standard-phases
          (add-after 'install 'hall-wrap-binaries
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((compiled-dir
-                     (lambda (out version)
-                       (string-append out "/lib/guile/" version "/site-ccache")))
-                    (uncompiled-dir
-                     (lambda (out version)
-                       (string-append
-                        out
-                        "/share/guile/site"
-                        (if (string-null? version) "" "/")
-                        version)))
-                    (dep-path
-                     (lambda (env path)
-                       (list env ":" 'prefix (list path))))
-                    (out (assoc-ref outputs "out"))
+             (let* ((out (assoc-ref outputs "out"))
                     (bin (string-append out "/bin/"))
-                    (site (uncompiled-dir out "")))
+                    (site (string-append out "/share/guile/site"))
+                    (rofi-bin (string-append (assoc-ref inputs "rofi") "/bin")))
                (match (scandir site)
                  (("." ".." version)
-                  (for-each
-                   (lambda (file)
-                     (wrap-program
-                         (string-append bin file)
-                       (dep-path
-                        "PATH"
-                        (string-append (assoc-ref inputs "rofi") "/bin"))
-                       (dep-path
-                        "GUILE_LOAD_PATH"
-                        (uncompiled-dir out version))
-                       (dep-path
-                        "GUILE_LOAD_COMPILED_PATH"
-                        (compiled-dir out version))))
-                   ,''("pinentry-rofi"))
-                  #t))))))))
+                  (wrap-program
+                      (string-append bin "pinentry-rofi")
+                    (list "PATH" ":" 'prefix `(,rofi-bin)))
+                  #t)))))
+         (add-after 'compress-documentation 'installcheck
+           (lambda* rest
+             (invoke "make" "installcheck"))))))
     (native-inputs
      `(("autoconf" ,autoconf)
+       ("autoconf-archive" ,autoconf-archive)
        ("automake" ,automake)
        ("pkg-config" ,pkg-config)
        ("texinfo" ,texinfo)))
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 85b27dd503..84ec0a7fb3 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -694,8 +694,8 @@ from forcing GEXP-PROMISE."
                       #:system system
                       #:guile-for-build guile)))
 
-(define %icecat-version "78.6.1-guix0-preview1")
-(define %icecat-build-id "20210107000000") ;must be of the form YYYYMMDDhhmmss
+(define %icecat-version "78.7.0-guix0-preview1")
+(define %icecat-build-id "20210126000000") ;must be of the form YYYYMMDDhhmmss
 
 ;; 'icecat-source' is a "computed" origin that generates an IceCat tarball
 ;; from the corresponding upstream Firefox ESR tarball, using the 'makeicecat'
@@ -717,11 +717,11 @@ from forcing GEXP-PROMISE."
                   "firefox-" upstream-firefox-version ".source.tar.xz"))
             (sha256
              (base32
-              "1kp75838a38x4h0w98qn01g9asn7jlgm64bz7n70353bnr6bf1qd"))))
+              "0hqnc98k4irq0lsp154binrl0c6kxy6xmab3ss9jwx6d53dl380s"))))
 
-         (upstream-icecat-base-version "78.6.1") ; maybe older than base-version
+         (upstream-icecat-base-version "78.7.0") ; maybe older than base-version
          ;;(gnuzilla-commit (string-append "v" upstream-icecat-base-version))
-         (gnuzilla-commit "10ca84bd9d255caeed506ef36bd3dbe2ad6375ab")
+         (gnuzilla-commit "abfe5eebaca3c2787f1a9505669393674493c177")
          (gnuzilla-source
           (origin
             (method git-fetch)
@@ -733,7 +733,7 @@ from forcing GEXP-PROMISE."
                                       (string-take gnuzilla-commit 8)))
             (sha256
              (base32
-              "07i3pfbzprnmzrilsh13jjrrk0jixpb9nrrqxzzdvzr2gz06vw29"))))
+              "00ws3540x5whpicc5fx4k949ff73cqvajz6jp13ahn49wqdads47"))))
 
          ;; 'search-patch' returns either a valid file name or #f, so wrap it
          ;; in 'assume-valid-file-name' to avoid 'local-file' warnings.
@@ -1305,11 +1305,11 @@ standards of the IceCat project.")
        (cpe-version . ,(first (string-split version #\-)))))))
 
 ;; Update this together with icecat!
-(define %icedove-build-id "20210111000000") ;must be of the form YYYYMMDDhhmmss
+(define %icedove-build-id "20210126000000") ;must be of the form YYYYMMDDhhmmss
 (define-public icedove
   (package
     (name "icedove")
-    (version "78.6.1")
+    (version "78.7.0")
     (source icecat-source)
     (properties
      `((cpe-name . "thunderbird_esr")))
@@ -1589,7 +1589,7 @@ standards of the IceCat project.")
         ;; in the Thunderbird release tarball.  We don't use the release
         ;; tarball because it duplicates the Icecat sources and only adds the
         ;; "comm" directory, which is provided by this repository.
-        ,(let ((changeset "f99e82f3f3cae6af48006c39fceb3beeabccd6f6"))
+        ,(let ((changeset "d4c4077a3ef9b3221984f2d0b42f1d96c35776e8"))
            (origin
              (method hg-fetch)
              (uri (hg-reference
@@ -1598,7 +1598,7 @@ standards of the IceCat project.")
              (file-name (string-append "thunderbird-" version "-checkout"))
              (sha256
               (base32
-               "0mrar1qsvvlcggzz54nxi70jzk19mq42585905kb5n90ikr9q2q7")))))
+               "0yabs4zlwb5jvlyk45lbw1nzfmra1f8bbwvwcwxjs1a8wcmrmb39")))))
        ("autoconf" ,autoconf-2.13)
        ("cargo" ,rust-1.41 "cargo")
        ("clang" ,clang)
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 411d89fcc2..7cb4aecec2 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -19,7 +19,7 @@
 ;;; Copyright © 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
-;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Gabriel Arazas <foo.dogsquared@gmail.com>
@@ -84,6 +84,7 @@
   #:use-module (gnu packages photo)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages plotutils)
+  #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages pth)
   #:use-module (gnu packages pulseaudio)  ; libsndfile, libsamplerate
   #:use-module (gnu packages python)
@@ -538,6 +539,7 @@ applications.")
        ("freetype" ,freetype)
        ("glew" ,glew)
        ("openal" ,openal)
+       ("pugixml" ,pugixml)
        ("python" ,python)
        ("python-numpy" ,python-numpy)
        ("tbb" ,tbb)
@@ -635,6 +637,7 @@ application can be customized via its API for Python scripting.")
        ("freetype" ,freetype)
        ("glew" ,glew)
        ("openal" ,openal)
+       ("pugixml" ,pugixml)
        ("python" ,python)
        ("zlib" ,zlib)))
     (home-page "https://blender.org/")
@@ -1088,7 +1091,7 @@ storage of the \"EXR\" file format for storing 16-bit floating-point images.")
 (define-public openimageio
   (package
     (name "openimageio")
-    (version "2.0.13")
+    (version "2.2.10.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1097,23 +1100,26 @@ storage of the \"EXR\" file format for storing 16-bit floating-point images.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0czcls82v71wkw1syib16ncg7463hx0py0xclycsiv4w6i3wlkzz"))))
+                "0wzh5n527l7ia1754cf9xmbvv4ya6hj34dy6cbq9xk9372h8gd9q"))))
     (build-system cmake-build-system)
     ;; FIXME: To run all tests successfully, test image sets from multiple
     ;; third party sources have to be present.  For details see
-    ;; https://github.com/OpenImageIO/oiio/blob/master/INSTALL
+    ;; <https://github.com/OpenImageIO/oiio/blob/master/INSTALL.md>
     (arguments
-     `(#:tests? #f))
+     `(#:tests? #f
+       #:configure-flags (list "-DUSE_EXTERNAL_PUGIXML=1")))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
      `(("boost" ,boost)
+       ("fmt" ,fmt)
        ("libpng" ,libpng)
        ("libjpeg" ,libjpeg-turbo)
        ("libtiff" ,libtiff)
        ("giflib" ,giflib)
        ("openexr" ,openexr)
        ("ilmbase" ,ilmbase)
+       ("pugixml" ,pugixml)
        ("python" ,python-wrapper)
        ("pybind11" ,pybind11)
        ("robin-map" ,robin-map)
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index c2d853f006..c6f25bbdfb 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2016 Alex Sassmannshausen <alex@pompo.co>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Erik Edrosa <erik.edrosa@gmail.com>
-;;; Copyright © 2016, 2019, 2020 Eraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2019, 2020, 2021 Eraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016, 2017 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>
 ;;; Copyright © 2016 Amirouche <amirouche@hypermove.net>
@@ -33,6 +33,7 @@
 ;;; Copyright © 2020 Mike Rosset <mike.rosset@gmail.com>
 ;;; Copyright © 2020 Leo Prikler <leo.prikler@student.tugraz.at>
 ;;; Copyright © 2020 pukkamustard <pukkamustard@posteo.net>
+;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -2430,7 +2431,7 @@ interface for reading articles in any format.")
 (define-public guile-redis
   (package
     (name "guile-redis")
-    (version "1.3.0")
+    (version "2.0.0")
     (home-page "https://github.com/aconchillo/guile-redis")
     (source (origin
               (method git-fetch)
@@ -2440,8 +2441,10 @@ interface for reading articles in any format.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "14izs8daxh7pb7vwpxi5g427qa31137jkaxrb1cy5rpjkwchy723"))))
+                "1zk2x37lw6ygf7rwy71svnsian8lj51axpxmm66ah7dazn69swlm"))))
     (build-system gnu-build-system)
+    (arguments
+     '(#:make-flags '("GUILE_AUTO_COMPILE=0")))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -2464,6 +2467,18 @@ key-value cache and store.")
   (package
     (inherit guile-redis)
     (name "guile2.0-redis")
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-source
+           (lambda _
+             ;; put-string is in (rnrs io ports) in guile2.0,
+             ;; not in (ice-9 textual-ports)
+             (substitute* "redis/utils.scm"
+               (("\\(ice-9 textual-ports\\)")
+                "(rnrs io ports)"))
+             #t)))
+       ,@(package-arguments guile-redis)))
     (native-inputs `(("guile" ,guile-2.0)
                      ,@(alist-delete "guile"
                                      (package-native-inputs guile-redis))))))
diff --git a/gnu/packages/hardware.scm b/gnu/packages/hardware.scm
index 3da6759472..10672f52f3 100644
--- a/gnu/packages/hardware.scm
+++ b/gnu/packages/hardware.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 Evgeny Pisemsky <evgeny@pisemsky.com>
+;;; Copyright © 2021 Léo Le Bouter <lle-bout@zaclys.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,17 +28,23 @@
   #:use-module (gnu packages check)
   #:use-module (gnu packages cpp)
   #:use-module (gnu packages crypto)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages gcc)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages openldap)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages polkit)
   #:use-module (gnu packages protobuf)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages web)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -130,6 +137,45 @@ calibrated, and restored when the calibration is applied.")
 human-readable format and checks if it conforms to the standards.")
       (license license:expat))))
 
+(define-public libsmbios
+  (package
+    (name "libsmbios")
+    (version "2.4.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url (string-append "https://github.com/dell/" name))
+         (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0krwwydyvb9224r884y1mlmzyxhlfrcqw73vi1j8787rl0gl5a2i"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("gettext" ,gettext-minimal)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)
+       ("perl" ,perl)
+       ("python" ,python)))
+    (inputs
+     `(("libxml2" ,libxml2)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'bootstrap
+           (lambda _ (invoke "autoreconf" "-vfi"))))))
+    (synopsis "Library for interacting with Dell SMBIOS tables")
+    (description
+     "libsmbios provides a library to interface with the SMBIOS tables.  It
+also provides extensions for proprietary methods of interfacing with Dell
+specific SMBIOS tables.")
+    (home-page "https://github.com/dell/libsmbios")
+    (license
+     (list license:osl2.1 license:gpl2+ license:bsd-3 license:boost1.0))))
+
 ;; Distinct from memtest86, which is obsolete.
 (define-public memtest86+
   (package
@@ -498,3 +544,31 @@ screens.  It displays various patterns and allows you to estimate the quality
 of your CRT/LCD monitor.")
     (home-page "https://github.com/TobiX/screentest")
     (license license:gpl2)))
+
+(define-public tpm2-tss
+  (package
+    (name "tpm2-tss")
+    (version "3.0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/tpm2-software/tpm2-tss"
+                           "/releases/download/" version "/tpm2-tss-" version
+                           ".tar.gz"))
+       (sha256
+        (base32 "05xynpwq851fp8f5fy7ac0blvz8mr5m5cbqj3gslgbwv63kjnfbq"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("curl" ,curl)
+       ("json-c" ,json-c)
+       ("openssl" ,openssl)))
+    (home-page "https://tpm2-software.github.io/")
+    (synopsis "OSS Implementation of the TCG TPM2 Software Stack (TSS2)")
+    (description
+     "This package provides the @acronym{TCG, Trusted Computing Group}
+@acronym{TSS2, TPM2 Software Stack}.  The stack contains libtss2-fapi,
+libtss2-esys, libtss2-sys, libtss2-mu, libtss2-tcti-device, libtss2-tcti-swtpm
+and libtss2-tcti-mssim.")
+    (license license:bsd-2)))
diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm
index 19a0fc8a44..a6fb33c31b 100644
--- a/gnu/packages/haskell-apps.scm
+++ b/gnu/packages/haskell-apps.scm
@@ -339,14 +339,14 @@ to @code{cabal repl}).")
 (define-public git-annex
   (package
     (name "git-annex")
-    (version "8.20201127")
+    (version "8.20210127")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hackage.haskell.org/package/"
                            "git-annex/git-annex-" version ".tar.gz"))
        (sha256
-        (base32 "0n9m5ffgbzms0nh9dskrc7vjgwwwi9f9gxyh498wnspf96729zz7"))))
+        (base32 "1hsmaw70lfza1g5j6b9zbwqkkr374m18p7qb4nl952pj42a46vv3"))))
     (build-system haskell-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index f1da66a4be..34dba958ce 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2020, 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,19 +22,41 @@
   #:use-module (guix git-download)
   #:use-module (guix build-system julia))
 
+(define-public julia-adapt
+  (package
+    (name "julia-adapt")
+    (version "3.1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaGPU/Adapt.jl")
+             (commit (string-append "v" version))))
+       (file-name "Adapt")
+       (sha256
+        (base32 "1lks6k3a1gvwlplld47nh6xfy3nnlpc0vhkzg6zg0qn33qdmavrg"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaGPU/Adapt.jl")
+    (synopsis "Package providing the @code{adapt} function, similar to @code{convert}")
+    (description "This Julia package provides the @code{adapt(T, x)} function
+acts like @code{convert(T, x)}, but without the restriction of returning a
+@code{T}.  This allows you to \"convert\" wrapper types like @code{Adjoint} to
+be GPU compatible without throwing away the wrapper.")
+    (license license:expat)))
+
 (define-public julia-compat
   (package
     (name "julia-compat")
-    (version "3.9.1")
+    (version "3.25.0")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/JuliaLang/Compat.jl")
              (commit (string-append "v" version))))
-       (file-name "Compat")
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "01vwjr2134bzgnaxwd67knbibbhnfgnqjw7gxrp29s6y2a6j3882"))))
+        (base32 "1m4r5i8mq29xjp3mllh6047n5a78sdyld57m15anrnsjgaapcgby"))))
     (build-system julia-build-system)
     (home-page "https://github.com/JuliaLang/Compat.jl")
     (synopsis "Compatibility across Julia versions")
@@ -43,3 +65,154 @@ between older and newer versions of the Julia language.  The Compat package
 provides a macro that lets you use the latest syntax in a backwards-compatible
 way.")
     (license license:expat)))
+
+(define-public julia-datastructures
+  (package
+    (name "julia-datastructures")
+    (version "0.18.9")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaCollections/DataStructures.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0hdqp8ipsqdw5bqqkdvz4j6n67x80sj5azr9vzyxwjfsgkfbnk2l"))))
+    (propagated-inputs
+     `(("julia-compat" ,julia-compat)
+       ("julia-orderedcollections" ,julia-orderedcollections)))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaCollections/DataStructures.jl")
+    (synopsis "Julia module providing different data structures")
+    (description "This package implements a variety of data structures,
+including, @code{CircularBuffer}, @code{Queue}, @code{Stack},
+@code{Accumulators}, @code{LinkedLists}, @code{SortedDicts} and many others.")
+    (license license:expat)))
+
+(define-public julia-fixedpointnumbers
+  (package
+    (name "julia-fixedpointnumbers")
+    (version "0.8.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaMath/FixedPointNumbers.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0j0n40n04q9sk68wh9jq90m6c67k4ws02k41djjzkrqmpzv4rcdi"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-failing-test
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "test/fixed.jl"
+               ;; A deprecation warning is not thrown
+               (("@test_logs.*:warn" all) (string-append "# " all)))
+             #t)))))
+    (propagated-inputs `(("julia-compat" ,julia-compat)))
+    (home-page "https://github.com/JuliaMath/FixedPointNumbers.jl")
+    (synopsis "Fixed point types for Julia")
+    (description "@code{FixedPointNumbers.jl} implements fixed-point number
+types for Julia.  A fixed-point number represents a fractional, or
+non-integral, number.  In contrast with the more widely known floating-point
+numbers, with fixed-point numbers the decimal point doesn't \"float\":
+fixed-point numbers are effectively integers that are interpreted as being
+scaled by a constant factor.  Consequently, they have a fixed number of
+digits (bits) after the decimal (radix) point.")
+    (license license:expat)))
+
+(define-public julia-json
+  (package
+    (name "julia-json")
+    (version "0.21.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaIO/JSON.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1f9k613kbknmp4fgjxvjaw4d5sfbx8a5hmcszmp1w9rqfqngjx9m"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     `(("julia-datastructures" ,julia-datastructures)
+       ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
+       ("julia-parsers" ,julia-parsers)
+       ("julia-offsetarrays" ,julia-offsetarrays)))
+    (home-page "https://github.com/JuliaIO/JSON.jl")
+    (synopsis "JSON parsing and printing library for Julia")
+    (description "@code{JSON.jl} is a pure Julia module which supports parsing
+and printing JSON documents.")
+    (license license:expat)))
+
+(define-public julia-orderedcollections
+  (package
+    (name "julia-orderedcollections")
+    (version "1.3.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaCollections/OrderedCollections.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0sfip1ixghsz91q2s7d62rgzw3gppg42fg6bccxlplqa3hfmbycf"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaCollections/OrderedCollections.jl")
+    (synopsis "Associative containers that preserve insertion order")
+    (description "This package implements @code{OrderedDicts} and
+@code{OrderedSets}, which are similar to containers in base Julia.  However,
+during iteration the @code{Ordered*} containers return items in the order in
+which they were added to the collection.")
+    (license license:expat)))
+
+(define-public julia-offsetarrays
+  (package
+    (name "julia-offsetarrays")
+    (version "1.5.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaArrays/OffsetArrays.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1y3fnssw2hzyghrk6jfcxslab0f8sjkjszh482snfq4k6mkrhy77"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     `(("julia-adapt" ,julia-adapt)))
+    ;; CatIndices depends on OffsetArrays, introducing a recursive dependency
+    (arguments '(#:tests? #f))
+    (home-page "https://juliaarrays.github.io/OffsetArrays.jl/stable/")
+    (synopsis "Fortran-like arrays with arbitrary, zero or negative indices")
+    (description "@code{OffsetArrays.jl} provides Julia users with arrays that
+have arbitrary indices, similar to those found in some other programming
+languages like Fortran.")
+    (license license:expat)))
+
+(define-public julia-parsers
+  (package
+    (name "julia-parsers")
+    (version "1.0.15")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaData/Parsers.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "16iffl6l28kspgqch48mhi1s8qhspr3cpqcwsph3rqi72lbfqygx"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaData/Parsers.jl")
+    (synopsis "Fast parsing machinery for basic types in Julia")
+    (description "@code{Parsers.jl} is a collection of type parsers and
+utilities for Julia.")
+    (license license:expat)))
diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm
index 70cf346ecd..5482400f02 100644
--- a/gnu/packages/kde-frameworks.scm
+++ b/gnu/packages/kde-frameworks.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2016, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016-2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
@@ -1047,12 +1047,13 @@ integration with a custom editor as well as a ready-to-use
        ("wayland" ,wayland)
        ("wayland-protocols" ,wayland-protocols)))
     (arguments
-     `(#:phases
+     `(#:tests? #f ; FIXME tests require weston to run
+                   ; weston requires wayland flags in mesa
+       #:phases
        (modify-phases %standard-phases
          (add-before 'check 'check-setup
            (lambda _
              (setenv "XDG_RUNTIME_DIR" "/tmp")
-             (setenv "QT_QPA_PLATFORM" "offscreen")
              #t)))))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Qt-style API to interact with the wayland client and server")
diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm
index 73a2289f04..9173aea80f 100644
--- a/gnu/packages/kde.scm
+++ b/gnu/packages/kde.scm
@@ -9,7 +9,7 @@
 ;;; Copyright © 2018, 2019, 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
-;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
+;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Prafulla Giri <pratheblackdiamond@gmail.com>
 ;;; Copyright © 2020 Zheng Junjie <873216071@qq.com>
 ;;;
@@ -457,7 +457,7 @@ illustrate project schedules.")
 (define-public krita
   (package
     (name "krita")
-    (version "4.4.1")
+    (version "4.4.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -465,7 +465,7 @@ illustrate project schedules.")
                     "/krita-" version ".tar.gz"))
               (sha256
                (base32
-                "05rq5hkh2lmk8hall2h9ccaav0nw8fj7vd4aff5fyp2fiq3aybbg"))))
+                "14lprcv7xw6r19bmylcz4c1p1jfazmza2b4m48f3x7vmdv2sx5ln"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f
diff --git a/gnu/packages/language.scm b/gnu/packages/language.scm
index 3f17465039..93e125db7e 100644
--- a/gnu/packages/language.scm
+++ b/gnu/packages/language.scm
@@ -23,36 +23,313 @@
 
 (define-module (gnu packages language)
   #:use-module (gnu packages)
+  #:use-module (gnu packages anthy)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages audio)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages docbook)
+  #:use-module (gnu packages emacs)
+  #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages ibus)
   #:use-module (gnu packages java)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages man)
+  #:use-module (gnu packages ncurses)
   #:use-module (gnu packages ocr)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
   #:use-module (gnu packages perl-check)
+  #:use-module (gnu packages qt)
+  #:use-module (gnu packages sqlite)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
+  #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg)
   #:use-module (guix packages)
+  #:use-module (guix build-system cmake)
+  #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
+  #:use-module (guix build-system qt)
   #:use-module ((guix licenses)
                 #:select
-                (bsd-3 gpl2 gpl2+ gpl3 gpl3+ lgpl2.1 lgpl2.1+ lgpl3+ perl-license zpl2.1))
+                (bsd-3 gpl2 gpl2+ gpl3 gpl3+ lgpl2.1 lgpl2.1+ lgpl3+ perl-license zpl2.1 fdl1.2+))
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix utils))
 
+(define-public nimf
+  (package
+    (name "nimf")
+    (version "1.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/hamonikr/nimf.git")
+         (commit
+          (string-append "nimf-" version))))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32 "01qi7flmaqrn2fk03sa42r0caks9d8lsv88s0bgxahhxwk1x76gc"))))
+    (build-system glib-or-gtk-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:imported-modules
+       (,@%glib-or-gtk-build-system-modules
+        (guix build cmake-build-system)
+        (guix build qt-build-system))
+       #:modules
+       ((guix build glib-or-gtk-build-system)
+        ((guix build qt-build-system)
+         #:prefix qt:)
+        (guix build utils))
+       #:configure-flags
+       (list
+        "--with-im-config-data"
+        "--with-imsettings-data"
+        (string-append "--with-html-dir="
+                       (assoc-ref %outputs "doc")
+                       "/share/gtk-doc/html"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-flags
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "configure.ac"
+               (("-Werror")
+                "-Wno-error"))
+             #t))
+         (add-after 'patch-flags 'patch-docbook-xml
+           (lambda* (#:key inputs #:allow-other-keys)
+             (with-directory-excursion "docs"
+               (substitute* "nimf-docs.xml"
+                 (("http://www.oasis-open.org/docbook/xml/4.3/")
+                  (string-append (assoc-ref inputs "docbook-xml-4.3")
+                                 "/xml/dtd/docbook/"))))
+             #t))
+         (add-after 'patch-docbook-xml 'patch-paths
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (substitute* "configure.ac"
+               (("/usr/share/anthy/anthy.dic")
+                (string-append (assoc-ref inputs "anthy")
+                               "/share/anthy/anthy.dic")))
+             (substitute* "configure.ac"
+               (("/usr/bin:\\$GTK3_LIBDIR/libgtk-3-0")
+                (string-append (assoc-ref inputs "gtk+:bin")
+                               "/bin:$GTK3_LIBDIR/libgtk-3-0"))
+               (("/usr/bin:\\$GTK2_LIBDIR/libgtk2.0-0")
+                (string-append (assoc-ref inputs "gtk+-2:bin")
+                               "/bin:$GTK2_LIBDIR/libgtk2.0-0")))
+             (substitute* "modules/clients/gtk/Makefile.am"
+               (("\\$\\(GTK3_LIBDIR\\)")
+                (string-append (assoc-ref outputs "out")
+                               "/lib"))
+               (("\\$\\(GTK2_LIBDIR\\)")
+                (string-append (assoc-ref outputs "out")
+                               "/lib")))
+             (substitute* "modules/clients/qt4/Makefile.am"
+               (("\\$\\(QT4_LIB_DIR\\)")
+                (string-append (assoc-ref outputs "out")
+                               "/lib")))
+             (substitute* "modules/clients/qt5/Makefile.am"
+               (("\\$\\(QT5_IM_MODULE_DIR\\)")
+                (string-append (assoc-ref outputs "out")
+                               "/lib/qt5/plugins/inputmethods")))
+             (substitute* '("bin/nimf-settings/Makefile.am"
+                            "data/apparmor-abstractions/Makefile.am"
+                            "data/Makefile.am" "data/im-config/Makefile.am"
+                            "data/imsettings/Makefile.am")
+               (("/etc")
+                (string-append (assoc-ref outputs "out")
+                               "/etc"))
+               (("/usr/share")
+                (string-append (assoc-ref outputs "out")
+                               "/share")))
+             #t))
+         (add-after 'install 'qt-wrap
+           (assoc-ref qt:%standard-phases 'qt-wrap)))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("docbook-xml-4.3" ,docbook-xml-4.3)
+       ("gettext" ,gettext-minimal)
+       ("gobject-introspection" ,gobject-introspection)
+       ("gtk+-2:bin" ,gtk+-2 "bin")
+       ("gtk+:bin" ,gtk+ "bin")
+       ("gtk-doc" ,gtk-doc)
+       ("intltool" ,intltool)
+       ("libtool" ,libtool)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("anthy" ,anthy)
+       ("appindicator" ,libappindicator)
+       ("gtk+-2" ,gtk+-2)
+       ("gtk+" ,gtk+)
+       ("hangul" ,libhangul)
+       ("m17n-db" ,m17n-db)
+       ("m17n-lib" ,m17n-lib)
+       ("qt-4" ,qt-4)
+       ("qtbase" ,qtbase)
+       ("rime" ,librime)
+       ("rsvg" ,librsvg)
+       ("wayland" ,wayland)
+       ("wayland-protocols" ,wayland-protocols)
+       ("x11" ,libx11)
+       ("xkbcommon" ,libxkbcommon)
+       ("xklavier" ,libxklavier)))
+    (propagated-inputs
+     `(("glib" ,glib)))
+    (synopsis "Lightweight input method framework")
+    (description "Nimf is a lightweight, fast and extensible input method
+framework.  This package provides a fork of the original nimf project, that
+focusses especially on Korean input (Hangul, Hanja, ...).")
+    (home-page "https://github.com/hamonikr/nimf/")
+    (license lgpl3+)))
+
+(define-public hime
+  (package
+    (name "hime")
+    (version "0.9.11")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/hime-ime/hime.git")
+         (commit
+          (string-append "v" version))))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32 "1wn0ici78x5qh6hvv50bf76ld7ds42hzzl4l5qz34hp8wyvrwakw"))))
+    (build-system glib-or-gtk-build-system)
+    (arguments
+     `(#:tests? #f                      ; No target
+       #:imported-modules
+       (,@%glib-or-gtk-build-system-modules
+        (guix build cmake-build-system)
+        (guix build qt-build-system))
+       #:modules
+       ((guix build glib-or-gtk-build-system)
+        ((guix build qt-build-system)
+         #:prefix qt:)
+        (guix build utils))
+       #:configure-flags
+       (list
+        ;; FIXME
+        ;; error: unknown type name ‘GtkStatusIcon’
+        "--disable-system-tray")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-std
+           (lambda _
+             (substitute* "configure"
+               (("gnu17")
+                "gnu11")
+               (("gnu++17")
+                "gnu++11"))
+             #t))
+         (add-after 'install 'qt-wrap
+           (assoc-ref qt:%standard-phases 'qt-wrap)))))
+    (native-inputs
+     `(("gettext" ,gettext-minimal)
+       ("pkg-config" ,pkg-config)
+       ("whereis" ,util-linux)))
+    (inputs
+     `(("anthy" ,anthy)
+       ("appindicator" ,libappindicator)
+       ("chewing" ,libchewing)
+       ("gtk+" ,gtk+)
+       ("qtbase" ,qtbase)
+       ("xtst" ,libxtst)))
+    (synopsis "HIME Input Method Editor")
+    (description "Hime is an extremely easy-to-use input method framework.  It
+is lightweight, stable, powerful and supports many commonly used input methods,
+including Cangjie, Zhuyin, Dayi, Ranked, Shrimp, Greek, Anthy, Korean, Latin,
+Random Cage Fighting Birds, Cool Music etc.")
+    (home-page "http://hime-ime.github.io/")
+    (license
+     (list
+      gpl2+
+      lgpl2.1+
+      ;; Documentation
+      fdl1.2+))))
+
+(define-public libchewing
+  (package
+    (name "libchewing")
+    (version "0.5.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/chewing/libchewing.git")
+         (commit
+          (string-append "v" version))))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32 "04d09w6xdd08v6laj9y4qmqsijw5i2jvshcilhh4vg6cfnfgl2my"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(;; test-easy-symbol and test-fullshape fail with multiple cores.
+       #:parallel-tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-failing-tests
+           (lambda _
+             (substitute* "test/Makefile.am"
+               (("	test-bopomofo ")
+                "")
+               (("	test-config ")
+                "")
+               (("	test-reset ")
+                "")
+               (("	test-symbol ")
+                "")
+               (("	test-keyboardless ")
+                "")
+               (("	test-special-symbol ")
+                "")
+               (("	test-keyboard ")
+                "")
+               (("	test-regression ")
+                "")
+               (("	test-userphrase ")
+                ""))
+             #t)))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-wrapper)
+       ("texinfo" ,texinfo)))
+    (inputs
+     `(("ncurses" ,ncurses)
+       ("sqlite" ,sqlite)))
+    (synopsis "Chinese phonetic input method")
+    (description "Chewing is an intelligent phonetic (Zhuyin/Bopomofo) input
+method, one of the most popular choices for Traditional Chinese users.")
+    (home-page "http://chewing.im/")
+    (license lgpl2.1+)))
+
 (define-public liblouis
   (package
     (name "liblouis")
diff --git a/gnu/packages/license.scm b/gnu/packages/license.scm
index 369426768b..7b94c02558 100644
--- a/gnu/packages/license.scm
+++ b/gnu/packages/license.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
+;;; Copyright © 2021 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -205,3 +206,35 @@ tools that have a lot more features and functionality surrounding the analysis
 and inspection of copyright and licenses in software projects.  This one is
 designed to be simple.")
     (license (list asl2.0 gpl3+))))
+
+(define-public licenseheaders
+  (package
+    (name "licenseheaders")
+    (version "0.8.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "licenseheaders" version))
+       (sha256
+        (base32 "073xcm10gyg5kcxqmbsyaz9sr0slbdwgr0r9qanch0zl8i0z9259"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; Reported upstream:
+         ;; <https://github.com/johann-petrak/licenseheaders/issues/47>.
+         (add-after 'unpack 'patch-code
+           (lambda _
+             (substitute* "licenseheaders.py"
+               (("\\\"filenames\\\": \\[\\\"CMakeLists.txt\\\"\\],")
+                "\"filenames\": [\"CMakeLists.txt\"], \n        \"extensions\": [],"))
+             #t)))))
+    (propagated-inputs
+     `(("python-regex" ,python-regex)))
+    (home-page "http://github.com/johann-petrak/licenseheaders")
+    (synopsis "Add or change license headers for all files in a directory")
+    (description
+     "Licenseheaders is a Python 3 tool to update, change or add license
+headers to all files of any of the supported types in or below some
+directory.")
+    (license expat)))
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 85afac2611..9e31dfc5db 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -49,7 +49,7 @@
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Anders Thuné <asse.97@gmail.com>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
-;;; Copyright © 2020 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2020, 2021 Greg Hogan <code@greghogan.com>
 ;;; Copyright © 2020 Zhu Zihao <all_but_last@163.com>
 ;;; Copyright © 2020 David Dashyan <mail@davie.li>
 ;;; Copyright © 2020 pukkamustard <pukkamustard@posteo.net>
@@ -353,7 +353,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.10-version "5.10.10")
+(define-public linux-libre-5.10-version "5.10.12")
 (define deblob-scripts-5.10
   (linux-libre-deblob-scripts
    linux-libre-5.10-version
@@ -361,7 +361,7 @@ 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 "06fvgkrn9127xw9kly6l4ws3yv80q8xfqdzaam92lljim5pqdvb0")))
+        (hash (base32 "1an460q3affd7gmd6fqv8g37j3z2fnmq19iy677k8kxb2wl4yi8x")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.10)))
@@ -369,7 +369,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.4-version "5.4.92")
+(define-public linux-libre-5.4-version "5.4.94")
 (define deblob-scripts-5.4
   (linux-libre-deblob-scripts
    linux-libre-5.4-version
@@ -377,12 +377,12 @@ 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 "1zcl4dadyfrgmx6rh0ncy403rsqb1qs092m6zr6b3i14i3wpz4y0")))
+        (hash (base32 "0f9bml584g6jb822j7xyxx9j2g3s49p08xz4bkx9lbiinxyzagf2")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.4)))
 
-(define-public linux-libre-4.19-version "4.19.170")
+(define-public linux-libre-4.19-version "4.19.172")
 (define deblob-scripts-4.19
   (linux-libre-deblob-scripts
    linux-libre-4.19-version
@@ -390,12 +390,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "1jiaw0as1ippkrjdpd52657w5mz9qczg3y2hlra7m9k0xawwiqlf")))
 (define-public linux-libre-4.19-pristine-source
   (let ((version linux-libre-4.19-version)
-        (hash (base32 "0jjvwbxpfvmzj4z6gkd2mh3kz9vh8hsgsm0013866hzgz1j043fx")))
+        (hash (base32 "08hl7vw5r61gnzagnm8nbhlbm0h226crp4m19zh0qr2q0pmwqd2g")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.19)))
 
-(define-public linux-libre-4.14-version "4.14.217")
+(define-public linux-libre-4.14-version "4.14.218")
 (define deblob-scripts-4.14
   (linux-libre-deblob-scripts
    linux-libre-4.14-version
@@ -403,12 +403,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "1qij18inijj6c3ma8hv98yjagnzxdxyn134da9fd23ky8q6hbvky")))
 (define-public linux-libre-4.14-pristine-source
   (let ((version linux-libre-4.14-version)
-        (hash (base32 "04adj8x7p1has4mh8ygxhqgwb1i08fz9izqw1y6xj5hh8cjnm8v2")))
+        (hash (base32 "0l2rcpccf71amngii7vs18x4x6gb0bwxdb2gszabip03bshqdzp3")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.14)))
 
-(define-public linux-libre-4.9-version "4.9.253")
+(define-public linux-libre-4.9-version "4.9.254")
 (define deblob-scripts-4.9
   (linux-libre-deblob-scripts
    linux-libre-4.9-version
@@ -416,12 +416,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "0fxajshb75siq39lj5h8xvhdj8lcmddkslwlyj65rhlwk6g2r4b2")))
 (define-public linux-libre-4.9-pristine-source
   (let ((version linux-libre-4.9-version)
-        (hash (base32 "065w35vb0qp4fvnwmcx7f92inmx64f9r04zzwcwbs0826nl52nws")))
+        (hash (base32 "1djw5mlff73j7m1176qspdzhf6zyv4m0gkdvlxq4g4mdrbqfx6xn")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.9)))
 
-(define-public linux-libre-4.4-version "4.4.253")
+(define-public linux-libre-4.4-version "4.4.254")
 (define deblob-scripts-4.4
   (linux-libre-deblob-scripts
    linux-libre-4.4-version
@@ -429,7 +429,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "0hhin1jpfkd6nwrb6xqxjzl3hdxy4pn8a15hy2d3d83yw6pflbsf")))
 (define-public linux-libre-4.4-pristine-source
   (let ((version linux-libre-4.4-version)
-        (hash (base32 "0nlqnfhrkaj2s582kc0wxqi0881hgp6l9z85qx4ckflc8jwrh7k6")))
+        (hash (base32 "11wca1mprlcyk7r5h1c8rx3hr7l6mj4i85jaaf106s7wqcm8wamd")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.4)))
@@ -5513,7 +5513,7 @@ The package provides additional NTFS tools.")
 (define-public rdma-core
   (package
     (name "rdma-core")
-    (version "26.0")
+    (version "33.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/linux-rdma/rdma-core"
@@ -5521,27 +5521,18 @@ The package provides additional NTFS tools.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "14raqwx4pkzghiwkx1v0dq338f7xqqx8rnsxlpdnngvjy1p5l79j"))))
+                "1rah0v9gq9rksqd2c17nmydsxcjz178n7m2y4ricwlf5pq1b2yfi"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ; no tests
        ;; Upstream uses the "ninja" build system and encourage distros
-       ;; to do the same for consistency. They also recommend using the
-       ;; "Release" build type.
-       #:build-type "Release"
+       ;; to do the same for consistency.
        #:configure-flags (list "-GNinja"
 
                                (string-append "-DRST2MAN_EXECUTABLE="
                                               (assoc-ref %build-inputs
                                                          "python-docutils")
-                                              "/bin/rst2man.py")
-
-                               ;; On some configurations, the
-                               ;; IB_USER_MAD_REGISTER_AGENT ioctl, which is
-                               ;; used by default, would return ENODEV.  To
-                               ;; avoid that, use 'write' instead of ioctls,
-                               ;; as suggested in 'CMakeList.txt'.
-                               "-DIOCTL_MODE=write")
+                                              "/bin/rst2man.py"))
        #:phases
        (modify-phases %standard-phases
          (replace 'build
@@ -6732,7 +6723,7 @@ comparing system environments.")
 (define-public libfabric
   (package
     (name "libfabric")
-    (version "1.4.1")
+    (version "1.11.2")
     (source
      (origin
        (method url-fetch)
@@ -6740,7 +6731,7 @@ comparing system environments.")
         (string-append "https://github.com/ofiwg/libfabric/releases/download/v"
                        version "/libfabric-" version ".tar.bz2"))
        (sha256
-        (base32 "19l2m1frna1l765z4j7wl8hp4rb9wrh0hy5496685hd183hmy5pv"))))
+        (base32 "1nnpfkwxhim2nqjkb1vwrb4wj4j3l6w6yvvy69fqam2snlhshazz"))))
     (build-system gnu-build-system)
     (inputs `(("rdma-core" ,rdma-core)
               ,@(match (%current-system)
@@ -7593,7 +7584,7 @@ persistent over reboots.")
 (define-public libbpf
   (package
     (name "libbpf")
-    (version "0.0.9")
+    (version "0.1.1")
     (source
      (origin
        (method git-fetch)
@@ -7603,7 +7594,7 @@ persistent over reboots.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "18l0gff7nm841mwhr7bc7x863xcyvwh58zl7mc0amnsjqlbrvqg7"))))
+         "0ilnnm4q22f8fagwp8kb37licy4ks861i2iqh2djsypqhnxvx3fv"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -7623,10 +7614,7 @@ persistent over reboots.")
        (modify-phases %standard-phases
          (delete 'configure)
          (add-before 'build 'pre-build
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "scripts/check-reallocarray.sh"
-               (("/bin/rm" rm)
-                (string-append (assoc-ref inputs "coreutils") rm)))
+           (lambda _
              (chdir "src")
              #t)))))
     (home-page "https://github.com/libbpf/libbpf")
@@ -7640,7 +7628,7 @@ headers.")
 (define-public bcc
   (package
     (name "bcc")
-    (version "0.15.0")
+    (version "0.16.0")
     (source
      (origin
        (method git-fetch)
@@ -7650,7 +7638,7 @@ headers.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1d5j9zanffa1c7lpi5fcrdlx1n7hy86xl82fam2xqr0s41q4ipxw"))))
+         "1367c0bzrpclvjvmk0sxgi49rh7j2f9izqk5a7g3yvawh1fmvvjh"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("bison" ,bison)
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index 3fefccf1e8..7cfd4b2a6b 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -69,6 +69,7 @@
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages lisp)
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages mp3)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -459,6 +460,39 @@ compatible with ANSI-compliant Common Lisp implementations.")
 (define-public ecl-cl-ppcre
   (sbcl-package->ecl-package sbcl-cl-ppcre))
 
+(define-public sbcl-ubiquitous
+  (let ((commit "35eb7bd9e1b3daee1705f6b41260775180cce8af")
+        (revision "1"))
+    (package
+      (name "sbcl-ubiquitous")
+      (version (git-version "2.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/ubiquitous")
+               (commit commit)))
+         (file-name (git-file-name "ubiquitous" version))
+         (sha256
+          (base32 "1xlkaqmjcpkiv2xl2s2pvvrv976dlc846wm16s1lj62iy1315i49"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("bordeaux-threads" ,sbcl-bordeaux-threads)))
+      (home-page "https://shinmera.github.io/ubiquitous/")
+      (synopsis "Application configuration mechanism for Common Lisp")
+      (description
+       "@code{UBIQUITOUS} is a very easy-to-use library for persistent
+configuration storage.  It automatically takes care of finding a suitable place
+to save your data, and provides simple functions to access and modify the data
+within.")
+      (license license:zlib))))
+
+(define-public ecl-ubiquitous
+  (sbcl-package->ecl-package sbcl-ubiquitous))
+
+(define-public cl-ubiquitous
+  (sbcl-package->cl-source-package sbcl-ubiquitous))
+
 (define-public sbcl-uax-15
   (package
     (name "sbcl-uax-15")
@@ -799,40 +833,11 @@ antialiased TrueType font rendering using CLX and XRender extension.")
            (commit commit)))
          (sha256
           (base32 "0vv185gz3rkfng5y79dijfnc11p92qdz2kdza05avjbpqfs6l0zn"))
-         (file-name (git-file-name "slynk" version))
-         (modules '((guix build utils)
-                    (ice-9 ftw)))
-         (snippet
-          '(begin
-             ;; Move the contribs into the main source directory for easier
-             ;; access
-             (substitute* "slynk/slynk.asd"
-               (("\\.\\./contrib")
-                "contrib"))
-             (rename-file "contrib" "slynk/contrib")
-             ;; Move slynk's contents into the base directory for easier
-             ;; access
-             (for-each (lambda (file)
-                         (unless (string-prefix? "." file)
-                           (rename-file (string-append "slynk/" file)
-                                        (string-append "./" (basename file)))))
-                       (scandir "slynk"))
-             #t))))
+         (file-name (git-file-name "slynk" version))))
       (build-system asdf-build-system/sbcl)
       (outputs '("out" "image"))
       (arguments
-       `(#:tests? #f                    ; No test suite
-         #:asd-systems '("slynk"
-                         "slynk/arglists"
-                         "slynk/fancy-inspector"
-                         "slynk/package-fu"
-                         "slynk/mrepl"
-                         "slynk/trace-dialog"
-                         "slynk/profiler"
-                         "slynk/stickers"
-                         "slynk/indentation"
-                         "slynk/retro")
-         #:phases
+       `(#:phases
          (modify-phases %standard-phases
            (add-after 'create-asdf-configuration 'build-image
              (lambda* (#:key outputs #:allow-other-keys)
@@ -1318,6 +1323,34 @@ and macros, primarily for software projects written in CL by the author.")
 (define-public ecl-jpl-util
   (sbcl-package->ecl-package sbcl-jpl-util))
 
+(define-public sbcl-piping
+  (let ((commit "c7a4163c00dea7e72bf6ad33d6abac0d5826a656")
+        (revision "1"))
+    (package
+      (name "sbcl-piping")
+      (version (git-version "2.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/piping/")
+               (commit commit)))
+         (file-name (git-file-name "piping" version))
+         (sha256
+          (base32 "0in84qnfkynm36d4n4d6v87vprpi27xrydnga462wfhplji6klv5"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://shinmera.github.io/piping/")
+      (synopsis "Library to enable simple message pipelines")
+      (description
+       "This is a Common Lisp library to enable simple message pipelines.")
+      (license license:zlib))))
+
+(define-public ecl-piping
+  (sbcl-package->ecl-package sbcl-piping))
+
+(define-public cl-piping
+  (sbcl-package->cl-source-package sbcl-piping))
+
 (define-public sbcl-jpl-queues
   (package
     (name "sbcl-jpl-queues")
@@ -2403,8 +2436,8 @@ tester module.")
   (sbcl-package->ecl-package sbcl-ptester))
 
 (define-public sbcl-puri
-  (let ((commit "ef5afb9e5286c8e952d4344f019c1a636a717b97")
-        (revision "1"))
+  (let ((commit "4bbab89d9ccbb26346899d1f496c97604fec567b")
+        (revision "2"))
     (package
       (name "sbcl-puri")
       (version (git-version "1.5.7" revision commit))
@@ -2414,13 +2447,13 @@ tester module.")
          (uri (git-reference
                (url "http://git.kpe.io/puri.git")
                (commit commit)))
-         (file-name (git-file-name name version))
+         (file-name (git-file-name "puri" version))
          (sha256
-          (base32 "1vm25pdl92laj72p5vyd538kf3cjy2655z6bdc99h20ana2p231s"))))
+          (base32 "0gq2rsr0aihs0z20v4zqvmdl4szq53b52rh97pvnmwrlbn4mapmd"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
        `(("ptester" ,sbcl-ptester)))
-      (home-page "http://quickdocs.org/puri/")
+      (home-page "http://puri.kpe.io/")
       (synopsis "Portable URI Library")
       (description
        "This is a portable Universal Resource Identifier library for Common
@@ -3235,6 +3268,34 @@ client and server.")
 (define-public ecl-s-xml-rpc
   (sbcl-package->ecl-package sbcl-s-xml-rpc))
 
+(define-public sbcl-trivial-arguments
+  (let ((commit "ecd84ed9cf9ef8f1e873d7409e6bd04979372aa7")
+        (revision "1"))
+    (package
+      (name "sbcl-trivial-arguments")
+      (version (git-version "1.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/trivial-arguments")
+               (commit commit)))
+         (file-name (git-file-name "trivial-arguments" version))
+         (sha256
+          (base32 "02vaqfavhj8jqxnr68nnzvzshm8jbgcy6m9lvyv4daa6f7ihqf88"))))
+      (build-system asdf-build-system/sbcl)
+      (home-page "https://github.com/Shinmera/trivial-arguments")
+      (synopsis "Common Lisp library to retrieve a function's lambda-list")
+      (description
+       "This is a simple library to retrieve the argument list of a function.")
+      (license license:zlib))))
+
+(define-public ecl-trivial-arguments
+  (sbcl-package->ecl-package sbcl-trivial-arguments))
+
+(define-public cl-trivial-arguments
+  (sbcl-package->cl-source-package sbcl-trivial-arguments))
+
 (define-public sbcl-trivial-clipboard
   (let ((commit "afcd3743b842f5a81fc86dba60f9db59970f49c5"))
     (package
@@ -4641,6 +4702,41 @@ various levels and mix text with expressions.")
 (define-public ecl-log4cl
   (sbcl-package->ecl-package sbcl-log4cl))
 
+(define-public sbcl-verbose
+  (let ((commit "c5b7ecd465be61b35af17ef57564697b88397174")
+        (revision "1"))
+    (package
+      (name "sbcl-verbose")
+      (version (git-version "2.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/verbose/")
+               (commit commit)))
+         (file-name (git-file-name "verbose" version))
+         (sha256
+          (base32 "0r51ydj5v7afi2jrlscbhxprv13d9vzg5316g1yzwaxc1kzsdsw6"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
+         ("dissect" ,sbcl-dissect)
+         ("documentation-utils" ,sbcl-documentation-utils)
+         ("local-time" ,sbcl-local-time)
+         ("piping" ,sbcl-piping)))
+      (home-page "https://shinmera.github.io/verbose/")
+      (synopsis "Logging framework using the piping library")
+      (description
+       "This is a Common Lisp library providing logging faciltiy similar to
+@code{CL-LOG} and @code{LOG4CL}.")
+      (license license:zlib))))
+
+(define-public ecl-verbose
+  (sbcl-package->ecl-package sbcl-verbose))
+
+(define-public cl-verbose
+  (sbcl-package->cl-source-package sbcl-verbose))
+
 (define-public sbcl-find-port
   (let ((commit "00c96a25af93a0f8681d34ec548861f2d7485478")
         (revision "1"))
@@ -9686,6 +9782,115 @@ PascalCase, snake_case, param-case, CONSTANT_CASE and more.")
 (define-public ecl-cl-change-case
   (sbcl-package->ecl-package sbcl-cl-change-case))
 
+(define-public sbcl-modularize
+  (let ((commit "86c5d9a11fbd2df9f0f03ac10b5d71837c8934ba")
+        (revision "1"))
+    (package
+      (name "sbcl-modularize")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/modularize")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1zys29rfkb649rkgl3snxhajk8d5yf7ryxkrwy020kwdh7zdsg7d"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:test-asd-file "modularize-test-module.asd"
+         #:asd-files '("modularize.asd" "modularize-test-module.asd")
+         #:asd-systems '("modularize" "modularize-test-module")))
+      (inputs
+       `(("documentation-utils" ,sbcl-documentation-utils)
+         ("trivial-package-local-nicknames" ,sbcl-trivial-package-local-nicknames)))
+      (home-page "https://shinmera.github.io/modularize/")
+      (synopsis "Common Lisp modularization framework")
+      (description
+       "@code{MODULARIZE} is an attempt at providing a common interface to
+segregate major application components.  This is achieved by adding special
+treatment to packages.  Each module is a package that is specially registered,
+which allows it to interact and co-exist with other modules in better ways.  For
+instance, by adding module definition options you can introduce mechanisms to
+tie modules together in functionality, hook into each other and so on.")
+      (license license:zlib))))
+
+(define-public ecl-modularize
+  (sbcl-package->ecl-package sbcl-modularize))
+
+(define-public cl-modularize
+  (sbcl-package->cl-source-package sbcl-modularize))
+
+(define-public sbcl-modularize-hooks
+  (let ((commit "e0348ed3ffd59a9ec31ca4ab28289e748bfbf96a")
+        (revision "1"))
+    (package
+      (name "sbcl-modularize-hooks")
+      (version (git-version "1.0.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/modularize-hooks")
+               (commit commit)))
+         (file-name (git-file-name "modularize-hooks" version))
+         (sha256
+          (base32 "12kjvin8hxidwkzfb7inqv5b6g5qzcssnj9wc497v2ixc56fqdz7"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("closer-mop" ,sbcl-closer-mop)
+         ("lambda-fiddle" ,sbcl-lambda-fiddle)
+         ("modularize" ,sbcl-modularize)
+         ("trivial-arguments" ,sbcl-trivial-arguments)))
+      (home-page "https://shinmera.github.io/modularize-hooks/")
+      (synopsis "Generic hooks and triggers extension for Modularize")
+      (description
+       "This is a simple extension to @code{MODULARIZE} that allows modules to
+define and trigger hooks, which other modules can hook on to.")
+      (license license:zlib))))
+
+(define-public ecl-modularize-hooks
+  (sbcl-package->ecl-package sbcl-modularize-hooks))
+
+(define-public cl-modularize-hooks
+  (sbcl-package->cl-source-package sbcl-modularize-hooks))
+
+(define-public sbcl-modularize-interfaces
+  (let ((commit "96353657afb8c7aeba7ef5b51eb04c5ed3bcb6ef")
+        (revision "1"))
+    (package
+      (name "sbcl-modularize-interfaces")
+      (version (git-version "0.9.3" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shinmera/modularize-interfaces")
+               (commit commit)))
+         (file-name (git-file-name "modularize-interfaces" version))
+         (sha256
+          (base32 "0bjf4wy39cwf75m7vh0r7mmcchs09yz2lrbyap98hnq8blq70fhc"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("lambda-fiddle" ,sbcl-lambda-fiddle)
+         ("modularize" ,sbcl-modularize)
+         ("trivial-arguments" ,sbcl-trivial-arguments)
+         ("trivial-indent" ,sbcl-trivial-indent)))
+      (home-page "https://shinmera.github.io/modularize-interfaces/")
+      (synopsis "Programmatical interfaces extension for Modularize")
+      (description
+       "This is an extension to @code{MODULARIZE} that allows your application
+to define interfaces in-code that serve both as a primary documentation and as
+compliance control.")
+      (license license:zlib))))
+
+(define-public ecl-modularize-interfaces
+  (sbcl-package->ecl-package sbcl-modularize-interfaces))
+
+(define-public cl-modularize-interfaces
+  (sbcl-package->cl-source-package sbcl-modularize-interfaces))
+
 (define-public sbcl-moptilities
   (let ((commit "a436f16b357c96b82397ec018ea469574c10dd41"))
     (package
@@ -10282,8 +10487,8 @@ format.")
   (sbcl-package->ecl-package sbcl-cl-libsvm-format))
 
 (define-public sbcl-cl-online-learning
-  (let ((commit "fc7a34f4f161cd1c7dd747d2ed8f698947781423")
-        (revision "0"))
+  (let ((commit "87fbef8a340219e853adb3a5bf44a0470da76964")
+        (revision "1"))
     (package
       (name "sbcl-cl-online-learning")
       (version (git-version "0.5" revision commit))
@@ -10293,10 +10498,10 @@ format.")
          (uri (git-reference
                (url "https://github.com/masatoi/cl-online-learning")
                (commit commit)))
-         (file-name (git-file-name name version))
+         (file-name (git-file-name "cl-online-learning" version))
          (sha256
           (base32
-           "14x95rlg80ay5hv645ki57pqvy12v28hz4k1w0f6bsfi2rmpxchq"))))
+           "1lfq04lnxivx59nq5dd02glyqsqzf3vdn4s9b8wnaln5fs8g2ph9"))))
       (build-system asdf-build-system/sbcl)
       (native-inputs
        `(("prove" ,sbcl-prove)))
@@ -10304,13 +10509,14 @@ format.")
        `(("cl-libsvm-format" ,sbcl-cl-libsvm-format)
          ("cl-store" ,sbcl-cl-store)))
       (arguments
-       `(;; FIXME: Tests pass but then the check phase crashes
-         #:tests? #f))
+       `(#:test-asd-file "cl-online-learning-test.asd"
+         #:asd-systems '("cl-online-learning-test"
+                         "cl-online-learning")))
+      (home-page "https://github.com/masatoi/cl-online-learning")
       (synopsis "Online Machine Learning for Common Lisp")
       (description
        "This library contains a collection of machine learning algorithms for
 online linear classification written in Common Lisp.")
-      (home-page "https://github.com/masatoi/cl-online-learning")
       (license license:expat))))
 
 (define-public cl-online-learning
@@ -10319,6 +10525,121 @@ online linear classification written in Common Lisp.")
 (define-public ecl-cl-online-learning
   (sbcl-package->ecl-package sbcl-cl-online-learning))
 
+(define-public sbcl-cl-mpg123
+  (let ((commit "5f042c839d2ea4a2ff2a7b60c839d8633d64161d")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-mpg123")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shirakumo/cl-mpg123")
+               (commit commit)))
+         (file-name (git-file-name "cl-mpg123" version))
+         (sha256
+          (base32 "1hl721xaczxck008ax2y3jpkm509ry1sg3lklh2k76764m3ndrjf"))
+         (modules '((guix build utils)))
+         (snippet
+          '(begin
+             ;; Remove bundled pre-compiled libraries.
+             (delete-file-recursively "static")
+             #t))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:asd-files '("cl-mpg123.asd" "cl-mpg123-example.asd")
+         #:asd-systems '("cl-mpg123" "cl-mpg123-example")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "low-level.lisp"
+                 (("libmpg123.so" all)
+                  (string-append (assoc-ref inputs "libmpg123")
+                                 "/lib/" all))))))))
+      (inputs
+       `(("cffi" ,sbcl-cffi)
+         ("cl-out123" ,sbcl-cl-out123)
+         ("documentation-utils" ,sbcl-documentation-utils)
+         ("libmpg123" ,mpg123)
+         ("trivial-features" ,sbcl-trivial-features)
+         ("trivial-garbage" ,sbcl-trivial-garbage)
+         ("verbose" ,sbcl-verbose)))
+      (home-page "https://shirakumo.github.io/cl-mpg123/")
+      (synopsis "Common Lisp bindings to libmpg123")
+      (description
+       "This is a bindings and wrapper library to @code{libmpg123} allowing for
+convenient, extensive, and fast decoding of MPEG1/2/3 (most prominently mp3)
+files.")
+      (license license:zlib))))
+
+(define-public ecl-cl-mpg123
+  (sbcl-package->ecl-package sbcl-cl-mpg123))
+
+(define-public cl-mpg123
+  (sbcl-package->cl-source-package sbcl-cl-mpg123))
+
+(define-public sbcl-cl-out123
+  (let ((commit "6b58d3f8c2a28ad09059ac4c60fb3c781b9b421b")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-out123")
+      (version (git-version "1.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Shirakumo/cl-out123")
+               (commit commit)))
+         (file-name (git-file-name "cl-out123" version))
+         (sha256
+          (base32 "0mdwgfax6sq68wvdgjjp78i40ah7wqkpqnvaq8a1c509k7ghdgv1"))
+         (modules '((guix build utils)))
+         (snippet
+          '(begin
+             ;; Remove bundled pre-compiled libraries.
+             (delete-file-recursively "static")
+             #t))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-paths
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "low-level.lisp"
+                 (("libout123.so" all)
+                  (string-append (assoc-ref inputs "libout123")
+                                 "/lib/" all)))))
+           ;; NOTE: (Sharlatan-20210129T134529+0000): ECL package `ext' has no
+           ;; exported macro `without-interrupts' it's moved to `mp' package
+           ;; https://github.com/Shirakumo/cl-out123/issues/2
+           ;; https://gitlab.com/embeddable-common-lisp/ecl/-/blob/develop/src/lsp/mp.lsp
+           (add-after 'unpack 'fix-ecl-package-name
+             (lambda _
+               (substitute* "wrapper.lisp"
+                 (("ext:without-interrupts.*") "mp:without-interrupts\n"))
+               #t)))))
+      (inputs
+       `(("bordeaux-threads" ,sbcl-bordeaux-threads)
+         ("cffi" ,sbcl-cffi)
+         ("documentation-utils" ,sbcl-documentation-utils)
+         ("libout123" ,mpg123)
+         ("trivial-features" ,sbcl-trivial-features)
+         ("trivial-garbage" ,sbcl-trivial-garbage)))
+      (home-page "https://shirakumo.github.io/cl-out123/")
+      (synopsis "Common Lisp bindings to libout123")
+      (description
+       "This is a bindings library to @code{libout123} which allows easy
+cross-platform audio playback.")
+      (license license:zlib))))
+
+(define-public ecl-cl-out123
+  (sbcl-package->ecl-package sbcl-cl-out123))
+
+(define-public cl-out123
+  (sbcl-package->cl-source-package sbcl-cl-out123))
+
 (define-public sbcl-cl-random-forest
   (let ((commit "fedb36ce99bb6f4d7e3a7dd6d8b058f331308f91")
         (revision "1"))
@@ -12069,9 +12390,8 @@ predictable cross-platform behavior and some utilities useful for versioning.")
   (sbcl-package->ecl-package sbcl-defpackage-plus))
 
 (define-public sbcl-deploy
-  ;; tagged branch is outdated
-  (let ((revision "1")
-        (commit "59fd49719ef651a8fc11750bcfb337f132cff75f"))
+  (let ((commit "9b20e64fe924b9e31832304d87a3a72c383dc6d8")
+        (revision "2"))
     (package
       (name "sbcl-deploy")
       (version (git-version "1.0.0" revision commit))
@@ -12081,15 +12401,21 @@ predictable cross-platform behavior and some utilities useful for versioning.")
          (uri (git-reference
                (url "https://github.com/Shinmera/deploy")
                (commit commit)))
-         (file-name (git-file-name name version))
+         (file-name (git-file-name "deploy" version))
          (sha256
-          (base32 "1vl2116z4kw2pd3qd3n6mmg8g0mnwxr9dgddk86g7j1bis1z8k9a"))))
+          (base32 "07pfkibaridihg8lbq2czwa4iqifqk24n6rx7bfnv7i49p1ppja1"))))
       (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:test-asd-file "deploy-test.asd"
+         #:asd-files '("deploy.asd"
+                       "deploy-test.asd")))
+      (native-inputs
+       `(("cl-mpg123" ,sbcl-cl-mpg123)
+         ("cl-out123" ,sbcl-cl-out123)))
       (inputs
        `(("cffi" ,sbcl-cffi)
-         ("documentation-utils" ,sbcl-documentation-utils)))
-      (arguments
-       '(#:asd-files '("deploy.asd")))
+         ("documentation-utils" ,sbcl-documentation-utils)
+         ("trivial-features" ,sbcl-trivial-features)))
       (home-page "https://shinmera.github.io/deploy/")
       (synopsis "Deployment tools for standalone Common Lisp application")
       (description
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index 920b5d82ed..4e35e3e369 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2016, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -74,6 +74,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-web)
@@ -870,6 +871,36 @@ data analysis.")
                  (base32
                   "08zbzi8yx5wdlxfx9jap61vg1malc9ajf576w7a0liv6jvvrxlpj")))))))
 
+(define-public python-threadpoolctl
+  (package
+    (name "python-threadpoolctl")
+    (version "2.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "threadpoolctl" version))
+        (sha256
+         (base32
+          "0szsxcm2fbxrn83iynn42bnvrdh7mfsmkhfn8pdn7swblfb7rifx"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest"))
+             #t)))))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (home-page "https://github.com/joblib/threadpoolctl")
+    (synopsis "Python helpers for common threading libraries")
+    (description "Thread-pool Controls provides Python helpers to limit the
+number of threads used in the threadpool-backed of common native libraries used
+for scientific computing and data science (e.g. BLAS and OpenMP).")
+    (license license:bsd-3)))
+
 (define-public python-pynndescent
   (package
     (name "python-pynndescent")
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index ab3a19578e..b3927bbafe 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -445,7 +445,7 @@ aliasing facilities to work just as they would on normal mail.")
 (define-public mutt
   (package
     (name "mutt")
-    (version "2.0.4")
+    (version "2.0.5")
     (source (origin
              (method url-fetch)
              (uri (list
@@ -455,9 +455,8 @@ aliasing facilities to work just as they would on normal mail.")
                                    version ".tar.gz")))
              (sha256
               (base32
-               "1m4ig69qw4g3lhm4351snmy5i0ch65fqc9vqqdybr6jy21w7w225"))
-             (patches (search-patches "mutt-store-references.patch"
-                                      "mutt-CVE-2021-3181.patch"))))
+               "0k80s27sf7djb7zxj81ihksr8jkr71mfaa8976fzh41i1pn5l7g2"))
+             (patches (search-patches "mutt-store-references.patch"))))
     (build-system gnu-build-system)
     (inputs
      `(("cyrus-sasl" ,cyrus-sasl)
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 1820a146d1..8ddf70540a 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -26,7 +26,7 @@
 ;;; Copyright © 2020 Mason Hock <chaosmonk@riseup.net>
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
-;;; Copyright © 2020 Robert Karszniewicz <avoidr@posteo.de>
+;;; Copyright © 2020, 2021 Robert Karszniewicz <avoidr@posteo.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1430,7 +1430,7 @@ messenger protocol.")
 (define-public utox
   (package
    (name "utox")
-   (version "0.18.0")
+   (version "0.18.1")
    (source
     (origin
      (method git-fetch)
@@ -1441,7 +1441,7 @@ messenger protocol.")
      (file-name (string-append name "-" version "-checkout"))
      (sha256
       (base32
-       "0d0mwgxffg4nhai62irf8lyhd1whp9s4k892rsmqz1sra3pbjcg9"))))
+       "01rvlf94d4rkrygnnjak3cg16hrrqyi1rn9nx65y17qk2nbyh68g"))))
    (build-system cmake-build-system)
    (arguments
     `(#:configure-flags '("-DENABLE_TESTS=on")
@@ -1466,7 +1466,6 @@ messenger protocol.")
       ("filteraudio" ,filteraudio)
       ("fontconfig" ,fontconfig)
       ("freetype" ,freetype)
-      ("libsodium" ,libsodium)
       ("c-toxcore" ,c-toxcore)
       ("gtk+" ,gtk+)
       ("libvpx" ,libvpx)
diff --git a/gnu/packages/mono.scm b/gnu/packages/mono.scm
index a01b63f08a..9e5b428969 100644
--- a/gnu/packages/mono.scm
+++ b/gnu/packages/mono.scm
@@ -134,7 +134,7 @@ Java.")
 (define-public libgdiplus
   (package
     (name "libgdiplus")
-    (version "6.0.4")
+    (version "6.0.5")
     (source
      (origin
        (method url-fetch)
@@ -144,7 +144,7 @@ Java.")
              ".tar.gz"))
        (sha256
         (base32
-         "0adz5813f881z65lpyf0g0w9hcn7d7qkai6sncpkwnsxfv4khp5p"))))
+         "1vr5l09i5i91n9qzky7ab9wwvgdidvrbw26y8llip0z4qdf4w7mq"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 5902cf56ba..0da4cdd73a 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -10,7 +10,7 @@
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2017 nikita <nikita@n0.is>
 ;;; Copyright © 2017 Rodger Fox <thylakoid@openmailbox.org>
-;;; Copyright © 2017, 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2017, 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2017, 2018, 2019 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -4434,7 +4434,7 @@ standalone JACK client and an LV2 plugin is also available.")
 (define-public musescore
   (package
     (name "musescore")
-    (version "3.6")
+    (version "3.6.1")
     (source
      (origin
        (method git-fetch)
@@ -4443,7 +4443,7 @@ standalone JACK client and an LV2 plugin is also available.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0c9yf8irkism3ffzzpkx636wa6b1r1lgpsb2x63pr0gbi5ss5kyh"))
+        (base32 "087j474sdm8vcjczfqlbb1hpcvgvdghjsd132db9dlqwpgk4hmnv"))
        (modules '((guix build utils)))
        (snippet
         ;; Remove unused libraries.
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 4e8d91256d..abaab60f31 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016 Raimon Grau <raimonster@gmail.com>
 ;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
@@ -1349,14 +1349,14 @@ of the same name.")
 (define-public wireshark
   (package
     (name "wireshark")
-    (version "3.4.2")
+    (version "3.4.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.wireshark.org/download/src/wireshark-"
                            version ".tar.xz"))
        (sha256
-        (base32 "1i548w6zv6ni5n22rs90a12aakyq811493dxmadlcsj2krr6i66y"))))
+        (base32 "0ar6pxzrcpxdriz437d6ziwlhb8k5wlvrkalp3hgqwzwy1vwqrzl"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/openstack.scm b/gnu/packages/openstack.scm
index 17a4f3dcdb..26b275e0fd 100644
--- a/gnu/packages/openstack.scm
+++ b/gnu/packages/openstack.scm
@@ -135,18 +135,8 @@ formatters, and other extensions.")
       "This package provides a collection of Python deprecation patterns and
 strategies that help you collect your technical debt in a non-destructive
 manner.")
-    (properties `((python2-variant . ,(delay python2-debtcollector))))
     (license asl2.0)))
 
-(define-public python2-debtcollector
-  (let ((base (package-with-python2 (strip-python2-variant
-                                     python-debtcollector))))
-    (package
-      (inherit base)
-      (propagated-inputs
-       `(("python2-funcsigs" ,python2-funcsigs)
-         ,@(package-propagated-inputs base))))))
-
 (define-public python-hacking
   (package
     (name "python-hacking")
@@ -272,9 +262,6 @@ to docs.openstack.org and developer.openstack.org.")
   comprehensive manner.")
     (license asl2.0)))
 
-(define-public python2-os-client-config
-  (package-with-python2 python-os-client-config))
-
 (define-public python-os-testr
   (package
     (name "python-os-testr")
@@ -305,9 +292,6 @@ to docs.openstack.org and developer.openstack.org.")
   for subunit.")
     (license asl2.0)))
 
-(define-public python2-os-testr
-  (package-with-python2 python-os-testr))
-
 (define-public python-stevedore
   (package
     (name "python-stevedore")
@@ -339,9 +323,6 @@ classes for implementing common patterns for using dynamically loaded
 extensions.")
     (license asl2.0)))
 
-(define-public python2-stevedore
-  (package-with-python2 python-stevedore))
-
 (define-public python-tempest-lib
   (package
     (name "python-tempest-lib")
@@ -664,9 +645,6 @@ documentation from the OpenStack project.")
 for debugging, and better support for mocking results.")
     (license asl2.0)))
 
-(define-public python2-oslotest
-  (package-with-python2 python-oslotest))
-
 (define-public python-oslo.utils
   (package
     (name "python-oslo.utils")
@@ -850,6 +828,3 @@ permanence.")
      "Git-review is a command-line tool that helps submitting Git branches to
 Gerrit for review, or fetching existing ones.")
     (license asl2.0)))
-
-(define-public python2-git-review
-  (package-with-python2 python-git-review))
diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm
index fde19ced92..3a0c22b6d4 100644
--- a/gnu/packages/parallel.scm
+++ b/gnu/packages/parallel.scm
@@ -55,14 +55,14 @@
 (define-public parallel
   (package
     (name "parallel")
-    (version "20201222")
+    (version "20210122")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://gnu/parallel/parallel-"
                           version ".tar.bz2"))
       (sha256
-       (base32 "13kxg2vmy20ciiv1gp96g33bmvma1nh5d66jdix1fqj6xjaizr5n"))))
+       (base32 "1wxkqz6ld1bp0ilvc04vhq99qjay1nl6pbk3qzvp3sjavv9vdwdl"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -108,7 +108,7 @@ and they are executed on lists of files, hosts, users or other items.")
 (define-public slurm
   (package
    (name "slurm")
-   (version "20.11.2")
+   (version "20.11.3")
    (source (origin
             (method url-fetch)
             (uri (string-append
@@ -116,7 +116,7 @@ and they are executed on lists of files, hosts, users or other items.")
                   version ".tar.bz2"))
             (sha256
              (base32
-              "15h2vs58apgdz02ijgr46090vjyaa81qcm76mm6fxlvkkfd4pyxp"))
+              "1s70x6yh60sx63dgmp5rlhq8jcz7kxv9pk8gbs9v1jg8zps5h5bk"))
             (modules '((guix build utils)))
             (snippet
              '(begin
@@ -194,6 +194,8 @@ by managing a queue of pending work.")
 ;; in incompatible ways, as noted in
 ;; <https://slurm.schedmd.com/troubleshoot.html#network>.  Thus, keep older
 ;; releases here.  See also <https://issues.guix.gnu.org/44387>.
+;; As noted in the link, YY.MM is the release scheme, and the 'maintenance'
+;; digit does not introduce incompatibilities.
 
 (define-public slurm-20.02
   (package
@@ -209,11 +211,10 @@ by managing a queue of pending work.")
                (base32
                 "0qj4blfymrd2ry2qmb58l3jbr4jwygc3adcfw7my27rippcijlyc"))))))
 
-
 (define-public slurm-19.05
   (package
     (inherit slurm)
-    (version "19.05.3-2")
+    (version "19.05.8")
     (source (origin
               (inherit (package-source slurm))
               (method url-fetch)
@@ -222,13 +223,13 @@ by managing a queue of pending work.")
                     version ".tar.bz2"))
               (sha256
                (base32
-                "0qj4blfymrd2ry2qmb58l3jbr4jwygc3adcfw7my27rippcijlyc"))))))
+                "10c9j4a9a6d4ibpf75006mn03p8xgpaprc247x2idakysjf2fw43"))))))
 
 ;; Same as Debian 10
 (define-public slurm-18.08
   (package
     (inherit slurm)
-    (version "18.08.5-2")
+    (version "18.08.9")
     (source
       (origin
         (inherit (package-source slurm))
@@ -237,7 +238,7 @@ by managing a queue of pending work.")
                version ".tar.bz2"))
         (sha256
          (base32
-          "0xrj12nmkhvhzi7cyh4yvdm8qa51ji3j82mgpq7sx87g30f9spn4"))))))
+          "1bgrpz75m7l4xhirsd0fvnkzlkrl8v2qpmjcz60barc5qm2kn457"))))))
 
 (define-public slurm-drmaa
   (package
diff --git a/gnu/packages/patches/avogadro-boost148.patch b/gnu/packages/patches/avogadro-boost148.patch
deleted file mode 100644
index f244f14674..0000000000
--- a/gnu/packages/patches/avogadro-boost148.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-Index: avogadro-1.2.0/libavogadro/src/pythonengine_p.h
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/pythonengine_p.h
-+++ avogadro-1.2.0/libavogadro/src/pythonengine_p.h
-@@ -31,7 +31,9 @@
- 
- #include <avogadro/global.h>
- #include <avogadro/engine.h>
-+#ifndef Q_MOC_RUN
- #include <boost/python.hpp>
-+#endif
- 
- namespace Avogadro {
- 
-Index: avogadro-1.2.0/libavogadro/src/pythonextension_p.h
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/pythonextension_p.h
-+++ avogadro-1.2.0/libavogadro/src/pythonextension_p.h
-@@ -33,7 +33,9 @@
- #include <avogadro/extension.h>
- #include <avogadro/primitive.h>
- #include <avogadro/glwidget.h>
-+#ifndef Q_MOC_RUN
- #include <boost/python.hpp>
-+#endif
- 
- #include <QWidget>
- #include <QList>
-Index: avogadro-1.2.0/libavogadro/src/pythontool_p.h
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/pythontool_p.h
-+++ avogadro-1.2.0/libavogadro/src/pythontool_p.h
-@@ -31,7 +31,9 @@
- 
- #include <avogadro/global.h>
- #include <avogadro/tool.h>
-+#ifndef Q_MOC_RUN
- #include <boost/python.hpp>
-+#endif
- 
- #include <QObject>
- #include <QAction>
-Index: avogadro-1.2.0/libavogadro/src/pythoninterpreter.h
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/pythoninterpreter.h
-+++ avogadro-1.2.0/libavogadro/src/pythoninterpreter.h
-@@ -26,7 +26,9 @@
- #define PYTHONINTERPRETER_H
- 
- #include <avogadro/global.h>
-+#ifndef Q_MOC_RUN
- #include <boost/python.hpp>
-+#endif
- #include <avogadro/primitive.h>
- #include <QString>
- 
-Index: avogadro-1.2.0/libavogadro/src/pythonscript.h
-===================================================================
---- avogadro-1.2.0.orig/libavogadro/src/pythonscript.h
-+++ avogadro-1.2.0/libavogadro/src/pythonscript.h
-@@ -27,6 +27,8 @@
- #define PYTHONSCRIPT_H
- 
- #include <avogadro/global.h>
-+#ifndef Q_MOC_RUN
- #include <boost/python.hpp>
-+#endif
- 
- #include "pythonerror.h"
diff --git a/gnu/packages/patches/avogadro-eigen3-update.patch b/gnu/packages/patches/avogadro-eigen3-update.patch
deleted file mode 100644
index a5f669292f..0000000000
--- a/gnu/packages/patches/avogadro-eigen3-update.patch
+++ /dev/null
@@ -1,603 +0,0 @@
-From 43af3c117b0b3220b15c2fe2895b94bbd83d3a60 Mon Sep 17 00:00:00 2001
-From: Claudio Fernandes <claudiosf.claudio@gmail.com>
-Date: Sun, 15 Jan 2017 21:23:39 -0200
-Subject: [PATCH] Adapt Avogadro to Eigen 3.3
-
----
- CMakeLists.txt                                     |  9 +------
- avogadro/src/mainwindow.cpp                        |  5 ++--
- libavogadro/src/camera.cpp                         | 10 ++++----
- libavogadro/src/camera.h                           | 14 +++++------
- libavogadro/src/engines/wireengine.cpp             |  4 ++--
- .../crystallography/crystallographyextension.cpp   |  2 +-
- .../crystallography/ui/ceviewoptionswidget.cpp     |  2 +-
- .../src/extensions/orca/orcaanalysedialog.cpp      |  1 -
- .../src/extensions/orca/orcainputdialog.cpp        |  1 -
- .../src/extensions/qtaim/qtaimmathutilities.cpp    |  1 +
- .../qtaim/qtaimwavefunctionevaluator.cpp           | 28 +++++++++++-----------
- .../extensions/surfaces/openqube/gamessukout.cpp   |  1 +
- .../src/extensions/surfaces/openqube/slaterset.cpp |  6 +++--
- libavogadro/src/glpainter_p.cpp                    | 14 +++++------
- libavogadro/src/glwidget.cpp                       |  4 ++--
- libavogadro/src/molecule.cpp                       | 26 ++++++++++++++++++--
- libavogadro/src/navigate.cpp                       |  2 +-
- libavogadro/src/tools/bondcentrictool.cpp          | 28 +++++++++++-----------
- libavogadro/src/tools/manipulatetool.cpp           | 17 +++++++------
- libavogadro/src/tools/navigatetool.cpp             |  3 ++-
- libavogadro/src/tools/skeletontree.cpp             |  7 +++---
- libavogadro/src/tools/skeletontree.h               |  2 +-
- 22 files changed, 102 insertions(+), 85 deletions(-)
-
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -231,14 +231,7 @@ if(NOT Linguist_FOUND)
-   message(WARNING " Qt4 Linguist not found, please install it if you want Avogadro translations")
- endif()
- 
--find_package(Eigen3) # find and setup Eigen3 if available
--if(NOT EIGEN3_FOUND)
--   message(STATUS "Cannot find Eigen3, trying Eigen2")
--   find_package(Eigen2 REQUIRED) # Some version is required
--else()
--# Use Stage10 Eigen3 support
--   set (EIGEN2_SUPPORT_STAGE10_FULL_EIGEN2_API TRUE)
--endif()
-+find_package(Eigen3 REQUIRED) # find and setup Eigen3 if available
- 
- find_package(ZLIB REQUIRED)
- find_package(OpenBabel2 REQUIRED) # find and setup OpenBabel
---- a/avogadro/src/mainwindow.cpp
-+++ b/avogadro/src/mainwindow.cpp
-@@ -115,7 +115,6 @@
- #include <QDebug>
- 
- #include <Eigen/Geometry>
--#include <Eigen/Array>
- #define USEQUAT
- // This is a "hidden" exported Qt function on the Mac for Qt-4.x.
- #ifdef Q_WS_MAC
-@@ -2775,7 +2774,7 @@ protected:
-     linearGoal.row(1) = linearGoal.row(2).cross(linearGoal.row(0));
- 
-     // calculate the translation matrix
--    Transform3d goal(linearGoal);
-+    Projective3d goal(linearGoal);
- 
-     goal.pretranslate(- 3.0 * (d->glWidget->radius() + CAMERA_NEAR_DISTANCE) * Vector3d::UnitZ());
- 
-@@ -2840,7 +2839,7 @@ protected:
-     Matrix3d linearGoal = Matrix3d::Identity();
- 
-     // calculate the translation matrix
--    Transform3d goal(linearGoal);
-+    Projective3d goal(linearGoal);
- 
-     goal.pretranslate(- 3.0 * (d->glWidget->radius() + CAMERA_NEAR_DISTANCE) * Vector3d::UnitZ());
- 
---- a/libavogadro/src/camera.cpp
-+++ b/libavogadro/src/camera.cpp
-@@ -47,7 +47,7 @@ namespace Avogadro
- 
-       CameraPrivate() {};
- 
--      Eigen::Transform3d modelview, projection;
-+      Eigen::Projective3d modelview, projection;
-       const GLWidget *parent;
-       double angleOfViewY;
-       double orthoScale;
-@@ -169,20 +169,20 @@ namespace Avogadro
- 
-   double Camera::distance(const Eigen::Vector3d & point) const
-   {
--    return ( d->modelview * point ).norm();
-+    return ( d->modelview * point.homogeneous() ).head<3>().norm();
-   }
- 
--  void Camera::setModelview(const Eigen::Transform3d &matrix)
-+  void Camera::setModelview(const Eigen::Projective3d &matrix)
-   {
-     d->modelview = matrix;
-   }
- 
--  const Eigen::Transform3d & Camera::modelview() const
-+  const Eigen::Projective3d & Camera::modelview() const
-   {
-     return d->modelview;
-   }
- 
--  Eigen::Transform3d & Camera::modelview()
-+  Eigen::Projective3d & Camera::modelview()
-   {
-     return d->modelview;
-   }
---- a/libavogadro/src/camera.h
-+++ b/libavogadro/src/camera.h
-@@ -101,16 +101,16 @@ namespace Avogadro {
-       double angleOfViewY() const;
-       /** Sets 4x4 "modelview" matrix representing the camera orientation and position.
-         * @param matrix the matrix to copy from
--        * @sa Eigen::Transform3d & modelview(), applyModelview() */
--      void setModelview(const Eigen::Transform3d &matrix);
-+        * @sa Eigen::Projective3d & modelview(), applyModelview() */
-+      void setModelview(const Eigen::Projective3d &matrix);
-       /** @return a constant reference to the 4x4 "modelview" matrix representing
-         *         the camera orientation and position
--        * @sa setModelview(), Eigen::Transform3d & modelview() */
--      const Eigen::Transform3d & modelview() const;
-+        * @sa setModelview(), Eigen::Projective3d & modelview() */
-+      const Eigen::Projective3d & modelview() const;
-       /** @return a non-constant reference to the 4x4 "modelview" matrix representing
-         *         the camera orientation and position
--        * @sa setModelview(), const Eigen::Transform3d & modelview() const */
--      Eigen::Transform3d & modelview();
-+        * @sa setModelview(), const Eigen::Projective3d & modelview() const */
-+      Eigen::Projective3d & modelview();
-       /** Calls gluPerspective() or glOrtho() with parameters automatically chosen
-         * for rendering the GLWidget's molecule with this camera. Should be called
-         * only in GL_PROJECTION matrix mode. Example code is given
-@@ -342,7 +342,7 @@ namespace Avogadro {
-        * @return {x/w, y/w, z/w} vector
-        */
-       Eigen::Vector3d V4toV3DivW(const Eigen::Vector4d & v4) {
--        return v4.start<3>()/v4.w();
-+        return v4.head<3>()/v4.w();
-       }
-   };
- 
---- a/libavogadro/src/engines/wireengine.cpp
-+++ b/libavogadro/src/engines/wireengine.cpp
-@@ -109,7 +109,7 @@ namespace Avogadro {
-     const Camera *camera = pd->camera();
- 
-     // perform a rough form of frustum culling
--    Eigen::Vector3d transformedPos = pd->camera()->modelview() * v;
-+    Eigen::Vector3d transformedPos = (pd->camera()->modelview() * v.homogeneous()).head<3>();
-     double dot = transformedPos.z() / transformedPos.norm();
-     if(dot > -0.8)
-       return true;
-@@ -167,7 +167,7 @@ namespace Avogadro {
-       map = pd->colorMap(); // fall back to global color map
- 
-     // perform a rough form of frustum culling
--    Eigen::Vector3d transformedEnd1 = pd->camera()->modelview() * v1;
-+    Eigen::Vector3d transformedEnd1 = (pd->camera()->modelview() * v1.homogeneous()).head<3>();
-     double dot = transformedEnd1.z() / transformedEnd1.norm();
-     if(dot > -0.8)
-       return true; // i.e., don't bother rendering
---- a/libavogadro/src/extensions/crystallography/crystallographyextension.cpp
-+++ b/libavogadro/src/extensions/crystallography/crystallographyextension.cpp
-@@ -1989,7 +1989,7 @@ namespace Avogadro
-     // fix coordinates
-     // Apply COB matrix:
-     Eigen::Matrix3d invCob;
--    cob.computeInverse(&invCob);
-+    invCob = cob.inverse();
-     for (QList<Eigen::Vector3d>::iterator
-            it = fcoords.begin(),
-            it_end = fcoords.end();
---- a/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.cpp
-+++ b/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.cpp
-@@ -139,7 +139,7 @@ namespace Avogadro
-   {
-     // View into a Miller plane
-     Camera *camera = m_glWidget->camera();
--    Eigen::Transform3d modelView;
-+    Eigen::Projective3d modelView;
-     modelView.setIdentity();
- 
-     // OK, so we want to rotate to look along the normal at the plane
---- a/libavogadro/src/extensions/orca/orcaanalysedialog.cpp
-+++ b/libavogadro/src/extensions/orca/orcaanalysedialog.cpp
-@@ -41,7 +41,6 @@
- #include <openbabel/mol.h>
- 
- #include <Eigen/Geometry>
--#include <Eigen/LeastSquares>
- 
- #include <vector>
- 
---- a/libavogadro/src/extensions/orca/orcainputdialog.cpp
-+++ b/libavogadro/src/extensions/orca/orcainputdialog.cpp
-@@ -33,7 +33,6 @@
- #include <openbabel/mol.h>
- 
- #include <Eigen/Geometry>
--#include <Eigen/LeastSquares>
- 
- #include <vector>
- 
---- a/libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp
-+++ b/libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp
-@@ -28,6 +28,7 @@
- 
- #include <cmath>
- #include <Eigen/QR>
-+#include <Eigen/Eigenvalues>
- 
- namespace Avogadro {
-   namespace QTAIMMathUtilities {
---- a/libavogadro/src/extensions/qtaim/qtaimwavefunctionevaluator.cpp
-+++ b/libavogadro/src/extensions/qtaim/qtaimwavefunctionevaluator.cpp
-@@ -35,21 +35,21 @@ namespace Avogadro
-     m_nprim=wfn.numberOfGaussianPrimitives();
-     m_nnuc=wfn.numberOfNuclei();
- 
--    m_nucxcoord=Map<Matrix<qreal,Dynamic,1> >(wfn.xNuclearCoordinates(),m_nnuc);
--    m_nucycoord=Map<Matrix<qreal,Dynamic,1> >(wfn.yNuclearCoordinates(),m_nnuc);
--    m_nuczcoord=Map<Matrix<qreal,Dynamic,1> >(wfn.zNuclearCoordinates(),m_nnuc);
--    m_nucz=Map<Matrix<qint64,Dynamic,1> >(wfn.nuclearCharges(),m_nnuc);
--    m_X0=Map<Matrix<qreal,Dynamic,1> >(wfn.xGaussianPrimitiveCenterCoordinates(),m_nprim,1);
--    m_Y0=Map<Matrix<qreal,Dynamic,1> >(wfn.yGaussianPrimitiveCenterCoordinates(),m_nprim,1);
--    m_Z0=Map<Matrix<qreal,Dynamic,1> >(wfn.zGaussianPrimitiveCenterCoordinates(),m_nprim,1);
--    m_xamom=Map<Matrix<qint64,Dynamic,1> >(wfn.xGaussianPrimitiveAngularMomenta(),m_nprim,1);
--    m_yamom=Map<Matrix<qint64,Dynamic,1> >(wfn.yGaussianPrimitiveAngularMomenta(),m_nprim,1);
--    m_zamom=Map<Matrix<qint64,Dynamic,1> >(wfn.zGaussianPrimitiveAngularMomenta(),m_nprim,1);
--    m_alpha=Map<Matrix<qreal,Dynamic,1> >(wfn.gaussianPrimitiveExponentCoefficients(),m_nprim,1);
-+    m_nucxcoord=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.xNuclearCoordinates()),m_nnuc);
-+    m_nucycoord=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.yNuclearCoordinates()),m_nnuc);
-+    m_nuczcoord=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.zNuclearCoordinates()),m_nnuc);
-+    m_nucz=Map<Matrix<qint64,Dynamic,1> >(const_cast<qint64*>(wfn.nuclearCharges()),m_nnuc);
-+    m_X0=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.xGaussianPrimitiveCenterCoordinates()),m_nprim,1);
-+    m_Y0=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.yGaussianPrimitiveCenterCoordinates()),m_nprim,1);
-+    m_Z0=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.zGaussianPrimitiveCenterCoordinates()),m_nprim,1);
-+    m_xamom=Map<Matrix<qint64,Dynamic,1> >(const_cast<qint64*>(wfn.xGaussianPrimitiveAngularMomenta()),m_nprim,1);
-+    m_yamom=Map<Matrix<qint64,Dynamic,1> >(const_cast<qint64*>(wfn.yGaussianPrimitiveAngularMomenta()),m_nprim,1);
-+    m_zamom=Map<Matrix<qint64,Dynamic,1> >(const_cast<qint64*>(wfn.zGaussianPrimitiveAngularMomenta()),m_nprim,1);
-+    m_alpha=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.gaussianPrimitiveExponentCoefficients()),m_nprim,1);
-     // TODO Implement screening for unoccupied molecular orbitals.
--    m_occno=Map<Matrix<qreal,Dynamic,1> >(wfn.molecularOrbitalOccupationNumbers(),m_nmo,1);
--    m_orbe=Map<Matrix<qreal,Dynamic,1> >(wfn.molecularOrbitalEigenvalues(),m_nmo,1);
--    m_coef=Map<Matrix<qreal,Dynamic,Dynamic,RowMajor> >(wfn.molecularOrbitalCoefficients(),m_nmo,m_nprim);
-+    m_occno=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.molecularOrbitalOccupationNumbers()),m_nmo,1);
-+    m_orbe=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.molecularOrbitalEigenvalues()),m_nmo,1);
-+    m_coef=Map<Matrix<qreal,Dynamic,Dynamic,RowMajor> >(const_cast<qreal*>(wfn.molecularOrbitalCoefficients()),m_nmo,m_nprim);
-     m_totalEnergy=wfn.totalEnergy();
-     m_virialRatio=wfn.virialRatio();
- 
---- a/libavogadro/src/extensions/surfaces/openqube/gamessukout.cpp
-+++ b/libavogadro/src/extensions/surfaces/openqube/gamessukout.cpp
-@@ -19,6 +19,7 @@
- using Eigen::Vector3d;
- using std::vector;
- 
-+#include <iostream>
- #include <fstream>
- 
- namespace OpenQube
---- a/libavogadro/src/extensions/surfaces/openqube/slaterset.cpp
-+++ b/libavogadro/src/extensions/surfaces/openqube/slaterset.cpp
-@@ -25,9 +25,9 @@
- 
- #include "cube.h"
- 
--#include <Eigen/Array>
- #include <Eigen/LU>
- #include <Eigen/QR>
-+#include <Eigen/Eigenvalues>
- 
- #include <cmath>
- 
-@@ -250,7 +250,9 @@ bool SlaterSet::initialize()
- 
-   SelfAdjointEigenSolver<MatrixXd> s(m_overlap);
-   MatrixXd p = s.eigenvectors();
--  MatrixXd m = p * s.eigenvalues().cwise().inverse().cwise().sqrt().asDiagonal() * p.inverse();
-+  // TODO check if this is correct
-+  MatrixXd m1 = (s.eigenvalues().array().inverse().sqrt());
-+  MatrixXd m = p.array()*(m1.diagonal().array())*p.inverse().array();
-   m_normalized = m * m_eigenVectors;
- 
-   if (!(m_overlap*m*m).isIdentity())
---- a/libavogadro/src/glpainter_p.cpp
-+++ b/libavogadro/src/glpainter_p.cpp
-@@ -789,13 +789,13 @@ namespace Avogadro
-         } else {
-           points[theta-1] = Eigen::AngleAxisd(theta * (M_PI / 180.0) / 2, n) * u;
-         }
--        points[theta-1] = d->widget->camera()->modelview() * (origin + points[theta-1]);
-+        points[theta-1] = (d->widget->camera()->modelview() * (origin + points[theta-1]).homogeneous()).head<3>();
-       }
- 
-     // Get vectors representing the points' positions in terms of the model view.
--    Eigen::Vector3d _origin = d->widget->camera()->modelview() * origin;
--    Eigen::Vector3d _direction1 = d->widget->camera()->modelview() * (origin+u);
--    Eigen::Vector3d _direction2 = d->widget->camera()->modelview() * (origin+v);
-+    Eigen::Vector3d _origin = (d->widget->camera()->modelview() * origin.homogeneous()).head<3>();
-+    Eigen::Vector3d _direction1 = (d->widget->camera()->modelview() * (origin+u).homogeneous()).head<3>();
-+    Eigen::Vector3d _direction2 = (d->widget->camera()->modelview() * (origin+v).homogeneous()).head<3>();
- 
-     glPushAttrib(GL_ALL_ATTRIB_BITS);
-     glPushMatrix();
-@@ -880,12 +880,12 @@ namespace Avogadro
-         } else {
-           points[theta-1] = Eigen::AngleAxisd(theta * (M_PI / 180.0) / 2, n) * u;
-         }
--        points[theta-1] = d->widget->camera()->modelview() * (origin + points[theta-1]);
-+        points[theta-1] = (d->widget->camera()->modelview() * (origin + points[theta-1]).homogeneous()).head<3>();
-       }
- 
-     // Get vectors representing the points' positions in terms of the model view.
--    Eigen::Vector3d _direction1 = d->widget->camera()->modelview() * (origin + u);
--    Eigen::Vector3d _direction2 = d->widget->camera()->modelview() * (origin + v);
-+    Eigen::Vector3d _direction1 = (d->widget->camera()->modelview() * (origin + u).homogeneous()).head<3>();
-+    Eigen::Vector3d _direction2 = (d->widget->camera()->modelview() * (origin + v).homogeneous()).head<3>();
- 
-     glPushAttrib(GL_ALL_ATTRIB_BITS);
-     glPushMatrix();
---- a/libavogadro/src/glwidget.cpp
-+++ b/libavogadro/src/glwidget.cpp
-@@ -765,7 +765,7 @@ namespace Avogadro {
-       GLfloat fogColor[4]= {static_cast<GLfloat>(d->background.redF()), static_cast<GLfloat>(d->background.greenF()),
-                             static_cast<GLfloat>(d->background.blueF()), static_cast<GLfloat>(d->background.alphaF())};
-       glFogfv(GL_FOG_COLOR, fogColor);
--      Vector3d distance = camera()->modelview() * d->center;
-+      Vector3d distance = (camera()->modelview() * d->center.homogeneous()).head<3>();
-       double distanceToCenter = distance.norm();
-       glFogf(GL_FOG_DENSITY, 1.0);
-       glHint(GL_FOG_HINT, GL_NICEST);
-@@ -1711,7 +1711,7 @@ namespace Avogadro {
- 
-       if (d->renderModelViewDebug) {
-         // Model view matrix:
--        const Eigen::Transform3d &modelview = d->camera->modelview();
-+        const Eigen::Projective3d &modelview = d->camera->modelview();
-         y += d->pd->painter()->drawText
-             (x, y, tr("ModelView row 1: %L1 %L2 %L3 %L4")
-              .arg(modelview(0, 0), 6, 'f', 2, ' ')
---- a/libavogadro/src/molecule.cpp
-+++ b/libavogadro/src/molecule.cpp
-@@ -38,7 +38,7 @@
- #include "zmatrix.h"
- 
- #include <Eigen/Geometry>
--#include <Eigen/LeastSquares>
-+#include <Eigen/Eigenvalues>
- 
- #include <vector>
- 
-@@ -1907,7 +1907,29 @@ namespace Avogadro{
-         }
-         d->center /= static_cast<double>(nAtoms);
-         Eigen::Hyperplane<double, 3> planeCoeffs;
--        Eigen::fitHyperplane(numAtoms(), atomPositions, &planeCoeffs);
-+        //Eigen::fitHyperplane(numAtoms(), atomPositions, &planeCoeffs);
-+
-+        // TODO check if this is OK
-+        /************************/
-+        typedef Eigen::Matrix<double,3,3> CovMatrixType;
-+        typedef Eigen::Vector3d VectorType;
-+        
-+        VectorType mean = d->center;
-+        int size=3;
-+        int numPoints=numAtoms();
-+        VectorType ** points=atomPositions;
-+        CovMatrixType covMat = CovMatrixType::Zero(size, size);
-+        VectorType remean = VectorType::Zero(size);
-+        for(int i = 0; i < numPoints; ++i)
-+        {
-+          VectorType diff = (*(points[i]) - mean).conjugate();
-+          covMat += diff * diff.adjoint();
-+        }
-+        Eigen::SelfAdjointEigenSolver<CovMatrixType> eig(covMat);
-+        planeCoeffs.normal() = eig.eigenvectors().col(0);
-+        /************************/
-+
-+
-         delete[] atomPositions;
-         d->normalVector = planeCoeffs.normal();
-       }
---- a/libavogadro/src/navigate.cpp
-+++ b/libavogadro/src/navigate.cpp
-@@ -40,7 +40,7 @@ namespace Avogadro {
-   void Navigate::zoom(GLWidget *widget, const Eigen::Vector3d &goal,
-                       double delta)
-   {
--    Vector3d transformedGoal = widget->camera()->modelview() * goal;
-+    Vector3d transformedGoal = (widget->camera()->modelview() * goal.homogeneous()).head<3>();
-     double distanceToGoal = transformedGoal.norm();
- 
-     double t = ZOOM_SPEED * delta;
---- a/libavogadro/src/tools/bondcentrictool.cpp
-+++ b/libavogadro/src/tools/bondcentrictool.cpp
-@@ -578,8 +578,8 @@ namespace Avogadro {
- 
-           Vector3d clicked = *m_clickedAtom->pos();
- 
--          Vector3d axis = Vector3d(0, 0, ((widget->camera()->modelview() * other).z() >=
--                (widget->camera()->modelview() * center).z() ? -1 : 1));
-+          Vector3d axis = Vector3d(0, 0, ((widget->camera()->modelview() * other.homogeneous()).z() >=
-+                (widget->camera()->modelview() * center.homogeneous()).z() ? -1 : 1));
- 
-           Vector3d centerProj = widget->camera()->project(center);
-           centerProj -= Vector3d(0,0,centerProj.z());
-@@ -673,8 +673,8 @@ namespace Avogadro {
- 
-           Vector3d clicked = *m_clickedAtom->pos();
- 
--          Vector3d axis = Vector3d(0, 0, ((widget->camera()->modelview() * other).z() >=
--                (widget->camera()->modelview() * center).z() ? -1 : 1));
-+          Vector3d axis = Vector3d(0, 0, ((widget->camera()->modelview() * other.homogeneous()).z() >=
-+                (widget->camera()->modelview() * center.homogeneous()).z() ? -1 : 1));
- 
-           Vector3d centerProj = widget->camera()->project(center);
-           centerProj -= Vector3d(0,0,centerProj.z());
-@@ -1362,10 +1362,10 @@ namespace Avogadro {
- 
-     planeVec = length * (planeVec / planeVec.norm());
- 
--    Vector3d topLeft = widget->camera()->modelview() * (left + planeVec);
--    Vector3d topRight = widget->camera()->modelview() * (right + planeVec);
--    Vector3d botRight = widget->camera()->modelview() * (right - planeVec);
--    Vector3d botLeft = widget->camera()->modelview() * (left - planeVec);
-+    Vector3d topLeft = (widget->camera()->modelview() * (left + planeVec).homogeneous()).head<3>();
-+    Vector3d topRight = (widget->camera()->modelview() * (right + planeVec).homogeneous()).head<3>();
-+    Vector3d botRight = (widget->camera()->modelview() * (right - planeVec).homogeneous()).head<3>();
-+    Vector3d botLeft = (widget->camera()->modelview() * (left - planeVec).homogeneous()).head<3>();
- 
-     float alpha = 0.4;
-     double lineWidth = 1.5;
-@@ -1444,10 +1444,10 @@ namespace Avogadro {
-       C = D + ((C-D).normalized() * minWidth);
-     }
- 
--    Vector3d topLeft = widget->camera()->modelview() * D;
--    Vector3d topRight = widget->camera()->modelview() * C;
--    Vector3d botRight = widget->camera()->modelview() * B;
--    Vector3d botLeft = widget->camera()->modelview() * A;
-+    Vector3d topLeft = (widget->camera()->modelview() * D.homogeneous()).head<3>();
-+    Vector3d topRight = (widget->camera()->modelview() * C.homogeneous()).head<3>();
-+    Vector3d botRight = (widget->camera()->modelview() * B.homogeneous()).head<3>();
-+    Vector3d botLeft = (widget->camera()->modelview() * A.homogeneous()).head<3>();
- 
-     float alpha = 0.4;
-     double lineWidth = 1.5;
-@@ -1506,12 +1506,12 @@ namespace Avogadro {
-       Vector3d positionVector)
-   {
-     //Rotate skeleton around a particular axis and center point
--    Eigen::Transform3d rotation;
-+    Eigen::Projective3d rotation;
-     rotation = Eigen::AngleAxisd(angle, rotationVector);
-     rotation.pretranslate(centerVector);
-     rotation.translate(-centerVector);
- 
--    return rotation*positionVector;
-+    return (rotation*positionVector.homogeneous()).head<3>();
-   }
- 
-   // ##########  showAnglesChanged  ##########
---- a/libavogadro/src/tools/manipulatetool.cpp
-+++ b/libavogadro/src/tools/manipulatetool.cpp
-@@ -40,7 +40,6 @@
- #include <QAbstractButton>
- 
- using Eigen::Vector3d;
--using Eigen::Transform3d;
- using Eigen::AngleAxisd;
- 
- namespace Avogadro {
-@@ -138,7 +137,7 @@ namespace Avogadro {
-     double yRotate = m_settingsWidget->yRotateSpinBox->value() * DEG_TO_RAD;
-     double zRotate = m_settingsWidget->zRotateSpinBox->value() * DEG_TO_RAD;
- 
--    Eigen::Transform3d rotation;
-+    Eigen::Projective3d rotation;
-     rotation.matrix().setIdentity();
-     rotation.translation() = center;
-     rotation.rotate(AngleAxisd(xRotate, Vector3d::UnitX())
-@@ -152,12 +151,12 @@ namespace Avogadro {
-         if (p->type() == Primitive::AtomType) {
-           Atom *atom = static_cast<Atom*>(p);
-           tempPos = translate + *(atom->pos());
--          atom->setPos(rotation * tempPos);
-+          atom->setPos((rotation * tempPos.homogeneous()).head<3>());
-         }
-     } else {
-       foreach(Atom *atom, widget->molecule()->atoms()) {
-         tempPos = translate + *(atom->pos());
--        atom->setPos(rotation * tempPos);
-+        atom->setPos((rotation * tempPos.homogeneous()).head<3>());
-       }
-     }
- 
-@@ -199,7 +198,7 @@ namespace Avogadro {
-     widget->setCursor(Qt::SizeVerCursor);
- 
-     // Move the selected atom(s) in to or out of the screen
--    Vector3d transformedGoal = widget->camera()->modelview() * *goal;
-+    Vector3d transformedGoal = (widget->camera()->modelview() * goal->homogeneous()).head<3>();
-     double distanceToGoal = transformedGoal.norm();
- 
-     double t = ZOOM_SPEED * delta;
-@@ -255,7 +254,7 @@ namespace Avogadro {
- 
-     // Rotate the selected atoms about the center
-     // rotate only selected primitives
--    Transform3d fragmentRotation;
-+    Eigen::Projective3d fragmentRotation;
-     fragmentRotation.matrix().setIdentity();
-     fragmentRotation.translation() = *center;
-     fragmentRotation.rotate(
-@@ -266,7 +265,7 @@ namespace Avogadro {
- 
-     foreach(Primitive *p, widget->selectedPrimitives())
-       if (p->type() == Primitive::AtomType)
--        static_cast<Atom *>(p)->setPos(fragmentRotation * *static_cast<Atom *>(p)->pos());
-+        static_cast<Atom *>(p)->setPos((fragmentRotation * static_cast<Atom *>(p)->pos()->homogeneous()).head<3>());
-     widget->molecule()->update();
-   }
- 
-@@ -274,7 +273,7 @@ namespace Avogadro {
-                             double delta) const
-   {
-     // Tilt the selected atoms about the center
--    Transform3d fragmentRotation;
-+    Eigen::Projective3d fragmentRotation;
-     fragmentRotation.matrix().setIdentity();
-     fragmentRotation.translation() = *center;
-     fragmentRotation.rotate(AngleAxisd(delta * ROTATION_SPEED, widget->camera()->backTransformedZAxis()));
-@@ -282,7 +281,7 @@ namespace Avogadro {
- 
-     foreach(Primitive *p, widget->selectedPrimitives())
-       if (p->type() == Primitive::AtomType)
--        static_cast<Atom *>(p)->setPos(fragmentRotation * *static_cast<Atom *>(p)->pos());
-+        static_cast<Atom *>(p)->setPos((fragmentRotation * static_cast<Atom *>(p)->pos()->homogeneous()).head<3>());
-     widget->molecule()->update();
-   }
- 
---- a/libavogadro/src/tools/navigatetool.cpp
-+++ b/libavogadro/src/tools/navigatetool.cpp
-@@ -92,7 +92,8 @@ namespace Avogadro {
-       double sumOfWeights = 0.;
-       QList<Atom*> atoms = widget->molecule()->atoms();
-       foreach (Atom *atom, atoms) {
--        Vector3d transformedAtomPos = widget->camera()->modelview() * *atom->pos();
-+        Vector3d transformedAtomPos = (widget->camera()->modelview() *
-+                                       atom->pos()->homogeneous()).head<3>();
-         double atomDistance = transformedAtomPos.norm();
-         double dot = transformedAtomPos.z() / atomDistance;
-         double weight = exp(-30. * (1. + dot));
---- a/libavogadro/src/tools/skeletontree.cpp
-+++ b/libavogadro/src/tools/skeletontree.cpp
-@@ -29,6 +29,7 @@
- #include <avogadro/atom.h>
- #include <avogadro/bond.h>
- #include <avogadro/molecule.h>
-+#include <iostream>
- 
- using namespace Eigen;
- using namespace std;
-@@ -221,7 +222,7 @@ namespace Avogadro {
-   {
-     if (m_rootNode) {
-       //Rotate skeleton around a particular axis and center point
--      Eigen::Transform3d rotation;
-+      Eigen::Projective3d rotation;
-       rotation = Eigen::AngleAxisd(angle, rotationAxis);
-       rotation.pretranslate(centerVector);
-       rotation.translate(-centerVector);
-@@ -248,11 +249,11 @@ namespace Avogadro {
-   // ##########  recursiveRotate  ##########
- 
-   void SkeletonTree::recursiveRotate(Node* n,
--                                     const Eigen::Transform3d &rotationMatrix)
-+                                     const Eigen::Projective3d &rotationMatrix)
-   {
-     // Update the root node with the new position
-     Atom* a = n->atom();
--    a->setPos(rotationMatrix * (*a->pos()));
-+    a->setPos((rotationMatrix * (*a->pos()).homogeneous()).head<3>());
-     a->update();
- 
-     // Now update the children
---- a/libavogadro/src/tools/skeletontree.h
-+++ b/libavogadro/src/tools/skeletontree.h
-@@ -230,6 +230,6 @@ namespace Avogadro {
-        * @param centerVector Center location to rotate around.
-        */
-       void recursiveRotate(Node* n,
--                           const Eigen::Transform3d &rotationMatrix);
-+                           const Eigen::Projective3d &rotationMatrix);
- 
-   };
- } // End namespace Avogadro
\ No newline at end of file
diff --git a/gnu/packages/patches/avogadro-python-eigen-lib.patch b/gnu/packages/patches/avogadro-python-eigen-lib.patch
deleted file mode 100644
index ac9f2e30af..0000000000
--- a/gnu/packages/patches/avogadro-python-eigen-lib.patch
+++ /dev/null
@@ -1,161 +0,0 @@
-From 2d4be7ede177a8df7340fe3b209698d591ee8a04 Mon Sep 17 00:00:00 2001
-From: Claudio Fernandes <claudiosf.claudio@gmail.com>
-Date: Mon, 16 Jan 2017 19:48:23 -0200
-Subject: [PATCH] Adapt libavogadro/python to Eigen 3.3
-
----
- libavogadro/src/python/camera.cpp |  2 +-
- libavogadro/src/python/eigen.cpp  | 60 +++++++++++++++++++--------------------
- 2 files changed, 31 insertions(+), 31 deletions(-)
-
-diff --git a/libavogadro/src/python/camera.cpp b/libavogadro/src/python/camera.cpp
-index 69ca87bf8..30b32af7d 100644
---- a/libavogadro/src/python/camera.cpp
-+++ b/libavogadro/src/python/camera.cpp
-@@ -10,7 +10,7 @@ using namespace Avogadro;
- void export_Camera()
- {
- 
--  const Eigen::Transform3d& (Camera::*modelview_ptr)() const = &Camera::modelview;
-+  const Eigen::Projective3d& (Camera::*modelview_ptr)() const = &Camera::modelview;
-   Eigen::Vector3d (Camera::*unProject_ptr1)(const Eigen::Vector3d&) const = &Camera::unProject;
-   Eigen::Vector3d (Camera::*unProject_ptr2)(const QPoint&, const Eigen::Vector3d&) const = &Camera::unProject;
-   Eigen::Vector3d (Camera::*unProject_ptr3)(const QPoint&) const = &Camera::unProject;
-diff --git a/libavogadro/src/python/eigen.cpp b/libavogadro/src/python/eigen.cpp
-index c1faedbcc..20b4e719d 100644
---- a/libavogadro/src/python/eigen.cpp
-+++ b/libavogadro/src/python/eigen.cpp
-@@ -305,9 +305,9 @@ template <> struct ScalarTraits<double>
-     struct innerclass
-     {
-       //
--      //  Eigen::Transform3d --> python array (4x4)
-+      //  Eigen::Projective3d --> python array (4x4)
-       //
--      static PyObject* convert(Eigen::Transform3d const &trans)
-+      static PyObject* convert(Eigen::Projective3d const &trans)
-       {
-         npy_intp dims[2] = { 4, 4 };
-         PyObject *result = PyArray_SimpleNew(2, dims, PyArray_DOUBLE);
-@@ -321,9 +321,9 @@ template <> struct ScalarTraits<double>
-         return incref(result);
-       }
-       //
--      //  Eigen::Transform3d* --> python array (4x4)
-+      //  Eigen::Projective3d* --> python array (4x4)
-       //
--      static PyObject* convert(Eigen::Transform3d *trans)
-+      static PyObject* convert(Eigen::Projective3d *trans)
-       {
-         npy_intp dims[2] = { 4, 4 };
-         PyObject *result = PyArray_SimpleNew(2, dims, PyArray_DOUBLE);
-@@ -337,9 +337,9 @@ template <> struct ScalarTraits<double>
-         return incref(result);
-       }
-       //
--      //  const Eigen::Transform3d* --> python array (4x4)
-+      //  const Eigen::Projective3d* --> python array (4x4)
-       //
--      static PyObject* convert(const Eigen::Transform3d *trans)
-+      static PyObject* convert(const Eigen::Projective3d *trans)
-       {
-         npy_intp dims[2] = { 4, 4 };
-         PyObject *result = PyArray_SimpleNew(2, dims, PyArray_DOUBLE);
-@@ -358,10 +358,10 @@ template <> struct ScalarTraits<double>
-     Transform3d_to_python_array()
-     {
-       #ifndef WIN32
--      to_python_converter<Eigen::Transform3d, innerclass>();
-+      to_python_converter<Eigen::Projective3d, innerclass>();
-       #endif
--      to_python_converter<Eigen::Transform3d*, innerclass>();
--      to_python_converter<const Eigen::Transform3d*, innerclass>();
-+      to_python_converter<Eigen::Projective3d*, innerclass>();
-+      to_python_converter<const Eigen::Projective3d*, innerclass>();
-     }
- 
-   };
-@@ -373,17 +373,17 @@ template <> struct ScalarTraits<double>
-       // Insert an rvalue from_python converter at the tail of the
-       // chain. Used for implicit conversions
-       //
--      //  python array --> Eigen::Transform3d
-+      //  python array --> Eigen::Projective3d
-       //
-       // used for:
-       //
--      //  void function(Eigen::Transform3d vec)
--      //  void function(Eigen::Transform3d & vec)
--      //  void function(const Eigen::Transform3d & vec)
-+      //  void function(Eigen::Projective3d vec)
-+      //  void function(Eigen::Projective3d & vec)
-+      //  void function(const Eigen::Projective3d & vec)
-       //
--      converter::registry::push_back( &convertible, &construct, type_id<Eigen::Transform3d>() );
-+      converter::registry::push_back( &convertible, &construct, type_id<Eigen::Projective3d>() );
-       
--      converter::registry::insert( &convert, type_id<Eigen::Transform3d>() );
-+      converter::registry::insert( &convert, type_id<Eigen::Projective3d>() );
-     }
- 
-     static void* convert(PyObject *obj_ptr)
-@@ -401,7 +401,7 @@ template <> struct ScalarTraits<double>
-         throw_error_already_set(); // the 1D array does not have exactly 3 elements
- 
-       double *values = reinterpret_cast<double*>(array->data);
--      Eigen::Transform3d *c_obj = new Eigen::Transform3d();
-+      Eigen::Projective3d *c_obj = new Eigen::Projective3d();
-       double *dataPtr = c_obj->data();
- 
-       for (int i = 0; i < 16; ++i)
-@@ -432,7 +432,7 @@ template <> struct ScalarTraits<double>
-       // I think this is a better way to get at the double array, where is this
-       // deleted though? Does Boost::Python do it?
-       double *values = reinterpret_cast<double*>(array->data);
--      Eigen::Transform3d *storage = new Eigen::Transform3d();
-+      Eigen::Projective3d *storage = new Eigen::Projective3d();
-       double *dataPtr = storage->data();
- 
-       for (int i = 0; i < 16; ++i)
-@@ -467,21 +467,21 @@ class EigenUnitTestHelper
-     void set_vector3d_ptr(Eigen::Vector3d* vec)                 { m_vector3d = *vec; }
-     void set_const_vector3d_ptr(const Eigen::Vector3d* const vec) { m_vector3d = *vec; }
- 
--    //Eigen::Transform3d             transform3d()              { return m_transform3d; }
--    //Eigen::Transform3d&            transform3d_ref()          { return m_transform3d; }
--    const Eigen::Transform3d&      const_transform3d_ref()    { return m_transform3d; }
--    Eigen::Transform3d*            transform3d_ptr()          { return &m_transform3d; }
--    const Eigen::Transform3d*      const_transform3d_ptr()    { return &m_transform3d; }
--
--    //void set_transform3d(Eigen::Transform3d vec)                      { m_transform3d = vec; }
--    //void set_transform3d_ref(Eigen::Transform3d& vec)                 { m_transform3d = vec; }
--    void set_const_transform3d_ref(const Eigen::Transform3d& vec)     { m_transform3d = vec; }
--    void set_transform3d_ptr(Eigen::Transform3d* vec)                 { m_transform3d = *vec; }
--    void set_const_transform3d_ptr(const Eigen::Transform3d* const vec) { m_transform3d = *vec; }
-+    //Eigen::Projective3d             transform3d()              { return m_transform3d; }
-+    //Eigen::Projective3d&            transform3d_ref()          { return m_transform3d; }
-+    const Eigen::Projective3d&      const_transform3d_ref()    { return m_transform3d; }
-+    Eigen::Projective3d*            transform3d_ptr()          { return &m_transform3d; }
-+    const Eigen::Projective3d*      const_transform3d_ptr()    { return &m_transform3d; }
-+
-+    //void set_transform3d(Eigen::Projective3d vec)                      { m_transform3d = vec; }
-+    //void set_transform3d_ref(Eigen::Projective3d& vec)                 { m_transform3d = vec; }
-+    void set_const_transform3d_ref(const Eigen::Projective3d& vec)     { m_transform3d = vec; }
-+    void set_transform3d_ptr(Eigen::Projective3d* vec)                 { m_transform3d = *vec; }
-+    void set_const_transform3d_ptr(const Eigen::Projective3d* const vec) { m_transform3d = *vec; }
-  
-   private:
-     Eigen::Vector3d m_vector3d;
--    Eigen::Transform3d m_transform3d;
-+    Eigen::Projective3d m_transform3d;
- 
- };
- #endif
-@@ -529,6 +529,6 @@ void export_Eigen()
-   Vector3x_to_python_array<Eigen::Vector3i>();
-   Vector3x_from_python_array<Eigen::Vector3i>();
- 
--  // Eigen::Transform3d
-+  // Eigen::Projective3d
-   Transform3d_to_python_array();
-   Transform3d_from_python_array();
diff --git a/gnu/packages/patches/c++-gsl-find-system-gtest.patch b/gnu/packages/patches/c++-gsl-find-system-gtest.patch
new file mode 100644
index 0000000000..2def650292
--- /dev/null
+++ b/gnu/packages/patches/c++-gsl-find-system-gtest.patch
@@ -0,0 +1,96 @@
+From f5cf01083baf7e8dc8318db3648bc6098dc32d67 Mon Sep 17 00:00:00 2001
+From: Nicholas Guriev <guriev-ns@ya.ru>
+Date: Sat, 18 Apr 2020 13:30:17 +0300
+Subject: [PATCH] Search for GoogleTest via pkg-config first
+
+---
+ tests/CMakeLists.txt | 55 ++++++++++++++++++++++++--------------------
+ 1 file changed, 30 insertions(+), 25 deletions(-)
+
+diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
+index 02193197..53d475c2 100644
+--- a/tests/CMakeLists.txt
++++ b/tests/CMakeLists.txt
+@@ -1,36 +1,41 @@
+ cmake_minimum_required(VERSION 3.0.2)
+ 
+ project(GSLTests CXX)
++include(FindPkgConfig)
+ 
+ # will make visual studio generated project group files
+ set_property(GLOBAL PROPERTY USE_FOLDERS ON)
+ 
+-configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)
+-execute_process(
+-    COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
+-    RESULT_VARIABLE result
+-    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download
+-)
+-if(result)
+-    message(FATAL_ERROR "CMake step for googletest failed: ${result}")
+-endif()
++pkg_search_module(GTestMain gtest_main)
++if (NOT GTestMain_FOUND)
++    configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)
++    execute_process(
++        COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
++        RESULT_VARIABLE result
++        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download
++    )
++    if(result)
++        message(FATAL_ERROR "CMake step for googletest failed: ${result}")
++    endif()
+ 
+-execute_process(
+-    COMMAND ${CMAKE_COMMAND} --build .
+-    RESULT_VARIABLE result
+-    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download
+-)
+-if(result)
+-    message(FATAL_ERROR "CMake step for googletest failed: ${result}")
+-endif()
++    execute_process(
++        COMMAND ${CMAKE_COMMAND} --build .
++        RESULT_VARIABLE result
++        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download
++    )
++    if(result)
++        message(FATAL_ERROR "CMake step for googletest failed: ${result}")
++    endif()
+ 
+-set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
++    set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
++    set(GTestMain_LIBRARIES gtest_main)
+ 
+-add_subdirectory(
+-    ${CMAKE_CURRENT_BINARY_DIR}/googletest-src
+-    ${CMAKE_CURRENT_BINARY_DIR}/googletest-build
+-    EXCLUDE_FROM_ALL
+-)
++    add_subdirectory(
++        ${CMAKE_CURRENT_BINARY_DIR}/googletest-src
++        ${CMAKE_CURRENT_BINARY_DIR}/googletest-build
++        EXCLUDE_FROM_ALL
++    )
++endif()
+ 
+ if (MSVC AND (GSL_CXX_STANDARD EQUAL 17))
+     set(GSL_CPLUSPLUS_OPT -Zc:__cplusplus -permissive-)
+@@ -149,7 +154,7 @@ function(add_gsl_test name)
+     target_link_libraries(${name}
+         GSL
+         gsl_tests_config
+-        gtest_main
++        ${GTestMain_LIBRARIES}
+     )
+     add_test(
+         ${name}
+@@ -254,7 +259,7 @@ function(add_gsl_test_noexcept name)
+     target_link_libraries(${name}
+         GSL
+         gsl_tests_config_noexcept
+-        gtest_main
++        ${GTestMain_LIBRARIES}
+     )
+     add_test(
+       ${name}
diff --git a/gnu/packages/patches/freebayes-devendor-deps.patch b/gnu/packages/patches/freebayes-devendor-deps.patch
index 7e84666b85..9886de11fb 100644
--- a/gnu/packages/patches/freebayes-devendor-deps.patch
+++ b/gnu/packages/patches/freebayes-devendor-deps.patch
@@ -23,7 +23,7 @@ index f6bf242..bded4af 100644
 +tabixpp_dep = dependency('tabixpp', required : false)
 +fastahack_dep = dependency('fastahack', required : false)
 +smithwaterman_dep = dependency('smithwaterman', required : false)
-+vcflib_dep = dependency('libvcflib', required: false)
++vcflib_dep = dependency('vcflib', required: false)
  thread_dep = dependency('threads')
  
  if htslib_dep.found()
diff --git a/gnu/packages/patches/icecat-makeicecat.patch b/gnu/packages/patches/icecat-makeicecat.patch
index 3f16880260..edd1ced257 100644
--- a/gnu/packages/patches/icecat-makeicecat.patch
+++ b/gnu/packages/patches/icecat-makeicecat.patch
@@ -25,7 +25,7 @@ index 8be2362..48716f2 100755
 -wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz.asc
 -gpg --recv-keys --keyserver keyserver.ubuntu.com 14F26682D0916CDD81E37B6D61B7B526D98F0353
 -gpg --verify firefox-${FFVERSION}esr.source.tar.xz.asc
--echo -n 0d07b74cb66b94018e3d7f11531f95c76a955e0016a3c401241d0d85062ae7ce firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
+-echo -n 1aa041db28cd742e93d663a9da8defd33040b38d8b9470350538473251621643 firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
 -
 -echo Extracting Firefox tarball
 -tar -xf firefox-${FFVERSION}esr.source.tar.xz
@@ -37,7 +37,7 @@ index 8be2362..48716f2 100755
 +# wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz.asc
 +# gpg --recv-keys --keyserver keyserver.ubuntu.com 14F26682D0916CDD81E37B6D61B7B526D98F0353
 +# gpg --verify firefox-${FFVERSION}esr.source.tar.xz.asc
-+# echo -n 0d07b74cb66b94018e3d7f11531f95c76a955e0016a3c401241d0d85062ae7ce firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
++# echo -n 1aa041db28cd742e93d663a9da8defd33040b38d8b9470350538473251621643 firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
 +# 
 +# echo Extracting Firefox tarball
 +# tar -xf firefox-${FFVERSION}esr.source.tar.xz
diff --git a/gnu/packages/patches/mutt-CVE-2021-3181.patch b/gnu/packages/patches/mutt-CVE-2021-3181.patch
deleted file mode 100644
index df5214b052..0000000000
--- a/gnu/packages/patches/mutt-CVE-2021-3181.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-Fix CVE-2021-3181:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3181
-
-Patch copied from upstream source repository:
-
-https://gitlab.com/muttmua/mutt/-/commit/c059e20ea4c7cb3ee9ffd3500ffe313ae84b2545
-
-From c059e20ea4c7cb3ee9ffd3500ffe313ae84b2545 Mon Sep 17 00:00:00 2001
-From: Kevin McCarthy <kevin@8t8.us>
-Date: Sun, 17 Jan 2021 10:40:37 -0800
-Subject: [PATCH] Fix memory leak parsing group address.
-
-When there was a group address terminator with no previous addresses,
-an address would be allocated but not attached to the address list.
-
-Change this to only allocate when last exists.
-
-It would be more correct to not allocate at all unless we are inside a
-group list, but I will address that in a separate commit to master.
----
- rfc822.c | 5 ++---
- 1 file changed, 2 insertions(+), 3 deletions(-)
-
-diff --git a/rfc822.c b/rfc822.c
-index 7ff4eaa3..ced619f2 100644
---- a/rfc822.c
-+++ b/rfc822.c
-@@ -587,11 +587,10 @@ ADDRESS *rfc822_parse_adrlist (ADDRESS *top, const char *s)
- #endif
- 
-       /* add group terminator */
--      cur = rfc822_new_address ();
-       if (last)
-       {
--	last->next = cur;
--	last = cur;
-+	last->next = rfc822_new_address ();
-+	last = last->next;
-       }
- 
-       phraselen = 0;
--- 
-GitLab
-
diff --git a/gnu/packages/patches/pinentry-efl.patch b/gnu/packages/patches/pinentry-efl.patch
deleted file mode 100644
index 5ba79e28df..0000000000
--- a/gnu/packages/patches/pinentry-efl.patch
+++ /dev/null
@@ -1,798 +0,0 @@
-https://git.gnupg.org/cgi-bin/gitweb.cgi?p=pinentry.git;a=commit;h=948105b7a34ec9a9e5479d376b7c86bafee50a01
-This patch can be removed with the next release of pinentry.
-
-From 948105b7a34ec9a9e5479d376b7c86bafee50a01 Mon Sep 17 00:00:00 2001
-From: "William L. Thomson Jr" <wlt@o-sinc.com>
-Date: Tue, 29 May 2018 22:50:47 +0100
-Subject: [PATCH] efl: Add an EFL-based pinentry.
-
-* NEWS: Update.
-* Makefile.am: Add new efl subdirectory.
-* configure.ac: Add --enable-pinentry-efl option.
-* efl/Makefile.am: New file.
-* efl/pinentry-efl.c: New file.
-
-Signed-off-by: Damien Goutte-Gattat <dgouttegattat@incenp.org>
----
- Makefile.am        |   8 +-
- configure.ac       |  44 +++-
- efl/Makefile.am    |  38 ++++
- efl/pinentry-efl.c | 623 +++++++++++++++++++++++++++++++++++++++++++++++++++++
- 6 files changed, 716 insertions(+), 2 deletions(-)
- create mode 100644 efl/Makefile.am
- create mode 100644 efl/pinentry-efl.c
-
-diff --git a/Makefile.am b/Makefile.am
-index 8c8b8e5..b8fd0e1 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -82,10 +82,16 @@ else
- pinentry_fltk =
- endif
- 
-+if BUILD_PINENTRY_EFL
-+pinentry_efl = efl
-+else
-+pinentry_efl =
-+endif
-+
- SUBDIRS = m4 secmem pinentry ${pinentry_curses} ${pinentry_tty} \
- 	${pinentry_emacs} ${pinentry_gtk_2} ${pinentry_gnome_3} \
- 	${pinentry_qt} ${pinentry_tqt} ${pinentry_w32} \
--	${pinentry_fltk} doc
-+	${pinentry_fltk} ${pinentry_efl} doc
- 
- 
- install-exec-local:
-diff --git a/configure.ac b/configure.ac
-index ff6c2e0..e305e44 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -419,6 +419,42 @@ fi
- 
- 
- dnl
-+dnl Check for EFL pinentry programs.
-+dnl
-+AC_ARG_ENABLE(pinentry-efl,
-+            AC_HELP_STRING([--enable-pinentry-efl], [build EFL pinentry]),
-+            pinentry_efl=$enableval, pinentry_efl=maybe)
-+
-+dnl check for pkg-config
-+if test "$pinentry_efl" != "no"; then
-+	AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-+	if test x"${PKG_CONFIG}" = xno ; then
-+		pinentry_efl=no
-+	fi
-+fi
-+
-+if test "$pinentry_efl" != "no"; then
-+	AC_MSG_CHECKING([for efl])
-+	"${PKG_CONFIG}" --exists 'elementary >= 1.18'
-+	if test $? -ne 0 ; then
-+		AC_MSG_RESULT([no])
-+		AC_MSG_WARN([efl >= 1.18 is required for efl pinentry])
-+		pinentry_efl=no
-+	else
-+		AC_MSG_RESULT([yes])
-+		EFL_CFLAGS=`"${PKG_CONFIG}" --cflags ecore-x elementary`
-+		EFL_LIBS=`"${PKG_CONFIG}" --libs ecore-x elementary`
-+		AC_SUBST(EFL_CFLAGS)
-+		AC_SUBST(EFL_LIBS)
-+		if test "$pinentry_efl" != "no"
-+		then
-+			pinentry_efl=yes
-+		fi
-+	fi
-+fi
-+AM_CONDITIONAL(BUILD_PINENTRY_EFL, test "$pinentry_efl" = "yes")
-+
-+dnl
- dnl Check for GTK+-2 / GNOME3 pinentry programs.
- dnl
- AC_ARG_ENABLE(pinentry-gtk2,
-@@ -645,7 +681,11 @@ else
-               if test "$pinentry_tqt" = "yes"; then
-                 PINENTRY_DEFAULT=pinentry-tqt
-               else
--                AC_MSG_ERROR([[No pinentry enabled.]])
-+                if test "$pinentry_efl" = "yes"; then
-+                  PINENTRY_DEFAULT=pinentry-efl
-+                else
-+                  AC_MSG_ERROR([[No pinentry enabled.]])
-+                fi
-               fi
-             fi
-           fi
-@@ -721,6 +761,7 @@ secmem/Makefile
- pinentry/Makefile
- curses/Makefile
- tty/Makefile
-+efl/Makefile
- emacs/Makefile
- gtk+-2/Makefile
- gnome3/Makefile
-@@ -744,6 +785,7 @@ AC_MSG_NOTICE([
- 	Curses Pinentry ..: $pinentry_curses
- 	TTY Pinentry .....: $pinentry_tty
- 	Emacs Pinentry ...: $pinentry_emacs
-+	EFL Pinentry .....: $pinentry_efl
- 	GTK+-2 Pinentry ..: $pinentry_gtk_2
- 	GNOME 3 Pinentry .: $pinentry_gnome_3
- 	Qt Pinentry ......: $pinentry_qt $pinentry_qt_lib_version
-diff --git a/efl/Makefile.am b/efl/Makefile.am
-new file mode 100644
-index 0000000..b986a04
---- /dev/null
-+++ b/efl/Makefile.am
-@@ -0,0 +1,38 @@
-+# Makefile.am - PIN entry EFL frontend.
-+# Copyright (C) 2017 Obsidian-Studios, Inc.
-+# Author William L. Thomson Jr. <wlt@o-sinc.com>
-+#
-+# This file is part of PINENTRY.
-+#
-+# PINENTRY is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# PINENTRY is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, write to the Free Software
-+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-+
-+## Process this file with automake to produce Makefile.in
-+
-+bin_PROGRAMS = pinentry-efl
-+
-+if FALLBACK_CURSES
-+ncurses_include = $(NCURSES_INCLUDE)
-+libcurses = ../pinentry/libpinentry-curses.a $(LIBCURSES) $(LIBICONV)
-+else
-+ncurses_include =
-+libcurses =
-+endif
-+
-+AM_CPPFLAGS = $(COMMON_CFLAGS) $(EFL_CFLAGS) $(ncurses_include) \
-+	-I$(top_srcdir)/secmem -I$(top_srcdir)/pinentry
-+LDADD = ../pinentry/libpinentry.a ../secmem/libsecmem.a \
-+	$(COMMON_LIBS) $(LIBCAP) $(EFL_LIBS) $(libcurses)
-+
-+pinentry_efl_SOURCES = pinentry-efl.c
-diff --git a/efl/pinentry-efl.c b/efl/pinentry-efl.c
-new file mode 100644
-index 0000000..ca99693
---- /dev/null
-+++ b/efl/pinentry-efl.c
-@@ -0,0 +1,623 @@
-+/* pinentry-efl.c
-+   Copyright (C) 2017 Obsidian-Studios, Inc.
-+     Author William L. Thomson Jr. <wlt@o-sinc.com>
-+
-+   Based on pinentry-gtk2.c
-+   Copyright (C) 1999 Robert Bihlmeyer <robbe@orcus.priv.at>
-+   Copyright (C) 2001, 2002, 2007, 2015 g10 Code GmbH
-+   Copyright (C) 2004 by Albrecht Dreß <albrecht.dress@arcor.de>
-+
-+   pinentry-efl is a pinentry application for the EFL widget set.
-+   It tries to follow the Gnome Human Interface Guide as close as
-+   possible.
-+
-+   This program is free software; you can redistribute it and/or modify
-+   it under the terms of the GNU General Public License as published by
-+   the Free Software Foundation; either version 2 of the License, or
-+   (at your option) any later version.
-+
-+   This program is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+   GNU General Public License for more details.
-+
-+   You should have received a copy of the GNU General Public License
-+   along with this program; if not, write to the Free Software
-+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+#include "config.h"
-+#endif
-+#include <Elementary.h>
-+#include <Ecore_X.h>
-+#include <gpg-error.h>
-+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)
-+#pragma GCC diagnostic push
-+#pragma GCC diagnostic ignored "-Wstrict-prototypes"
-+#endif
-+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)
-+#pragma GCC diagnostic pop
-+#endif
-+
-+#ifdef HAVE_GETOPT_H
-+#include <getopt.h>
-+#else
-+#include "getopt.h"
-+#endif /* HAVE_GETOPT_H */
-+
-+#include "pinentry.h"
-+
-+#ifdef FALLBACK_CURSES
-+#include "pinentry-curses.h"
-+#endif
-+
-+#define PGMNAME "pinentry-efl"
-+
-+#ifndef VERSION
-+#define VERSION
-+#endif
-+
-+#define ENTRY_HIDE "Hide entry"
-+#define ENTRY_SHOW "Show entry"
-+
-+typedef enum { CONFIRM_CANCEL, CONFIRM_OK, CONFIRM_NOTOK } confirm_value_t;
-+
-+static const int WIDTH = 480;
-+static const int BUTTON_HEIGHT = 27;
-+static const int BUTTON_WIDTH = 70;
-+static const int BUTTON_ICON_SIZE = 13;
-+static const int PADDING = 5;
-+
-+static Eina_Bool got_input;
-+static Ecore_Timer *timer;
-+static Evas_Object *check_label;
-+static Evas_Object *error_label;
-+static Evas_Object *entry;
-+static Evas_Object *repeat_entry;
-+static Evas_Object *qualitybar;
-+static Evas_Object *win;
-+static char **pargv;
-+static int grab_failed;
-+static int passphrase_ok;
-+static int confirm_mode;
-+static int pargc;
-+static confirm_value_t confirm_value;
-+static pinentry_t pinentry;
-+
-+pinentry_cmd_handler_t pinentry_cmd_handler;
-+
-+static void
-+quit (void)
-+{
-+  evas_object_del(win);
-+  elm_exit();
-+  ecore_main_loop_quit ();
-+}
-+
-+static void
-+delete_event (void *data EINA_UNUSED,
-+              Evas_Object *obj EINA_UNUSED,
-+              void *event EINA_UNUSED)
-+{
-+  pinentry->close_button = 1;
-+  quit ();
-+}
-+
-+static void
-+changed_text_handler (void *data EINA_UNUSED,
-+                      Evas_Object *obj,
-+                      void *event EINA_UNUSED)
-+{
-+  const char *s;
-+  int length;
-+  int percent;
-+
-+  got_input = EINA_TRUE;
-+
-+  if (pinentry->repeat_passphrase && repeat_entry)
-+    {
-+      elm_object_text_set (repeat_entry, "");
-+      elm_object_text_set (error_label, "");
-+    }
-+
-+  if (!qualitybar || !pinentry->quality_bar)
-+    return;
-+
-+  s = elm_object_text_get (obj);
-+  if (!s)
-+    s = "";
-+  length = strlen (s);
-+  percent = length? pinentry_inq_quality (pinentry, s, length) : 0;
-+  evas_object_color_set(qualitybar,
-+                        255 - ( 2.55 * percent ),
-+                        2.55 * percent, 0, 255);
-+  elm_progressbar_value_set (qualitybar, (double) percent / 100.0);
-+}
-+
-+static void
-+on_check (void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED)
-+{
-+  if(elm_check_state_get(obj))
-+    {
-+        elm_entry_password_set(entry, EINA_FALSE);
-+        elm_object_text_set(check_label,ENTRY_HIDE);
-+    }
-+  else
-+    {
-+        elm_entry_password_set(entry, EINA_TRUE);
-+        elm_object_text_set(check_label,ENTRY_SHOW);
-+    }
-+  evas_object_size_hint_min_set(check_label,
-+                                ELM_SCALE_SIZE(BUTTON_WIDTH),
-+                                ELM_SCALE_SIZE(BUTTON_HEIGHT));
-+  evas_object_size_hint_align_set(check_label, 0, 1);
-+}
-+
-+static void
-+on_click (void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
-+{
-+  if (confirm_mode)
-+    {
-+      confirm_value = (confirm_value_t) data;
-+      quit ();
-+      return;
-+    }
-+
-+  if (data)
-+    {
-+      const char *s;
-+      const char *s2;
-+
-+      s = elm_entry_entry_get (entry);
-+      if (!s)
-+	s = "";
-+
-+      if (pinentry->repeat_passphrase && repeat_entry)
-+	{
-+	  s2 = elm_entry_entry_get (repeat_entry);
-+	  if (!s2)
-+	    s2 = "";
-+	  if (strcmp (s, s2))
-+	    {
-+              elm_object_text_set(error_label,
-+                                  pinentry->repeat_error_string?
-+                                  pinentry->repeat_error_string:
-+				   "not correctly repeated");
-+              elm_object_focus_set(entry,EINA_TRUE);
-+              return;
-+	    }
-+	  pinentry->repeat_okay = 1;
-+	}
-+
-+      passphrase_ok = 1;
-+      pinentry_setbufferlen (pinentry, strlen (s) + 1);
-+      if (pinentry->pin)
-+	strncpy (pinentry->pin, s, strlen(s) + 1);
-+    }
-+  quit ();
-+}
-+
-+static void
-+enter_callback (void *data, Evas_Object * obj, void *event_info EINA_UNUSED)
-+{
-+  if (data)
-+    elm_object_focus_set (data, 1);
-+  else
-+    on_click ((void *) CONFIRM_OK, obj, NULL);
-+}
-+
-+static Eina_Bool
-+timeout_cb (const void * data)
-+{
-+  pinentry_t pe = (pinentry_t)data;
-+  if (!got_input)
-+    {
-+      ecore_main_loop_quit();
-+      if (pe)
-+        pe->specific_err = gpg_error (GPG_ERR_TIMEOUT);
-+    }
-+
-+  timer = NULL;
-+  return ECORE_CALLBACK_DONE;
-+}
-+
-+static void
-+create_window (void)
-+{
-+  char *txt;
-+  Evas_Object *icon;
-+  Evas_Object *obj;
-+  Evas_Object *table;
-+  int btn_txt_len = 0;
-+  int row = 0;
-+  int ok_len = 0;
-+
-+  win = elm_win_util_dialog_add(NULL,"pinentry","enter pin");
-+  elm_win_autodel_set(win, EINA_TRUE);
-+  elm_win_center(win,EINA_TRUE,EINA_TRUE);
-+  evas_object_smart_callback_add(win, "delete,request", delete_event, NULL);
-+
-+  table = elm_table_add(win);
-+  elm_table_padding_set(table,ELM_SCALE_SIZE(PADDING),0);
-+  evas_object_size_hint_padding_set (table,
-+                                     ELM_SCALE_SIZE(PADDING),
-+                                     ELM_SCALE_SIZE(PADDING),
-+                                     ELM_SCALE_SIZE(PADDING),
-+                                     ELM_SCALE_SIZE(PADDING));
-+  evas_object_show(table);
-+
-+  if (pinentry->title)
-+    {
-+      txt = pinentry_utf8_to_local (pinentry->lc_ctype,
-+                                    pinentry->title);
-+      elm_win_title_set ( win, txt );
-+      free (txt);
-+    }
-+
-+  /* Description Label */
-+  if (pinentry->description)
-+    {
-+      char* aligned;
-+      int len;
-+
-+      obj = elm_label_add(table);
-+      elm_label_line_wrap_set (obj, ELM_WRAP_WORD);
-+      txt = pinentry_utf8_to_local (pinentry->lc_ctype, pinentry->description);
-+      len = strlen(txt)+20; // 20 chars for align tag
-+      aligned = calloc(len+1,sizeof(char));
-+      if(aligned)
-+        {
-+          snprintf(aligned,len, "<align=left>%s</align>",txt);
-+          elm_object_text_set(obj,aligned);
-+          free (aligned);
-+        } else
-+          elm_object_text_set(obj,txt);
-+      free (txt);
-+      evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND, 0);
-+      evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, 0);
-+      elm_table_pack(table, obj, 1, row, 5, 1);
-+      evas_object_show(obj);
-+      row++;
-+    }
-+  if (!confirm_mode && (pinentry->error || pinentry->repeat_passphrase))
-+    {
-+    /* Error Label */
-+    if (pinentry->error)
-+        txt = pinentry_utf8_to_local (pinentry->lc_ctype, pinentry->error);
-+      else
-+        txt = "";
-+      obj = elm_label_add(table);
-+      evas_object_color_set(obj, 255, 0, 0, 255);
-+      elm_object_text_set(obj,txt);
-+      elm_object_style_set(obj,"slide_bounce");
-+      elm_label_slide_duration_set(obj, 10);
-+      elm_label_slide_mode_set(obj, ELM_LABEL_SLIDE_MODE_ALWAYS);
-+      elm_label_slide_go(obj);
-+      evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND, 0);
-+      evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, 0);
-+      elm_table_pack(table, obj, 1, row, 5, 1);
-+      evas_object_show(obj);
-+      if (pinentry->error)
-+        free (txt);
-+      row++;
-+    }
-+
-+  qualitybar = NULL;
-+
-+  if (!confirm_mode)
-+    {
-+
-+    if (pinentry->prompt)
-+      {
-+        /* Entry/Prompt Label */
-+        obj = elm_label_add(table);
-+        txt = pinentry_utf8_to_local (pinentry->lc_ctype, pinentry->prompt);
-+        elm_object_text_set(obj,txt);
-+        free (txt);
-+        evas_object_size_hint_weight_set(obj, 0, EVAS_HINT_EXPAND);
-+        evas_object_size_hint_align_set(obj, 1, EVAS_HINT_FILL);
-+        elm_table_pack(table, obj, 1, row, 1, 1);
-+        evas_object_show(obj);
-+      }
-+
-+      entry = elm_entry_add(table);
-+      elm_entry_scrollable_set(entry, EINA_TRUE);
-+      elm_scroller_policy_set(entry,
-+                              ELM_SCROLLER_POLICY_OFF,
-+                              ELM_SCROLLER_POLICY_OFF);
-+      elm_entry_password_set(entry, EINA_TRUE);
-+      elm_entry_single_line_set(entry, EINA_TRUE);
-+      evas_object_size_hint_weight_set(entry, 0, 0);
-+      evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, 0);
-+      elm_table_pack(table, entry, 2, row, 4, 1);
-+      evas_object_smart_callback_add(entry,
-+                                     "changed",
-+                                     changed_text_handler,
-+                                     NULL);
-+      evas_object_show(entry);
-+      row++;
-+
-+      /* Check box */
-+      obj = elm_check_add(table);
-+      evas_object_size_hint_align_set(obj, 1, EVAS_HINT_FILL);
-+      elm_table_pack(table, obj, 1, row, 1, 1);
-+      evas_object_smart_callback_add(obj, "changed", on_check, NULL);
-+      evas_object_show(obj);
-+
-+      /* Check Label */
-+      check_label = elm_label_add(table);
-+      on_check((void *)NULL, obj, (void *)NULL);
-+      elm_table_pack(table, check_label, 2, row, 4, 1);
-+      evas_object_show(check_label);
-+      row++;
-+
-+      if (pinentry->quality_bar)
-+	{
-+          /* Quality Bar Label */
-+	  obj = elm_label_add(table);
-+          txt = pinentry_utf8_to_local (pinentry->lc_ctype,
-+                                        pinentry->quality_bar);
-+          elm_object_text_set(obj,txt);
-+          free (txt);
-+          evas_object_size_hint_weight_set(obj, 0, EVAS_HINT_EXPAND);
-+          evas_object_size_hint_align_set(obj, 1, EVAS_HINT_FILL);
-+          elm_table_pack(table, obj, 1, row, 1, 1);
-+          evas_object_show(obj);
-+
-+	  qualitybar = elm_progressbar_add(table);
-+          evas_object_color_set(qualitybar, 255, 0, 0, 255);
-+          evas_object_show(qualitybar);
-+          if (pinentry->quality_bar_tt)
-+	    elm_object_tooltip_text_set (qualitybar,
-+					 pinentry->quality_bar_tt);
-+          evas_object_size_hint_weight_set(qualitybar, EVAS_HINT_EXPAND, 0);
-+          evas_object_size_hint_align_set(qualitybar, EVAS_HINT_FILL, 0);
-+          elm_table_pack(table, qualitybar, 2, row, 4, 1);
-+          row++;
-+	}
-+
-+      if (pinentry->repeat_passphrase)
-+        {
-+          /* Repeat Label */
-+	  obj = elm_label_add(table);
-+          txt = pinentry_utf8_to_local (pinentry->lc_ctype,
-+                                        pinentry->repeat_passphrase);
-+          elm_object_text_set(obj,txt);
-+          free (txt);
-+          evas_object_size_hint_weight_set(obj, 0, EVAS_HINT_EXPAND);
-+          evas_object_size_hint_align_set(obj, 1, EVAS_HINT_FILL);
-+          elm_table_pack(table, obj, 1, row, 1, 1);
-+          evas_object_show(obj);
-+
-+          repeat_entry = elm_entry_add(table);
-+          elm_entry_scrollable_set(repeat_entry, EINA_TRUE);
-+          elm_scroller_policy_set(repeat_entry,
-+                                  ELM_SCROLLER_POLICY_OFF,
-+                                  ELM_SCROLLER_POLICY_OFF);
-+          elm_entry_password_set(repeat_entry, EINA_TRUE);
-+          elm_entry_single_line_set(repeat_entry, EINA_TRUE);
-+          evas_object_size_hint_weight_set(repeat_entry, 0, 0);
-+          evas_object_size_hint_align_set(repeat_entry, EVAS_HINT_FILL, 0);
-+          elm_table_pack(table, repeat_entry, 2, row, 4, 1);
-+	  evas_object_smart_callback_add (repeat_entry, "activated",
-+					  enter_callback, NULL);
-+          evas_object_show(repeat_entry);
-+          evas_object_smart_callback_add (entry,
-+                                          "activated",
-+                                          enter_callback,
-+                                          repeat_entry);
-+          evas_object_smart_callback_add(repeat_entry,
-+                                         "activated",
-+                                         on_click,
-+                                         (void *) CONFIRM_OK);
-+          row++;
-+        }
-+      else
-+        evas_object_smart_callback_add(entry,
-+                                       "activated",
-+                                       on_click,
-+                                       (void *) CONFIRM_OK);
-+  }
-+
-+  /* Cancel Button */
-+  if (!pinentry->one_button)
-+    {
-+      obj = elm_button_add(table);
-+      icon = elm_icon_add (table);
-+      evas_object_size_hint_aspect_set (icon, EVAS_ASPECT_CONTROL_BOTH, 1, 1);
-+      if (elm_icon_standard_set (icon, "dialog-cancel") ||
-+          elm_icon_standard_set (icon, "window-close"))
-+        {
-+          evas_object_size_hint_min_set(icon,
-+                                        ELM_SCALE_SIZE(BUTTON_ICON_SIZE),
-+                                        ELM_SCALE_SIZE(BUTTON_ICON_SIZE));
-+          elm_object_part_content_set(obj, "icon", icon);
-+          evas_object_show (icon);
-+        }
-+      else
-+        evas_object_del(icon);
-+      if (pinentry->cancel || pinentry->default_cancel)
-+        {
-+          if(pinentry->cancel)
-+            txt = pinentry_utf8_to_local (pinentry->lc_ctype, pinentry->cancel);
-+          else
-+            txt = pinentry_utf8_to_local (pinentry->lc_ctype,
-+                                          pinentry->default_cancel);
-+          if(txt[0]=='_')
-+            elm_object_text_set(obj,txt+1);
-+          else
-+            elm_object_text_set(obj,txt);
-+          btn_txt_len = ELM_SCALE_SIZE(strlen(txt) * (PADDING * 1.5));
-+          free (txt);
-+        }
-+      else
-+        elm_object_text_set(obj, "Cancel"); //STOCK_CANCEL
-+      evas_object_size_hint_align_set(obj, 0, 0);
-+      if(btn_txt_len>ELM_SCALE_SIZE(BUTTON_WIDTH))
-+        evas_object_size_hint_min_set(obj,
-+                                      btn_txt_len,
-+                                      ELM_SCALE_SIZE(BUTTON_HEIGHT));
-+      else
-+        evas_object_size_hint_min_set(obj,
-+                                      ELM_SCALE_SIZE(BUTTON_WIDTH),
-+                                      ELM_SCALE_SIZE(BUTTON_HEIGHT));
-+      elm_table_pack(table, obj, 4, row, 1, 1);
-+      evas_object_smart_callback_add(obj,
-+                                     "clicked",
-+                                     on_click,
-+                                     (void *) CONFIRM_CANCEL);
-+      evas_object_show(obj);
-+    }
-+
-+  /* OK Button */
-+  obj = elm_button_add(table);
-+  icon = elm_icon_add (table);
-+  evas_object_size_hint_aspect_set (icon, EVAS_ASPECT_CONTROL_BOTH, 1, 1);
-+  if (elm_icon_standard_set (icon, "dialog-ok") ||
-+      elm_icon_standard_set (icon, "list-add"))
-+    {
-+      evas_object_size_hint_min_set(icon,
-+                                    ELM_SCALE_SIZE(BUTTON_ICON_SIZE),
-+                                    ELM_SCALE_SIZE(BUTTON_ICON_SIZE));
-+      elm_object_part_content_set(obj, "icon", icon);
-+      evas_object_show (icon);
-+    }
-+  else
-+    evas_object_del(icon);
-+  if (pinentry->ok || pinentry->default_ok)
-+    {
-+      if(pinentry->ok)
-+        txt = pinentry_utf8_to_local (pinentry->lc_ctype, pinentry->ok);
-+      else
-+        txt = pinentry_utf8_to_local (pinentry->lc_ctype, pinentry->default_ok);
-+      if(txt[0]=='_')
-+        elm_object_text_set(obj,txt+1);
-+      else
-+        elm_object_text_set(obj,txt);
-+      ok_len = ELM_SCALE_SIZE(strlen(txt) * (PADDING * 1.5));
-+      if(ok_len>btn_txt_len)
-+        btn_txt_len = ok_len;
-+      free (txt);
-+    }
-+  else
-+    elm_object_text_set(obj,"OK"); //STOCK_OK
-+  evas_object_size_hint_align_set(obj, 0, 0);
-+  if(btn_txt_len>ELM_SCALE_SIZE(BUTTON_WIDTH))
-+    evas_object_size_hint_min_set(obj,
-+                                  btn_txt_len,
-+                                  ELM_SCALE_SIZE(BUTTON_HEIGHT));
-+  else
-+    evas_object_size_hint_min_set(obj,
-+                                  ELM_SCALE_SIZE(BUTTON_WIDTH),
-+                                  ELM_SCALE_SIZE(BUTTON_HEIGHT));
-+  elm_table_pack(table, obj, 5, row, 1, 1);
-+  evas_object_smart_callback_add(obj, "clicked", on_click, (void *) CONFIRM_OK);
-+  evas_object_show(obj);
-+
-+  /* Key/Lock Icon */
-+  obj = elm_icon_add (win);
-+  evas_object_size_hint_aspect_set (obj, EVAS_ASPECT_CONTROL_BOTH, 1, 1);
-+  if (elm_icon_standard_set (obj, "dialog-password"))
-+    {
-+      double ic_size = WIDTH/5;
-+      if(row==0)
-+        ic_size = ic_size/3.5;
-+      else if(row<4)
-+        ic_size = ic_size - ic_size/row;
-+      evas_object_size_hint_min_set(obj,
-+                                    ELM_SCALE_SIZE(ic_size),
-+                                    ELM_SCALE_SIZE(ic_size));
-+      evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-+      evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, 0.5);
-+      elm_table_pack(table, obj, 0, 0, 1, row? row:1);
-+      evas_object_show (obj);
-+    }
-+  else
-+      evas_object_del(obj);
-+
-+  /* Box for padding */
-+  obj = elm_box_add (win);
-+  elm_box_pack_end (obj, table);
-+  evas_object_show (obj);
-+
-+  elm_win_resize_object_add(win,obj);
-+  evas_object_show(win);
-+
-+  if(entry)
-+    elm_object_focus_set (entry, EINA_TRUE);
-+
-+  if (pinentry->timeout > 0)
-+    timer = ecore_timer_add (pinentry->timeout,
-+                             (Ecore_Task_Cb)timeout_cb,
-+                             pinentry);
-+}
-+
-+static int
-+efl_cmd_handler (pinentry_t pe)
-+{
-+  int want_pass = !!pe->pin;
-+
-+  got_input = EINA_FALSE;
-+  pinentry = pe;
-+  confirm_value = CONFIRM_CANCEL;
-+  passphrase_ok = 0;
-+  confirm_mode = want_pass ? 0 : 1;
-+  /* init ecore-x explicitly using DISPLAY since this can launch
-+   * from console
-+   */
-+  if (pe->display)
-+    ecore_x_init (pe->display);
-+  elm_init (pargc, pargv);
-+  create_window ();
-+  ecore_main_loop_begin ();
-+
-+  if (timer)
-+    {
-+      ecore_timer_del (timer);
-+      timer = NULL;
-+    }
-+
-+  if (confirm_value == CONFIRM_CANCEL || grab_failed)
-+    pe->canceled = 1;
-+
-+  pinentry = NULL;
-+  if (want_pass)
-+    {
-+      if (passphrase_ok && pe->pin)
-+	return strlen (pe->pin);
-+      else
-+	return -1;
-+    }
-+  else
-+    return (confirm_value == CONFIRM_OK) ? 1 : 0;
-+}
-+
-+int
-+main (int argc, char *argv[])
-+{
-+  pinentry_init (PGMNAME);
-+
-+#ifdef FALLBACK_CURSES
-+  if (pinentry_have_display (argc, argv))
-+    {
-+#endif
-+
-+  pinentry_cmd_handler = efl_cmd_handler;
-+  pargc = argc;
-+  pargv = argv;
-+
-+#ifdef FALLBACK_CURSES
-+    }
-+  else
-+    {
-+      pinentry_cmd_handler = curses_cmd_handler;
-+    }
-+#endif
-+
-+  pinentry_parse_opts (argc, argv);
-+  if (pinentry_loop ())
-+    return 1;
-+
-+  return 0;
-+}
--- 
-2.8.0.rc3
-
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index d03379c113..66e920a7bb 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -17,7 +17,7 @@
 ;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2019 Ben Sturmfels <ben@sturm.com.au>
 ;;; Copyright © 2019,2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
-;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Timotej Lazar <timotej.lazar@araneo.si>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
@@ -92,6 +92,8 @@
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tex)
+  #:use-module (gnu packages time)
+  #:use-module (gnu packages tcl)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xdisorg)
@@ -99,6 +101,52 @@
   #:use-module (gnu packages xorg)
   #:use-module (srfi srfi-1))
 
+(define-public extractpdfmark
+  (package
+    (name "extractpdfmark")
+    (version "1.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/trueroad/extractpdfmark")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "14aa6zly53j8gx5d32caiabk2j4b102xha0v9149yahz6kbn5b80"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'start-xorg-server
+           ;; The test suite wants to write to /homeless-shelter
+           (lambda _ (setenv "HOME" (getcwd)))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("gettext" ,gettext-minimal)
+       ("ghostscript" ,ghostscript)
+       ("pkg-config" ,pkg-config)
+       ("texlive" ,texlive-tiny)))
+    (inputs
+     `(("poppler" ,poppler)))
+    (home-page "https://github.com/trueroad/extractpdfmark")
+    (synopsis "Extract page mode and named destinations as PDFmark from PDF")
+    (description
+     "PDFmarks is a technique that accompanies PDF, and that is used to store
+metadata such as author or title, but also structural information such as
+bookmarks or hyperlinks.
+
+When Ghostscript reads the main PDF generated by the TeX system with embedded
+PDF files and outputs the final PDF, the PDF page mode and name targets
+etc. are not preserved.  Therefore, when you open the final PDF, it is not
+displayed correctly.  Also, remote PDF links do not work correctly.
+
+This program is able to extract the page mode and named targets as PDFmark
+from PDF.  In this way, you can obtain embedded PDF files that have kept this
+information.")
+    (license license:gpl3)))
+
 (define-public flyer-composer
   (package
     (name "flyer-composer")
@@ -1081,6 +1129,29 @@ such as zooming, highlighting an area of the screen, and a tool to navigate
 the PDF pages.")
     (license license:gpl2)))
 
+(define-public img2pdf
+  (package
+    (name "img2pdf")
+    (version "0.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "img2pdf" version))
+       (sha256
+        (base32 "1jdhmpzgj8815bhargb3xp3ydlqxwkz0mcadrflx2ga0p056kvpa"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-pikepdf" ,python-pikepdf)
+       ("python-pillow" ,python-pillow)
+       ("python-tkinter" ,python "tk")))
+    (home-page "https://gitlab.mister-muffin.de/josch/img2pdf")
+    (synopsis "Convert images to PDF via direct JPEG inclusion")
+    (description
+     "img2pdf converts images to PDF via direct JPEG inclusion.  That
+conversion is lossless: the image embedded in the PDF has the exact same color
+information for every pixel as the input.")
+    (license license:lgpl3)))
+
 (define-public fbida
   (package
     (name "fbida")
@@ -1229,7 +1300,7 @@ python-pypdf2 instead.")
 (define-public pdfarranger
   (package
     (name "pdfarranger")
-    (version "1.3.1")
+    (version "1.7.0")
     (source
      (origin
        (method git-fetch)
@@ -1238,10 +1309,10 @@ python-pypdf2 instead.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1f8m8r81322i97wkqpmf7a4kiwnq244n6cnbldh03jc49vwq2kxx"))))
+        (base32 "0dmgmvpghsm938iznalbg8h8k17a5h3q466yfc67mcll428n4nx3"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f                                ;no tests
+     '(#:tests? #f                      ;no tests
        #:phases (modify-phases %standard-phases
                   (add-after 'install 'wrap-for-typelib
                     (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -1254,12 +1325,15 @@ python-pypdf2 instead.")
     (native-inputs
      `(("intltool" ,intltool)
        ("python-distutils-extra" ,python-distutils-extra)))
-    (propagated-inputs
+    (inputs
      `(("gtk+" ,gtk+)
-       ("poppler" ,poppler)
+       ("poppler" ,poppler)))
+    (propagated-inputs
+     `(("img2pdf" ,img2pdf)
+       ("python-dateutil" ,python-dateutil)
+       ("python-pikepdf" ,python-pikepdf)
        ("python-pycairo" ,python-pycairo)
-       ("python-pygobject" ,python-pygobject)
-       ("python-pypdf2" ,python-pypdf2)))
+       ("python-pygobject" ,python-pygobject)))
     (home-page "https://github.com/jeromerobert/pdfarranger")
     (synopsis "Merge, split and re-arrange pages from PDF documents")
     (description
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index da05f7a95b..370783caf0 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2019, 2020 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2015, 2016, 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017, 2019, 2020 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
 ;;; Copyright © 2016, 2018 Mark H Weaver <mhw@netris.org>
@@ -11455,6 +11455,33 @@ lookup in %INC or by assuming it is $0 if the caller is @code{main}
 (or it can't find %INC{caller()}).")
     (license license:artistic2.0)))
 
+(define-public perl-text-soundex
+  (package
+    (name "perl-text-soundex")
+    (version "3.05")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/Text-Soundex-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "1vb0vg1109gfzaak74ynw5s00ml28f33j612g2lxw98b52s5bpgn"))))
+    (build-system perl-build-system)
+    (home-page
+     "https://metacpan.org/release/Text-Soundex")
+    (synopsis "Implementation of the soundex algorithm.")
+    (description "Soundex is a phonetic algorithm for indexing names by sound,
+as pronounced in English.  The goal is for names with the same pronunciation to
+be encoded to the same representation so that they can be matched despite
+minor differences in spelling.
+
+This module implements the original soundex algorithm developed by Robert
+Russell and Margaret Odell, patented in 1918 and 1922, as well as a variation
+called \"American Soundex\" used for US census data, and current maintained by
+the National Archives and Records Administration (NARA).")
+    (license license:perl-license)))
+
 (define-public perl-regexp-pattern
   (package
     (name "perl-regexp-pattern")
diff --git a/gnu/packages/protobuf.scm b/gnu/packages/protobuf.scm
index a414bc6bbb..61dee46d43 100644
--- a/gnu/packages/protobuf.scm
+++ b/gnu/packages/protobuf.scm
@@ -40,6 +40,7 @@
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages ruby))
diff --git a/gnu/packages/python-build.scm b/gnu/packages/python-build.scm
new file mode 100644
index 0000000000..1ce6a3095a
--- /dev/null
+++ b/gnu/packages/python-build.scm
@@ -0,0 +1,160 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
+;;; Copyright © 2018, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages python-build)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix build-system python)
+  #:use-module (guix download)
+  #:use-module (guix packages))
+
+;;; Commentary:
+;;;
+;;; Python packages to build... Python packages.  Since they are bound to be
+;;; relied on by many, their dependencies should be kept minimal, and this
+;;; module should not depend on other modules containing Python packages.
+;;;
+;;; Code:
+
+(define-public python-wheel
+  (package
+    (name "python-wheel")
+    (version "0.36.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "wheel" version))
+        (sha256
+         (base32
+          "0pi4w0brz7a86ddk6pm8p6j0w6d7jgacgxm0c2dab3k5cb8yy7p1"))))
+    (build-system python-build-system)
+    (arguments
+     ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
+     ;; fails to find the newly-built bdist_wheel library, even though it is
+     ;; available on PYTHONPATH.  What search path is consulted by setup.py?
+     '(#:tests? #f))
+    (home-page "https://bitbucket.org/pypa/wheel/")
+    (synopsis "Format for built Python packages")
+    (description
+     "A wheel is a ZIP-format archive with a specially formatted filename and
+the @code{.whl} extension.  It is designed to contain all the files for a PEP
+376 compatible install in a way that is very close to the on-disk format.  Many
+packages will be properly installed with only the @code{Unpack} step and the
+unpacked archive preserves enough information to @code{Spread} (copy data and
+scripts to their final locations) at any later time.  Wheel files can be
+installed with a newer @code{pip} or with wheel's own command line utility.")
+    (license license:expat)))
+
+(define-public python2-wheel
+  (package-with-python2 python-wheel))
+
+;;; XXX: Not really at home, but this seems the best place to prevent circular
+;;; module dependencies.
+(define-public python-toml
+  (package
+    (name "python-toml")
+    (version "0.10.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "toml" version))
+       (sha256
+        (base32
+         "03wbqm5cn685cwx2664hjdpz370njl7lf0yal8s0dkp5w4mn2swj"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f))                     ;no tests suite in release
+    (home-page "https://github.com/uiri/toml")
+    (synopsis "Library for TOML")
+    (description
+     "@code{toml} is a library for parsing and creating Tom's Obvious, Minimal
+Language (TOML) configuration files.")
+    (license license:expat)))
+
+(define-public python-pep517-bootstrap
+  (hidden-package
+   (package
+     (name "python-pep517-bootstrap")
+     (version "0.9.1")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pep517" version))
+        (sha256
+         (base32
+          "0zqidxah03qpnp6zkg3zd1kmd5f79hhdsfmlc0cldaniy80qddxf"))))
+     (build-system python-build-system)
+     (arguments
+      `(#:tests? #f))                     ;to avoid circular dependencies
+     (propagated-inputs
+      `(("python-toml" ,python-toml)
+        ("python-wheel" ,python-wheel)))
+     (home-page "https://github.com/pypa/pep517")
+     (synopsis "Wrappers to build Python packages using PEP 517 hooks")
+     (description
+      "Wrappers to build Python packages using PEP 517 hooks.")
+     (license license:expat))))
+
+;;; The name 'python-pypa-build' is chosen rather than 'python-build' to avoid
+;;; a name clash with python-build from (guix build-system python).
+(define-public python-pypa-build
+  (package
+    (name "python-pypa-build")
+    (version "0.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "build" version))
+              (sha256
+               (base32
+                "1d6m21lijwm04g50nwgsgj7x3vhblzw7jv05ah8psqgzk20bbch8"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f))                    ;to tests in the PyPI release
+    (propagated-inputs
+     `(("python-pep517", python-pep517-bootstrap)
+       ("python-toml" ,python-toml)))
+    (home-page "https://pypa-build.readthedocs.io/en/latest/")
+    (synopsis "Simple Python PEP 517 package builder")
+    (description "The @command{build} command invokes the PEP 517 hooks to
+build a distribution package.  It is a simple build tool and does not perform
+any dependency management.  It aims to keep dependencies to a minimum, in
+order to make bootstrapping easier.")
+    (license license:expat)))
+
+(define-public python-poetry-core
+  (package
+    (name "python-poetry-core")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "poetry-core" version))
+       (sha256
+        (base32 "1mgv276h1iphn5fqhp2sgkgd5d0c39hs33vgaf157x5ri7rlyrka"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/python-poetry/poetry-core")
+    (synopsis "Poetry PEP 517 build back-end")
+    (description
+     "The @code{poetry-core} module provides a PEP 517 build back-end
+implementation developed for Poetry.  This project is intended to be
+a light weight, fully compliant, self-contained package allowing PEP 517
+compatible build front-ends to build Poetry managed projects.")
+    (license license:expat)))
diff --git a/gnu/packages/python-check.scm b/gnu/packages/python-check.scm
index fb111d6e57..c23741825b 100644
--- a/gnu/packages/python-check.scm
+++ b/gnu/packages/python-check.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
@@ -1096,6 +1096,25 @@ any Python VM with basically no runtime overhead.")
     ;; mypyc/lib-rt/getargs.c
     (license (list license:expat license:psfl))))
 
+(define-public python-eradicate
+  (package
+    (name "python-eradicate")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "eradicate" version))
+       (sha256
+        (base32
+         "1j30g9jfmbfki383qxwrfds8b23yiwywj40lng4lqcf5yab4ahr7"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/myint/eradicate")
+    (synopsis "Remove commented-out code from Python sources")
+    (description "The @command{eradicate} command removes commented-out code
+from Python files.  It does this by detecting block comments that contain
+valid Python syntax that are likely to be commented out code.")
+    (license license:expat)))
+
 (define-public python-robber
   (package
     (name "python-robber")
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index bf6cedf43a..1f491cc972 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -54,6 +54,7 @@
   #:use-module (gnu packages password-utils)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-compression)
   #:use-module (gnu packages python-web)
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index c0dc0403eb..ab3769b360 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -75,6 +75,7 @@
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-compression)
   #:use-module (gnu packages python-crypto)
@@ -506,16 +507,8 @@ classes
 @item Compatible with both CPython and PyPy
 @item Cython support for better performance when used with CPython
 @end itemize")
-    (properties `((python2-variant . ,(delay python2-falcon))))
     (license license:asl2.0)))
 
-(define-public python2-falcon
-  (let ((falcon (package-with-python2 (strip-python2-variant python-falcon))))
-    (package
-      (inherit falcon)
-      (native-inputs
-       (alist-delete "python-rapidjson" (package-native-inputs falcon))))))
-
 (define-public python-falcon-cors
   (package
     (name "python-falcon-cors")
@@ -539,9 +532,6 @@ CORS object to the incoming requests, enabling the ability to serve resources
 over a different origin than that of the web application.")
     (license license:asl2.0)))
 
-(define-public python2-falcon-cors
-  (package-with-python2 python-falcon-cors))
-
 (define-public python-furl
   (package
     (name "python-furl")
@@ -2527,17 +2517,8 @@ library.")
     (description
       "This module provides a building block to stub out the HTTP requests
 portions of your testing code.")
-    (properties `((python2-variant . ,(delay python2-requests-mock))))
     (license license:asl2.0)))
 
-(define-public python2-requests-mock
-  (package (inherit (package-with-python2
-                     (strip-python2-variant python-requests-mock)))
-           (arguments
-            `(#:python ,python-2
-              ;; FIXME: 'subunit.run discover: error: no such option: --list'
-              #:tests? #f))))
-
 (define-public python-requests-toolbelt
   (package
     (name "python-requests-toolbelt")
@@ -3121,9 +3102,6 @@ concurrent HTTP client library for python using @code{gevent}.")
 provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
     (license license:isc)))
 
-(define-public python2-requests-oauthlib
-  (package-with-python2 python-requests-oauthlib))
-
 (define-public python-url
   (package
     (name "python-url")
@@ -3184,9 +3162,6 @@ provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients."
 @code{httplib2} for use with @code{requests} session objects.")
     (license license:asl2.0)))
 
-(define-public python2-cachecontrol
-  (package-with-python2 python-cachecontrol))
-
 (define-public python-cachecontrol-0.11
   (package
     (inherit python-cachecontrol)
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 9f5e3ba559..5199ac4d11 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -93,7 +93,8 @@
 ;;; Copyright © 2020 Diego N. Barbato <dnbarbato@posteo.de>
 ;;; Copyright © 2020 Leo Prikler <leo.prikler@student.tugraz.at>
 ;;; Copyright © 2019 Kristian Trandem <kristian@devup.no>
-;;; Copyright © 2020 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2020, 2021 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -145,6 +146,7 @@
   #:use-module (gnu packages haskell-xyz)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages kerberos)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libffi)
@@ -164,6 +166,7 @@
   #:use-module (gnu packages photo)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-compression)
   #:use-module (gnu packages python-crypto)
@@ -1028,9 +1031,6 @@ conventions and aliases in the same expression.")
 API for locking files.")
     (license license:expat)))
 
-(define-public python2-lockfile
-  (package-with-python2 python-lockfile))
-
 (define-public python-filelock
   (package
     (name "python-filelock")
@@ -1117,14 +1117,14 @@ other machines, such as over the network.")
 (define-public python-setuptools
   (package
     (name "python-setuptools")
-    (version "41.0.1")
+    (version "52.0.0")
     (source
      (origin
       (method url-fetch)
-      (uri (pypi-uri "setuptools" version ".zip"))
+      (uri (pypi-uri "setuptools" version))
       (sha256
        (base32
-        "04sns22y2hhsrwfy1mha2lgslvpjsjsz8xws7h2rh5a7ylkd28m2"))
+        "15ibjdjhkwgj6qbmpsxikkqdfsb1550z46fly7dm15ah4bk1wfpv"))
       (modules '((guix build utils)))
       (snippet
        '(begin
@@ -2515,9 +2515,6 @@ code introspection, and logging.")
      "Used only for bootstrapping python2-pbr, you should not need this.")
     (license license:asl2.0)))
 
-(define-public python2-pbr-minimal
-  (package-with-python2 python-pbr-minimal))
-
 (define-public python-pbr
   (package
     (inherit python-pbr-minimal)
@@ -2545,9 +2542,6 @@ versions, process requirements files and generate AUTHORS and ChangeLog file
 from git information.
 ")))
 
-(define-public python2-pbr
-  (package-with-python2 python-pbr))
-
 (define-public python-pyrsistent
   (package
     (name "python-pyrsistent")
@@ -2714,38 +2708,6 @@ with sensible defaults out of the box.")
         (base32 "0njsm0wn31l21bi118g5825ma5sa3rwn7v2x4wjd7yiiahkri337"))))
     (arguments `())))
 
-(define-public python-wheel
-  (package
-    (name "python-wheel")
-    (version "0.33.6")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "wheel" version))
-        (sha256
-         (base32
-          "0ii6f34rvpjg3nmw4bc2h7fhdsy38y1h93hghncfs5akfrldmj8h"))))
-    (build-system python-build-system)
-    (arguments
-     ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
-     ;; fails to find the newly-built bdist_wheel library, even though it is
-     ;; available on PYTHONPATH.  What search path is consulted by setup.py?
-     '(#:tests? #f))
-    (home-page "https://bitbucket.org/pypa/wheel/")
-    (synopsis "Format for built Python packages")
-    (description
-     "A wheel is a ZIP-format archive with a specially formatted filename and
-the @code{.whl} extension.  It is designed to contain all the files for a PEP
-376 compatible install in a way that is very close to the on-disk format.  Many
-packages will be properly installed with only the @code{Unpack} step and the
-unpacked archive preserves enough information to @code{Spread} (copy data and
-scripts to their final locations) at any later time.  Wheel files can be
-installed with a newer @code{pip} or with wheel's own command line utility.")
-    (license license:expat)))
-
-(define-public python2-wheel
-  (package-with-python2 python-wheel))
-
 (define-public python-vcversioner
   (package
     (name "python-vcversioner")
@@ -3226,40 +3188,8 @@ e.g. filters, callbacks and errbacks can all be promises.")
     (synopsis "Virtual Python environment builder")
     (description
      "Virtualenv is a tool to create isolated Python environments.")
-    (properties `((python2-variant . ,(delay python2-virtualenv))))
     (license license:expat)))
 
-(define-public python2-virtualenv
-  (let ((base (package-with-python2 (strip-python2-variant python-virtualenv))))
-    (package
-      (inherit base)
-      (arguments
-       `(#:python ,python-2
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'set-paths 'adjust-PYTHONPATH
-             (lambda* (#:key inputs #:allow-other-keys)
-               (let* ((python (assoc-ref inputs "python"))
-                      (python-sitedir (string-append python "/lib/python2.7"
-                                                     "/site-packages")))
-                 ;; XXX: 'python2' always comes first on PYTHONPATH
-                 ;; and shadows the 'setuptools' input.  Move python2
-                 ;; last: this should be fixed in python-build-system
-                 ;; in a future rebuild cycle.
-                 (setenv "PYTHONPATH"
-                         (string-append (string-join (delete python-sitedir
-                                                             (string-split
-                                                              (getenv "PYTHONPATH")
-                                                              #\:))
-                                                     ":")
-                                        ":" python-sitedir))
-                 (format #t "environment variable `PYTHONPATH' changed to `~a'~%"
-                         (getenv "PYTHONPATH"))
-                 #t))))))
-      (propagated-inputs
-       `(("python-contextlib2" ,python2-contextlib2)
-         ,@(package-propagated-inputs base))))))
-
 (define-public python-markupsafe
   (package
     (name "python-markupsafe")
@@ -4056,27 +3986,6 @@ which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
 (define-public python2-feedgenerator
   (package-with-python2 python-feedgenerator))
 
-(define-public python-toml
-  (package
-    (name "python-toml")
-    (version "0.10.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "toml" version))
-       (sha256
-        (base32
-         "03wbqm5cn685cwx2664hjdpz370njl7lf0yal8s0dkp5w4mn2swj"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:tests? #f))                     ;no tests suite in release
-    (home-page "https://github.com/uiri/toml")
-    (synopsis "Library for TOML")
-    (description
-     "@code{toml} is a library for parsing and creating Tom's Obvious, Minimal
-Language (TOML) configuration files.")
-    (license license:expat)))
-
 (define-public python-jsonrpc-server
   (package
     (name "python-jsonrpc-server")
@@ -5768,6 +5677,37 @@ the OleFileIO module from PIL, the Python Image Library.")
 (define-public python2-olefile
   (package-with-python2 python-olefile))
 
+(define-public python-pikepdf
+  (package
+    (name "python-pikepdf")
+    (version "2.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pikepdf" version))
+       (sha256
+        (base32 "0zapzvy9lx6yv13k3j3zaklbcpgidmsvanaz8qnbdxywcm482klm"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #false))                ;require python-xmp-toolkit
+    (native-inputs
+     `(("pybind11" ,pybind11)
+       ("python-setuptools" ,python-setuptools)
+       ("python-setuptools-scm" ,python-setuptools-scm/next)
+       ("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)
+       ("python-toml" ,python-toml)
+       ("python-wheel" ,python-wheel)))
+    (inputs
+     `(("qpdf" ,qpdf)))
+    (propagated-inputs
+     `(("python-lxml" ,python-lxml)
+       ("python-pillow" ,python-pillow)))
+    (home-page "https://github.com/pikepdf/pikepdf")
+    (synopsis "Read and write PDFs with Python")
+    (description
+     "pikepdf is a Python library for reading and writing PDF files.")
+    (license license:mpl2.0)))
+
 (define-public python-pillow
   (package
     (name "python-pillow")
@@ -6072,6 +6012,38 @@ similar to Fourier transforms, the difference being that Fourier transforms are
 localized only in frequency instead of in time and frequency.")
     (license license:expat)))
 
+(define-public python-pywal
+  (package
+    (name "python-pywal")
+    (version "3.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/dylanaraps/pywal")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'fix-home-directory
+           (lambda _
+             ;; Tests fail with "Permission denied: '/homeless-shelter'".
+             (setenv "HOME" "/tmp")
+             #t)))))
+    (inputs
+     `(("imagemagick" ,imagemagick)))
+    (home-page "https://github.com/dylanaraps/pywal")
+    (synopsis "Color palette generator and applicator")
+    (description
+     "Pywal is a tool that generates a color palette from the dominant colors
+in an image.  It then applies the colors system-wide and on-the-fly in all of
+your favourite programs.")
+    (license license:expat)))
+
 (define-public python-pywinrm
   (package
     (name "python-pywinrm")
@@ -6453,9 +6425,6 @@ The output of all running processes is collected by honcho and
 displayed.")
     (license license:expat)))
 
-(define-public python2-honcho
-  (package-with-python2 python-honcho))
-
 (define-public python-pexpect
   (package
     (name "python-pexpect")
@@ -6527,6 +6496,18 @@ child application and control it as if a human were typing commands.")
 them as the version argument or in a SCM managed file.")
     (license license:expat)))
 
+;; TODO: Merge with 'python-setuptools-scm' on the next rebuild cycle.
+(define-public python-setuptools-scm/next
+  (package
+    (inherit python-setuptools-scm)
+    (version "5.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "setuptools_scm" version))
+       (sha256
+        (base32 "0ahlrxxkx2xhmxskx57gc96w3bdndflxx30304ihvm7ds136nny8"))))))
+
 (define-public python2-setuptools-scm
   (package-with-python2 python-setuptools-scm))
 
@@ -6720,6 +6701,27 @@ need to use the older and less efficient @code{pkg_resources} package.")
 finding unresolved symbols in Python code and their corresponding imports.")
     (license license:bsd-3)))
 
+(define-public python-inotify-simple
+  (package
+    (name "python-inotify-simple")
+    (version "1.3.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/chrisjbillington/inotify_simple")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
+    (build-system python-build-system)
+    (home-page
+     "https://github.com/chrisjbillington/inotify_simple")
+    (synopsis "Simple wrapper around inotify library")
+    (description
+     "@code{inotify-simple} is a simple wrapper around inotify library.")
+    (license license:bsd-3)))
+
 (define-public python-jaraco-packaging
   (package
     (name "python-jaraco-packaging")
@@ -6800,9 +6802,6 @@ releases.")
 common operations on files to be invoked on those path objects directly.")
     (license license:expat)))
 
-(define-public python2-pathpy
-  (package-with-python2 python-pathpy))
-
 (define-public python-simplegeneric
   (package
     (name "python-simplegeneric")
@@ -7952,13 +7951,13 @@ multiprecision arithmetic.")
 (define-public python-sympy
   (package
     (name "python-sympy")
-    (version "1.6.2")
+    (version "1.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "sympy" version))
        (sha256
-        (base32 "0247skhkxanczpqqdz6n9k1axgpwl665b25hyn9vgr060p4dryhw"))))
+        (base32 "0bkb4jf24yv5i4kjpsmg1xjjccfhqyi0syv0p0xvhdbmx5hr5pm3"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -8259,16 +8258,8 @@ PEP 8.")
 
 (define-public python-pep517
   (package
+    (inherit python-pep517-bootstrap)
     (name "python-pep517")
-    (version "0.9.1")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "pep517" version))
-        (sha256
-         (base32
-          "0zqidxah03qpnp6zkg3zd1kmd5f79hhdsfmlc0cldaniy80qddxf"))))
-    (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -8284,15 +8275,7 @@ PEP 8.")
      `(("python-mock" ,python-mock)
        ("python-pytest" ,python-pytest)
        ("python-testpath" ,python-testpath)))
-    (propagated-inputs
-     `(("python-toml" ,python-toml)
-       ("python-wheel" ,python-wheel)))
-    (home-page "https://github.com/pypa/pep517")
-    (synopsis "Wrappers to build Python packages using PEP 517 hooks")
-    (description
-     "Wrappers to build Python packages using PEP 517 hooks.")
-    (properties `((python2-variant . ,(delay python2-pep517))))
-    (license license:expat)))
+    (properties `((python2-variant . ,(delay python2-pep517))))))
 
 ;; Skip the tests so we don't create a cyclical dependency with pytest.
 (define-public python2-pep517
@@ -11213,9 +11196,6 @@ supported environment, or act as a frontend to continuous integration
 servers.")
     (license license:expat)))
 
-(define-public python2-tox
-  (package-with-python2 python-tox))
-
 (define-public python-jmespath
   (package
    (name "python-jmespath")
@@ -13173,26 +13153,6 @@ powerful API: thread-safety; decorator syntax; support for memcached, redis,
 database, file, dict stores.  Cachy supports python versions 2.7+ and 3.2+.")
     (license license:expat)))
 
-(define-public python-poetry-core
-  (package
-    (name "python-poetry-core")
-    (version "1.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "poetry-core" version))
-       (sha256
-        (base32 "1mgv276h1iphn5fqhp2sgkgd5d0c39hs33vgaf157x5ri7rlyrka"))))
-    (build-system python-build-system)
-    (home-page "https://github.com/python-poetry/poetry-core")
-    (synopsis "Poetry PEP 517 build back-end")
-    (description
-     "The @code{poetry-core} module provides a PEP 517 build back-end
-implementation developed for Poetry.  This project is intended to be
-a light weight, fully compliant, self-contained package allowing PEP 517
-compatible build front-ends to build Poetry managed projects.")
-    (license license:expat)))
-
 (define-public poetry
   (package
     (name "poetry")
@@ -15758,9 +15718,6 @@ exception message with a traceback that points to the culprit.")
     (description "This package provides a MediaWiki API client.")
     (license license:expat)))
 
-(define-public python2-mwclient
-  (package-with-python2 python-mwclient))
-
 (define-public python-utils
   (package
     (name "python-utils")
@@ -16819,9 +16776,6 @@ class ShellOutSSHClientTests"))
 many of the popular cloud service providers using a unified API.")
     (license license:asl2.0)))
 
-(define-public python2-apache-libcloud
-  (package-with-python2 python-apache-libcloud))
-
 (define-public python-smmap
   (package
     (name "python-smmap")
@@ -17025,9 +16979,6 @@ will fail (i.e.  it will exit with a non-zero exit code) when any of these
 requirements is not met.")
     (license license:expat)))
 
-(define-public python2-xenon
-  (package-with-python2 python-xenon))
-
 (define-public python-pysocks
   (package
     (name "python-pysocks")
@@ -18166,6 +18117,61 @@ based on the CPython 2.7 and 3.7 parsers.")
                    license:asl2.0
                    license:expat))))    ;ast27/Parser/spark.py
 
+(define-public python-typer
+  (package
+    (name "python-typer")
+    (version "0.3.2")
+    (source
+     (origin
+       ;; Building `python-typer` from the git repository requires the `flit-core`
+       ;; Python package that is not installed by `python-flit`.
+       (method url-fetch)
+       (uri (pypi-uri "typer" version))
+       (sha256
+        (base32 "00v3h63dq8yxahp9vg3yb9r27l2niwv8gv0dbds9dzrc298dfmal"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'disable-failing-tests
+           (lambda _
+             (substitute* "tests/test_completion/test_completion.py"
+               (("def test_show_completion")
+                "def _test_show_completion")
+               (("def test_install_completion")
+                "def _test_install_completion"))
+             (substitute* "tests/test_completion/test_completion_install.py"
+               (("def test_completion_install_bash")
+                "def _test_completion_install_bash")
+               (("def test_completion_install_zsh")
+                "def _test_completion_install_zsh")
+               (("def test_completion_install_fish")
+                "def _test_completion_install_fish")
+               (("def test_completion_install_powershell")
+                "def _test_completion_install_powershell"))
+             #t))
+         (replace 'check
+           (lambda _
+             (setenv "PYTHONPATH"
+                     (string-append (getcwd) ":"
+                                    (getenv "PYTHONPATH")))
+             (invoke "python" "-m" "pytest" "tests/")
+             #t)))))
+    (propagated-inputs
+     `(("python-click" ,python-click)))
+    (native-inputs
+     `(("python-coverage" ,python-coverage)
+       ("python-pytest" ,python-pytest)
+       ("python-shellingham" ,python-shellingham)))
+    (home-page "https://github.com/tiangolo/typer")
+    (synopsis
+      "Typer builds CLI based on Python type hints")
+    (description
+      "Typer is a library for building CLI applications.  It's based on
+Python 3.6+ type hints.")
+    ;; MIT license
+    (license license:expat)))
+
 (define-public python-typing
   (package
     (name "python-typing")
@@ -18833,7 +18839,7 @@ user-space file systems in Python.")
 (define-public pybind11
   (package
     (name "pybind11")
-    (version "2.4.3")
+    (version "2.6.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -18841,7 +18847,7 @@ user-space file systems in Python.")
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "0k89w4bsfbpzw963ykg1cyszi3h3nk393qd31m6y46pcfxkqh4rd"))
+                "1wh5b1xnywzxwxkyac2wvyqwzmy1qxs341jjk820r7b825wn6yad"))
               (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (native-inputs
@@ -18907,17 +18913,8 @@ inferring type information using compile-time introspection.")
 @item Inter-process locks
 @item Generic helpers
 @end itemize\n")
-    (properties `((python2-variant . ,(delay python2-fasteners))))
     (license license:asl2.0)))
 
-(define-public python2-fasteners
-  (let ((base (package-with-python2 (strip-python2-variant python-fasteners))))
-    (package
-      (inherit base)
-      (propagated-inputs
-       `(("python2-futures" ,python2-futures)
-         ,@(package-propagated-inputs base))))))
-
 (define-public python-requests-file
   (package
     (name "python-requests-file")
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 012f9a106f..4fbb157600 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -45,6 +45,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system python)
+  #:use-module (guix build-system qt)
   #:use-module (guix packages)
   #:use-module (guix deprecation)
   #:use-module (guix utils)
@@ -72,6 +73,7 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages kde-frameworks)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
@@ -103,6 +105,91 @@
   #:use-module (gnu packages xml)
   #:use-module (srfi srfi-1))
 
+(define-public qt5ct
+  (package
+    (name "qt5ct")
+    (version "1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "mirror://sourceforge/qt5ct/qt5ct-" version ".tar.bz2"))
+       (sha256
+        (base32 "1lnx4wqk87lbr6lqc64w5g5ppjjv75kq2r0q0bz9gfpryzdw8xxg"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ; No target
+       #:imported-modules
+       (,@%gnu-build-system-modules
+        (guix build cmake-build-system)
+        (guix build qt-build-system))
+       #:modules
+       ((guix build gnu-build-system)
+        ((guix build qt-build-system)
+         #:prefix qt:)
+        (guix build utils))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "qt5ct.pro"
+               (("\\$\\$\\[QT_INSTALL_BINS\\]/lrelease")
+                (string-append (assoc-ref inputs "qttools")
+                               "/bin/lrelease")))
+             #t))
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out")))
+               (invoke "qmake"
+                       (string-append "PREFIX=" out)
+                       (string-append "BINDIR=" out "/bin")
+                       (string-append "DATADIR=" out "/share")
+                       (string-append "PLUGINDIR=" out "/lib/qt5/plugins")))
+             #t))
+         (add-after 'install 'qt-wrap
+           (assoc-ref qt:%standard-phases 'qt-wrap)))))
+    (native-inputs
+     `(("qttools" ,qttools)))
+    (inputs
+     `(("qtbase" ,qtbase)
+       ("qtsvg" ,qtsvg)))
+    (synopsis "Qt5 Configuration Tool")
+    (description "Qt5CT is a program that allows users to configure Qt5
+settings (such as icons, themes, and fonts) in desktop environments or
+window managers, that don't provide Qt integration by themselves.")
+    (home-page "https://qt5ct.sourceforge.io/")
+    (license license:bsd-2)))
+
+(define-public materialdecoration
+  (package
+    (name "materialdecoration")
+    (version "1.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/lirios/materialdecoration.git")
+         (commit "2079487116c6c794af3a15452342a69293039b46")))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32 "1pczmxbmnsgj9s1g6ap55qq2q4ccibcnhsw9b6cl5rzgc48izy06"))))
+    (build-system qt-build-system)
+    (native-inputs
+     `(("cmake-shared" ,cmake-shared)
+       ("extra-cmake-modules" ,extra-cmake-modules)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("qtbase" ,qtbase)
+       ("qtwayland" ,qtwayland)
+       ("wayland" ,wayland)))
+    (synopsis "Material Decoration for Qt")
+    (description "MaterialDecoration is a client-side decoration for Qt
+applications on Wayland.")
+    (home-page "https://github.com/lirios/materialdecoration")
+    (license license:lgpl3+)))
+
 (define-public grantlee
   (package
     (name "grantlee")
diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm
index 95e86e560a..c3f1c0c933 100644
--- a/gnu/packages/radio.scm
+++ b/gnu/packages/radio.scm
@@ -66,6 +66,7 @@
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages tex)
   #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages video)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (guix build-system cmake)
@@ -1147,3 +1148,43 @@ modes:
      "NanoVNA-Saver is a tool for reading, displaying and saving data from the
 NanoVNA vector network analyzers.")
     (license license:gpl3+)))
+
+(define-public qsstv
+  (package
+    (name "qsstv")
+    (version "9.4.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://users.telenet.be/on4qz/qsstv/downloads/"
+                           "qsstv_" version ".tar.gz"))
+       (sha256
+        (base32 "0f9hx6sy418cb23fadll298pqbc5l2lxsdivi4vgqbkvx7sw58zi"))))
+    (build-system qt-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("alsa-lib" ,alsa-lib)
+       ("fftw" ,fftw)
+       ("fftwf" ,fftwf)
+       ("hamlib" ,hamlib)
+       ("openjpeg" ,openjpeg)
+       ("pulseaudio" ,pulseaudio)
+       ("qtbase" ,qtbase)
+       ("v4l-utils" ,v4l-utils)))
+    (arguments
+     `(#:tests? #f  ; No test suite.
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (invoke "qmake"
+                     (string-append "PREFIX=" (assoc-ref outputs "out")))
+             #t)))))
+    (home-page "http://users.telenet.be/on4qz/qsstv/")
+    (synopsis "Program for receiving and transmitting SSTV and HAMDRM")
+    (description
+     "QSSTV is a program for receiving and transmitting SSTV and HAMDRM
+(sometimes called DSSTV).  It is compatible with most of MMSSTV and EasyPal.")
+    (license (list license:gpl2+
+                   license:qwt1.0))))
diff --git a/gnu/packages/rust-apps.scm b/gnu/packages/rust-apps.scm
index e7a0c4fab2..2f27f94222 100644
--- a/gnu/packages/rust-apps.scm
+++ b/gnu/packages/rust-apps.scm
@@ -248,7 +248,7 @@ also knows about symlinks, extended attributes, and Git.")
         ("rust-atty" ,rust-atty-0.2)
         ("rust-clap" ,rust-clap-2)
         ("rust-ctrlc" ,rust-ctrlc-3.1)
-        ("rust-dirs" ,rust-dirs-2.0)
+        ("rust-dirs" ,rust-dirs-2)
         ("rust-globset" ,rust-globset-0.4)
         ("rust-humantime" ,rust-humantime-2)
         ("rust-ignore" ,rust-ignore-0.4)
@@ -654,7 +654,7 @@ blanks grouped by language.")
                (install-file "README.md" doc)
                #t))))
        #:cargo-inputs
-       (("rust-embed-resource" ,rust-embed-resource-1.3)
+       (("rust-embed-resource" ,rust-embed-resource-1)
         ("rust-derive-builder" ,rust-derive-builder-0.9)
         ("rust-env-logger" ,rust-env-logger-0.7)
         ("rust-glob" ,rust-glob-0.3)
diff --git a/gnu/packages/search.scm b/gnu/packages/search.scm
index e261e64a7f..d458747872 100644
--- a/gnu/packages/search.scm
+++ b/gnu/packages/search.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
+;;; Copyright © 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,6 +27,7 @@
                 #:select (gpl2 gpl2+ gpl3+ lgpl2.1+ bsd-3 x11 perl-license))
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
@@ -35,7 +37,9 @@
   #:use-module (gnu packages check)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages less)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages python)
@@ -413,4 +417,59 @@ online libraries.  It provides fast search of document text and
 bibliographic data and simple document and bibtex retrieval.")
     (license gpl3+)))
 
+(define-public ugrep
+  (package
+    (name "ugrep")
+    (version "3.1.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/Genivia/ugrep")
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32 "1ydnpdhn1mp2pnbqzvwabrp573626k89kbv97fax6y1bz2pamrg4"))
+              (file-name (string-append name "-" version "-checkout"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (delete-file-recursively "bin")  ;; pre-build executables
+                  (for-each delete-file (find-files "tests" "^archive\\..*"))
+                  (for-each delete-file (find-files "tests" "^.*\\.pdf$"))
+                  (for-each delete-file (find-files "tests" "^.*\\.class$"))
+                  #t))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("bzip2" ,bzip2)
+       ("less" ,less)
+       ("lz4" ,lz4)
+       ("lzip" ,lzip)  ;; lzma
+       ("pcre2" ,pcre2)
+       ("zlib" ,zlib)))
+    (arguments
+     `(#:tests? #f ;; No script for re-building the binary test input-files
+       #:test-target "test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'check-setup
+           (lambda _
+             ;; unpatch shepengs in tests
+             (substitute* '("tests/Hello.bat"
+                            "tests/Hello.sh")
+               (("#!/gnu/store/.*/bin/sh") "#!/bin/sh")))))))
+    (home-page "https://github.com/Genivia/ugrep/")
+    (synopsis "Faster grep with an interactive query UI")
+    (description "Ugrep is a ultra fast searcher of file systems, text
+and binary files, source code, archives, compressed files, documents, and
+more.
+
+While still being compatible with the standard GNU/BSD grep command-line
+options, ugrep supports fuzzy search as well as structured and (adjustable)
+colored output, piped through \"less\" for pagination.  An interactive query
+UI allows refinement and has a built-in help (press F1).  Ugrep implements
+multi-threaded and other techniques to speed up search, pattern-matching and
+decompression.  Many pre-defined regexps ease searching e.g. C typdefs or XML
+attributes.  Results can be output in several structured or self-defined
+formats.")
+    (license bsd-3)))
+
 ;;; search.scm ends here
diff --git a/gnu/packages/sequoia.scm b/gnu/packages/sequoia.scm
index ce3396a7c4..bd8c6248d9 100644
--- a/gnu/packages/sequoia.scm
+++ b/gnu/packages/sequoia.scm
@@ -83,7 +83,7 @@
         ("rust-colored" ,rust-colored-1.9.1)
         ("rust-crossterm" ,rust-crossterm-0.13)
         ("rust-ctor" ,rust-ctor-0.1)
-        ("rust-dirs" ,rust-dirs-2.0)
+        ("rust-dirs" ,rust-dirs-2)
         ("rust-dyn-clone" ,rust-dyn-clone-1)
         ("rust-ed25519-dalek" ,rust-ed25519-dalek-1)
         ("rust-eax" ,rust-eax-0.3)
diff --git a/gnu/packages/sphinx.scm b/gnu/packages/sphinx.scm
index 182d2e21e5..7da42d958c 100644
--- a/gnu/packages/sphinx.scm
+++ b/gnu/packages/sphinx.scm
@@ -42,6 +42,7 @@
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages time))
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index 0afd8ed2b2..04c8c6ceaa 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2016, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2019 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2016, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
@@ -671,18 +671,17 @@ manipulating key files.")
 (define-public sshpass
   (package
     (name "sshpass")
-    (version "1.06")
-    (synopsis "Non-interactive password authentication with SSH")
-    (home-page "https://sourceforge.net/projects/sshpass/")
+    (version "1.09")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/sshpass/sshpass/"
                            version "/sshpass-" version ".tar.gz"))
        (sha256
-        (base32
-         "0q7fblaczb7kwbsz0gdy9267z0sllzgmf0c7z5c9mf88wv74ycn6"))))
+        (base32 "1dwzqknpswa8vjlbwsx9rcq1j2a7px9h9i2anh09pzkz0mg6wx3i"))))
     (build-system gnu-build-system)
+    (home-page "https://sourceforge.net/projects/sshpass/")
+    (synopsis "Non-interactive password authentication with SSH")
     (description "sshpass is a tool for non-interactively performing password
 authentication with SSH's so-called @dfn{interactive keyboard password
 authentication}.")
diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm
index 7e479a0d39..eb6cb7b4e3 100644
--- a/gnu/packages/syncthing.scm
+++ b/gnu/packages/syncthing.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -189,58 +190,66 @@ Protocol.")
     (license mpl2.0)))
 
 (define-public syncthing-gtk
-  (package
-    (name "syncthing-gtk")
-    (version "0.9.4.4")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/syncthing/syncthing-gtk")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0nc0wd7qvyri7841c3dd9in5d7367hys0isyw8znv5fj4c0a6v1f"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:python ,python-2
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'hardcode-dependencies
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((psmisc (assoc-ref inputs "psmisc"))
-                   (syncthing (assoc-ref inputs "syncthing")))
-               ;; Hardcode dependencies paths to avoid propagation.
-               (substitute* "syncthing_gtk/tools.py"
-                 (("killall") (string-append psmisc "/bin/killall")))
-               (substitute* "syncthing_gtk/configuration.py"
-                 (("/usr/bin/syncthing") (string-append syncthing
-                                                        "/bin/syncthing"))))
-             #t))
-         (add-after 'wrap 'wrap-libs
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (wrap-program (string-append out "/bin/syncthing-gtk")
-                 `("GI_TYPELIB_PATH" ":" prefix
-                   (,(getenv "GI_TYPELIB_PATH"))))
-               #t))))))
-    (inputs
-     `(("gtk+" ,gtk+)
-       ("libappindicator" ,libappindicator)
-       ("libnotify" ,libnotify)
-       ("librsvg" ,librsvg)
-       ("python2-bcrypt" ,python2-bcrypt)
-       ("python2-dateutil" ,python2-dateutil)
-       ("python2-pycairo" ,python2-pycairo)
-       ("python2-pygobject" ,python2-pygobject)
-       ("python-nautilus" ,python-nautilus)
-       ("psmisc" ,psmisc)
-       ("syncthing" ,syncthing)))
-    (native-inputs
-     `(("python2-setuptools" ,python2-setuptools)))
-    (home-page "https://github.com/syncthing/syncthing-gtk")
-    (synopsis "GTK3 based GUI and notification area icon for Syncthing")
-    (description "@code{syncthing-gtk} is a GTK3 Python based GUI and
+  ;; The commit used below corresponds to the latest commit of the
+  ;; python3-port branch maintained by Debian.  Upstream hasn't bothered
+  ;; porting to Python 3 (see:
+  ;; https://github.com/kozec/syncthing-gtk/issues/487).
+  (let ((revision "1")
+        (commit "c46fbd8ad1d12d409da8942702a2f119cf45514a"))
+    (package
+      (name "syncthing-gtk")
+      (version (git-version "0.9.4.4" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://salsa.debian.org/debian/syncthing-gtk.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1x1c8snf0jpgjmyyidjw0015ksk5ishqn817wx8vs9i0lfgnnbbg"))))
+      (build-system python-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'hardcode-dependencies
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((psmisc (assoc-ref inputs "psmisc"))
+                     (syncthing (assoc-ref inputs "syncthing")))
+                 ;; Hardcode dependencies paths to avoid propagation.
+                 (substitute* "syncthing_gtk/tools.py"
+                   (("killall") (string-append psmisc "/bin/killall")))
+                 (substitute* "syncthing_gtk/configuration.py"
+                   (("/usr/bin/syncthing") (string-append syncthing
+                                                          "/bin/syncthing"))))))
+           (add-after 'unpack 'remove-windows.py
+             (lambda _
+               ;; A Windows-specific module that fails to load with
+               ;; "ModuleNotFoundError: No module named 'msvcrt'.
+               (delete-file "syncthing_gtk/windows.py")))
+           (add-after 'wrap 'wrap-libs
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out")))
+                 (wrap-program (string-append out "/bin/syncthing-gtk")
+                   `("GI_TYPELIB_PATH" ":" prefix
+                     (,(getenv "GI_TYPELIB_PATH"))))))))))
+      (inputs
+       `(("gtk+" ,gtk+)
+         ("libappindicator" ,libappindicator)
+         ("libnotify" ,libnotify)
+         ("librsvg" ,librsvg)
+         ("python-bcrypt" ,python-bcrypt)
+         ("python-dateutil" ,python-dateutil)
+         ("python-pycairo" ,python-pycairo)
+         ("python-pygobject" ,python-pygobject)
+         ("python-nautilus" ,python-nautilus)
+         ("psmisc" ,psmisc)
+         ("syncthing" ,syncthing)))
+      ;; (native-inputs
+      ;;  `(("python2-setuptools" ,python2-setuptools)))
+      (home-page "https://github.com/syncthing/syncthing-gtk")
+      (synopsis "GTK3 based GUI and notification area icon for Syncthing")
+      (description "@code{syncthing-gtk} is a GTK3 Python based GUI and
 notification area icon for Syncthing.  Supported Syncthing features:
 
 @itemize
@@ -250,7 +259,7 @@ notification area icon for Syncthing.  Supported Syncthing features:
 @item Restart, shutdown server
 @item Editing daemon settings
 @end itemize\n")
-    (license gpl2)))
+      (license gpl2))))
 
 (define-public go-github-com-jackpal-go-nat-pmp
   (package
diff --git a/gnu/packages/syndication.scm b/gnu/packages/syndication.scm
index 54fa221fa6..0e33f99910 100644
--- a/gnu/packages/syndication.scm
+++ b/gnu/packages/syndication.scm
@@ -196,7 +196,10 @@ file system, and many more features.")
         (base32 "1g9463bvswsm899j6dfhslcg6np70m5wq143mjicr24zy8d17bm7"))))
     (build-system glib-or-gtk-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags
+       (list
+         "--disable-static")
+       #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'prepare-build-environment
            (lambda* (#:key inputs #:allow-other-keys)
@@ -222,7 +225,8 @@ file system, and many more features.")
        ("pkg-config" ,pkg-config)
        ("which" ,which)))
     (inputs
-     `(("glib-networking" ,glib-networking)
+     `(("glib" ,glib)
+       ("glib-networking" ,glib-networking)
        ("gnome-keyring" ,gnome-keyring)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("gstreamer" ,gstreamer)
@@ -230,11 +234,14 @@ file system, and many more features.")
        ("libnotify" ,libnotify)
        ("libpeas" ,libpeas)
        ("libsecret" ,libsecret)
+       ("libsoup" ,libsoup)
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)
+       ("pango" ,pango)
        ("python" ,python)
        ("python-pycairo" ,python-pycairo)
        ("python-pygobject" ,python-pygobject)
+       ("sqlite" ,sqlite)
        ("webkitgtk" ,webkitgtk)))
     (home-page "https://lzone.de/liferea/")
     (synopsis "News reader for GTK/GNOME")
diff --git a/gnu/packages/telegram.scm b/gnu/packages/telegram.scm
new file mode 100644
index 0000000000..66b94baf28
--- /dev/null
+++ b/gnu/packages/telegram.scm
@@ -0,0 +1,557 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages telegram)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages aidc)
+  #:use-module (gnu packages animation)
+  #:use-module (gnu packages assembly)
+  #:use-module (gnu packages audio)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages cmake)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages cpp)
+  #:use-module (gnu packages digest)
+  #:use-module (gnu packages fcitx)
+  #:use-module (gnu packages fcitx5)
+  #:use-module (gnu packages gcc)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages image)
+  #:use-module (gnu packages kde-frameworks)
+  #:use-module (gnu packages language)
+  #:use-module (gnu packages libreoffice)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages lxqt)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages protobuf)
+  #:use-module (gnu packages pulseaudio)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages qt)
+  #:use-module (gnu packages telephony)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages xiph)
+  #:use-module (gnu packages xorg)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system cmake)
+  #:use-module (guix build-system glib-or-gtk)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system meson)
+  #:use-module (guix build-system qt))
+
+(define-public webrtc-for-telegram-desktop
+  (let ((commit "fa86fcc00c218813d61a272a56feab55c76a1ab9")
+        (revision "52"))
+    (hidden-package
+     (package
+       (name "webrtc-for-telegram-desktop")
+       (version
+        (git-version "0" revision commit))
+       (source
+        (origin
+          (method git-fetch)
+          (uri
+           (git-reference
+            (url "https://github.com/desktop-app/tg_owt.git")
+            (commit commit)))
+          (file-name
+           (git-file-name name version))
+          (sha256
+           (base32 "06gcrlym6vqqw7zlds9lpwyg37d5m81d87h16aps19v0v9gzan0l"))
+          (modules '((guix build utils)
+                     (ice-9 ftw)
+                     (srfi srfi-1)))
+          (snippet
+           `(begin
+              (let ((keep
+                     '( ;; Custom forks which are incompatible with the ones in Guix.
+                       "abseil-cpp" "libsrtp" "openh264" "rnnoise"
+                       ;; Not available in Guix.
+                       "pffft" "usrsctp"
+                       ;; Has cmake support files for libvpx input.
+                       "libvpx")))
+                (with-directory-excursion "src/third_party"
+                  (for-each delete-file-recursively
+                            (lset-difference string=?
+                                             (scandir ".")
+                                             (cons* "." ".." keep))))
+                #t)))))
+       (build-system cmake-build-system)
+       (arguments
+        `(#:tests? #f                   ; No target
+          #:configure-flags
+          (list
+           "-DCMAKE_C_FLAGS=-fPIC"
+           "-DCMAKE_CXX_FLAGS=-fPIC")
+          #:phases
+          (modify-phases %standard-phases
+            (add-after 'unpack 'copy-inputs
+              (lambda* (#:key inputs outputs #:allow-other-keys)
+                (let* ((libvpx-from (assoc-ref inputs "libvpx"))
+                       (libyuv-from (assoc-ref inputs "libyuv"))
+                       (libvpx-to (string-append (getcwd)
+                                                 "/src/third_party/libvpx/source/libvpx"))
+                       (libyuv-to (string-append (getcwd)
+                                                 "/src/third_party/libyuv")))
+                  (copy-recursively libvpx-from libvpx-to)
+                  (copy-recursively libyuv-from libyuv-to))
+                #t)))))
+       (native-inputs
+        `(("pkg-config" ,pkg-config)
+          ("python" ,python-wrapper)
+          ("yasm" ,yasm)))
+       (inputs
+        `(("alsa" ,alsa-lib)
+          ("ffmpeg" ,ffmpeg)
+          ("libjpeg" ,libjpeg-turbo)
+          ("libvpx"
+           ,(origin
+              (method git-fetch)
+              (uri
+               (git-reference
+                (url "https://chromium.googlesource.com/webm/libvpx")
+                (commit "5b63f0f821e94f8072eb483014cfc33b05978bb9")))
+              (file-name
+               (git-file-name "libvpx-for-webrtc-for-telegram-desktop" version))
+              (sha256
+               (base32 "1psvxaddihlw1k5n0anxif3qli6zyw2sa2ywn6mkb8six9myrp68"))))
+          ("libyuv"
+           ,(origin
+              (method git-fetch)
+              (uri
+               (git-reference
+                (url "https://chromium.googlesource.com/libyuv/libyuv")
+                (commit "ad890067f661dc747a975bc55ba3767fe30d4452")))
+              (file-name
+               (git-file-name "libyuv-for-webrtc-for-telegram-desktop" version))
+              (sha256
+               (base32 "01knnk4h247rq536097n9n3s3brxlbby3nv3ppdgsqfda3k159ll"))))
+          ("openssl" ,openssl)
+          ("opus" ,opus)
+          ("protobuf" ,protobuf)
+          ("pulseaudio" ,pulseaudio)))
+       (synopsis "WebRTC support for Telegram Desktop")
+       (description "WebRTC-for-Telegram-Desktop is a custom WebRTC fork by
+Telegram project, for its use in telegram desktop client.")
+       (home-page "https://github.com/desktop-app/tg_owt")
+       (license
+        (list
+         ;; Abseil-CPP
+         license:asl2.0
+         ;; LibYuv
+         (license:non-copyleft "file:///src/third_party/libyuv/LICENSE")
+         ;; OpenH264
+         license:bsd-2
+         ;; PFFFT
+         (license:non-copyleft "file:///src/third_party/pffft/LICENSE")
+         ;; RnNoise
+         license:gpl3
+         ;; LibSRTP, LibVPx, UsrSCTP and Others
+         license:bsd-3))))))
+
+(define-public rlottie-for-telegram-desktop
+  (let ((commit "cbd43984ebdf783e94c8303c41385bf82aa36d5b")
+        (revision "671"))
+    (hidden-package
+     (package
+       (inherit rlottie)
+       (version
+        (git-version "0.0.1" revision commit))
+       (source
+        (origin
+          (method git-fetch)
+          (uri
+           (git-reference
+            (url "https://github.com/desktop-app/rlottie.git")
+            (commit commit)))
+          (file-name
+           (git-file-name "rlottie-for-telegram-desktop" version))
+          (sha256
+           (base32 "1lxpbgbhps9rmck036mgmiknqrzpjxpas8n7qxykv6pwzn0c8n0c"))))
+       (arguments
+        `(#:configure-flags
+          (list
+           "-Dlog=true"
+           "-Ddumptree=true"
+           "-Dtest=true")
+          #:phases
+          (modify-phases %standard-phases
+            (add-after 'unpack 'patch-cxx-flags
+              (lambda _
+                (substitute* "meson.build"
+                  (("werror=true")
+                   "werror=false"))
+                #t)))))))))
+
+(define-public libtgvoip-for-telegram-desktop
+  (let ((commit "37d98e984fd6fa389262307db826d52ab86c8241")
+        (revision "87"))
+    (hidden-package
+     (package
+       (inherit libtgvoip)
+       (version
+        (git-version "2.4.4" revision commit))
+       (source
+        (origin
+          (method git-fetch)
+          (uri
+           (git-reference
+            (url "https://github.com/telegramdesktop/libtgvoip.git")
+            (commit commit)))
+          (file-name
+           (git-file-name "libtgvoip-for-telegram-desktop" version))
+          (sha256
+           (base32 "13dzvyq8p20nlhjihv18aj6y97czk07qdl0k6v81vp6mbwcldg7h"))))
+       (arguments
+        `(#:configure-flags
+          (list
+           "--disable-static"
+           "--disable-dsp"              ; FIXME
+           "--enable-audio-callback"
+           "--with-alsa"
+           "--with-pulse")
+          #:phases
+          (modify-phases %standard-phases
+            (add-after 'unpack 'patch-linkers
+              (lambda _
+                (substitute* "Makefile.am"
+                  (("\\$\\(CRYPTO_LIBS\\) \\$\\(OPUS_LIBS\\)")
+                   "$(CRYPTO_LIBS) $(OPUS_LIBS) $(ALSA_LIBS) $(PULSE_LIBS)"))
+                (substitute* "tgvoip.pc.in"
+                  (("libcrypto opus")
+                   "libcrypto opus alsa libpulse"))
+                #t)))))
+       (native-inputs
+        `(("autoconf" ,autoconf)
+          ("automake" ,automake)
+          ("libtool" ,libtool)
+          ("pkg-config" ,pkg-config)))))))
+
+(define-public telegram-desktop
+  (package
+    (name "telegram-desktop")
+    (version "2.5.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/telegramdesktop/tdesktop.git")
+         (commit
+          (string-append "v" version))))
+       (file-name
+        (git-file-name name version))
+       (sha256
+        (base32 "0drirhkr9gnm1g03lcqmvap5ljlk859c29gbsm63hhsgv15dlw0y"))
+       (modules '((guix build utils)
+                  (ice-9 ftw)
+                  (srfi srfi-1)))
+       (snippet
+        `(begin
+           (let ((keep
+                  '( ;; Not available in Guix.
+                    "SPMediaKeyTap" "statusnotifieritem" "tgcalls")))
+             (with-directory-excursion "Telegram/ThirdParty"
+               (for-each delete-file-recursively
+                         (lset-difference string=?
+                                          (scandir ".")
+                                          (cons* "." ".." keep))))
+             #t)))))
+    (build-system qt-build-system)
+    (arguments
+     `(#:tests? #f                      ; No target
+       #:imported-modules
+       (,@%qt-build-system-modules
+        (guix build glib-or-gtk-build-system))
+       #:modules
+       ((guix build qt-build-system)
+        ((guix build glib-or-gtk-build-system)
+         #:prefix glib-or-gtk:)
+        (guix build utils)
+        (ice-9 match))
+       #:configure-flags
+       (list
+        ;; Client applications must provide their own API-ID and API-HASH,
+        ;; see also <https://core.telegram.org/api/obtaining_api_id>.
+        ;; In case, that the credentials below fail to work, contact
+        ;;   Raghav Gururajan <rg@raghavgururajan.name>
+        "-DTDESKTOP_API_ID=2791056"
+        "-DTDESKTOP_API_HASH=582d6d0b44f7a2de949e99271fd8b3f2"
+        ;; Use bundled fonts as fallback.
+        "-DDESKTOP_APP_USE_PACKAGED_FONTS=OFF")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'make-writable
+           (lambda _
+             (for-each make-file-writable (find-files "."))
+             #t))
+         (add-after 'make-writable 'copy-inputs
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (for-each
+              (match-lambda
+                ((dst src)
+                 (copy-recursively src dst)
+                 (for-each make-file-writable (find-files dst))))
+              `(("cmake" ,(assoc-ref inputs "cmake-helpers"))
+                ("Telegram/codegen" ,(assoc-ref inputs "codegen-source"))
+                ("Telegram/lib_base" ,(assoc-ref inputs "lib-base-source"))
+                ("Telegram/lib_crl" ,(assoc-ref inputs "lib-crl-source"))
+                ("Telegram/lib_lottie"
+                 ,(assoc-ref inputs "lib-lottie-source"))
+                ("Telegram/lib_qr" ,(assoc-ref inputs "lib-qr-source"))
+                ("Telegram/lib_rlottie"
+                 ,(assoc-ref inputs "lib-rlottie-source"))
+                ("Telegram/lib_rpl" ,(assoc-ref inputs "lib-rpl-source"))
+                ("Telegram/lib_spellcheck"
+                 ,(assoc-ref inputs "lib-spellcheck-source"))
+                ("Telegram/lib_storage"
+                 ,(assoc-ref inputs "lib-storage-source"))
+                ("Telegram/lib_tl" ,(assoc-ref inputs "lib-tl-source"))
+                ("Telegram/lib_ui" ,(assoc-ref inputs "lib-ui-source"))
+                ("Telegram/lib_webrtc" ,(assoc-ref inputs "lib-webrtc-source"))
+                ("Telegram/ThirdParty/tgcalls"
+                 ,(assoc-ref inputs "tgcalls-source"))))
+             #t))
+         (add-before 'configure 'patch-cxx-flags
+           (lambda _
+             (substitute* "cmake/options_linux.cmake"
+               (("class-memaccess") "all"))
+             #t))
+         (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)))))
+    (native-inputs
+     `(("cmake-helpers"
+        ,(origin
+           (method git-fetch)
+           (uri
+            (git-reference
+             (url "https://github.com/desktop-app/cmake_helpers.git")
+             (commit "a81345a28d407fb5acd5267ec6afa1864f4e8d5b")))
+           (file-name
+            (git-file-name "cmake-helpers-for-telegram-desktop" version))
+           (sha256
+            (base32 "0s5hxip68dmkaspjq6j30wx1r5v4prnrjza79hdbznz6i57a2248"))))
+       ("cmake-shared" ,cmake-shared)
+       ("extra-cmake-modules" ,extra-cmake-modules)
+       ("gcc" ,gcc-9)
+       ("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
+       ("gtk+:bin" ,gtk+ "bin")
+       ("pkg-config" ,pkg-config)
+       ("python" ,python-wrapper)
+       ("qttools" ,qttools)))
+    (inputs
+     `(("alsa" ,alsa-lib)
+       ("c++-gsl" ,c++-gsl)
+       ("catch" ,catch-framework2)
+       ("codegen-source"
+        ,(origin
+           (method git-fetch)
+           (uri
+            (git-reference
+             (url "https://github.com/desktop-app/codegen.git")
+             (commit "127968de8129e8ccfa6ac50721c70415a5a087c3")))
+           (file-name
+            (git-file-name "codegen" version))
+           (sha256
+            (base32 "036hzjrsk134ky62192nra43rsln5kh5gz20q1920s922661zky2"))))
+       ("expected" ,libexpected)
+       ("fcitx-qt5" ,fcitx-qt5)
+       ("fcitx5-qt" ,fcitx5-qt)
+       ("ffmpeg" ,ffmpeg)
+       ("glib" ,glib)
+       ("gtk+" ,gtk+)
+       ("hime" ,hime)
+       ("hunspell" ,hunspell)
+       ("iconv" ,libiconv)
+       ("lib-base-source"
+        ,(origin
+           (method git-fetch)
+           (uri
+            (git-reference
+             (url "https://github.com/desktop-app/lib_base.git")
+             (commit "81df0d0b7842be2b6c88f93dfa136b8efea4c9ad")))
+           (file-name
+            (git-file-name "lib-base-for-telegram-desktop" version))
+           (sha256
+            (base32 "0ikddprjnjvg0ic8jr2886xq0f18syp587q6z2kci9xmdnvjl217"))))
+       ("lib-crl-source"
+        ,(origin
+           (method git-fetch)
+           (uri
+            (git-reference
+             (url "https://github.com/desktop-app/lib_crl.git")
+             (commit "16150bf71d79382738114b913f137ec1a1a7630c")))
+           (file-name
+            (git-file-name "lib-crl-for-telegram-desktop" version))
+           (sha256
+            (base32 "0qhagdr26aqb9w7wnchcmk1j7ln28x3wbkkkm06b8h0mybksbj7q"))))
+       ("lib-lottie-source"
+        ,(origin
+           (method git-fetch)
+           (uri
+            (git-reference
+             (url "https://github.com/desktop-app/lib_lottie.git")
+             (commit "fb40f379d82ffa1fc7506e9a8dddcf48847715ae")))
+           (file-name
+            (git-file-name "lib-lottie-for-telegram-desktop" version))
+           (sha256
+            (base32 "1vq0mqxcrrv7akcqk9cl4mm61zw6dcfmy8adl0pcp49kynm64saw"))))
+       ("lib-qr-source"
+        ,(origin
+           (method git-fetch)
+           (uri
+            (git-reference
+             (url "https://github.com/desktop-app/lib_qr.git")
+             (commit "92ce41a690a463eb462089a4eb1e51e019308018")))
+           (file-name
+            (git-file-name "lib-qr-for-telegram-desktop" version))
+           (sha256
+            (base32 "182939nv7xs9b3bgah3gl5y9hx5r59mabd2jw3z6717vc96qi2pj"))))
+       ("lib-rlottie-source"
+        ,(origin
+           (method git-fetch)
+           (uri
+            (git-reference
+             (url "https://github.com/desktop-app/lib_rlottie.git")
+             (commit "0671bf70547381effcf442ec9618e04502a8adbc")))
+           (file-name
+            (git-file-name "lib-rlottie-for-telegram-desktop" version))
+           (sha256
+            (base32 "05qnza7j15356s8jq16pkbyp4zr586lssmd86lz5jq23lcb3raxv"))))
+       ("lib-rpl-source"
+        ,(origin
+           (method git-fetch)
+           (uri
+            (git-reference
+             (url "https://github.com/desktop-app/lib_rpl.git")
+             (commit "e1b96399d9031c4ef0354631e6bb375029d29d9f")))
+           (file-name
+            (git-file-name "lib-rpl-for-telegram-desktop" version))
+           (sha256
+            (base32 "1wvqazljd2kq1fxlj250jhjrig529499bym9p81dx33kh1l9dgss"))))
+       ("lib-spellcheck-source"
+        ,(origin
+           (method git-fetch)
+           (uri
+            (git-reference
+             (url "https://github.com/desktop-app/lib_spellcheck.git")
+             (commit "1b540b38ed78e9a3cba93e9ba4ce4525ab692277")))
+           (file-name
+            (git-file-name "lib-spellcheck-for-telegram-desktop" version))
+           (sha256
+            (base32 "0a7042h5zrdvgs7v153ral2dh1zj84di5yjcmgcry5k4s1im9di7"))))
+       ("lib-storage-source"
+        ,(origin
+           (method git-fetch)
+           (uri
+            (git-reference
+             (url "https://github.com/desktop-app/lib_storage.git")
+             (commit "cbe51722b73cfa9ff27bd59294b08aa5ee33c936")))
+           (file-name
+            (git-file-name "lib-storage-for-telegram-desktop" version))
+           (sha256
+            (base32 "045l5xsyagyz17gbhmmvl2miss4nb92p0dmza7yfs9pkg9gs0f87"))))
+       ("lib-tl-source"
+        ,(origin
+           (method git-fetch)
+           (uri
+            (git-reference
+             (url "https://github.com/desktop-app/lib_tl.git")
+             (commit "404c83d77e5edb8a39f8e9f56a6340960fe5070e")))
+           (file-name
+            (git-file-name "lib-tl-for-telegram-desktop" version))
+           (sha256
+            (base32 "1k34nkvvcjqw5q81n1qmklid60cvzjk4lmn9qjimk437m6wbii7f"))))
+       ("lib-ui-source"
+        ,(origin
+           (method git-fetch)
+           (uri
+            (git-reference
+             (url "https://github.com/desktop-app/lib_ui.git")
+             (commit "1e2799245cf2720a329ecb5cf5644fded669cce6")))
+           (file-name
+            (git-file-name "lib-ui-for-telegram-desktop" version))
+           (sha256
+            (base32 "0kd4njcvic2700f00qn25vn3b80vsd2flsm3pi2synnldkiy8lcw"))))
+       ("lib-webrtc-source"
+        ,(origin
+           (method git-fetch)
+           (uri
+            (git-reference
+             (url "https://github.com/desktop-app/lib_webrtc.git")
+             (commit "4bc51d6f6d5740159fdb51cb1593e80ce149ed4e")))
+           (file-name
+            (git-file-name "lib-webrtc-for-telegram-desktop" version))
+           (sha256
+            (base32 "06hpyq4qglrj3cb1xg8ghlmzm9ra8f5n6vm7hcy67n2wk8sy4cal"))))
+       ("libdbusmenu-qt" ,libdbusmenu-qt)
+       ("libjpeg" ,libjpeg-turbo)
+       ("libtgvoip" ,libtgvoip-for-telegram-desktop)
+       ("lz4" ,lz4)
+       ("materialdecoration" ,materialdecoration)
+       ("minizip" ,minizip)
+       ("nimf" ,nimf)
+       ("openal" ,openal)
+       ("openssl" ,openssl)
+       ("opus" ,opus)
+       ("pulseaudio" ,pulseaudio)
+       ("qrcodegen" ,qrcodegen-cpp)
+       ("qt" ,qtbase)
+       ("qt5ct" ,qt5ct)
+       ("qtimageformats" ,qtimageformats)
+       ("qtwayland" ,qtwayland)
+       ("range-v3" ,range-v3)
+       ("rlottie" ,rlottie-for-telegram-desktop)
+       ("tgcalls-source"
+        ,(origin
+           (method git-fetch)
+           (uri
+            (git-reference
+             (url "https://github.com/TelegramMessenger/tgcalls.git")
+             (commit "178983f72312ca8bd422bc73810fd63f1a89bd9d")))
+           (file-name
+            (git-file-name "tgcalls-for-telegram-desktop" version))
+           (sha256
+            (base32 "1xad65c9m6mj6zdj08flafvh8xjkd7xi9r1agcyc64y69lr427d0"))))
+       ("webrtc" ,webrtc-for-telegram-desktop)
+       ("x11" ,libx11)
+       ("xcb" ,libxcb)
+       ("xcb-keysyms" ,xcb-util-keysyms)
+       ("xxhash" ,xxhash)
+       ("zlib" ,zlib)))
+    (propagated-inputs
+     `(("dconf" ,dconf)))
+    (synopsis "Telegram Desktop")
+    (description "Telegram desktop is the official desktop version of the
+Telegram instant messager.")
+    (home-page "https://desktop.telegram.org/")
+    (license
+     (list
+      ;; ThirdParty
+      license:lgpl2.1+
+      ;; Others
+      license:gpl3+))))
diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm
index e6a7d6b16d..f1364c9024 100644
--- a/gnu/packages/terminals.scm
+++ b/gnu/packages/terminals.scm
@@ -20,7 +20,7 @@
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Valentin Ignatev <valentignatev@gmail.com>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Leo Famulari <leo@famulari.name>
 ;;;
@@ -64,7 +64,6 @@
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
-  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
@@ -402,7 +401,7 @@ combining, and so on, with a simple interface.")
                 "1vvjydqf0ax47nvdyyl67jafw5b3sfsav00xid6qpgia1gs2r72n"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags '("CC=gcc")
+     `(#:make-flags (list (string-append "CC=" ,(cc-for-target)))
        #:tests? #f                      ; no tests
        #:phases
        (modify-phases %standard-phases
@@ -702,7 +701,7 @@ eye-candy, customizable, and reasonably lightweight.")
 (define-public foot
   (package
     (name "foot")
-    (version "1.5.4")
+    (version "1.6.2")
     (home-page "https://codeberg.org/dnkl/foot")
     (source (origin
               (method git-fetch)
@@ -710,7 +709,7 @@ eye-candy, customizable, and reasonably lightweight.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0y6xfsldz5lwy6kp5dy9s27pnii7n5zj754wglvz9d9fp5lkl6id"))))
+                "08i3jmjky5s2nnc0c95c009cym91rs4sj4876sr4xnlkb7ab4812"))))
     (build-system meson-build-system)
     (arguments
      `(#:meson ,meson-0.55
@@ -720,10 +719,7 @@ eye-candy, customizable, and reasonably lightweight.")
        ;; Enable LTO as recommended by INSTALL.md.
        #:configure-flags '("-Db_lto=true")))
     (native-inputs
-     `(;; Foot makes use of modern C features and needs a newer compiler.
-       ;; Remove when the default compiler is > GCC 7.
-       ("gcc" ,gcc-10)
-       ("ncurses" ,ncurses)             ;for 'tic'
+     `(("ncurses" ,ncurses)             ;for 'tic'
        ("pkg-config" ,pkg-config)
        ("scdoc" ,scdoc)
        ("wayland-protocols" ,wayland-protocols)))
@@ -1210,142 +1206,71 @@ made by suckless.")
 (define-public alacritty
   (package
     (name "alacritty")
-    (version "0.4.1")
+    (version "0.7.1")
     (source
      (origin
+       ;; XXX: The crate at "crates.io" has limited contents.  In particular,
+       ;; it does not contain "extra" directory with completions, icon, etc.
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/jwilm/alacritty")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "05jcg33ifngpzw2hdhgb614j87ihhhlqgar0kky183rywg0dxikg"))
-       (modules '((guix build utils)))
-       (snippet
-         ;; Don't use a custom location for winit-0.20-alpha6.
-         '(begin (substitute* "Cargo.toml"
-                   (("winit .*") ""))
-                 #t))))
+        (base32 "1b9hy3ya72hhpl8nkayc7dy4f97xp75np48dm5na5pgyv8b45agi"))))
     (build-system cargo-build-system)
     (arguments
-     `(#:cargo-inputs
-       (("rust-clap" ,rust-clap-2)
+     `(#: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-bitflags" ,rust-bitflags-1)
+        ("rust-clap" ,rust-clap-2)
+        ("rust-cocoa" ,rust-cocoa-0.24)
+        ("rust-copypasta" ,rust-copypasta-0.7)
+        ("rust-crossfont" ,rust-crossfont-0.2)
+        ("rust-dirs" ,rust-dirs-2)
+        ("rust-embed-resource" ,rust-embed-resource-1)
+        ("rust-fnv" ,rust-fnv-1)
+        ("rust-gl-generator" ,rust-gl-generator-0.14)
+        ;; XXX: Adjust `add-absolute-library-references' phase when updating
+        ;; glutin input.
+        ("rust-glutin" ,rust-glutin-0.26)
+        ("rust-libc" ,rust-libc-0.2)
         ("rust-log" ,rust-log-0.4)
-        ("rust-time" ,rust-time-0.1)
-        ("rust-env-logger" ,rust-env-logger-0.7)
+        ("rust-notify" ,rust-notify-4)
+        ("rust-objc" ,rust-objc-0.2)
+        ("rust-parking-lot" ,rust-parking-lot-0.11)
+        ("rust-png" ,rust-png-0.16)
+        ("rust-raw-window-handle" ,rust-raw-window-handle-0.3)
         ("rust-serde" ,rust-serde-1)
-        ("rust-serde-yaml" ,rust-serde-yaml-0.8)
         ("rust-serde-json" ,rust-serde-json-1)
-        ("rust-glutin" ,rust-glutin-0.22) ; adjust 'patch-glutin-libgl-path as needed
-        ("rust-notify" ,rust-notify-4)
-        ("rust-libc" ,rust-libc-0.2)
+        ("rust-serde-yaml" ,rust-serde-yaml-0.8)
+        ("rust-time" ,rust-time-0.1)
         ("rust-unicode-width" ,rust-unicode-width-0.1)
-        ("rust-parking-lot" ,rust-parking-lot-0.9)
         ("rust-urlocator" ,rust-urlocator-0.1)
-        ("rust-xdg" ,rust-xdg-2)
-        ("rust-image" ,rust-image-0.22)
-        ("rust-dirs" ,rust-dirs-2.0)
-        ("rust-x11-dl" ,rust-x11-dl-2)
+        ("rust-wayland-client" ,rust-wayland-client-0.28)
         ("rust-winapi" ,rust-winapi-0.3)
-        ("rust-base64" ,rust-base64-0.11)
-        ("rust-bigflags" ,rust-bitflags-1)
-        ("rust-fnv" ,rust-fnv-1)
-        ("rust-mio" ,rust-mio-0.6)
-        ("rust-mio-extras" ,rust-mio-extras-2)
-        ("rust-terminfo" ,rust-terminfo-0.6)
-        ("rust-url" ,rust-url-2)
-        ("rust-vte" ,rust-vte-0.3)
-        ("rust-nix" ,rust-nix-0.15)
-        ("rust-miow" ,rust-miow-0.3)
-        ("rust-mio-anonymous-pipes" ,rust-mio-anonymous-pipes-0.1)
-        ("rust-mio-named-pipes" ,rust-mio-named-pipes-0.1)
-        ("rust-signal-hook" ,rust-signal-hook-0.1)
-        ("rust-clipboard-win" ,rust-clipboard-win-2.1)
-        ("rust-objc" ,rust-objc-0.2)
-        ("rust-objc-id" ,rust-objc-id-0.1)
-        ("rust-objc-foundation" ,rust-objc-foundation-0.1)
-        ("rust-x11-clipboard" ,rust-x11-clipboard-0.4)
-        ("rust-smithay-clipboard" ,rust-smithay-clipboard-0.3)
-        ("rust-wayland-client" ,rust-wayland-client-0.23)
-        ("rust-euclid" ,rust-euclid-0.20)
-        ("rust-foreign-types" ,rust-foreign-types-0.5)
-        ("rust-servo-fontconfig" ,rust-servo-fontconfig-0.4)
-        ("rust-freetype-rs" ,rust-freetype-rs-0.23)
-        ("rust-core-foundation" ,rust-core-foundation-0.6)
-        ("rust-core-foundation-sys" ,rust-core-foundation-sys-0.6)
-        ("rust-core-text" ,rust-core-text-13)
-        ("rust-core-graphics" ,rust-core-graphics-0.17)
-        ("rust-dwrote" ,rust-dwrote-0.9)
-        ("rust-winpty-sys" ,rust-winpty-sys-0.4))
-       #:cargo-development-inputs
-       (("rust-rustc-tools-util" ,rust-rustc-tools-util-0.2)
-        ("rust-gl-generator" ,rust-gl-generator-0.14)
-        ("rust-andrew" ,rust-andrew-0.2)
-        ("rust-smithay-client-toolkit" ,rust-smithay-client-toolkit-0.6)
-        ("rust-embed-resource" ,rust-embed-resource-1.3)
-        ("rust-http-req" ,rust-http-req-0.5)
-        ("rust-zip" ,rust-zip-0.5)
-        ("rust-tempfile" ,rust-tempfile-3)
-        ("rust-named-pipe" ,rust-named-pipe-0.4)
-        ("rust-winapi" ,rust-winapi-0.3))
+        ("rust-x11-dl" ,rust-x11-dl-2)
+        ("rust-xdg" ,rust-xdg-2))
        #:phases
        (modify-phases %standard-phases
          (add-after 'configure 'add-absolute-library-references
            (lambda* (#:key inputs cargo-inputs vendor-dir #:allow-other-keys)
-             (let* ((glutin-name ,(package-name rust-glutin-0.22))
-                    (glutin-version ,(package-version rust-glutin-0.22))
+             (let* ((glutin-name ,(package-name rust-glutin-0.26))
+                    (glutin-version ,(package-version rust-glutin-0.26))
                     (glutin-api (string-append glutin-name "-" glutin-version
                                                ".tar.gz/src/api/"))
-                    (smithay-client-toolkit-name
-                     ,(package-name rust-smithay-client-toolkit-0.6))
-                    (smithay-client-toolkit-version
-                     ,(package-version rust-smithay-client-toolkit-0.6))
-                    (smithay-client-toolkit-src
-                     (string-append smithay-client-toolkit-name "-"
-                                    smithay-client-toolkit-version ".tar.gz/src"))
-                    (wayland-sys-name ,(package-name rust-wayland-sys-0.23))
-                    (wayland-sys-version ,(package-version rust-wayland-sys-0.23))
-                    (wayland-sys-src (string-append wayland-sys-name "-"
-                                                    wayland-sys-version
-                                                    ".tar.gz/src"))
-                    (libxkbcommon (assoc-ref inputs "libxkbcommon"))
-                    (libwayland (assoc-ref inputs "wayland"))
                     (mesa (assoc-ref inputs "mesa")))
-              (substitute* (string-append vendor-dir "/" glutin-api "glx/mod.rs")
-                (("libGL.so") (string-append mesa "/lib/libGL.so")))
-              (substitute* (string-append vendor-dir "/" glutin-api "egl/mod.rs")
-                (("libEGL.so") (string-append mesa "/lib/libEGL.so")))
-              (substitute* (string-append vendor-dir "/"
-                                          smithay-client-toolkit-src
-                                          "/keyboard/ffi.rs")
-                (("libxkbcommon\\.so")
-                 (string-append libxkbcommon "/lib/libxkbcommon.so")))
-              (substitute* (string-append vendor-dir "/" wayland-sys-src
-                                          "/server.rs")
-                (("libwayland-server\\.so")
-                 (string-append libwayland "/lib/libwayland-server.so")))
-              (substitute* (string-append vendor-dir "/" wayland-sys-src
-                                          "/cursor.rs")
-                (("libwayland-cursor\\.so")
-                 (string-append libwayland "/lib/libwayland-cursor.so")))
-              (substitute* (string-append vendor-dir "/" wayland-sys-src
-                                          "/egl.rs")
-                (("libwayland-egl\\.so")
-                 (string-append libwayland "/lib/libwayland-egl.so")))
-              (substitute* (string-append vendor-dir "/" wayland-sys-src
-                                          "/client.rs")
-                (("libwayland-client\\.so")
-                 (string-append libwayland "/lib/libwayland-client.so")))
-              #t)))
-         (add-after 'configure 'remove-alacritty-vendor
-           (lambda* (#:key vendor-dir #:allow-other-keys)
-              ;; We don't want Alacritty to be a dependency of itself
-              ;; If we don't delete it from guix-vendor then build will fail
-              ;; because Alacritty has a virtual workspace Cargo.toml.
-              (delete-file-recursively
-                (string-append vendor-dir "/alacritty-" ,version ".tar.xz"))
-              #t))
+               (substitute*
+                   (string-append vendor-dir "/" glutin-api "glx/mod.rs")
+                 (("libGL.so") (string-append mesa "/lib/libGL.so")))
+               (substitute*
+                   (string-append vendor-dir "/" glutin-api "egl/mod.rs")
+                 (("libEGL.so") (string-append mesa "/lib/libEGL.so")))
+               #t)))
          (replace 'install
+           ;; Upstream install script only takes care of executable.
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out   (assoc-ref outputs "out"))
                     (bin   (string-append out "/bin"))
@@ -1354,24 +1279,19 @@ made by suckless.")
                     (tic   (string-append (assoc-ref inputs "ncurses") "/bin/tic"))
                     (man   (string-append share "/man/man1"))
                     (alacritty-bin "target/release/alacritty"))
-
                ;; Install the executable.
                (install-file alacritty-bin bin)
-
                ;; Install man pages.
                (mkdir-p man)
                (copy-file "extra/alacritty.man"
                           (string-append man "/alacritty.1"))
-
                ;; Install desktop file.
-               (install-file "extra/linux/alacritty.desktop"
+               (install-file "extra/linux/Alacritty.desktop"
                              (string-append share "/applications"))
-
-               ;; Install icon
+               ;; Install icon.
                (mkdir-p icons)
                (copy-file "extra/logo/alacritty-term.svg"
                           (string-append icons "/Alacritty.svg"))
-
                ;; Install terminfo.
                (mkdir-p (string-append share "/terminfo"))
                ;; We don't compile alacritty-common entry because
@@ -1379,18 +1299,19 @@ made by suckless.")
                (invoke tic "-x" "-e" "alacritty,alacritty-direct"
                        "-o" (string-append share "/terminfo/")
                        "extra/alacritty.info")
-
                ;; Install completions.
-               (install-file
-                 "extra/completions/alacritty.bash"
-                 (string-append out "/etc/bash_completion.d"))
-               (install-file
-                 "extra/completions/_alacritty"
-                 (string-append share "/zsh/site-functions"))
-               (install-file
-                 "extra/completions/alacritty.fish"
-                 (string-append share "/fish/vendor_completions.d"))
+               (install-file "extra/completions/alacritty.bash"
+                             (string-append out "/etc/bash_completion.d"))
+               (install-file "extra/completions/_alacritty"
+                             (string-append share "/zsh/site-functions"))
+               (install-file "extra/completions/alacritty.fish"
+                             (string-append share "/fish/vendor_completions.d"))
                #t))))))
+    (native-inputs
+     `(("cmake" ,cmake)
+       ("ncurses" ,ncurses)
+       ("pkg-config" ,pkg-config)
+       ("python3" ,python)))
     (inputs
      `(("expat" ,expat)
        ("fontconfig" ,fontconfig)
@@ -1404,11 +1325,6 @@ made by suckless.")
        ("libxxf86vm" ,libxxf86vm)
        ("wayland" ,wayland)
        ("mesa" ,mesa)))
-    (native-inputs
-     `(("cmake" ,cmake)
-       ("ncurses" ,ncurses)
-       ("pkg-config" ,pkg-config)
-       ("python3" ,python)))
     (native-search-paths
      ;; FIXME: This should only be located in 'ncurses'.  Nonetheless it is
      ;; provided for usability reasons.  See <https://bugs.gnu.org/22138>.
diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm
index e2ce7afe9d..1ce53a967b 100644
--- a/gnu/packages/tor.scm
+++ b/gnu/packages/tor.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
-;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017, 2018, 2019 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
@@ -155,7 +155,7 @@ rejects UDP traffic from the application you're using.")
 (define-public privoxy
   (package
     (name "privoxy")
-    (version "3.0.29")
+    (version "3.0.31")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/ijbswa/Sources/"
@@ -163,7 +163,7 @@ rejects UDP traffic from the application you're using.")
                                  version "-stable-src.tar.gz"))
              (sha256
               (base32
-               "17a8fbdyb0ixc0wwq68fg7xn7l6n7jq67njpq93psmxgzng0dii5"))))
+               "1sq4s0h73r7mynl8s0ynn3a6zl98j06nb2nqx2j254n7maijjxq7"))))
     (build-system gnu-build-system)
     (arguments
      '(;; The default 'sysconfdir' is $out/etc; change that to
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index f53ca9b11b..afbae86772 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -33,6 +33,7 @@
 ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -97,6 +98,7 @@
   #:use-module (gnu packages perl-check)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
@@ -1576,14 +1578,14 @@ execution of any hook written in any language before every commit.")
 (define-public mercurial
   (package
     (name "mercurial")
-    (version "5.5.1")
+    (version "5.6.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://www.mercurial-scm.org/"
                                  "release/mercurial-" version ".tar.gz"))
              (sha256
               (base32
-               "0x08yjs26j88kh1bvl2g3r24lnfc023ry3i1cxfq6haray6sv5ag"))))
+               "1bgz8f1a7lnmh6lzcvwg6q1yx6i7yibhwy06l4k55i04957jap75"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1596,8 +1598,7 @@ execution of any hook written in any language before every commit.")
                             "tests/test-run-tests.t"
                             "tests/test-transplant.t")
                (("/bin/sh")
-                (which "sh")))
-             #t))
+                (which "sh")))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (with-directory-excursion "tests"
@@ -1608,9 +1609,10 @@ execution of any hook written in any language before every commit.")
                            ;; PATH from before (that's why we are building it!)?
                            "test-hghave.t"
 
-                           ;; FIXME: Why does this fail in the build container, but
-                           ;; not in 'guix environment -C' (even without /bin/sh)?
+                           ;; These tests fail because the program is not
+                           ;; connected to a TTY in the build container.
                            "test-nointerrupt.t"
+                           "test-transaction-rollback-on-sigpipe.t"
 
                            ;; FIXME: This gets killed but does not receive an interrupt.
                            "test-commandserver.t"
@@ -1639,8 +1641,7 @@ execution of any hook written in any language before every commit.")
                          "--slowtimeout" "86400"
                          ;; The test suite takes a long time and produces little
                          ;; output by default.  Prevent timeouts due to silence.
-                         "-v"))
-               #t))))))
+                         "-v"))))))))
     ;; The following inputs are only needed to run the tests.
     (native-inputs
      `(("python-nose" ,python-nose)
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 2262aa6197..8da57cf6ab 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -87,6 +87,7 @@
   #:use-module (gnu packages polkit)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
diff --git a/gnu/packages/vulkan.scm b/gnu/packages/vulkan.scm
index ca359e4923..1a0d0d7d63 100644
--- a/gnu/packages/vulkan.scm
+++ b/gnu/packages/vulkan.scm
@@ -355,10 +355,10 @@ shader compilation.")
     (license license:asl2.0)))
 
 (define-public vkd3d
-  (let ((commit "ecda316ef54d70bf1b3e860755241bb75873e53f")) ; Release 1.1.
+  (let ((commit "56cd4a94d541707959ce7677af6d1a34739e5579")) ; Release 1.2.
     (package
      (name "vkd3d")
-     (version "1.1")
+     (version "1.2")
      (source
       (origin
        (method git-fetch)
@@ -367,7 +367,7 @@ shader compilation.")
              (commit commit)))
        (sha256
         (base32
-         "05a28kspy8gzng181w28zjqdb3pj2ss83b0lwnppxbcdzsz7rvrf"))
+         "1n4a622drgnprvz5hjxzyzcsg2lp5rlf1sajki2vzf5gsx6fdpk8"))
        (file-name (string-append name "-" version "-checkout"))))
      (build-system gnu-build-system)
      (arguments
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index a42913250c..8cbcfd011e 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -30,7 +30,7 @@
 ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2018 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
-;;; Copyright © 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2019 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
@@ -1478,7 +1478,7 @@ used to validate and fix HTML data.")
 (define-public esbuild
   (package
     (name "esbuild")
-    (version "0.8.32")
+    (version "0.8.37")
     (source
      (origin
        (method git-fetch)
@@ -1487,7 +1487,7 @@ used to validate and fix HTML data.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "17aa269dq0gsm4nlhh1q2mj6k8mw6v8ig3nygwk3s07l2xl5gqvn"))
+        (base32 "0c98w2y4y9jaj2wv0334xwdbsvsi5hfh9jdkqr7ffz8lxhmh610f"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -4633,8 +4633,8 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
   (package-with-python2 python-feedparser))
 
 (define-public guix-data-service
-  (let ((commit "e3878fefb4184f3ad45a6e6f434767c0bf109db8")
-        (revision "23"))
+  (let ((commit "060df92557d5a32dbd3ae4a32c2c5725cd53e09b")
+        (revision "24"))
     (package
       (name "guix-data-service")
       (version (string-append "0.0.1-" revision "." (string-take commit 7)))
@@ -4646,7 +4646,7 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0002ckayjnd6mw7a0m7q307jdwc9vsjgiidp72463xyp0yrnjdjf"))))
+                  "0ggwslwm041gkd0i45xhvnalxrhjaj4da27p5wrpknrhpa4ipf6v"))))
       (build-system gnu-build-system)
       (arguments
        '(#:modules ((guix build utils)
@@ -6512,7 +6512,7 @@ collection creation and deletion, and locking operations.")
     (arguments
      `(#:cargo-inputs
        (("rust-ansi-parser" ,rust-ansi-parser-0.6)
-        ("rust-dirs" ,rust-dirs-2.0)
+        ("rust-dirs" ,rust-dirs-2)
         ("rust-gdk" ,rust-gdk-0.13)
         ("rust-gtk" ,rust-gtk-0.8)
         ("rust-linkify" ,rust-linkify-0.4)
diff --git a/gnu/packages/wine.scm b/gnu/packages/wine.scm
index 0d93af0dc9..98b435cb8d 100644
--- a/gnu/packages/wine.scm
+++ b/gnu/packages/wine.scm
@@ -38,7 +38,6 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
-  #:use-module (gnu packages compression)
   #:use-module (gnu packages cups)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages fontutils)
@@ -52,6 +51,7 @@
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages kerberos)
+  #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages mingw)
   #:use-module (gnu packages openldap)
@@ -60,7 +60,6 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages mp3)
-  #:use-module (gnu packages ncurses)
   #:use-module (gnu packages photo)
   #:use-module (gnu packages samba)
   #:use-module (gnu packages scanner)
@@ -76,7 +75,7 @@
 (define-public wine
   (package
     (name "wine")
-    (version "5.21")
+    (version "6.0")
     (source
      (origin
        (method url-fetch)
@@ -88,7 +87,7 @@
               (string-append "https://dl.winehq.org/wine/source/" dir
                              "wine-" version ".tar.xz")))
        (sha256
-        (base32 "0h185lfpid6cw1sz8rmkpky2l11izpb0w8j0cq6ww6yi94jmq6js"))))
+        (base32 "0micb3l54cc2cl3v5q92hzvkxxiwi9lmiv72caf45vl35xghd4xl"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("bison" ,bison)
@@ -104,7 +103,6 @@
        ("faudio" ,faudio)
        ("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
-       ("glu" ,glu)
        ("gnutls" ,gnutls)
        ("gst-plugins-base" ,gst-plugins-base)
        ("lcms" ,lcms)
@@ -118,6 +116,7 @@
        ("libpcap" ,libpcap)
        ("libpng" ,libpng)
        ("libjpeg" ,libjpeg-turbo)
+       ("libusb" ,libusb)
        ("libtiff" ,libtiff)
        ("libICE" ,libice)
        ("libX11" ,libx11)
@@ -130,15 +129,13 @@
        ("libXxf86vm" ,libxxf86vm)
        ("libXcomposite" ,libxcomposite)
        ("mit-krb5" ,mit-krb5)
-       ("ncurses" ,ncurses)
        ("openal" ,openal)
        ("pulseaudio" ,pulseaudio)
        ("sdl2" ,sdl2)
        ("unixodbc" ,unixodbc)
        ("v4l-utils" ,v4l-utils)
        ("vkd3d" ,vkd3d)
-       ("vulkan-loader" ,vulkan-loader)
-       ("zlib" ,zlib)))
+       ("vulkan-loader" ,vulkan-loader)))
     (arguments
      `(;; Force a 32-bit build targeting a similar architecture, i.e.:
        ;; armhf for armhf/aarch64, i686 for i686/x86_64.
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index c8dd66b2e0..bc5fd9fee6 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -413,7 +413,7 @@ management D-Bus specification.")
 (define-public xfce4-panel
   (package
     (name "xfce4-panel")
-    (version "4.16.0")
+    (version "4.16.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -421,7 +421,7 @@ management D-Bus specification.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "0gf57hgx6v44bc2hj570inkafbi291scc6wbhmr6sc3xngp9m5sy"))
+                "14arjxpvnxdl0a0ajifrmy2py3hv5qy4fykl52wdp4k5pv39n2gs"))
               (patches (search-patches "xfce4-panel-plugins.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -1206,7 +1206,7 @@ of data to either CD/DVD/BD.")
 (define-public mousepad
   (package
     (name "mousepad")
-    (version "0.5.1")
+    (version "0.5.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/apps/mousepad/"
@@ -1214,7 +1214,7 @@ of data to either CD/DVD/BD.")
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "10m52yrh89j7xbr299m9f0mqrhqz95lp3qi5zbqd0bg839xjfbix"))))
+                "13pvisqhq5rjrkfdw635z600167920fxqzg1ngvismaf39iwbb9h"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '(;; Use the GSettings keyfile backend rather than
@@ -1620,7 +1620,7 @@ be clicked to open the chosen mount point.")
 (define-public xfce4-genmon-plugin
   (package
    (name "xfce4-genmon-plugin")
-   (version "4.1.0")
+   (version "4.1.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/panel-plugins/"
@@ -1629,7 +1629,7 @@ be clicked to open the chosen mount point.")
                                   "/xfce4-genmon-plugin-" version ".tar.bz2"))
               (sha256
                (base32
-                "0zafr1jrw87l7h4z3wp88gj7n5mcygm22aw42vdpnp2l8x5nn9fi"))))
+                "0d81npcqnmkw2qaqa8c6igh9j5r4ivgb15zcjwxjkyhrzz89y4dj"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("intltool" ,intltool)
@@ -1886,7 +1886,7 @@ favorite search engine or bug tracker right from the Xfce panel.")
 (define-public xfce4-statusnotifier-plugin
   (package
    (name "xfce4-statusnotifier-plugin")
-   (version "0.2.2")
+   (version "0.2.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/panel-plugins/"
@@ -1895,7 +1895,7 @@ favorite search engine or bug tracker right from the Xfce panel.")
                                   "/xfce4-statusnotifier-plugin-" version ".tar.bz2"))
               (sha256
                (base32
-                "1yic99jx7013pywpd0k31pxab8s8lv3wcq364iha99qhsm25k42c"))))
+                "1d2n56g12dhnjznrq7xvr6d3brpp0lmm080xmgjb7ybc1yygpxrc"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("intltool" ,intltool)