summary refs log tree commit diff
diff options
context:
space:
mode:
authorEfraim Flashner <efraim@flashner.co.il>2021-04-16 14:39:48 +0300
committerEfraim Flashner <efraim@flashner.co.il>2021-04-16 14:39:48 +0300
commitfcc39864dba82e14895afbe841091091366c96bc (patch)
tree6e0f05495fd6512051224dc85fd3ab495cbf1a24
parent76fc36d0a7215979bb74c05840f5a4de4ab5ea93 (diff)
parent44f9432705d04c069a8acf9e37e3ad856ac0bf82 (diff)
downloadguix-fcc39864dba82e14895afbe841091091366c96bc.tar.gz
Merge remote-tracking branch 'origin/master' into core-updates
 Conflicts:
	gnu/local.mk
	gnu/packages/boost.scm
	gnu/packages/chez.scm
	gnu/packages/compression.scm
	gnu/packages/crates-io.scm
	gnu/packages/docbook.scm
	gnu/packages/engineering.scm
	gnu/packages/gcc.scm
	gnu/packages/gl.scm
	gnu/packages/gtk.scm
	gnu/packages/nettle.scm
	gnu/packages/python-check.scm
	gnu/packages/python-xyz.scm
	gnu/packages/radio.scm
	gnu/packages/rust.scm
	gnu/packages/sqlite.scm
	guix/build-system/node.scm
-rw-r--r--.guix-authorizations24
-rw-r--r--Makefile.am1
-rw-r--r--build-aux/build-self.scm121
-rw-r--r--doc/contributing.texi16
-rw-r--r--doc/guix.texi499
-rwxr-xr-xetc/committer.scm.in152
-rwxr-xr-xetc/guix-install.sh9
-rw-r--r--etc/news.scm94
-rw-r--r--gnu/bootloader/grub.scm2
-rw-r--r--gnu/build/activation.scm13
-rw-r--r--gnu/ci.scm62
-rw-r--r--gnu/installer/steps.scm12
-rw-r--r--gnu/local.mk28
-rw-r--r--gnu/packages/acl.scm43
-rw-r--r--gnu/packages/admin.scm99
-rw-r--r--gnu/packages/aidc.scm21
-rw-r--r--gnu/packages/algebra.scm6
-rw-r--r--gnu/packages/antivirus.scm4
-rw-r--r--gnu/packages/assembly.scm4
-rw-r--r--gnu/packages/astronomy.scm18
-rw-r--r--gnu/packages/audio.scm76
-rw-r--r--gnu/packages/autotools.scm2
-rw-r--r--gnu/packages/aux-files/linux-libre/5.10-x86_64.conf2
-rw-r--r--gnu/packages/aux-files/linux-libre/5.11-x86_64.conf2
-rw-r--r--gnu/packages/axoloti.scm13
-rw-r--r--gnu/packages/base.scm8
-rw-r--r--gnu/packages/bioconductor.scm446
-rw-r--r--gnu/packages/bioinformatics.scm368
-rw-r--r--gnu/packages/boost.scm26
-rw-r--r--gnu/packages/bootloaders.scm6
-rw-r--r--gnu/packages/build-tools.scm44
-rw-r--r--gnu/packages/c.scm4
-rw-r--r--gnu/packages/calendar.scm2
-rw-r--r--gnu/packages/ccache.scm30
-rw-r--r--gnu/packages/certs.scm76
-rw-r--r--gnu/packages/check.scm73
-rw-r--r--gnu/packages/chez.scm261
-rw-r--r--gnu/packages/chromium.scm8
-rw-r--r--gnu/packages/ci.scm164
-rw-r--r--gnu/packages/code.scm6
-rw-r--r--gnu/packages/compression.scm5
-rw-r--r--gnu/packages/cpp.scm210
-rw-r--r--gnu/packages/cran.scm586
-rw-r--r--gnu/packages/crates-graphics.scm3
-rw-r--r--gnu/packages/crates-io.scm233
-rw-r--r--gnu/packages/cross-base.scm2
-rw-r--r--gnu/packages/crypto.scm15
-rw-r--r--gnu/packages/cryptsetup.scm6
-rw-r--r--gnu/packages/cups.scm17
-rw-r--r--gnu/packages/curl.scm15
-rw-r--r--gnu/packages/databases.scm47
-rw-r--r--gnu/packages/debian.scm14
-rw-r--r--gnu/packages/debug.scm11
-rw-r--r--gnu/packages/diffoscope.scm4
-rw-r--r--gnu/packages/disk.scm60
-rw-r--r--gnu/packages/django.scm8
-rw-r--r--gnu/packages/dns.scm28
-rw-r--r--gnu/packages/docbook.scm13
-rw-r--r--gnu/packages/docker.scm86
-rw-r--r--gnu/packages/ebook.scm137
-rw-r--r--gnu/packages/education.scm11
-rw-r--r--gnu/packages/efi.scm4
-rw-r--r--gnu/packages/emacs-xyz.scm480
-rw-r--r--gnu/packages/emacs.scm6
-rw-r--r--gnu/packages/embedded.scm47
-rw-r--r--gnu/packages/emulators.scm10
-rw-r--r--gnu/packages/engineering.scm468
-rw-r--r--gnu/packages/fcitx5.scm6
-rw-r--r--gnu/packages/file-systems.scm32
-rw-r--r--gnu/packages/file.scm2
-rw-r--r--gnu/packages/finance.scm15
-rw-r--r--gnu/packages/flashing-tools.scm49
-rw-r--r--gnu/packages/fontutils.scm2
-rw-r--r--gnu/packages/freedesktop.scm33
-rw-r--r--gnu/packages/ftp.scm121
-rw-r--r--gnu/packages/game-development.scm52
-rw-r--r--gnu/packages/games.scm46
-rw-r--r--gnu/packages/gcc.scm7
-rw-r--r--gnu/packages/genealogy.scm6
-rw-r--r--gnu/packages/geo.scm161
-rw-r--r--gnu/packages/gimp.scm58
-rw-r--r--gnu/packages/gl.scm36
-rw-r--r--gnu/packages/glib.scm2
-rw-r--r--gnu/packages/gnome-xyz.scm4
-rw-r--r--gnu/packages/gnome.scm131
-rw-r--r--gnu/packages/gnu-doc.scm8
-rw-r--r--gnu/packages/gnuzilla.scm8
-rw-r--r--gnu/packages/golang.scm25
-rw-r--r--gnu/packages/gpodder.scm14
-rw-r--r--gnu/packages/graphics.scm43
-rw-r--r--gnu/packages/graphviz.scm52
-rw-r--r--gnu/packages/gstreamer.scm2
-rw-r--r--gnu/packages/gtk.scm16
-rw-r--r--gnu/packages/guile-xyz.scm119
-rw-r--r--gnu/packages/guile.scm6
-rw-r--r--gnu/packages/hardware.scm6
-rw-r--r--gnu/packages/haskell-apps.scm4
-rw-r--r--gnu/packages/haskell-web.scm2
-rw-r--r--gnu/packages/image-processing.scm95
-rw-r--r--gnu/packages/imagemagick.scm213
-rw-r--r--gnu/packages/irc.scm8
-rw-r--r--gnu/packages/jami.scm301
-rw-r--r--gnu/packages/javascript.scm4
-rw-r--r--gnu/packages/julia-xyz.scm766
-rw-r--r--gnu/packages/jupyter.scm128
-rw-r--r--gnu/packages/kde-pim.scm2
-rw-r--r--gnu/packages/kde.scm5
-rw-r--r--gnu/packages/language.scm4
-rw-r--r--gnu/packages/libevent.scm16
-rw-r--r--gnu/packages/libffi.scm5
-rw-r--r--gnu/packages/libreoffice.scm4
-rw-r--r--gnu/packages/linphone.scm961
-rw-r--r--gnu/packages/linux.scm143
-rw-r--r--gnu/packages/lisp-xyz.scm541
-rw-r--r--gnu/packages/lisp.scm10
-rw-r--r--gnu/packages/llvm.scm11
-rw-r--r--gnu/packages/logging.scm23
-rw-r--r--gnu/packages/mail.scm143
-rw-r--r--gnu/packages/man.scm47
-rw-r--r--gnu/packages/maths.scm242
-rw-r--r--gnu/packages/matrix.scm29
-rw-r--r--gnu/packages/mes.scm5
-rw-r--r--gnu/packages/messaging.scm223
-rw-r--r--gnu/packages/monitoring.scm4
-rw-r--r--gnu/packages/mp3.scm9
-rw-r--r--gnu/packages/music.scm140
-rw-r--r--gnu/packages/nettle.scm17
-rw-r--r--gnu/packages/networking.scm197
-rw-r--r--gnu/packages/node-xyz.scm32
-rw-r--r--gnu/packages/node.scm508
-rw-r--r--gnu/packages/ocaml.scm68
-rw-r--r--gnu/packages/openstack.scm13
-rw-r--r--gnu/packages/package-management.scm34
-rw-r--r--gnu/packages/password-utils.scm31
-rw-r--r--gnu/packages/patches/calibre-no-updates-dialog.patch22
-rw-r--r--gnu/packages/patches/calibre-remove-test-sqlite.patch21
-rw-r--r--gnu/packages/patches/calibre-remove-test-unrar.patch24
-rw-r--r--gnu/packages/patches/chez-scheme-build-util-paths-backport.patch780
-rw-r--r--gnu/packages/patches/containerd-test-with-go1.13.patch21
-rw-r--r--gnu/packages/patches/curl-7.76-use-ssl-cert-env.patch64
-rw-r--r--gnu/packages/patches/gimp-make-gegl-introspect-optional.patch43
-rw-r--r--gnu/packages/patches/imagemagick-CVE-2020-27829.patch27
-rw-r--r--gnu/packages/patches/imagemagick-ReadDCMImage-fix.patch26
-rw-r--r--gnu/packages/patches/imagemagick-ReadDCMPixels-fix.patch35
-rw-r--r--gnu/packages/patches/imagemagick-WriteTHUMBNAILImage-fix.patch25
-rw-r--r--gnu/packages/patches/libvirt-add-install-prefix.patch329
-rw-r--r--gnu/packages/patches/linphone-desktop-without-sdk.patch235
-rw-r--r--gnu/packages/patches/linphoneqt-tabbutton.patch96
-rw-r--r--gnu/packages/patches/lksctp-tools-1.0.18-fix-header-file-name.patch32
-rw-r--r--gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch100
-rw-r--r--gnu/packages/patches/mariadb-CVE-2021-27928.patch642
-rw-r--r--gnu/packages/patches/mediastreamer2-srtp2.patch155
-rw-r--r--gnu/packages/patches/opendht-fix-jami.patch33
-rw-r--r--gnu/packages/patches/pidgin-vv-gst.patch48
-rw-r--r--gnu/packages/patches/pyqt-public-sip.patch55
-rw-r--r--gnu/packages/patches/qemu-build-info-manual.patch2
-rw-r--r--gnu/packages/patches/qemu-glibc-2.30.patch57
-rw-r--r--gnu/packages/patches/racket-sh-via-rktio.patch87
-rw-r--r--gnu/packages/patches/runc-CVE-2019-5736.patch343
-rw-r--r--gnu/packages/patches/upx-CVE-2021-20285.patch76
-rw-r--r--gnu/packages/patches/vtk-fix-freetypetools-build-failure.patch14
-rw-r--r--gnu/packages/patches/wpa-supplicant-CVE-2021-30004.patch115
-rw-r--r--gnu/packages/pdf.scm13
-rw-r--r--gnu/packages/perl-check.scm4
-rw-r--r--gnu/packages/perl.scm33
-rw-r--r--gnu/packages/photo.scm17
-rw-r--r--gnu/packages/popt.scm2
-rw-r--r--gnu/packages/pretty-print.scm13
-rw-r--r--gnu/packages/python-build.scm24
-rw-r--r--gnu/packages/python-check.scm85
-rw-r--r--gnu/packages/python-compression.scm150
-rw-r--r--gnu/packages/python-web.scm134
-rw-r--r--gnu/packages/python-xyz.scm918
-rw-r--r--gnu/packages/qt.scm388
-rw-r--r--gnu/packages/radio.scm361
-rw-r--r--gnu/packages/rdf.scm4
-rw-r--r--gnu/packages/rsync.scm6
-rw-r--r--gnu/packages/ruby.scm5
-rw-r--r--gnu/packages/rust.scm4
-rw-r--r--gnu/packages/scheme.scm191
-rw-r--r--gnu/packages/scsi.scm6
-rw-r--r--gnu/packages/search.scm8
-rw-r--r--gnu/packages/shells.scm654
-rw-r--r--gnu/packages/speech.scm15
-rw-r--r--gnu/packages/sphinx.scm24
-rw-r--r--gnu/packages/ssh.scm93
-rw-r--r--gnu/packages/statistics.scm35
-rw-r--r--gnu/packages/syncthing.scm74
-rw-r--r--gnu/packages/tcl.scm2
-rw-r--r--gnu/packages/telegram.scm4
-rw-r--r--gnu/packages/telephony.scm22
-rw-r--r--gnu/packages/tex.scm277
-rw-r--r--gnu/packages/text-editors.scm11
-rw-r--r--gnu/packages/time.scm9
-rw-r--r--gnu/packages/tls.scm6
-rw-r--r--gnu/packages/tmux.scm6
-rw-r--r--gnu/packages/upnp.scm4
-rw-r--r--gnu/packages/version-control.scm18
-rw-r--r--gnu/packages/video.scm30
-rw-r--r--gnu/packages/vim.scm10
-rw-r--r--gnu/packages/virtualization.scm151
-rw-r--r--gnu/packages/visidata.scm4
-rw-r--r--gnu/packages/vpn.scm13
-rw-r--r--gnu/packages/web-browsers.scm42
-rw-r--r--gnu/packages/web.scm120
-rw-r--r--gnu/packages/webkit.scm11
-rw-r--r--gnu/packages/wm.scm108
-rw-r--r--gnu/packages/xdisorg.scm8
-rw-r--r--gnu/packages/xfce.scm27
-rw-r--r--gnu/packages/xml.scm47
-rw-r--r--gnu/services.scm27
-rw-r--r--gnu/services/admin.scm4
-rw-r--r--gnu/services/base.scm19
-rw-r--r--gnu/services/ci.scm127
-rw-r--r--gnu/services/cuirass.scm2
-rw-r--r--gnu/services/databases.scm4
-rw-r--r--gnu/services/mail.scm2
-rw-r--r--gnu/services/networking.scm141
-rw-r--r--gnu/services/sysctl.scm2
-rw-r--r--gnu/services/version-control.scm2
-rw-r--r--gnu/services/web.scm35
-rw-r--r--gnu/services/xorg.scm2
-rw-r--r--gnu/system/vm.scm20
-rw-r--r--gnu/tests.scm26
-rw-r--r--gnu/tests/base.scm4
-rw-r--r--gnu/tests/ci.scm128
-rw-r--r--gnu/tests/databases.scm2
-rw-r--r--gnu/tests/docker.scm3
-rw-r--r--gnu/tests/file-sharing.scm271
-rw-r--r--gnu/tests/guix.scm5
-rw-r--r--gnu/tests/monitoring.scm7
-rw-r--r--gnu/tests/networking.scm92
-rw-r--r--gnu/tests/nfs.scm2
-rw-r--r--gnu/tests/virtualization.scm11
-rw-r--r--gnu/tests/web.scm7
-rw-r--r--guix/build-system/go.scm24
-rw-r--r--guix/build-system/node.scm21
-rw-r--r--guix/build/graft.scm281
-rw-r--r--guix/build/julia-build-system.scm2
-rw-r--r--guix/build/node-build-system.scm207
-rw-r--r--guix/build/qt-build-system.scm68
-rw-r--r--guix/channels.scm17
-rw-r--r--guix/git.scm45
-rw-r--r--guix/gnu-maintenance.scm91
-rw-r--r--guix/http-client.scm109
-rw-r--r--guix/import/go.scm465
-rw-r--r--guix/import/print.scm11
-rw-r--r--guix/import/utils.scm48
-rw-r--r--guix/ipfs.scm183
-rw-r--r--guix/licenses.scm7
-rw-r--r--guix/lint.scm62
-rw-r--r--guix/scripts/archive.scm4
-rw-r--r--guix/scripts/build.scm2
-rw-r--r--guix/scripts/copy.scm4
-rw-r--r--guix/scripts/describe.scm10
-rw-r--r--guix/scripts/discover.scm12
-rw-r--r--guix/scripts/download.scm17
-rw-r--r--guix/scripts/edit.scm10
-rw-r--r--guix/scripts/import.scm3
-rw-r--r--guix/scripts/import/cran.scm2
-rw-r--r--guix/scripts/import/go.scm75
-rw-r--r--guix/scripts/publish.scm12
-rw-r--r--guix/scripts/repl.scm11
-rw-r--r--guix/scripts/search.scm9
-rw-r--r--guix/scripts/show.scm10
-rwxr-xr-xguix/scripts/substitute.scm200
-rw-r--r--guix/scripts/system.scm2
-rw-r--r--guix/status.scm23
-rw-r--r--guix/upstream.scm15
-rw-r--r--guix/utils.scm1
-rw-r--r--nix/libstore/build.cc4
-rw-r--r--nix/libstore/local-store.cc12
-rw-r--r--nix/local.mk2
-rw-r--r--nix/nix-daemon/nix-daemon.cc9
-rw-r--r--nix/nix-daemon/shared.hh9
-rw-r--r--po/guix/LINGUAS1
-rw-r--r--po/guix/sk.po7845
-rw-r--r--tests/gnu-maintenance.scm19
-rw-r--r--tests/go.scm139
-rw-r--r--tests/grafts.scm83
-rw-r--r--tests/ipfs.scm55
-rw-r--r--tests/publish.scm4
-rw-r--r--tests/substitute.scm4
283 files changed, 23922 insertions, 6391 deletions
diff --git a/.guix-authorizations b/.guix-authorizations
index 4efcd80bd9..486798359d 100644
--- a/.guix-authorizations
+++ b/.guix-authorizations
@@ -8,8 +8,6 @@
    (name "andreas"))
   ("2A39 3FFF 68F4 EF7A 3D29  12AF 6F51 20A0 22FB B2D5"
    (name "ajgrf"))
-  ("306F CB8F 2C01 C25D 29D3  0556 61EF 502E F602 52F2"
-   (name "alexvong1995"))
   ("4FB9 9F49 2B12 A365 7997  E664 8246 0C08 2A0E E98F"
    (name "alezost"))
   ("50F3 3E2E 5B0C 3D90 0424  ABE8 9BDC F497 A4BB CC7F"
@@ -27,8 +25,6 @@
   (;; primary: "34FF 38BC D151 25A6 E340  A0B5 3453 2F9F AFCA 8B8E"
    "A0C5 E352 2EF8 EF5C 64CD  B7F0 FD73 CAC7 19D3 2566"
    (name "bavier"))
-  ("BCF8 F737 2CED 080A 67EB  592D 2A6A D9F4 AAC2 0DF6"
-   (name "benwoodcroft"))
   ("45CC 63B8 5258 C9D5 5F34  B239 D37D 0EA7 CECC 3912"
    (name "biscuolo"))
   ("7988 3B9F 7D6A 4DBF 3719  0367 2506 A96C CF63 0B21"
@@ -92,8 +88,6 @@
    (name "lfam"))
   ("148B CB8B D80B FB16 B1DE  0E91 45A8 B1E8 6BCD 10A6"
    (name "lle_bout"))
-  ("2AE3 1395 932B E642 FC0E  D99C 9BED 6EDA 32E5 B0BC"
-   (name "lsl88"))
   ("8887 84C4 1459 ACCB 83E7  E84C 634C 6E89 79FA BEC2"
    (name "m1gu3l"))
   ("CBF5 9755 CBE7 E7EF EF18  3FB1 DD40 9A15 D822 469D"
@@ -121,12 +115,12 @@
    (name "pgarlick"))
   ("3A86 380E 58A8 B942 8D39  60E1 327C 1EF3 8DF5 4C32"
    (name "phant0mas"))
+  ("CD2D 5EAA A98C CB37 DA91  D6B0 5F58 1664 7F8B E551"
+   (name "raghavgururajan"))
   ("74D6 A930 F44B 9B84 9EA5  5606 C166 AA49 5F7F 189C"
    (name "reepca"))
   ("BCA6 89B6 3655 3801 C3C6  2150 197A 5888 235F ACAC"
    (name "rekado"))
-  ("0154 E1B9 1CC9 D9EF 7764  8DE7 F3A7 27DB 44FC CA36"
-   (name "rhelling"))
   (;; From commit cc51c03ff867d4633505354819c6d88af88bf919 (March 2020).
    ;; See <https://lists.gnu.org/archive/html/guix-devel/2020-03/msg00070.html>.
    "F556 FD94 FB8F 8B87 79E3  6832 CBD0 CD51 38C1 9AFC"
@@ -138,22 +132,10 @@
   (;; primary: "D6B0 C593 DA8C 5EDC A44C  7A58 C336 91F7 1188 B004"
    "A02C 2D82 0EF4 B25B A6B5  1D90 2AC6 A5EC 1C35 7C59"
    (name "samplet"))
-  ("77DD AD2D 97F5 31BB C0F3  C7FD DFB5 EB09 AA62 5423"
-   (name "sleep_walker"))
   ("F494 72F4 7A59 00D5 C235  F212 89F9 6D48 08F3 59C7"
    (name "snape"))
-  ("9ADE 9ECF 2B19 C180 9C99  5CEA A1F4 CFCC 5283 6BAC"
-   (name "taylanub"))
-
-  ;; https://lists.gnu.org/archive/html/guix-devel/2017-03/msg00826.html
-  (;; primary: "1DD1 681F E285 E07F 11DC  0C59 2E15 A6BC D77D 54FD"
-   "3D2C DA58 819C 08C2 A649  D43D 5C3B 064C 724A 5726"
-   (name "thomasd"))
-
   ("6580 7361 3BFC C5C7 E2E4  5D45 DC51 8FC8 7F97 16AA"
    (name "vagrantc"))
   (;; primary: "C955 CC5D C048 7FB1 7966  40A9 199A F6A3 67E9 4ABB"
    "7238 7123 8EAC EB63 4548  5857 167F 8EA5 001A FA9C"
-   (name "wigust"))
-  ("FF47 8FB2 64DE 32EC 2967  25A3 DDC0 F535 8812 F8F2"
-   (name "wingo"))))
+   (name "wigust"))))
diff --git a/Makefile.am b/Makefile.am
index f078d07bfe..cd5bc6982d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -126,6 +126,7 @@ MODULES =					\
   guix/cache.scm				\
   guix/cve.scm					\
   guix/workers.scm				\
+  guix/ipfs.scm					\
   guix/build-system.scm				\
   guix/build-system/android-ndk.scm		\
   guix/build-system/ant.scm			\
diff --git a/build-aux/build-self.scm b/build-aux/build-self.scm
index dd845d1596..853a2f328f 100644
--- a/build-aux/build-self.scm
+++ b/build-aux/build-self.scm
@@ -285,8 +285,7 @@ interface (FFI) of Guile.")
                                                     #:select? select?))
     (gexp->script "compute-guix-derivation"
                   #~(begin
-                      (use-modules (ice-9 match)
-                                   (ice-9 threads))
+                      (use-modules (ice-9 match))
 
                       (eval-when (expand load eval)
                         ;; (gnu packages …) modules are going to be looked up
@@ -320,23 +319,9 @@ interface (FFI) of Guile.")
                                    (guix derivations)
                                    (srfi srfi-1))
 
-                      (define (spin system)
-                        (define spin
-                          (circular-list "-" "\\" "|" "/" "-" "\\" "|" "/"))
-
-                        (format (current-error-port)
-                                "Computing Guix derivation for '~a'...  "
-                                system)
-                        (when (isatty? (current-error-port))
-                          (let loop ((spin spin))
-                            (display (string-append "\b" (car spin))
-                                     (current-error-port))
-                            (force-output (current-error-port))
-                            (sleep 1)
-                            (loop (cdr spin)))))
-
                       (match (command-line)
-                        ((_ source system version protocol-version)
+                        ((_ source system version protocol-version
+                            build-output)
                          ;; The current input port normally wraps a file
                          ;; descriptor connected to the daemon, or it is
                          ;; connected to /dev/null.  In the former case, reuse
@@ -349,16 +334,18 @@ interface (FFI) of Guile.")
                                                               (current-input-port)
                                                               "w+0")
                                                              #:version proto)
-                                           (open-connection))))
-                           (call-with-new-thread
-                            (lambda ()
-                              (spin system)))
+                                           (open-connection)))
+                                (sock  (socket AF_UNIX SOCK_STREAM 0)))
+                           ;; Connect to BUILD-OUTPUT and send it the raw
+                           ;; build output.
+                           (connect sock AF_UNIX build-output)
 
                            (display
                             (and=>
                              ;; Silence autoload warnings and the likes.
                              (parameterize ((current-warning-port
-                                             (%make-void-port "w")))
+                                             (%make-void-port "w"))
+                                            (current-build-output-port sock))
                                (run-with-store store
                                  (guix-derivation source version
                                                   #$guile-version
@@ -370,6 +357,28 @@ interface (FFI) of Guile.")
                              derivation-file-name))))))
                   #:module-path (list source))))
 
+(define (proxy input output)
+  "Dump the contents of INPUT to OUTPUT until EOF is reached on INPUT.
+Display a spinner when nothing happens."
+  (define spin
+    (circular-list "-" "\\" "|" "/" "-" "\\" "|" "/"))
+
+  (setvbuf input 'block 16384)
+  (let loop ((spin spin))
+    (match (select (list input) '() '() 1)
+      ((() () ())
+       (when (isatty? (current-error-port))
+         (display (string-append "\b" (car spin))
+                  (current-error-port))
+         (force-output (current-error-port)))
+       (loop (cdr spin)))
+      (((_) () ())
+       ;; Read from INPUT as much as can be read without blocking.
+       (let ((bv (get-bytevector-some input)))
+         (unless (eof-object? bv)
+           (put-bytevector output bv)
+           (loop spin)))))))
+
 (define (call-with-clean-environment thunk)
   (let ((env (environ)))
     (dynamic-wind
@@ -426,7 +435,14 @@ files."
       ;; way, we know 'open-pipe*' will not close it on 'exec'.  If PORT is
       ;; not a file port (e.g., it's an SSH channel), then the subprocess's
       ;; stdin will actually be /dev/null.
-      (let* ((pipe   (with-input-from-port port
+      (let* ((sock   (socket AF_UNIX SOCK_STREAM 0))
+             (node   (let ((file (string-append (or (getenv "TMPDIR") "/tmp")
+                                                "/guix-build-output-"
+                                                (number->string (getpid)))))
+                       (bind sock AF_UNIX file)
+                       (listen sock 1)
+                       file))
+             (pipe   (with-input-from-port port
                        (lambda ()
                          ;; Make sure BUILD is not influenced by
                          ;; $GUILE_LOAD_PATH & co.
@@ -442,30 +458,45 @@ files."
                                       (if (file-port? port)
                                           (number->string
                                            (logior major minor))
-                                          "none"))))))
-             (str    (get-string-all pipe))
-             (status (close-pipe pipe)))
-        (match str
-          ((? eof-object?)
-           (error "build program failed" (list build status)))
-          ((? derivation-path? drv)
-           (mbegin %store-monad
-             (return (newline (current-error-port)))
-             ((store-lift add-temp-root) drv)
-             (return (read-derivation-from-file drv))))
-          ("#f"
-           ;; Unsupported PULL-VERSION.
-           (return #f))
-          ((? string? str)
-           (raise (condition
-                   (&message
-                    (message (format #f "You found a bug: the program '~a'
+                                          "none")
+                                      node))))))
+        (format (current-error-port) "Computing Guix derivation for '~a'...  "
+                system)
+
+        ;; Wait for a connection on SOCK and proxy build output so it can be
+        ;; processed according to the settings currently in effect (build
+        ;; traces, verbosity level, and so on).
+        (match (accept sock)
+          ((port . _)
+           (close-port sock)
+           (delete-file node)
+           (proxy port (current-build-output-port))))
+
+        ;; Now that the build output connection was closed, read the result, a
+        ;; derivation file name, from PIPE.
+        (let ((str    (get-string-all pipe))
+              (status (close-pipe pipe)))
+          (match str
+            ((? eof-object?)
+             (error "build program failed" (list build status)))
+            ((? derivation-path? drv)
+             (mbegin %store-monad
+               (return (newline (current-error-port)))
+               ((store-lift add-temp-root) drv)
+               (return (read-derivation-from-file drv))))
+            ("#f"
+             ;; Unsupported PULL-VERSION.
+             (return #f))
+            ((? string? str)
+             (raise (condition
+                     (&message
+                      (message (format #f "You found a bug: the program '~a'
 failed to compute the derivation for Guix (version: ~s; system: ~s;
 host version: ~s; pull-version: ~s).
 Please report it by email to <~a>.~%"
-                                     (derivation->output-path build)
-                                     version system %guix-version pull-version
-                                     %guix-bug-report-address)))))))))))
+                                       (derivation->output-path build)
+                                       version system %guix-version pull-version
+                                       %guix-bug-report-address))))))))))))
 
 ;; This file is loaded by 'guix pull'; return it the build procedure.
 build
diff --git a/doc/contributing.texi b/doc/contributing.texi
index 58c4dafb9b..9a09de93e6 100644
--- a/doc/contributing.texi
+++ b/doc/contributing.texi
@@ -126,10 +126,10 @@ Store}, for information about this), usually @file{/var}.  Note that you
 will probably not run @command{make install} at the end (you don't have
 to) but it's still important to pass the right @code{localstatedir}.
 
-Finally, you have to invoke @code{make check} to run tests
-(@pxref{Running the Test Suite}).  If anything
-fails, take a look at installation instructions (@pxref{Installation})
-or send a message to the @email{guix-devel@@gnu.org, mailing list}.
+Finally, you have to invoke @code{make && make check} to build Guix and
+run the tests (@pxref{Running the Test Suite}).  If anything fails, take
+a look at installation instructions (@pxref{Installation}) or send a
+message to the @email{guix-devel@@gnu.org, mailing list}.
 
 From there on, you can authenticate all the commits included in your
 checkout by running:
@@ -445,6 +445,14 @@ the project name chosen upstream, with underscores replaced with
 hyphens.  For instance, GNUnet is available as @code{gnunet}, and
 SDL_net as @code{sdl-net}.
 
+A noteworthy exception to this rule is when the project name is only a
+single character, or if an older maintained project with the same name
+already exists---regardless of whether it has already been packaged for
+Guix.  Use common sense to make such names unambiguous and meaningful.
+For example, Guix's package for the shell called ``s'' upstream is
+@code{s-shell} and @emph{not} @code{s}.  Feel free to ask your fellow
+hackers for inspiration.
+
 We do not add @code{lib} prefixes for library packages, unless these are
 already part of the official project name.  But @pxref{Python
 Modules} and @ref{Perl Modules} for special rules concerning modules for
diff --git a/doc/guix.texi b/doc/guix.texi
index 6464fa32cb..a89701dd68 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -31,14 +31,14 @@ Copyright @copyright{} 2015 Taylan Ulrich Bayırlı/Kammer@*
 Copyright @copyright{} 2015, 2016, 2017, 2019, 2020, 2021 Leo Famulari@*
 Copyright @copyright{} 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus@*
 Copyright @copyright{} 2016 Ben Woodcroft@*
-Copyright @copyright{} 2016, 2017, 2018 Chris Marusich@*
+Copyright @copyright{} 2016, 2017, 2018, 2021 Chris Marusich@*
 Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner@*
 Copyright @copyright{} 2016 John Darrington@*
 Copyright @copyright{} 2016, 2017 Nikita Gillmann@*
 Copyright @copyright{} 2016, 2017, 2018, 2019, 2020 Jan Nieuwenhuizen@*
 Copyright @copyright{} 2016, 2017, 2018, 2019, 2020 Julien Lepiller@*
 Copyright @copyright{} 2016 Alex ter Weele@*
-Copyright @copyright{} 2016, 2017, 2018, 2019 Christopher Baines@*
+Copyright @copyright{} 2016, 2017, 2018, 2019, 2020, 2021 Christopher Baines@*
 Copyright @copyright{} 2017, 2018, 2019 Clément Lassieur@*
 Copyright @copyright{} 2017, 2018, 2020, 2021 Mathieu Othacehe@*
 Copyright @copyright{} 2017 Federico Beffa@*
@@ -49,7 +49,7 @@ Copyright @copyright{} 2017, 2021 Christopher Lemmer Webber@*
 Copyright @copyright{} 2017, 2018, 2019, 2020 Marius Bakke@*
 Copyright @copyright{} 2017, 2019, 2020 Hartmut Goebel@*
 Copyright @copyright{} 2017, 2019, 2020, 2021 Maxim Cournoyer@*
-Copyright @copyright{} 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice@*
+Copyright @copyright{} 2017, 2018, 2019, 2020, 2021 Tobias Geerinckx-Rice@*
 Copyright @copyright{} 2017 George Clemmer@*
 Copyright @copyright{} 2017 Andy Wingo@*
 Copyright @copyright{} 2017, 2018, 2019, 2020 Arun Isaac@*
@@ -87,6 +87,7 @@ Copyright @copyright{} 2020 Daniel Brooks@*
 Copyright @copyright{} 2020 John Soo@*
 Copyright @copyright{} 2020 Jonathan Brielmaier@*
 Copyright @copyright{} 2020 Edgar Vincent@*
+Copyright @copyright{} 2021 Maxime Devos@*
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -240,13 +241,13 @@ Channels
 * Using a Custom Guix Channel::  Using a customized Guix.
 * Replicating Guix::            Running the @emph{exact same} Guix.
 * Channel Authentication::      How Guix verifies what it fetches.
+* Channels with Substitutes::   Using channels with available substitutes.
 * Creating a Channel::          How to write your custom channel.
 * Package Modules in a Sub-directory::  Specifying the channel's package modules location.
 * Declaring Channel Dependencies::  How to depend on other channels.
 * Specifying Channel Authorizations::  Defining channel authors authorizations.
 * Primary URL::                 Distinguishing mirror to original.
 * Writing Channel News::        Communicating information to channel's users.
-* Channels with Substitutes::   Using channels with available substitutes.
 
 Development
 
@@ -342,7 +343,7 @@ Services
 * DNS Services::                DNS daemons.
 * VPN Services::                VPN daemons.
 * Network File System::         NFS related services.
-* Continuous Integration::      The Cuirass service.
+* Continuous Integration::      Cuirass and Laminar services.
 * Power Management Services::   Extending battery life.
 * Audio Services::              The MPD.
 * Virtualization Services::     Virtualization services.
@@ -523,6 +524,17 @@ supported; in particular, there is no ongoing work to ensure that this
 architecture still works.  Should someone decide they wish to revive this
 architecture then the code is still available.
 
+@item powerpc64le-linux
+little-endian 64-bit Power ISA processors, Linux-Libre kernel.  This
+includes POWER9 systems such as the
+@uref{https://www.fsf.org/news/talos-ii-mainboard-and-talos-ii-lite-mainboard-now-fsf-certified-to-respect-your-freedom,
+RYF Talos II mainboard}. This platform is available as a "technology
+preview": although it is supported, substitutes are not yet available
+from the build farm (@pxref{Substitutes}), and some packages may fail to
+build (@pxref{Tracking Bugs and Patches}).  That said, the Guix
+community is actively working on improving this support, and now is a
+great time to try it and get involved!
+
 @end table
 
 With Guix@tie{}System, you @emph{declare} all aspects of the operating system
@@ -534,7 +546,7 @@ Manual}), the well-known GNU utilities and tool chain, as well as the
 graphical environment or system services of your choice.
 
 Guix System is available on all the above platforms except
-@code{mips64el-linux}.
+@code{mips64el-linux} and @code{powerpc64le-linux}.
 
 @noindent
 For information on porting to other architectures or kernels,
@@ -641,7 +653,7 @@ If that command fails because you do not have the required public key,
 then run this command to import it:
 
 @example
-$ wget @value{OPENPGP-SIGNING-KEY-URL} \
+$ wget '@value{OPENPGP-SIGNING-KEY-URL}' \
       -qO - | gpg --import -
 @end example
 
@@ -836,7 +848,8 @@ version 0.1.0 or later;
 @item @uref{https://notabug.org/guile-lzlib/guile-lzlib, Guile-lzlib};
 @item @uref{https://www.nongnu.org/guile-avahi/, Guile-Avahi};
 @item
-@c FIXME: Specify a version number once a release has been made.
+@c FIXME: We need the #:fetch-options parameter of 'submodule-update',
+@c which appeared in 0.5.0.  Change below after string freeze.
 @uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, version 0.3.0
 or later;
 @item @uref{https://savannah.nongnu.org/projects/guile-json/, Guile-JSON}
@@ -1043,10 +1056,10 @@ Bash syntax and the @code{shadow} commands):
 @c for why `-G' is needed.
 @example
 # groupadd --system guixbuild
-# for i in `seq -w 1 10`;
+# for i in $(seq -w 1 10);
   do
     useradd -g guixbuild -G guixbuild           \
-            -d /var/empty -s `which nologin`    \
+            -d /var/empty -s $(which nologin)   \
             -c "Guix build user $i" --system    \
             guixbuilder$i;
   done
@@ -1417,7 +1430,7 @@ the Guix daemon.
 @code{guix_daemon_socket_t} isn’t actually used.  None of the socket
 operations involve contexts that have anything to do with
 @code{guix_daemon_socket_t}.  It doesn’t hurt to have this unused label,
-but it would be preferrable to define socket rules for only this label.
+but it would be preferable to define socket rules for only this label.
 
 @item
 @code{guix gc} cannot access arbitrary links to profiles.  By design,
@@ -4213,7 +4226,7 @@ Return the derivation(s) leading to the given store items
 For example, this command:
 
 @example
-guix gc --derivers `guix package -I ^emacs$ | cut -f4`
+guix gc --derivers $(guix package -I ^emacs$ | cut -f4)
 @end example
 
 @noindent
@@ -4694,7 +4707,7 @@ these procedures.
 Inferior packages can be used transparently like any other package or
 file-like object in G-expressions (@pxref{G-Expressions}).  They are also
 transparently handled by the @code{packages->manifest} procedure, which is
-commonly use in manifests (@pxref{Invoking guix package, the
+commonly used in manifests (@pxref{Invoking guix package, the
 @option{--manifest} option of @command{guix package}}).  Thus you can insert
 an inferior package pretty much anywhere you would insert a regular package:
 in manifests, in the @code{packages} field of your @code{operating-system}
@@ -5009,13 +5022,13 @@ updates.
 * Using a Custom Guix Channel::  Using a customized Guix.
 * Replicating Guix::            Running the @emph{exact same} Guix.
 * Channel Authentication::      How Guix verifies what it fetches.
+* Channels with Substitutes::   Using channels with available substitutes.
 * Creating a Channel::          How to write your custom channel.
 * Package Modules in a Sub-directory::  Specifying the channel's package modules location.
 * Declaring Channel Dependencies::  How to depend on other channels.
 * Specifying Channel Authorizations::  Defining channel authors authorizations.
 * Primary URL::                 Distinguishing mirror to original.
 * Writing Channel News::        Communicating information to channel's users.
-* Channels with Substitutes::   Using channels with available substitutes.
 @end menu
 
 @node Specifying Additional Channels
@@ -5171,6 +5184,31 @@ introduction from a trusted source since that is the root of your trust.
 
 If you're curious about the authentication mechanics, read on!
 
+@node Channels with Substitutes
+@section Channels with Substitutes
+
+When running @command{guix pull}, Guix will first compile the
+definitions of every available package.  This is an expensive operation
+for which substitutes (@pxref{Substitutes}) may be available.  The
+following snippet in @file{channels.scm} will ensure that @command{guix
+pull} uses the latest commit with available substitutes for the package
+definitions: this is done by querying the continuous integration
+server at @url{https://ci.guix.gnu.org}.
+
+@lisp
+(use-modules (guix ci))
+
+(list (channel-with-substitutes-available
+       %default-guix-channel
+       "https://ci.guix.gnu.org"))
+@end lisp
+
+Note that this does not mean that all the packages that you will
+install after running @command{guix pull} will have available
+substitutes.  It only ensures that @command{guix pull} will not try to
+compile package definitions.  This is particularly useful when using
+machines with limited resources.
+
 @node Creating a Channel
 @section Creating a Channel
 
@@ -5487,31 +5525,6 @@ xgettext -o news.po -l scheme -ken etc/news.txt
 To sum up, yes, you could use your channel as a blog.  But beware, this
 is @emph{not quite} what your users might expect.
 
-@node Channels with Substitutes
-@section Channels with Substitutes
-
-When running @command{guix pull}, Guix will first compile the
-definitions of every available package.  This is an expensive operation
-for which substitutes (@pxref{Substitutes}) may be available.  The
-following snippet in @file{channels.scm} will ensure that @command{guix
-pull} uses the latest commit with available substitutes for the package
-definitions: this is done by querying the continuous integration
-server at @url{https://ci.guix.gnu.org}.
-
-@lisp
-(use-modules (guix ci))
-
-(list (channel-with-substitutes-available
-       %default-guix-channel
-       "https://ci.guix.gnu.org"))
-@end lisp
-
-Note that this does not mean that all the packages that you will
-install after running @command{guix pull} will have available
-substitutes.  It only ensures that @command{guix pull} will not try to
-compile package definitions.  This is particularly useful when using
-machines with limited resources.
-
 @c *********************************************************************
 @node Development
 @chapter Development
@@ -7288,55 +7301,7 @@ standards, GNU Coding Standards}).
 In a nutshell, packages using it are configured, built, and installed with
 the usual @code{./configure && make && make check && make install}
 command sequence.  In practice, a few additional steps are often needed.
-All these steps are split up in separate @dfn{phases},
-notably@footnote{Please see the @code{(guix build gnu-build-system)}
-modules for more details about the build phases.}:
-
-@table @code
-@item unpack
-Unpack the source tarball, and change the current directory to the
-extracted source tree.  If the source is actually a directory, copy it
-to the build tree, and enter that directory.
-
-@item patch-source-shebangs
-Patch shebangs encountered in source files so they refer to the right
-store file names.  For instance, this changes @code{#!/bin/sh} to
-@code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
-
-@item configure
-Run the @file{configure} script with a number of default options, such
-as @option{--prefix=/gnu/store/@dots{}}, as well as the options specified
-by the @code{#:configure-flags} argument.
-
-@item build
-Run @code{make} with the list of flags specified with
-@code{#:make-flags}.  If the @code{#:parallel-build?} argument is true
-(the default), build with @code{make -j}.
-
-@item check
-Run @code{make check}, or some other target specified with
-@code{#:test-target}, unless @code{#:tests? #f} is passed.  If the
-@code{#:parallel-tests?} argument is true (the default), run @code{make
-check -j}.
-
-@item install
-Run @code{make install} with the flags listed in @code{#:make-flags}.
-
-@item patch-shebangs
-Patch shebangs on the installed executable files.
-
-@item strip
-Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
-is false), copying them to the @code{debug} output when available
-(@pxref{Installing Debugging Files}).
-@end table
-
-@vindex %standard-phases
-The build-side module @code{(guix build gnu-build-system)} defines
-@code{%standard-phases} as the default list of build phases.
-@code{%standard-phases} is a list of symbol/procedure pairs, where the
-procedure implements the actual phase.
-
+All these steps are split up in separate @dfn{phases}.
 @xref{Build Phases}, for more info on build phases and ways to customize
 them.
 
@@ -7346,6 +7311,84 @@ Coreutils, Bash, Make, Diffutils, grep, and sed (see the @code{(guix
 build-system gnu)} module for a complete list).  We call these the
 @dfn{implicit inputs} of a package, because package definitions do not
 have to mention them.
+
+This build system supports a number of keyword arguments, which can be
+passed @i{via} the @code{arguments} field of a package.  Here are some
+of the main parameters:
+
+@table @code
+@item #:phases
+This argument specifies build-side code that evaluates to an alist of
+build phases.  @xref{Build Phases}, for more information.
+
+@item #:configure-flags
+This is a list of flags (strings) passed to the @command{configure}
+script.  @xref{Defining Packages}, for an example.
+
+@item #:make-flags
+This list of strings contains flags passed as arguments to
+@command{make} invocations in the @code{build}, @code{check}, and
+@code{install} phases.
+
+@item #:out-of-source?
+This Boolean, @code{#f} by default, indicates whether to run builds in a
+build directory separate from the source tree.
+
+When it is true, the @code{configure} phase creates a separate build
+directory, changes to that directory, and runs the @code{configure}
+script from there.  This is useful for packages that require it, such as
+@code{glibc}.
+
+@item #:tests?
+This Boolean, @code{#t} by default, indicates whether the @code{check}
+phase should run the package's test suite.
+
+@item #:test-target
+This string, @code{"check"} by default, gives the name of the makefile
+target used by the @code{check} phase.
+
+@item #:parallel-build?
+@itemx #:parallel-tests?
+These Boolean values specify whether to build, respectively run the test
+suite, in parallel, with the @code{-j} flag of @command{make}.  When
+they are true, @code{make} is passed @code{-j@var{n}}, where @var{n} is
+the number specified as the @option{--cores} option of
+@command{guix-daemon} or that of the @command{guix} client command
+(@pxref{Common Build Options, @option{--cores}}).
+
+@cindex RUNPATH, validation
+@item #:validate-runpath?
+This Boolean, @code{#t} by default, determines whether to ``validate''
+the @code{RUNPATH} of ELF binaries (@code{.so} shared libraries as well
+as executables) previously installed by the @code{install} phase.
+
+This validation step consists in making sure that all the shared
+libraries needed by an ELF binaries, which are listed as
+@code{DT_NEEDED} entries in its @code{PT_DYNAMIC} segment, appear in the
+@code{DT_RUNPATH} entry of that binary.  In other words, it ensures that
+running or using those binaries will not result in a ``file not found''
+error at run time.  @xref{Options, @option{-rpath},, ld, The GNU
+Linker}, for more information on @code{RUNPATH}.
+
+@item #:substitutable?
+This Boolean, @code{#t} by default, tells whether the package outputs
+should be substitutable---i.e., whether users should be able to obtain
+substitutes for them instead of building locally (@pxref{Substitutes}).
+
+@item #:allowed-references
+@itemx #:disallowed-references
+When true, these arguments must be a list of dependencies that must not
+appear among the references of the build results.  If, upon build
+completion, some of these references are retained, the build process
+fails.
+
+This is useful to ensure that a package does not erroneously keep a
+reference to some of it build-time inputs, in cases where doing so
+would, for example, unnecessarily increase its size (@pxref{Invoking
+guix size}).
+@end table
+
+Most other build systems support these keyword arguments.
 @end defvr
 
 Other @code{<build-system>} objects are defined to support other
@@ -7754,13 +7797,13 @@ The Julia package name is read from the file @file{Project.toml}.  This
 value can be overridden by passing the argument @code{#:julia-package-name}
 (which must be correctly capitalized).
 
-Julia packages usually manage they binary dependencies via
+Julia packages usually manage their binary dependencies via
 @code{JLLWrappers.jl}, a Julia package that creates a module (named
 after the wrapped library followed by @code{_jll.jl}.
 
 To add the binary path @code{_jll.jl} packages, you need to patch the
 files under @file{src/wrappers/}, replacing the call to the macro
-@code{JLLWrappers.@@generate_wrapper_header}, adding as a secound
+@code{JLLWrappers.@@generate_wrapper_header}, adding as a second
 argument containing the store path the binary.
 
 As an example, in the MbedTLS Julia package, we add a build phase
@@ -8246,16 +8289,53 @@ exception is the ``bare-bones'' @code{trivial-build-system}
 (@pxref{Build Systems}).
 
 As discussed in the previous section, those build systems provide a
-standard list of phases.  For @code{gnu-build-system}, the standard
-phases include an @code{unpack} phase to unpack the source code tarball,
-a @command{configure} phase to run @code{./configure}, a @code{build}
-phase to run @command{make}, and (among others) an @code{install} phase
-to run @command{make install}; @pxref{Build Systems}, for a more
-detailed view of these phases.  Likewise, @code{cmake-build-system}
-inherits these phases, but its @code{configure} phase runs
-@command{cmake} instead of @command{./configure}.  Other build systems,
-such as @code{python-build-system}, have a wholly different list of
-standard phases.  All this code runs on the @dfn{build side}: it is
+standard list of phases.  For @code{gnu-build-system}, the main build
+phases are the following:
+
+@table @code
+@item unpack
+Unpack the source tarball, and change the current directory to the
+extracted source tree.  If the source is actually a directory, copy it
+to the build tree, and enter that directory.
+
+@item patch-source-shebangs
+Patch shebangs encountered in source files so they refer to the right
+store file names.  For instance, this changes @code{#!/bin/sh} to
+@code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
+
+@item configure
+Run the @file{configure} script with a number of default options, such
+as @option{--prefix=/gnu/store/@dots{}}, as well as the options specified
+by the @code{#:configure-flags} argument.
+
+@item build
+Run @code{make} with the list of flags specified with
+@code{#:make-flags}.  If the @code{#:parallel-build?} argument is true
+(the default), build with @code{make -j}.
+
+@item check
+Run @code{make check}, or some other target specified with
+@code{#:test-target}, unless @code{#:tests? #f} is passed.  If the
+@code{#:parallel-tests?} argument is true (the default), run @code{make
+check -j}.
+
+@item install
+Run @code{make install} with the flags listed in @code{#:make-flags}.
+
+@item patch-shebangs
+Patch shebangs on the installed executable files.
+
+@item strip
+Strip debugging symbols from ELF files (unless @code{#:strip-binaries?}
+is false), copying them to the @code{debug} output when available
+(@pxref{Installing Debugging Files}).
+@end table
+
+Other build systems have similar phases, with some variations.  For
+example, @code{cmake-build-system} has same-named phases but its
+@code{configure} phases runs @code{cmake} instead of @code{./configure}.
+Others, such as @code{python-build-system}, have a wholly different list
+of standard phases.  All this code runs on the @dfn{build side}: it is
 evaluated when you actually build the package, in a dedicated build
 process spawned by the build daemon (@pxref{Invoking guix-daemon}).
 
@@ -8266,6 +8346,7 @@ is a procedure that accepts an arbitrary number of arguments.  By
 convention, those procedures receive information about the build in the
 form of @dfn{keyword parameters}, which they can use or ignore.
 
+@vindex %standard-phases
 For example, here is how @code{(guix build gnu-build-system)} defines
 @code{%standard-phases}, the variable holding its alist of build
 phases@footnote{We present a simplified view of those build phases, but
@@ -10130,7 +10211,7 @@ Similarly, the following command builds all the available packages:
 
 @example
 guix build --quiet --keep-going \
-  `guix package -A | cut -f1,2 --output-delimiter=@@`
+  $(guix package -A | cut -f1,2 --output-delimiter=@@)
 @end example
 
 @var{package-or-derivation} may be either the name of a package found in
@@ -10263,9 +10344,10 @@ guix-daemon, @option{--timeout}}).
 @cindex build logs, verbosity
 @item -v @var{level}
 @itemx --verbosity=@var{level}
-Use the given verbosity @var{level}, an integer.  Choosing 0 means that no
-output is produced, 1 is for quiet output, and 2 shows all the build log
-output on standard error.
+Use the given verbosity @var{level}, an integer.  Choosing 0 means that
+no output is produced, 1 is for quiet output; 2 is similar to 1 but it
+additionally displays download URLs; 3 shows all the build log output on
+standard error.
 
 @item --cores=@var{n}
 @itemx -c @var{n}
@@ -10835,8 +10917,8 @@ This works regardless of how packages or derivations are specified.  For
 instance, the following invocations are equivalent:
 
 @example
-guix build --log-file `guix build -d guile`
-guix build --log-file `guix build guile`
+guix build --log-file $(guix build -d guile)
+guix build --log-file $(guix build guile)
 guix build --log-file guile
 guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
 @end example
@@ -11551,13 +11633,13 @@ Select the given repository (a repository name).  Possible values include:
 Import metadata for a Go module using
 @uref{https://proxy.golang.org, proxy.golang.org}.
 
-This importer is highly experimental. See the source code for more info
-about the current state.
-
 @example
 guix import go gopkg.in/yaml.v2
 @end example
 
+It is possible to use a package specification with a @code{@@VERSION}
+suffix to import a specific version.
+
 Additional options include:
 
 @table @code
@@ -11566,6 +11648,14 @@ Additional options include:
 Traverse the dependency graph of the given upstream package recursively
 and generate package expressions for all those packages that are not yet
 in Guix.
+@item --pin-versions
+When using this option, the importer preserves the exact versions of the
+Go modules dependencies instead of using their latest available
+versions.  This can be useful when attempting to import packages that
+recursively depend on former versions of themselves to build.  When
+using this mode, the symbol of the package is made by appending the
+version to its name, so that multiple versions of the same package can
+coexist.
 @end table
 @end table
 
@@ -11577,10 +11667,13 @@ is welcome here (@pxref{Contributing}).
 @section Invoking @command{guix refresh}
 
 @cindex @command {guix refresh}
-The primary audience of the @command{guix refresh} command is developers
-of the GNU software distribution.  By default, it reports any packages
-provided by the distribution that are outdated compared to the latest
-upstream version, like this:
+The primary audience of the @command{guix refresh} command is packagers.
+As a user, you may be interested in the @option{--with-latest} option,
+which can bring you package update superpowers built upon @command{guix
+refresh} (@pxref{Package Transformation Options,
+@option{--with-latest}}).  By default, @command{guix refresh} reports
+any packages provided by the distribution that are outdated compared to
+the latest upstream version, like this:
 
 @example
 $ guix refresh
@@ -11708,6 +11801,8 @@ list of updaters).  Currently, @var{updater} may be one of:
 the updater for GNU packages;
 @item savannah
 the updater for packages hosted at @uref{https://savannah.gnu.org, Savannah};
+@item sourceforge
+the updater for packages hosted at @uref{https://sourceforge.net, SourceForge};
 @item gnome
 the updater for GNOME packages;
 @item kde
@@ -11752,6 +11847,12 @@ gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to
 gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
 @end example
 
+@item --list-updaters
+@itemx -L
+List available updaters and exit (see @option{--type} above).
+
+For each updater, display the fraction of packages it covers; at the
+end, display the fraction of packages covered by all these updaters.
 @end table
 
 In addition, @command{guix refresh} can be passed one or more package
@@ -11764,7 +11865,13 @@ $ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
 @noindent
 The command above specifically updates the @code{emacs} and
 @code{idutils} packages.  The @option{--select} option would have no
-effect in this case.
+effect in this case.  You might also want to update definitions that
+correspond to the packages installed in your profile:
+
+@example
+$ ./pre-inst-env guix refresh -u \
+       $(guix package --list-installed | cut -f1)
+@end example
 
 When considering whether to upgrade a package, it is sometimes
 convenient to know which packages would be affected by the upgrade and
@@ -11773,13 +11880,6 @@ be used when passing @command{guix refresh} one or more package names:
 
 @table @code
 
-@item --list-updaters
-@itemx -L
-List available updaters and exit (see @option{--type} above).
-
-For each updater, display the fraction of packages it covers; at the
-end, display the fraction of packages covered by all these updaters.
-
 @item --list-dependent
 @itemx -l
 List top-level dependent packages that would need to be rebuilt as a
@@ -12336,7 +12436,7 @@ For this type of graph, it is also possible to pass a @file{.drv} file
 name instead of a package name, as in:
 
 @example
-guix graph -t derivation `guix system build -d my-config.scm`
+guix graph -t derivation $(guix system build -d my-config.scm)
 @end example
 
 @item module
@@ -12365,7 +12465,7 @@ example, the command below produces the reference graph of your profile
 (which can be big!):
 
 @example
-guix graph -t references `readlink -f ~/.guix-profile`
+guix graph -t references $(readlink -f ~/.guix-profile)
 @end example
 
 @item referrers
@@ -12937,7 +13037,7 @@ their dependencies over to @var{host}, logged in as @var{user}:
 
 @example
 guix copy --to=@var{user}@@@var{host} \
-          coreutils `readlink -f ~/.guix-profile`
+          coreutils $(readlink -f ~/.guix-profile)
 @end example
 
 If some of the items to be copied are already present on @var{host},
@@ -13498,6 +13598,14 @@ following expression returns a list that contains all the services in
         %desktop-services)
 @end lisp
 
+Alternatively, the @code{modify-services} macro can be used:
+
+@lisp
+(modify-services %desktop-services
+  (delete avahi-service-type))
+@end lisp
+
+
 @unnumberedsubsec Instantiating the System
 
 Assuming the @code{operating-system} declaration
@@ -14808,7 +14916,7 @@ declaration.
 * DNS Services::                DNS daemons.
 * VPN Services::                VPN daemons.
 * Network File System::         NFS related services.
-* Continuous Integration::      The Cuirass service.
+* Continuous Integration::      Cuirass and Laminar services.
 * Power Management Services::   Extending battery life.
 * Audio Services::              The MPD.
 * Virtualization Services::     Virtualization services.
@@ -15180,6 +15288,12 @@ in automatically without prompting for their login name or password.
 @item @code{hardware-acceleration?} (default: #f)
 Whether to use hardware acceleration.
 
+@item @code{font-engine} (default: @code{"pango"})
+Font engine used in Kmscon.
+
+@item @code{font-size} (default: @code{12})
+Font size used in Kmscon.
+
 @item @code{kmscon} (default: @var{kmscon})
 The Kmscon package to use.
 
@@ -15630,7 +15744,7 @@ This allows neighboring Guix devices with discovery on (see
 @code{guix-configuration} above) to discover this @command{guix publish}
 instance and to automatically download substitutes from it.
 
-@item @code{compression} (default: @code{'(("gzip" 3))})
+@item @code{compression} (default: @code{'(("gzip" 3) ("zstd" 3))})
 This is a list of compression method/level tuple used when compressing
 substitutes.  For example, to compress all substitutes with @emph{both} lzip
 at level 7 and gzip at level 9, write:
@@ -16399,7 +16513,7 @@ netfilter project that aims to replace the existing iptables, ip6tables,
 arptables and ebtables framework.  It provides a new packet filtering
 framework, a new user-space utility @command{nft}, and a compatibility layer
 for iptables.  This service comes with a default ruleset
-@code{%default-nftables-ruleset} that rejecting all incomming connections
+@code{%default-nftables-ruleset} that rejecting all incoming connections
 except those to the ssh port 22.  To use it, simply write:
 
 @lisp
@@ -16802,7 +16916,7 @@ Data type representing the configuration for @code{syncthing-service-type}.
 List of command-line arguments passing to @code{syncthing} binary.
 
 @item @code{logflags} (default: @var{0})
-Sum of loging flags, see
+Sum of logging flags, see
 @uref{https://docs.syncthing.net/users/syncthing.html#cmdoption-logflags, Syncthing documentation logflags}.
 
 @item @code{user} (default: @var{#f})
@@ -17472,6 +17586,37 @@ address, delete everything except these options:
 @end table
 @end deftp
 
+@cindex IPFS
+@defvr {Scheme Variable} ipfs-service-type
+The service type for connecting to the @uref{https://ipfs.io,IPFS network},
+a global, versioned, peer-to-peer file system. Pass it a
+@code{ipfs-configuration} to change the ports used for the gateway and API.
+
+Here's an example configuration, using some non-standard ports:
+
+@lisp
+(service ipfs-service-type
+         (ipfs-configuration
+          (gateway "/ip4/127.0.0.1/tcp/8880")
+          (api "/ip4/127.0.0.1/tcp/8881")))
+@end lisp
+@end defvr
+
+@deftp {Data Type} ipfs-configuration
+Data type representing the configuration of IPFS.
+
+@table @asis
+@item @code{package} (default: @code{go-ipfs})
+Package object of IPFS.
+
+@item @code{gateway} (default: @code{"/ip4/127.0.0.1/tcp/8082"})
+Address of the gateway, in ‘multiaddress’ format.
+
+@item @code{api} (default: @code{"/ip4/127.0.0.1/tcp/5001"})
+Address of the API endpoint, in ‘multiaddress’ format.
+@end table
+@end deftp
+
 @cindex keepalived
 @deffn {Scheme Variable} keepalived-service-type
 This is the type for the @uref{https://www.keepalived.org/, Keepalived}
@@ -17761,9 +17906,8 @@ and tty8.
                    (service slim-service-type (slim-configuration
                                                (display ":1")
                                                (vt "vt8")))
-                   (remove (lambda (service)
-                             (eq? (service-kind service) gdm-service-type))
-                           %desktop-services))))
+                   (modify-services %desktop-services
+                     (delete gdm-service-type)))))
 @end lisp
 
 @end defvr
@@ -19697,12 +19841,15 @@ configuration.
 @item @code{ident-file} (default: @code{%default-postgres-ident})
 Filename or G-expression for the user name mapping configuration.
 
-@item @code{socket-directory} (default: @code{"/var/run/postgresql"})
+@item @code{socket-directory} (default: @code{#false})
 Specifies the directory of the Unix-domain socket(s) on which PostgreSQL
-is to listen for connections from client applications.  If set to
-@code{#false} PostgreSQL does not listen on any Unix-domain sockets, in
+is to listen for connections from client applications. If set to
+@code{""} PostgreSQL does not listen on any Unix-domain sockets, in
 which case only TCP/IP sockets can be used to connect to the server.
 
+By default, the @code{#false} value means the PostgreSQL default value
+will be used, which is currently @samp{/tmp}.
+
 @item @code{extra-config} (default: @code{'()})
 List of additional keys and values to include in the PostgreSQL config
 file.  Each entry in the list should be a list where the first element
@@ -25887,7 +26034,7 @@ this amount of time.  After this period, resolvers will invalidate their cache
 and check again that it still exists.
 
 @item @code{nx} (default: @code{3600})
-Default TTL of inexistant records.  This delay is usually short because you want
+Default TTL of inexistent records.  This delay is usually short because you want
 your new domains to reach everyone quickly.
 
 @end table
@@ -27311,6 +27458,64 @@ the store items being published.
 @end table
 @end deftp
 
+@subsubheading Laminar
+
+@uref{https://laminar.ohwg.net/, Laminar} is a lightweight and modular
+Continuous Integration service.  It doesn't have a configuration web UI
+instead uses version-controllable configuration files and scripts.
+
+Laminar encourages the use of existing tools such as bash and cron
+instead of reinventing them.
+
+@defvr {Scheme Procedure} laminar-service-type
+The type of the Laminar service.  Its value must be a
+@code{laminar-configuration} object, as described below.
+
+All configuration values have defaults, a minimal configuration to get
+Laminar running is shown below. By default, the web interface is
+available on port 8080.
+
+@lisp
+(service laminar-service-type)
+@end lisp
+@end defvr
+
+@deftp {Data Type} laminar-configuration
+Data type representing the configuration of Laminar.
+
+@table @asis
+@item @code{laminar} (default: @code{laminar})
+The Laminar package to use.
+
+@item @code{home-directory} (default: @code{"/var/lib/laminar"})
+The directory for job configurations and run directories.
+
+@item @code{bind-http} (default: @code{"*:8080"})
+The interface/port or unix socket on which laminard should listen for
+incoming connections to the web frontend.
+
+@item @code{bind-rpc} (default: @code{"unix-abstract:laminar"})
+The interface/port or unix socket on which laminard should listen for
+incoming commands such as build triggers.
+
+@item @code{title} (default: @code{"Laminar"})
+The page title to show in the web frontend.
+
+@item @code{keep-rundirs} (default: @code{0})
+Set to an integer defining how many rundirs to keep per job.  The
+lowest-numbered ones will be deleted.  The default is 0, meaning all run
+dirs will be immediately deleted.
+
+@item @code{archive-url} (default: @code{#f})
+The web frontend served by laminard will use this URL to form links to
+artefacts archived jobs.
+
+@item @code{base-url} (default: @code{#f})
+Base URL to use for links to laminar itself.
+
+@end table
+@end deftp
+
 @node Power Management Services
 @subsection Power Management Services
 
@@ -28719,7 +28924,7 @@ service:
 @lisp
 (service qemu-binfmt-service-type
          (qemu-binfmt-configuration
-           (platforms (lookup-qemu-platforms "arm"))
+           (platforms (lookup-qemu-platforms "arm"))))
 @end lisp
 
 You can run:
@@ -31030,7 +31235,7 @@ coordinator.
 
 @deftp {Data Type} guix-build-coordinator-agent-dynamic-auth
 Data type representing an agent authenticating with a coordinator via a
-dyanmic auth token and agent name.
+dynamic auth token and agent name.
 
 @table @asis
 @item @code{agent-name}
@@ -31047,7 +31252,7 @@ database, and is used by the agent to authenticate.
 
 @deftp {Data Type} guix-build-coordinator-agent-dynamic-auth-with-file
 Data type representing an agent authenticating with a coordinator via a
-dyanmic auth token read from a file and agent name.
+dynamic auth token read from a file and agent name.
 
 @table @asis
 @item @code{agent-name}
@@ -32899,8 +33104,8 @@ system configuration file.  You can then load the image and launch a
 Docker container using commands like the following:
 
 @example
-image_id="`docker load < guix-system-docker-image.tar.gz`"
-container_id="`docker create $image_id`"
+image_id="$(docker load < guix-system-docker-image.tar.gz)"
+container_id="$(docker create $image_id)"
 docker start $container_id
 @end example
 
@@ -33424,7 +33629,7 @@ The default @command{run-vm.sh} script that is returned by an invocation of
 @command{guix system vm} does not add a @command{-nic user} flag by default.
 To get network access from within the vm add the @code{(dhcp-client-service)}
 to your system definition and start the VM using
-@command{`guix system vm config.scm` -nic user}.  An important caveat of using
+@command{$(guix system vm config.scm) -nic user}.  An important caveat of using
 @command{-nic user} for networking is that @command{ping} will not work, because
 it uses the ICMP protocol.  You'll have to use a different command to check for
 network connectivity, for example @command{guix download}.
@@ -33439,13 +33644,13 @@ To enable SSH inside a VM you need to add an SSH server like
 22 by default, to the host.  You can do this with
 
 @example
-`guix system vm config.scm` -nic user,model=virtio-net-pci,hostfwd=tcp::10022-:22
+$(guix system vm config.scm) -nic user,model=virtio-net-pci,hostfwd=tcp::10022-:22
 @end example
 
 To connect to the VM you can run
 
 @example
-ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
+ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022 localhost
 @end example
 
 The @command{-p} tells @command{ssh} the port you want to connect to.
@@ -34201,7 +34406,7 @@ This service represents PID@tie{}1.
 @cindex man pages
 @cindex manual pages
 In most cases packages installed with Guix come with documentation.
-There are two main documentation formats: ``Info'', a browseable
+There are two main documentation formats: ``Info'', a browsable
 hypertext format used for GNU software, and ``manual pages'' (or ``man
 pages''), the linear documentation format traditionally found on Unix.
 Info manuals are accessed with the @command{info} command or with Emacs,
@@ -34507,7 +34712,7 @@ To verify which Bash your whole profile refers to, you can run
 (@pxref{Invoking guix gc}):
 
 @example
-guix gc -R `readlink -f ~/.guix-profile` | grep bash
+guix gc -R $(readlink -f ~/.guix-profile) | grep bash
 @end example
 
 @noindent
@@ -34515,7 +34720,7 @@ guix gc -R `readlink -f ~/.guix-profile` | grep bash
 Likewise for a complete Guix system generation:
 
 @example
-guix gc -R `guix system build my-config.scm` | grep bash
+guix gc -R $(guix system build my-config.scm) | grep bash
 @end example
 
 Lastly, to check which Bash running processes are using, you can use the
@@ -34625,7 +34830,7 @@ traditional bootstrap of the rest of the Guix System.
 
 The only significant binary bootstrap seeds that remain@footnote{
 Ignoring the 68KB @code{mescc-tools}; that will be removed later,
-together with @code{mes}.} are a Scheme intepreter and a Scheme
+together with @code{mes}.} are a Scheme interpreter and a Scheme
 compiler: GNU Mes and GNU Guile@footnote{Not shown in this graph are the
 static binaries for @file{bash}, @code{tar}, and @code{xz} that are used
 to get Guile running.}.
diff --git a/etc/committer.scm.in b/etc/committer.scm.in
index ebe6b96bcc..1f19ccfd6d 100755
--- a/etc/committer.scm.in
+++ b/etc/committer.scm.in
@@ -3,7 +3,7 @@
 !#
 
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,7 +28,10 @@
 
 (import (sxml xpath)
         (srfi srfi-1)
+        (srfi srfi-2)
         (srfi srfi-9)
+        (srfi srfi-11)
+        (srfi srfi-26)
         (ice-9 format)
         (ice-9 popen)
         (ice-9 match)
@@ -63,7 +66,8 @@ LINE-NO in PORT."
   (make-hunk file-name
              old-line-number
              new-line-number
-             diff)
+             diff-lines
+             definition?)
   hunk?
   (file-name       hunk-file-name)
   ;; Line number before the change
@@ -71,38 +75,45 @@ LINE-NO in PORT."
   ;; Line number after the change
   (new-line-number hunk-new-line-number)
   ;; The full diff to be used with "git apply --cached"
-  (diff hunk-diff))
+  (diff-lines hunk-diff-lines)
+  ;; Does this hunk add a definition?
+  (definition? hunk-definition?))
 
 (define* (hunk->patch hunk #:optional (port (current-output-port)))
   (let ((file-name (hunk-file-name hunk)))
     (format port
             "diff --git a/~a b/~a~%--- a/~a~%+++ b/~a~%~a"
             file-name file-name file-name file-name
-            (hunk-diff hunk))))
+            (string-join (hunk-diff-lines hunk) ""))))
 
 (define (diff-info)
   "Read the diff and return a list of <hunk> values."
   (let ((port (open-pipe* OPEN_READ
-                          "git" "diff"
+                          "git" "diff-files"
                           "--no-prefix"
-                          ;; Do not include any context lines.  This makes it
-                          ;; easier to find the S-expression surrounding the
-                          ;; change.
-                          "--unified=0")))
+                          ;; Only include one context line to avoid lumping in
+                          ;; new definitions with changes to existing
+                          ;; definitions.
+                          "--unified=1"
+                          "gnu")))
     (define (extract-line-number line-tag)
       (abs (string->number
             (car (string-split line-tag #\,)))))
     (define (read-hunk)
-      (reverse
-       (let loop ((lines '()))
-         (let ((line (read-line port 'concat)))
-           (cond
-            ((eof-object? line) lines)
-            ((or (string-prefix? "@@ " line)
-                 (string-prefix? "diff --git" line))
-             (unget-string port line)
-             lines)
-            (else (loop (cons line lines))))))))
+      (let loop ((lines '())
+                 (definition? #false))
+        (let ((line (read-line port 'concat)))
+          (cond
+           ((eof-object? line)
+            (values (reverse lines) definition?))
+           ((or (string-prefix? "@@ " line)
+                (string-prefix? "diff --git" line))
+            (unget-string port line)
+            (values (reverse lines) definition?))
+           (else
+            (loop (cons line lines)
+                  (or definition?
+                      (string-prefix? "+(define" line))))))))
     (define info
       (let loop ((acc '())
                  (file-name #f))
@@ -116,29 +127,42 @@ LINE-NO in PORT."
            ((string-prefix? "@@ " line)
             (match (string-split line #\space)
               ((_ old-start new-start . _)
-               (loop (cons (make-hunk file-name
-                                      (extract-line-number old-start)
-                                      (extract-line-number new-start)
-                                      (string-join (cons* line "\n"
-                                                          (read-hunk)) ""))
-                           acc)
-                     file-name))))
+               (let-values
+                   (((diff-lines definition?) (read-hunk)))
+                 (loop (cons (make-hunk file-name
+                                        (extract-line-number old-start)
+                                        (extract-line-number new-start)
+                                        (cons (string-append line "\n")
+                                              diff-lines)
+                                        definition?) acc)
+                       file-name)))))
            (else (loop acc file-name))))))
     (close-pipe port)
     info))
 
+(define (lines-to-first-change hunk)
+  "Return the number of diff lines until the first change."
+  (1- (count (lambda (line)
+               ((negate char-set-contains?)
+                (char-set #\+ #\-)
+                (string-ref line 0)))
+             (hunk-diff-lines hunk))))
+
 (define (old-sexp hunk)
   "Using the diff information in HUNK return the unmodified S-expression
 corresponding to the top-level definition containing the staged changes."
   ;; TODO: We can't seek with a pipe port...
   (let* ((port (open-pipe* OPEN_READ
-                           "git" "show" (string-append "HEAD:"
-                                                       (hunk-file-name hunk))))
+                           "git" "cat-file" "-p" (string-append
+                                                  "HEAD:"
+                                                  (hunk-file-name hunk))))
          (contents (get-string-all port)))
     (close-pipe port)
     (call-with-input-string contents
       (lambda (port)
-        (surrounding-sexp port (hunk-old-line-number hunk))))))
+        (surrounding-sexp port
+                          (+ (lines-to-first-change hunk)
+                             (hunk-old-line-number hunk)))))))
 
 (define (new-sexp hunk)
   "Using the diff information in HUNK return the modified S-expression
@@ -146,9 +170,10 @@ corresponding to the top-level definition containing the staged changes."
   (call-with-input-file (hunk-file-name hunk)
     (lambda (port)
       (surrounding-sexp port
-                        (hunk-new-line-number hunk)))))
+                        (+ (lines-to-first-change hunk)
+                           (hunk-new-line-number hunk))))))
 
-(define* (commit-message file-name old new #:optional (port (current-output-port)))
+(define* (change-commit-message file-name old new #:optional (port (current-output-port)))
   "Print ChangeLog commit message for changes between OLD and NEW."
   (define (get-values expr field)
     (match ((sxpath `(// ,field quasiquote *)) expr)
@@ -193,6 +218,12 @@ corresponding to the top-level definition containing the staged changes."
                                          (listify added)))))))))
             '(inputs propagated-inputs native-inputs)))
 
+(define* (add-commit-message file-name variable-name #:optional (port (current-output-port)))
+  "Print ChangeLog commit message for a change to FILE-NAME adding a definition."
+  (format port
+          "gnu: Add ~a.~%~%* ~a (~a): New variable.~%"
+          variable-name file-name variable-name))
+
 (define (group-hunks-by-sexp hunks)
   "Return a list of pairs associating all hunks with the S-expression they are
 modifying."
@@ -218,14 +249,45 @@ modifying."
           (cons* new (old-sexp (first hunks)) hunks)))
        (group-hunks-by-sexp hunks)))
 
+(define %delay 1000)
+
 (define (main . args)
   (match (diff-info)
     (()
-     (display "Nothing to be done." (current-error-port)))
+     (display "Nothing to be done.\n" (current-error-port)))
     (hunks
-     (for-each (match-lambda
-                 ((new old . hunks)
-                  (for-each (lambda (hunk)
+     (let-values
+         (((definitions changes)
+           (partition hunk-definition? hunks)))
+
+       ;; Additions.
+       (for-each (lambda (hunk)
+                   (and-let*
+                       ((define-line (find (cut string-prefix? "+(define" <>)
+                                           (hunk-diff-lines hunk)))
+                        (variable-name (and=> (string-tokenize define-line) second)))
+                     (add-commit-message (hunk-file-name hunk) variable-name)
+                     (let ((port (open-pipe* OPEN_WRITE                   
+                                             "git" "apply"                
+                                             "--cached"                   
+                                             "--unidiff-zero")))          
+                       (hunk->patch hunk port)                            
+                       (unless (eqv? 0 (status:exit-val (close-pipe port))) 
+                         (error "Cannot apply")))
+
+                     (let ((port (open-pipe* OPEN_WRITE "git" "commit" "-F" "-")))
+                       (add-commit-message (hunk-file-name hunk)
+                                           variable-name port)
+                       (usleep %delay)
+                       (unless (eqv? 0 (status:exit-val (close-pipe port)))
+                         (error "Cannot commit"))))
+                   (usleep %delay))
+                 definitions)
+
+       ;; Changes.
+       (for-each (match-lambda
+                   ((new old . hunks)
+                    (for-each (lambda (hunk)
                                 (let ((port (open-pipe* OPEN_WRITE
                                                         "git" "apply"
                                                         "--cached"
@@ -233,18 +295,20 @@ modifying."
                                   (hunk->patch hunk port)
                                   (unless (eqv? 0 (status:exit-val (close-pipe port)))
                                     (error "Cannot apply")))
-                                (sleep 1))
+                                (usleep %delay))
                               hunks)
-                    (commit-message (hunk-file-name (first hunks))
-                                    old new
-                                    (current-output-port))
+                    (change-commit-message (hunk-file-name (first hunks))
+                                           old new
+                                           (current-output-port))
                     (let ((port (open-pipe* OPEN_WRITE "git" "commit" "-F" "-")))
-                      (commit-message (hunk-file-name (first hunks))
-                                      old new
-                                      port)
-                      (sleep 1)
+                      (change-commit-message (hunk-file-name (first hunks))
+                                             old new
+                                             port)
+                      (usleep %delay)
                       (unless (eqv? 0 (status:exit-val (close-pipe port)))
                         (error "Cannot commit")))))
-               (new+old+hunks hunks)))))
+                 ;; XXX: we recompute the hunks here because previous
+                 ;; insertions lead to offsets.
+                 (new+old+hunks (diff-info)))))))
 
 (main)
diff --git a/etc/guix-install.sh b/etc/guix-install.sh
index c84e7b7577..949ef7719f 100755
--- a/etc/guix-install.sh
+++ b/etc/guix-install.sh
@@ -330,15 +330,20 @@ sys_create_build_user()
         _msg "${PAS}group <guixbuild> created"
     fi
 
+    if [ $(getent group kvm) ]; then
+        _msg "${INF}group kvm exists and build users will be added to it"
+	local KVMGROUP=,kvm
+    fi
+
     for i in $(seq -w 1 10); do
         if id "guixbuilder${i}" &>/dev/null; then
             _msg "${INF}user is already in the system, reset"
-            usermod -g guixbuild -G guixbuild           \
+            usermod -g guixbuild -G guixbuild${KVMGROUP}     \
                     -d /var/empty -s "$(which nologin)" \
                     -c "Guix build user $i"             \
                     "guixbuilder${i}";
         else
-            useradd -g guixbuild -G guixbuild           \
+            useradd -g guixbuild -G guixbuild${KVMGROUP}     \
                     -d /var/empty -s "$(which nologin)" \
                     -c "Guix build user $i" --system    \
                     "guixbuilder${i}";
diff --git a/etc/news.scm b/etc/news.scm
index deedc69f6e..65d83061df 100644
--- a/etc/news.scm
+++ b/etc/news.scm
@@ -12,6 +12,8 @@
 ;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;; Copyright © 2021 Leo Famulari <leo@famulari.name>
 ;; Copyright © 2021 Zhu Zihao <all_but_last@163.com>
+;; Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
+;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;
 ;; Copying and distribution of this file, with or without modification, are
 ;; permitted in any medium without royalty provided the copyright notice and
@@ -20,6 +22,98 @@
 (channel-news
  (version 0)
 
+ (entry (commit "2161820ebbbab62a5ce76c9101ebaec54dc61586")
+        (title
+         (en "Risk of local privilege escalation during user account creation")
+         (de "Risiko lokaler Rechteausweitung während der Erstellung von Benutzerkonten"))
+        (body
+         (en "A security vulnerability that can lead to local privilege
+escalation has been found in the code that creates user accounts on Guix
+System---Guix on other distros is unaffected.  The system is only vulnerable
+during the activation of user accounts that do not already exist.
+
+This bug is fixed and Guix System users are advised to upgrade their system,
+with a command along the lines of:
+
+@example
+guix system reconfigure /run/current-system/configuration.scm
+@end example
+
+The attack can happen when @command{guix system reconfigure} is running.
+Running @command{guix system reconfigure} can trigger the creation of new user
+accounts if the configuration specifies new accounts.  If a user whose account
+is being created manages to log in after the account has been created but
+before ``skeleton files'' copied to its home directory have the right
+ownership, they may, by creating an appropriately-named symbolic link in the
+home directory pointing to a sensitive file, such as @file{/etc/shadow}, get
+root privileges.
+
+See @uref{https://issues.guix.gnu.org/47584} for more information on this
+bug.")
+         (de "Eine Sicherheitslücke, die eine lokale Rechteausweitung zur
+Folge haben kann, wurde in dem Code gefunden, mit dem Benutzerkonten auf Guix
+System angelegt werden — Guix auf anderen Distributionen ist nicht betroffen.
+Das System kann nur während der Aktivierung noch nicht existierender
+Benutzerkonten angegriffen werden.
+
+Der Fehler wurde behoben und wir empfehlen Nutzern von Guix System, ihre
+Systeme zu aktualisieren, mit einem Befehl wie:
+
+@example
+guix system reconfigure /run/current-system/configuration.scm
+@end example
+
+Der Angriff kann erfolgen, während @command{guix system reconfigure} läuft.
+Wenn @command{guix system reconfigure} ausgeführt wird, kann das die Erzeugung
+neuer Benutzerkonten auslösen, wenn in der Konfiguration neue Konten angegeben
+wurden.  Wenn ein Benutzer, dessen Konto gerade angelegt wird, es
+fertigbringt, sich anzumelden, bevor „Skeleton-Dateien“ in seinem Persönlichen
+Verzeichnis den richtigen Besitzer haben, kann er durch Anlegen einer gezielt
+benannten symbolischen Verknüpfung in seinem Persönlichen Verzeichnis auf eine
+sensible Datei wie @file{/etc/shadow} Administratorrechte erlangen.
+
+Siehe @uref{https://issues.guix.gnu.org/47584} für mehr Informationen zu
+diesem Fehler.")))
+
+ (entry (commit "e52ec6c64a17a99ae4bb6ff02309067499915b06")
+        (title
+         (en "New supported platform: powerpc64le-linux")
+         (de "Neue Plattform wird unterstützt: powerpc64le-linux")
+         (fr "Nouvelle plate-forme prise en charge : powerpc64le-linux"))
+        (body
+         (en "A new platform, powerpc64le-linux, has been added for
+little-endian 64-bit Power ISA processors using the Linux-Libre kernel.  This
+includes POWER9 systems such as the
+@uref{https://www.fsf.org/news/talos-ii-mainboard-and-talos-ii-lite-mainboard-now-fsf-certified-to-respect-your-freedom,
+RYF Talos II mainboard}. This platform is available as a \"technology
+preview\": although it is supported, substitutes are not yet available from
+the build farm, and some packages may fail to build.  In addition, Guix System
+is not yet available on this platform.  That said, the Guix community is
+actively working on improving this support, and now is a great time to try it
+and get involved!")
+         (de "Eine neue Plattform, powerpc64le-linux, wurde hinzugefügt. Mit
+ihr können Prozessoren mit 64-Bit-Power-Befehlssatz, little-endian, mit dem
+Linux-Libre-Kernel betrieben werden.  Dazu gehören POWER9-Systeme wie die
+@uref{https://www.fsf.org/news/talos-ii-mainboard-and-talos-ii-lite-mainboard-now-fsf-certified-to-respect-your-freedom,
+RYF-zertifizierte Talos-II-Hauptplatine}.  Bei der Plattform handelt es sich
+um eine „Technologievorschau“; obwohl sie unterstützt wird, gibt es noch keine
+Substitute von der Erstellungsfarm und bei manchen Paketen könnte die
+Erstellung fehlschlagen.  Des Weiteren ist Guix System auf dieser Plattform
+noch nicht verfügbar.  Dennoch arbeitet die Guix-Gemeinde aktiv daran, diese
+Unterstützung auszubauen, und jetzt ist eine gute Gelegenheit, sie
+auszuprobieren und mitzumachen!")
+         (fr "Une nouvelle plate-forme, powerpc64le-linux, a été ajoutée pour
+les processeurs POWER 64-bits utilisant le noyau Linux-libre.  Ça inclut les
+systèmes POWER9 tels que les
+@uref{https://www.fsf.org/news/talos-ii-mainboard-and-talos-ii-lite-mainboard-now-fsf-certified-to-respect-your-freedom,
+cartes Talos II RYF}.  Il s'agit pour le moment d'un « avant-goût » de la
+technologie : bien que la plate-forme soit prise en charge, la ferme de
+compilation ne fournit pas encore de substituts et certains paquets risquent
+de ne pas compiler.  En outre, Guix System n'est pas encore disponible sur
+cette plate-forme.  Ceci dit, la communauté Guix travaille activement pour
+améliorer cette prise en charge et c'est maintenant un bon moment pour
+l'essayer et pour s'impliquer !")))
+
  (entry (commit "9ade2b720af91acecf76278b4d9b99ace406781e")
         (title
          (en "Update on previous @command{guix-daemon} local privilege escalation")
diff --git a/gnu/bootloader/grub.scm b/gnu/bootloader/grub.scm
index 13ee695909..ce146aba3c 100644
--- a/gnu/bootloader/grub.scm
+++ b/gnu/bootloader/grub.scm
@@ -666,7 +666,7 @@ relatively form MOUNT-POINT/TARGET/SUBDIR/grub.cfg to
 MOUNT-POINT/boot/grub/grub.cfg, and the second symlink points relatively from
 MOUNT-POINT/TARGET/%store-prefix to MOUNT-POINT/%store-prefix.
 
-It is important to note that these symlinks need to be relativ, as the absolute
+It is important to note that these symlinks need to be relative, as the absolute
 paths on the TFTP server side are unknown.
 
 It is also important to note that both symlinks will point outside the TFTP root
diff --git a/gnu/build/activation.scm b/gnu/build/activation.scm
index 6cb6f8819b..2af1d44b5f 100644
--- a/gnu/build/activation.scm
+++ b/gnu/build/activation.scm
@@ -107,7 +107,8 @@ Warning: this is currently suspect to a TOCTTOU race!"
                                  (directory %skeleton-directory)
                                  uid gid)
   "Copy the account skeletons from DIRECTORY to HOME.  When UID is an integer,
-make it the owner of all the files created; likewise for GID."
+make it the owner of all the files created except the home directory; likewise
+for GID."
   (define (set-owner file)
     (when (or uid gid)
       (chown file (or uid -1) (or gid -1))))
@@ -115,7 +116,6 @@ make it the owner of all the files created; likewise for GID."
   (let ((files (scandir directory (negate dot-or-dot-dot?)
                         string<?)))
     (mkdir-p home)
-    (set-owner home)
     (for-each (lambda (file)
                 (let ((target (string-append home "/" file)))
                   (copy-recursively (string-append directory "/" file)
@@ -215,10 +215,15 @@ they already exist."
                  (uid (passwd:uid pw))
                  (gid (passwd:gid pw)))
             (mkdir-p home)
-            (chown home uid gid)
             (chmod home #o700)
             (copy-account-skeletons home
-                                    #:uid uid #:gid gid))))))
+                                    #:uid uid #:gid gid)
+
+            ;; It is important 'chown' be called after
+            ;; 'copy-account-skeletons'.  Otherwise, a malicious user with
+            ;; good timing could create a symlink in HOME that would be
+            ;; dereferenced by 'copy-account-skeletons'.
+            (chown home uid gid))))))
 
   (for-each ensure-user-home users))
 
diff --git a/gnu/ci.scm b/gnu/ci.scm
index 32b7a611fb..5ab1b51d82 100644
--- a/gnu/ci.scm
+++ b/gnu/ci.scm
@@ -79,12 +79,9 @@
 
 (define* (derivation->job name drv
                           #:key
-                          period
                           (max-silent-time 3600)
                           (timeout 3600))
-  "Return a Cuirass job called NAME and describing DRV.  PERIOD is the minimal
-duration that must separate two evaluations of the same job. If PERIOD is
-false, then the job will be evaluated as soon as possible.
+  "Return a Cuirass job called NAME and describing DRV.
 
 MAX-SILENT-TIME and TIMEOUT are build options passed to the daemon when
 building the derivation."
@@ -98,7 +95,6 @@ building the derivation."
                    (derivation->output-paths drv)))
     (#:nix-name . ,(derivation-name drv))
     (#:system . ,(derivation-system drv))
-    (#:period . ,period)
     (#:max-silent-time . ,max-silent-time)
     (#:timeout . ,timeout)))
 
@@ -237,14 +233,11 @@ SYSTEM."
   (* 3600 hours))
 
 (define (image-jobs store system)
-  "Return a list of jobs that build images for SYSTEM.  Those jobs are
-expensive in storage and I/O operations, hence their periodicity is limited by
-passing the PERIOD argument."
+  "Return a list of jobs that build images for SYSTEM."
   (define (->job name drv)
     (let ((name (string-append name "." system)))
       (parameterize ((%graft? #f))
-        (derivation->job name drv
-                         #:period (hours 48)))))
+        (derivation->job name drv))))
 
   (define (build-image image)
     (run-with-store store
@@ -324,29 +317,25 @@ passing the PERIOD argument."
                            #:key source commit)
   "Return a list of jobs for the system tests."
   (define (->job test)
-    (parameterize ((current-guix-package
-                    (channel-source->package source #:commit commit)))
-      (let ((name (string-append "test." (system-test-name test)
-                                 "." system))
-            (drv (run-with-store store
-                   (mbegin %store-monad
-                     (set-current-system system)
-                     (set-grafting #f)
-                     (set-guile-for-build (default-guile))
-                     (system-test-value test)))))
-
-        ;; Those tests are extremely expensive in I/O operations and storage
-        ;; size, use the "period" attribute to run them with a period of at
-        ;; least 48 hours.
-        (derivation->job name drv
-                         #:period (hours 24)))))
+    (let ((name (string-append "test." (system-test-name test)
+                               "." system))
+          (drv (run-with-store store
+                 (mbegin %store-monad
+                   (set-current-system system)
+                   (set-grafting #f)
+                   (set-guile-for-build (default-guile))
+                   (system-test-value test)))))
+
+      (derivation->job name drv)))
 
   (if (member system %guix-system-supported-systems)
       ;; Override the value of 'current-guix' used by system tests.  Using a
       ;; channel instance makes tests that rely on 'current-guix' less
       ;; expensive.  It also makes sure we get a valid Guix package when this
       ;; code is not running from a checkout.
-      (map ->job (all-system-tests))
+      (parameterize ((current-guix-package
+                      (channel-source->package source #:commit commit)))
+        (map ->job (all-system-tests)))
       '()))
 
 (define (tarball-jobs store system)
@@ -354,8 +343,7 @@ passing the PERIOD argument."
   (define (->job name drv)
     (let ((name (string-append name "." system)))
       (parameterize ((%graft? #f))
-        (derivation->job name drv
-                         #:period (hours 24)))))
+        (derivation->job name drv))))
 
   ;; XXX: Add a job for the stable Guix?
   (list
@@ -495,11 +483,6 @@ valid."
                        (package->job store package system))))
             (append
              (filter-map job all)
-             (image-jobs store system)
-             (system-test-jobs store system
-                               #:source source
-                               #:commit commit)
-             (tarball-jobs store system)
              (cross-jobs store system))))
          ('core
           ;; Build core packages only.
@@ -519,6 +502,17 @@ valid."
           (let ((hello (specification->package "hello")))
             (list (package-job store (job-name hello)
                                hello system))))
+         ('images
+          ;; Build Guix System images only.
+          (image-jobs store system))
+         ('system-tests
+          ;; Build Guix System tests only.
+          (system-test-jobs store system
+                            #:source source
+                            #:commit commit))
+         ('tarball
+          ;; Build Guix tarball only.
+          (tarball-jobs store system))
          (('channels . channels)
           ;; Build only the packages from CHANNELS.
           (let ((all (all-packages)))
diff --git a/gnu/installer/steps.scm b/gnu/installer/steps.scm
index fdcfb0cb4d..057f2ae163 100644
--- a/gnu/installer/steps.scm
+++ b/gnu/installer/steps.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
-;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,6 +20,7 @@
 (define-module (gnu installer steps)
   #:use-module (guix records)
   #:use-module (guix build utils)
+  #:use-module (guix i18n)
   #:use-module (gnu installer utils)
   #:use-module (ice-9 match)
   #:use-module (ice-9 pretty-print)
@@ -245,8 +246,13 @@ found in RESULTS."
   (mkdir-p (dirname filename))
   (call-with-output-file filename
     (lambda (port)
-      (format port ";; This is an operating system configuration generated~%")
-      (format port ";; by the graphical installer.~%")
+      ;; TRANSLATORS: This is a comment within a Scheme file.  Each line must
+      ;; start with ";; " (two semicolons and a space).  Please keep line
+      ;; length below 60 characters.
+      (display (G_ "\
+;; This is an operating system configuration generated
+;; by the graphical installer.\n")
+               port)
       (newline port)
       (for-each (lambda (part)
                   (if (null? part)
diff --git a/gnu/local.mk b/gnu/local.mk
index f9996e6fa1..ae3beb6572 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -34,13 +34,14 @@
 # Copyright © 2020, 2021 Felix Gruber <felgru@posteo.net>
 # Copyright © 2020 Ryan Prior <rprior@protonmail.com>
 # Copyright © 2020 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
-# Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
+# Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re>
 # Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
 # Copyright © 2020 Martin Becze <mjbecze@riseup.net>
 # Copyright © 2020 Malte Frank Gerdes <mate.f.gerdes@gmail.com>
 # Copyright © 2020 Vinicius Monego <monego@posteo.net>
 # Copyright © 2021 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 # Copyright © 2021 Greg Hogan <code@greghogan.com>
+# Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
 #
 # This file is part of GNU Guix.
 #
@@ -694,6 +695,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/tests/desktop.scm				\
   %D%/tests/dict.scm				\
   %D%/tests/docker.scm				\
+  %D%/tests/file-sharing.scm			\
   %D%/tests/ganeti.scm				\
   %D%/tests/guix.scm				\
   %D%/tests/monitoring.scm                      \
@@ -887,6 +889,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/cdparanoia-fpic.patch			\
   %D%/packages/patches/cdrtools-3.01-mkisofs-isoinfo.patch 	\
   %D%/packages/patches/ceph-disable-cpu-optimizations.patch	\
+  %D%/packages/patches/chez-scheme-build-util-paths-backport.patch      \
   %D%/packages/patches/chmlib-inttypes.patch			\
   %D%/packages/patches/cl-asdf-config-directories.patch		\
   %D%/packages/patches/clamav-config-llvm-libs.patch		\
@@ -912,7 +915,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/collectd-5.11.0-noinstallvar.patch		\
   %D%/packages/patches/combinatorial-blas-awpm.patch		\
   %D%/packages/patches/combinatorial-blas-io-fix.patch		\
-  %D%/packages/patches/containerd-test-with-go1.13.patch		\
   %D%/packages/patches/coreutils-ls.patch			\
   %D%/packages/patches/cpufrequtils-fix-aclocal.patch		\
   %D%/packages/patches/crawl-upgrade-saves.patch		\
@@ -920,6 +922,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/clucene-contribs-lib.patch               \
   %D%/packages/patches/cube-nocheck.patch			\
   %D%/packages/patches/curl-use-ssl-cert-env.patch		\
+  %D%/packages/patches/curl-7.76-use-ssl-cert-env.patch	\
   %D%/packages/patches/cursynth-wave-rand.patch			\
   %D%/packages/patches/cvs-CVE-2017-12836.patch		\
   %D%/packages/patches/cyrus-sasl-ac-try-run-fix.patch		\
@@ -1078,6 +1081,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/ghostscript-no-header-id.patch		\
   %D%/packages/patches/ghostscript-no-header-uuid.patch		\
   %D%/packages/patches/ghostscript-no-header-creationdate.patch \
+  %D%/packages/patches/gimp-make-gegl-introspect-optional.patch	\
   %D%/packages/patches/glib-appinfo-watch.patch			\
   %D%/packages/patches/glibc-CVE-2018-11236.patch		\
   %D%/packages/patches/glibc-CVE-2018-11237.patch		\
@@ -1195,6 +1199,10 @@ dist_patch_DATA =						\
   %D%/packages/patches/id3lib-UTF16-writing-bug.patch			\
   %D%/packages/patches/idris-disable-test.patch			\
   %D%/packages/patches/ilmbase-fix-tests.patch			\
+  %D%/packages/patches/imagemagick-CVE-2020-27829.patch		\
+  %D%/packages/patches/imagemagick-ReadDCMImage-fix.patch	\
+  %D%/packages/patches/imagemagick-ReadDCMPixels-fix.patch	\
+  %D%/packages/patches/imagemagick-WriteTHUMBNAILImage-fix.patch	\
   %D%/packages/patches/inkscape-poppler-0.76.patch		\
   %D%/packages/patches/intel-xed-fix-nondeterminism.patch	\
   %D%/packages/patches/intltool-perl-compatibility.patch	\
@@ -1230,8 +1238,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/kdbusaddons-kinit-file-name.patch	\
   %D%/packages/patches/libffi-3.3-powerpc-fixes.patch		\
   %D%/packages/patches/libffi-float128-powerpc64le.patch	\
-  %D%/packages/patches/libvirt-create-machine-cgroup.patch	\
+  %D%/packages/patches/libvirt-add-install-prefix.patch	\
   %D%/packages/patches/libziparchive-add-includes.patch		\
+  %D%/packages/patches/lksctp-tools-1.0.18-fix-header-file-name.patch \
   %D%/packages/patches/localed-xorg-keyboard.patch		\
   %D%/packages/patches/kdiagram-Fix-missing-link-libraries.patch \
   %D%/packages/patches/kiki-level-selection-crash.patch		\
@@ -1328,11 +1337,12 @@ dist_patch_DATA =						\
   %D%/packages/patches/lierolibre-try-building-other-arch.patch	\
   %D%/packages/patches/linbox-fix-pkgconfig.patch		\
   %D%/packages/patches/linkchecker-tests-require-network.patch	\
-  %D%/packages/patches/linphoneqt-tabbutton.patch		\
+  %D%/packages/patches/linphone-desktop-without-sdk.patch           \
   %D%/packages/patches/linux-libre-support-for-Pinebook-Pro.patch \
   %D%/packages/patches/linux-pam-no-setfsuid.patch		\
   %D%/packages/patches/lirc-localstatedir.patch			\
   %D%/packages/patches/lirc-reproducible-build.patch		\
+  %D%/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch	\
   %D%/packages/patches/llvm-3.5-fix-clang-build-with-gcc5.patch	\
   %D%/packages/patches/llvm-9-fix-bitcast-miscompilation.patch	\
   %D%/packages/patches/llvm-9-fix-lpad-miscompilation.patch	\
@@ -1351,6 +1361,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/lvm2-static-link.patch			\
   %D%/packages/patches/mailutils-fix-uninitialized-variable.patch	\
   %D%/packages/patches/make-impure-dirs.patch			\
+  %D%/packages/patches/mariadb-CVE-2021-27928.patch		\
   %D%/packages/patches/mars-install.patch			\
   %D%/packages/patches/mars-sfml-2.3.patch			\
   %D%/packages/patches/maxima-defsystem-mkdir.patch		\
@@ -1362,7 +1373,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/mcrypt-CVE-2012-4527.patch			\
   %D%/packages/patches/libmemcached-build-with-gcc7.patch	\
   %D%/packages/patches/libmhash-hmac-fix-uaf.patch		\
-  %D%/packages/patches/mediastreamer2-srtp2.patch		\
   %D%/packages/patches/mesa-skip-tests.patch			\
   %D%/packages/patches/mescc-tools-boot.patch			\
   %D%/packages/patches/metabat-fix-compilation.patch		\
@@ -1434,7 +1444,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/opencascade-oce-glibc-2.26.patch		\
   %D%/packages/patches/opencv-fix-build-of-grfmt_jpeg2000.cpp.patch	\
   %D%/packages/patches/opencv-rgbd-aarch64-test-fix.patch	\
-  %D%/packages/patches/opendht-fix-jami.patch			\
   %D%/packages/patches/openfoam-4.1-cleanup.patch			\
   %D%/packages/patches/openjdk-10-idlj-reproducibility.patch	\
   %D%/packages/patches/openmpi-mtl-priorities.patch		\
@@ -1486,7 +1495,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/picard-fix-id3-rename-test.patch		\
   %D%/packages/patches/picprog-non-intel-support.patch		\
   %D%/packages/patches/pidgin-add-search-path.patch		\
-  %D%/packages/patches/pidgin-vv-gst.patch                        \
   %D%/packages/patches/pinball-const-fix.patch			\
   %D%/packages/patches/pinball-cstddef.patch			\
   %D%/packages/patches/pinball-missing-separators.patch		\
@@ -1521,7 +1529,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/pybugz-stty.patch			\
   %D%/packages/patches/pygpgme-disable-problematic-tests.patch  \
   %D%/packages/patches/pyqt-configure.patch			\
-  %D%/packages/patches/pyqt-public-sip.patch			\
   %D%/packages/patches/python-2-deterministic-build-info.patch	\
   %D%/packages/patches/python-2.7-adjust-tests.patch		\
   %D%/packages/patches/python-2.7-search-paths.patch		\
@@ -1575,6 +1582,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/qemu-build-info-manual.patch		\
   %D%/packages/patches/qemu-CVE-2021-20203.patch		\
   %D%/packages/patches/qemu-glibc-2.27.patch 			\
+  %D%/packages/patches/qemu-glibc-2.30.patch 			\
   %D%/packages/patches/qpdfview-qt515-compat.patch		\
   %D%/packages/patches/qrcodegen-cpp-make-install.patch		\
   %D%/packages/patches/qt4-ldflags.patch			\
@@ -1603,6 +1611,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/ripperx-missing-file.patch		\
   %D%/packages/patches/rpcbind-CVE-2017-8779.patch		\
   %D%/packages/patches/rtags-separate-rct.patch			\
+  %D%/packages/patches/racket-sh-via-rktio.patch		\
   %D%/packages/patches/racket-store-checksum-override.patch	\
   %D%/packages/patches/remake-impure-dirs.patch			\
   %D%/packages/patches/retroarch-LIBRETRO_DIRECTORY.patch	\
@@ -1610,7 +1619,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/rnp-disable-ruby-rnp-tests.patch		\
   %D%/packages/patches/rnp-unbundle-googletest.patch		\
   %D%/packages/patches/ruby-sanitize-system-libxml.patch	\
-  %D%/packages/patches/runc-CVE-2019-5736.patch			\
   %D%/packages/patches/rust-coresimd-doctest.patch		\
   %D%/packages/patches/rust-ndarray-remove-blas-src-dep.patch	\
   %D%/packages/patches/rust-nettle-disable-vendor.patch		 \
@@ -1730,6 +1738,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/unzip-zipbomb-part2.patch		\
   %D%/packages/patches/unzip-zipbomb-part3.patch		\
   %D%/packages/patches/unzip-32bit-zipbomb-fix.patch    \
+  %D%/packages/patches/upx-CVE-2021-20285.patch		\
   %D%/packages/patches/ustr-fix-build-with-gcc-5.patch		\
   %D%/packages/patches/util-linux-tests.patch			\
   %D%/packages/patches/upower-builddir.patch			\
@@ -1761,6 +1770,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/wordnet-CVE-2008-3908-pt1.patch			\
   %D%/packages/patches/wordnet-CVE-2008-3908-pt2.patch			\
   %D%/packages/patches/wpa-supplicant-CVE-2021-27803.patch	\
+  %D%/packages/patches/wpa-supplicant-CVE-2021-30004.patch	\
   %D%/packages/patches/x265-arm-flags.patch			\
   %D%/packages/patches/xf86-video-ark-remove-mibstore.patch	\
   %D%/packages/patches/xf86-video-mach64-glibc-2.20.patch	\
diff --git a/gnu/packages/acl.scm b/gnu/packages/acl.scm
index be4b079b04..abeafeef88 100644
--- a/gnu/packages/acl.scm
+++ b/gnu/packages/acl.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2021 Lars-Dominik Braun <ldb@leibniz-psychology.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,13 +27,15 @@
   #:use-module (guix licenses)
   #:use-module (gnu packages attr)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages check)
   #:use-module (gnu packages hurd)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages perl)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (gnu packages)
-  #:use-module (guix build-system gnu))
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system python))
 
 (define-public acl
   (package
@@ -93,3 +96,41 @@
     (description
      "Library and tools for manipulating access control lists.")
     (license (list gpl2+ lgpl2.1+))))
+
+(define-public python-pylibacl
+  (package
+    (name "python-pylibacl")
+    (version "0.6.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pylibacl" version))
+        (sha256
+          (base32
+            "1zyrk2m20p5b6bdwxhrwib273i6i71zyr5hzssbxfqis5qra9848"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-tests
+           (lambda* (#:key outputs inputs #:allow-other-keys)
+             ;; These tests operate on real files, but our tempfs does not support
+             ;; ACLs
+             (substitute* "tests/test_acls.py"
+               (("( *)def test_applyto(_extended(_mixed)?)?" match indent)
+                (string-append indent "@pytest.mark.skip(reason=\"guix\")\n" match)))
+             #t))
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest" "tests"))
+               #t)))))
+    (inputs `(("acl" ,acl)))
+    (native-inputs `(("python-pytest" ,python-pytest)))
+    (home-page "https://pylibacl.k1024.org/")
+    (synopsis "POSIX.1e ACLs for python")
+    (description "Python 3.4+ extension module that allows you to manipulate
+the POSIX.1e Access Control Lists present in some OS/file-systems
+combinations.")
+    (license lgpl2.1+)))
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 8be0875c1b..4be6250cbd 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -40,6 +40,7 @@
 ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
 ;;; Copyright © 2021 Hyunseok Kim <lasnesne@lagunposprasihopre.org>
+;;; Copyright © 2021 David Larsson <david.larsson@selfhosted.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -330,6 +331,38 @@ interface and is based on GNU Guile.")
              #t)))
        ,@(package-arguments shepherd)))))
 
+(define-public cfm
+  (package
+    (name "cfm")
+    (version "0.6.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/WillEccles/cfm")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "14gapia902f29wa4dlrrj8jcwcff9bfvyhjccw9ddy2gxx2g8wmr"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ; no test suite
+       #:make-flags
+       (list (string-append "CC=" ,(cc-for-target))
+             (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:phases
+       (modify-phases %standard-phases
+         ;; Keeping xdg-open optional avoids a size increase of 293%.
+         (delete 'configure))))         ; no configure script
+    (home-page "https://eccles.dev/cfm/")
+    (synopsis
+     "Simple terminal file manager with @command{vi}-inspired key bindings")
+    (description
+     "The Cactus File Manager (@command{cfm}) helps you manage your files
+visually from a text terminal.  It aims to be simple and fast, with key bindings
+inspired by @command{vi}.")
+    (license license:mpl2.0)))
+
 (define-public cloud-utils
   (package
     (name "cloud-utils")
@@ -463,7 +496,7 @@ graphs and can export its output to different formats.")
 (define-public facter
   (package
     (name "facter")
-    (version "4.0.51")
+    (version "4.0.52")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -472,7 +505,7 @@ graphs and can export its output to different formats.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1s98rq2wjmh8bqdfdibvfp9j2ynd97k0c4hairryrzl9nna3j542"))))
+                "05j4q87sak1f1isj7ngzr59h3j3xskfwjjwfv0xd7lhwcaxg3a3c"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
@@ -1027,6 +1060,36 @@ recursive runs on the generated subnets.  (also IPv6)
 @end itemize\n")
     (license license:bsd-3)))
 
+(define-public prips
+  (package
+    (name "prips")
+    (version "1.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://devel.ringlet.net/files/sys/"
+                           name "/" name "-" version ".tar.xz"))
+       (sha256
+        (base32 "1a33vbl4w603mk6mm5r3vhk87fy3dfk5wdpch0yd3ncbkg3fmvqn"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags (list (string-append "CC=" ,(cc-for-target)))
+       #:test-target "test"
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure)
+                  (replace 'install
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out (assoc-ref outputs "out")))
+                        (install-file "prips"
+                                      (string-append out "/bin"))))))))
+    (native-inputs `(("perl-test-harness" ,perl-test-harness)))
+    (synopsis "Tool that prints the IP addresses in a given range")
+    (description "Prips can be used to print all of the IP addresses in
+ a given range.  This allows the enhancement of tools only work
+ on one host at a time (e.g. whois).")
+    (home-page "https://devel.ringlet.net/sysutils/prips/")
+    (license license:gpl2+)))
+
 (define-public alive
   (package
     (name "alive")
@@ -1663,7 +1726,8 @@ features of sudo with a fraction of the codebase.")
                      (string-append "#" line)))
                   #t))
               (patches
-               (search-patches "wpa-supplicant-CVE-2021-27803.patch"))))
+               (search-patches "wpa-supplicant-CVE-2021-27803.patch"
+                               "wpa-supplicant-CVE-2021-30004.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -1829,7 +1893,8 @@ command.")
                (base32
                 "1mrbvg4v7vm7mknf0n29mf88k3s4a4qj6r4d51wq8hmjj1m7s7c8"))
               (patches
-               (search-patches "wpa-supplicant-CVE-2021-27803.patch"))))
+               (search-patches "wpa-supplicant-CVE-2021-27803.patch"
+                               "wpa-supplicant-CVE-2021-30004.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -1966,7 +2031,7 @@ module slots, and the list of I/O ports (e.g. serial, parallel, USB).")
 (define-public acpica
   (package
     (name "acpica")
-    (version "20210105")
+    (version "20210331")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1974,7 +2039,7 @@ module slots, and the list of I/O ports (e.g. serial, parallel, USB).")
                     version ".tar.gz"))
               (sha256
                (base32
-                "1gi7qzfywg118g5nlqn5lawxk25pg2sz01gmbz40vvmikks4ri9r"))))
+                "1h98pvc9iy1c49cid0ppjwk5zsy2m1xbvfqb72pkwkrd4rn35arx"))))
     (build-system gnu-build-system)
     (native-inputs `(("flex" ,flex)
                      ("bison" ,bison)))
@@ -2928,13 +2993,13 @@ a new command using the matched rule, and runs it.")
 (define-public di
   (package
     (name "di")
-    (version "4.49")
+    (version "4.50")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/diskinfo-di/di-" version ".tar.gz"))
        (sha256
-        (base32 "1y38jhp2bpwbwzdzjlhgfqc7bxxz9cwapxd61799zjf54jkslkf0"))))
+        (base32 "0aj9ldkvmj8fmrk685vd2gagz0q8lwsn2nfbx6r6mza94mn8pw42"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; obscure test failures
@@ -3506,14 +3571,14 @@ information tool.")
 (define-public nnn
   (package
     (name "nnn")
-    (version "3.5")
+    (version "3.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/jarun/nnn/releases/download/v"
                            version "/nnn-v" version ".tar.gz"))
        (sha256
-        (base32 "1ww18vvfjkvi36rcamw8kpix4bhk71w5bw9kmnh158crah1x8dp6"))))
+        (base32 "1dbq16cdipij5ws59ab3alfmxli7n4wx28ip7gsyq8ncxg598l47"))))
     (build-system gnu-build-system)
     (inputs
      `(("ncurses" ,ncurses)
@@ -4105,14 +4170,14 @@ tcpdump and snoop.")
 (define-public pam-mount
   (package
     (name "pam-mount")
-    (version "2.17")
+    (version "2.18")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/pam-mount/pam_mount/"
                            "pam_mount-" version ".tar.xz"))
        (sha256
-        (base32 "1q2n6a2ah6nghdn8i6ad2wj247njwb5nx48cggxknaa6lqxylidy"))))
+        (base32 "0832nh2qf9pisgwnbgx6hkylx5d7i416l19y3ly4ifv7k1p7mxqa"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("perl" ,perl)
@@ -4124,7 +4189,7 @@ tcpdump and snoop.")
        ("linux-pam" ,linux-pam)
        ("lvm2" ,lvm2)
        ("openssl" ,openssl)
-       ("pcre" ,pcre)
+       ("pcre2" ,pcre2)
        ("libmount" ,util-linux "lib")
        ("util-linux" ,util-linux)))
     (arguments
@@ -4288,7 +4353,7 @@ entries, providing commands to add, remove, comment, and search.")
 (define-public nmrpflash
   (package
     (name "nmrpflash")
-    (version "0.9.14")
+    (version "0.9.15")
     (source
      (origin
        (method git-fetch)
@@ -4297,7 +4362,7 @@ entries, providing commands to add, remove, comment, and search.")
          (url "https://github.com/jclehner/nmrpflash")
          (commit (string-append "v" version))))
        (sha256
-        (base32 "1fdjrxhjs96rdclbkld57xarf592slhkp79h46z833npxpn12ck1"))
+        (base32 "0ssfls1sfh8w748qsnkfgndlpw395100x2yynzbk5jd56scxvp20"))
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (native-inputs
@@ -4503,7 +4568,7 @@ the XMODEM/YMODEM/ZMODEM file transfer protocols.")
 (define-public nq
   (package
     (name "nq")
-    (version "0.3.1")
+    (version "0.4")
     (source
      (origin
        (method git-fetch)
@@ -4512,7 +4577,7 @@ the XMODEM/YMODEM/ZMODEM file transfer protocols.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1db96ykz35r273jyhf7cdknqk4p2jj9l8gbz7pjy1hq4pb6ffk99"))))
+        (base32 "0sdamjzvmf6cxhjmd1rjvn7zm6k10fp5n6vabyxd3yl30cgrxw2i"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("perl" ,perl)))
diff --git a/gnu/packages/aidc.scm b/gnu/packages/aidc.scm
index 6628a8ead3..d1b63de736 100644
--- a/gnu/packages/aidc.scm
+++ b/gnu/packages/aidc.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 John Darringon <jmd@gnu.org>
-;;; Copyright © 2016, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
@@ -108,16 +108,25 @@ formats.")
 (define-public qrencode
   (package
     (name "qrencode")
-    (version "4.0.2")
+    (version "4.1.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://fukuchi.org/works/qrencode/qrencode-" version
-                    ".tar.bz2"))
+              (uri (string-append "https://fukuchi.org/works/qrencode/"
+                                  "qrencode-" version ".tar.bz2"))
               (sha256
                (base32
-                "1d2q5d3v8g3hsi3h5jq4n177bjhf3kawms09immw7p187f6jgjy9"))))
+                "08v9d8jn26bva2a8x4hghq3mgl8zcid393iqkidwyhc05xrxjmg4"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags '("--with-tests")
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (with-directory-excursion "tests"
+                 (invoke "./test_basic.sh")))
+             #t)))))
     (inputs `(("libpng" ,libpng)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (synopsis "Encode data into a QR Code symbol")
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 20602bdf2a..c352532677 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2014, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017, 2019 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
@@ -563,14 +563,14 @@ these types and other mathematical functions.")
 (define-public ntl
   (package
    (name "ntl")
-   (version "11.4.3")
+   (version "11.4.4")
    (source (origin
             (method url-fetch)
             (uri (string-append "https://shoup.net/ntl/ntl-"
                                 version ".tar.gz"))
             (sha256
              (base32
-              "1lisp3064rch3jaa2wrhy1s9kll7i3ka3d0y6lj6l3l4ckfcrhdp"))
+              "1nr1h27j2gdz6badzz9lk2pknxhdijqdxqhd3haryh0sw616wzwx"))
             (modules '((guix build utils)))
             (snippet
              '(begin
diff --git a/gnu/packages/antivirus.scm b/gnu/packages/antivirus.scm
index 29763f3452..9bcfe52126 100644
--- a/gnu/packages/antivirus.scm
+++ b/gnu/packages/antivirus.scm
@@ -44,14 +44,14 @@
 (define-public clamav
   (package
     (name "clamav")
-    (version "0.103.1")
+    (version "0.103.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.clamav.net/downloads/production/"
                                   "clamav-" version ".tar.gz"))
               (sha256
                (base32
-                "0mz2aq8dh4i7mh59r71scczgyjbsj8l0a51nkwxsys5ji5xw823k"))
+                "1lhv4xw89sszi519agvc9mi6jz5aiivm9yr6lciy8qk2csnd1dfl"))
               (modules '((guix build utils)))
               (snippet
                '(begin
diff --git a/gnu/packages/assembly.scm b/gnu/packages/assembly.scm
index a54421cfab..cef5075d3c 100644
--- a/gnu/packages/assembly.scm
+++ b/gnu/packages/assembly.scm
@@ -343,7 +343,7 @@ package for the Game Boy and Game Boy Color.  It consists of:
 (define-public wla-dx
   (package
     (name "wla-dx")
-    (version "9.11")
+    (version "9.12")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -352,7 +352,7 @@ package for the Game Boy and Game Boy Color.  It consists of:
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0i8pxvyaih79pqnyvqyqd9rwdid91pna76cap0k1n5zhg8xswf2f"))))
+                "1wlbqv2rgk9q6m9an1mi0i29250zl8lw7zipki2bbi9mczpyczli"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("sphinx" ,python-sphinx)))      ; to generate man pages
diff --git a/gnu/packages/astronomy.scm b/gnu/packages/astronomy.scm
index 6105ef2590..4660e141a4 100644
--- a/gnu/packages/astronomy.scm
+++ b/gnu/packages/astronomy.scm
@@ -118,7 +118,7 @@ for reading and writing.")
 (define-public erfa
   (package
     (name "erfa")
-    (version "1.7.2")
+    (version "1.7.3")
     (source
      (origin
        (method git-fetch)
@@ -127,7 +127,7 @@ for reading and writing.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1vsqwvzlk7r8q7nwyb7i710blcfdl5kwcm2va9km07a820nsp84a"))))
+        (base32 "0nh12dr7gk4ki55lz95pkm4fpf7kazirra3zax9pab6v4qql4hlw"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("automake" ,automake)
@@ -137,8 +137,10 @@ for reading and writing.")
     (home-page "https://github.com/liberfa/erfa")
     (synopsis "Essential Routines for Fundamental Astronomy")
     (description
-     "ERFA is a C library containing key algorithms for astronomy, and is based
-on the SOFA library published by the International Astronomical Union (IAU).")
+     "The @acronym{ERFA, Essential Routines for Fundamental Astronomy} C library
+contains key algorithms for astronomy, and is based on the @acronym{SOFA,
+Standards of Fundamental Astronomy} library published by the @acronym{IAU,
+International Astronomical Union}.")
     (license license:bsd-3)))
 
 (define-public eye
@@ -399,7 +401,7 @@ deconvolution).  Such post-processing is not performed by Stackistry.")
 (define-public stellarium
   (package
     (name "stellarium")
-    (version "0.20.4")
+    (version "0.21.0")
     (source
      (origin
        (method url-fetch)
@@ -407,7 +409,7 @@ deconvolution).  Such post-processing is not performed by Stackistry.")
                            "/releases/download/v" version
                            "/stellarium-" version ".tar.gz"))
        (sha256
-        (base32 "1253zlr0mi4kdbj119spxk7spg4rkahb4rlpd0hz1d81mnv3n0v3"))))
+        (base32 "04vg2asj9gygwnrs32scqc8192ln2lyqa9v7cjqk8zd4frkwszwp"))))
     (build-system cmake-build-system)
     (inputs
      `(("qtbase" ,qtbase)
@@ -1009,13 +1011,13 @@ astronomical images, especially when there is no WCS information available.")
 (define-public python-skyfield
   (package
     (name "python-skyfield")
-    (version "1.36")
+    (version "1.38")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "skyfield" version))
        (sha256
-        (base32 "1dm1327a4qv3klj9blrvddbhl72v1fqz52ym9km8qjj9vdkpywh6"))))
+        (base32 "1qi1l8qn6irdv6w41qq30s2yjwak7h6ayywr1pry9gwcm2c25bv5"))))
     (build-system python-build-system)
     (arguments
      ;; NOTE: (Sharlatan-20210207T163305+0000): tests depend on custom test
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 0cc3393361..30e38cef70 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -18,7 +18,7 @@
 ;;; Copyright © 2018 Thorsten Wilms <t_w_@freenet.de>
 ;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2018 Brendan Tildesley <mail@brendan.scot>
-;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2019, 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2019, 2021 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2019 Arun Isaac <arunisaac@systemreboot.net>
@@ -78,6 +78,7 @@
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnunet) ; libmicrohttpd
   #:use-module (gnu packages gperf)
+  #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages icu4c)
@@ -567,11 +568,11 @@ streams from live audio.")
 (define-public ardour
   (package
     (name "ardour")
-    (version "5.12")
+    (version "6.6")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://git.ardour.org/ardour/ardour.git")
+                    (url "git://git.ardour.org/ardour/ardour.git")
                     (commit version)))
               (snippet
                ;; Ardour expects this file to exist at build time.  The revision
@@ -581,15 +582,16 @@ streams from live audio.")
                     "libs/ardour/revision.cc"
                   (lambda (port)
                     (format port ,(string-append "#include \"ardour/revision.h\"
-namespace ARDOUR { const char* revision = \"" version "\" ; }"))
+namespace ARDOUR { const char* revision = \"" version "\" ; const char* date = \"\"; }"))
                     #t)))
               (sha256
                (base32
-                "0mla5lm51ryikc2rrk53max2m7a5ds6i1ai921l2h95wrha45nkr"))
+                "0k5rxh8b3d8si3lj01gfqj0pmd448d8sj4asnb205mwhwbfgn0cp"))
               (file-name (string-append name "-" version))))
     (build-system waf-build-system)
     (arguments
      `(#:configure-flags '("--cxx11"          ; required by gtkmm
+                           "--optimize"
                            "--no-phone-home"  ; don't contact ardour.org
                            "--freedesktop"    ; build .desktop file
                            "--test")          ; build unit tests
@@ -619,8 +621,7 @@ namespace ARDOUR { const char* revision = \"" version "\" ; }"))
                                             ver ".appdata.xml")
                              (string-append share "/appdata/")))
              #t)))
-       #:test-target "test"
-       #:python ,python-2))
+       #:test-target "test"))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("atkmm" ,atkmm)
@@ -628,6 +629,7 @@ namespace ARDOUR { const char* revision = \"" version "\" ; }"))
        ("boost" ,boost)
        ("cairomm" ,cairomm)
        ("curl" ,curl)
+       ("dbus" ,dbus)
        ("eudev" ,eudev)
        ("fftw" ,fftw)
        ("fftwf" ,fftwf)
@@ -644,17 +646,21 @@ namespace ARDOUR { const char* revision = \"" version "\" ; }"))
        ("libsndfile" ,libsndfile)
        ("libusb" ,libusb)
        ("libvorbis" ,libvorbis)
+       ("libwebsockets" ,libwebsockets)
        ("libxml2" ,libxml2)
        ("lilv" ,lilv)
        ("lrdf" ,lrdf)
        ("lv2" ,lv2)
+       ("openssl" ,openssl)  ; Required by libwebsockets.
        ("pangomm" ,pangomm)
        ("python-rdflib" ,python-rdflib)
+       ("pulseaudio" ,pulseaudio)
        ("readline" ,readline)
        ("redland" ,redland)
        ("rubberband" ,rubberband)
        ("serd" ,serd)
        ("sord" ,sord)
+       ("soundtouch" ,soundtouch)
        ("sratom" ,sratom)
        ("suil" ,suil)
        ("taglib" ,taglib)
@@ -3259,31 +3265,26 @@ stretching and pitch scaling of audio.  This package contains the library.")
 (define-public wavpack
   (package
     (name "wavpack")
-    (version "5.3.2")
+    (version "5.4.0")
     (source
      (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/dbry/WavPack")
-             (commit "e4e8d191e8dd74cbdbeaef3232c16a7ef517e68d")))
+       (method url-fetch)
+       (uri (string-append "https://github.com/dbry/WavPack/releases/download/"
+                           version "/wavpack-" version ".tar.xz"))
        (sha256
-        (base32 "1zj8svk6giy1abq3940sz32ygz7zldppxl47852zgn5wfm3l2spx"))
-       (file-name (git-file-name name version))))
+        (base32 "0ycbqarw25x7208jilh86vwwiqklr7f617jps9mllqc659mnmpjb"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
-       (list "--disable-static")
+       (list "--disable-static"
+             "--enable-tests")
        #:phases
        (modify-phases %standard-phases
-         (replace 'bootstrap
-           ;; Running ./autogen.sh would cause premature configuration.
-           (lambda _
-             (invoke "autoreconf" "-vif")
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "./cli/wvtest" "--default" "--short"))
              #t)))))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)))
     (home-page "https://www.wavpack.com/")
     (synopsis "Hybrid lossless audio codec")
     (description
@@ -4093,7 +4094,7 @@ kbps at 24 bit/96 kHz.")
     (home-page "https://github.com/Arkq/bluez-alsa")
     (synopsis "Bluetooth ALSA backend")
     (description "This project is a rebirth of a direct integration between
-Bluez and ALSA.  Since Bluez >= 5, the build-in integration has been removed
+Bluez and ALSA.  Since Bluez >= 5, the built-in integration has been removed
 in favor of 3rd party audio applications.  From now on, Bluez acts as a
 middleware between an audio application, which implements Bluetooth audio
 profile, and a Bluetooth audio device.  BlueALSA registers all known Bluetooth
@@ -4260,7 +4261,7 @@ the following features:
       (home-page "https://github.com/werman/noise-suppression-for-voice")
       (synopsis "Speech denoise LV2 plugin based on Xiph's RNNoise library")
       (description "RNNoise is a library that uses deep learning to apply
-noise supression to audio sources with voice presence.  This package provides
+noise suppression to audio sources with voice presence.  This package provides
 an LV2 audio plugin.")
       (license license:lgpl3+))))
 
@@ -4465,7 +4466,7 @@ library.")
 (define-public faudio
   (package
     (name "faudio")
-    (version "19.11")
+    (version "21.04")
     (source
      (origin
        (method git-fetch)
@@ -4474,19 +4475,24 @@ library.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0ckpr6ffz8ssfh1y850dhip5s5jv0j6n90qz5yx1v9d6gpwf08rp"))))
+        (base32 "1g3zp7igh4ns31sqnxddxqhgibijngkbcqqsj23i9d1lah6k4747"))))
     (arguments
      '(#:tests? #f                      ; No tests.
-       #:configure-flags '("-DFFMPEG=ON")))
+       #:configure-flags '("-DGSTREAMER=ON")))
     (build-system cmake-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("ffmpeg" ,ffmpeg)
+    (inputs `(("gstreamer" ,gstreamer)
+              ("gst-plugins-base" ,gst-plugins-base)
               ("sdl2" ,sdl2)))
     (home-page "https://github.com/FNA-XNA/FAudio")
     (synopsis "XAudio reimplementation")
     (description "FAudio is an XAudio reimplementation that focuses solely on
 developing fully accurate DirectX Audio runtime libraries.")
-    (license license:zlib)))
+    (license
+     (list license:zlib
+           ;; stb & utils/{ui,wav}common are dual-licenced under either of:
+           license:expat
+           license:public-domain))))
 
 (define-public gnaural
   (package
@@ -4922,7 +4928,7 @@ minimum.")
 (define-public libinstpatch
   (package
     (name "libinstpatch")
-    (version "1.1.5")
+    (version "1.1.6")
     (source
      (origin
        (method git-fetch)
@@ -4931,7 +4937,7 @@ minimum.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0psx4hc5yksfd3k2xqsc7c8lbz2d4yybikyddyd9hlkhq979cmjb"))))
+        (base32 "1w3nk0vvd1cxic70n45zjip0bdsrja969myvyvkhq3ngbarbykir"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f)) ;there are no tests
@@ -5134,14 +5140,14 @@ while still staying in time.")
 (define-public butt
   (package
     (name "butt")
-    (version "0.1.28")
+    (version "0.1.29")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/butt/butt/butt-"
                                   version "/butt-" version ".tar.gz"))
               (sha256
                (base32
-                "1rbp4v6dlyapld6y4aqbpfmcaiafa06f2zqd1rhk4r3ld3bndafm"))))
+                "0nbz0z4d7krvhmnwn10594gwc61gn2dlb5fazmynjfisrfdswqlg"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -5178,7 +5184,7 @@ while still staying in time.")
                                         version "_manual.pdf"))
                     (sha256
                      (base32
-                      "04wz2sqhk22h9gymwh5r6kp6sxc994mia8rg9lwpmy1r18w4pvsl"))))))
+                      "1hhgdhdg5s86hjcbwh856gcd3kcch0i5xgi3i3v02zz3xmzl7gg3"))))))
     (home-page "https://danielnoethen.de/butt/")
     (synopsis "Audio streaming tool")
     (description "Butt is a tool to stream audio to a ShoutCast or
diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm
index ca28801944..8c593c5208 100644
--- a/gnu/packages/autotools.scm
+++ b/gnu/packages/autotools.scm
@@ -545,7 +545,7 @@ complexity of working with shared libraries across platforms.")
       (native-inputs
        `(("help2man" ,help2man)))
       (home-page "https://savannah.gnu.org/projects/config")
-      (synopsis "Ubiquitious config.guess and config.sub scripts")
+      (synopsis "Ubiquitous config.guess and config.sub scripts")
       (description "The `config.guess' script tries to guess a canonical system triple,
 and `config.sub' validates and canonicalizes.  These are used as part of
 configuration in nearly all GNU packages (and many others).")
diff --git a/gnu/packages/aux-files/linux-libre/5.10-x86_64.conf b/gnu/packages/aux-files/linux-libre/5.10-x86_64.conf
index 4836307163..189e4e16b4 100644
--- a/gnu/packages/aux-files/linux-libre/5.10-x86_64.conf
+++ b/gnu/packages/aux-files/linux-libre/5.10-x86_64.conf
@@ -8146,7 +8146,7 @@ CONFIG_HYPERV_BALLOON=m
 #
 CONFIG_XEN_BALLOON=y
 CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y
-CONFIG_XEN_BALLOON_MEMORY_HOTPLUG_LIMIT=512
+CONFIG_XEN_MEMORY_HOTPLUG_LIMIT=512
 CONFIG_XEN_SCRUB_PAGES_DEFAULT=y
 CONFIG_XEN_DEV_EVTCHN=m
 CONFIG_XEN_BACKEND=y
diff --git a/gnu/packages/aux-files/linux-libre/5.11-x86_64.conf b/gnu/packages/aux-files/linux-libre/5.11-x86_64.conf
index 178bb220d7..99d3cf74e2 100644
--- a/gnu/packages/aux-files/linux-libre/5.11-x86_64.conf
+++ b/gnu/packages/aux-files/linux-libre/5.11-x86_64.conf
@@ -8212,7 +8212,7 @@ CONFIG_HYPERV_BALLOON=m
 #
 CONFIG_XEN_BALLOON=y
 CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y
-CONFIG_XEN_BALLOON_MEMORY_HOTPLUG_LIMIT=512
+CONFIG_XEN_MEMORY_HOTPLUG_LIMIT=512
 CONFIG_XEN_SCRUB_PAGES_DEFAULT=y
 CONFIG_XEN_DEV_EVTCHN=m
 CONFIG_XEN_BACKEND=y
diff --git a/gnu/packages/axoloti.scm b/gnu/packages/axoloti.scm
index 3049051486..0b12e4fe29 100644
--- a/gnu/packages/axoloti.scm
+++ b/gnu/packages/axoloti.scm
@@ -147,18 +147,7 @@
          (delete 'configure)
          (replace 'build
            ;; Build Axoloti firmware with cross-compiler
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let* ((toolchain (assoc-ref inputs "cross-toolchain"))
-                    (headers   (string-append
-                                toolchain
-                                "/arm-none-eabi/include:"
-                                toolchain
-                                "/arm-none-eabi/include/arm-none-eabi/armv7e-m")))
-               (setenv "CROSS_CPATH" headers)
-               (setenv "CROSS_CPLUS_INCLUDE_PATH" headers)
-               (setenv "CROSS_LIBRARY_PATH"
-                       (string-append toolchain
-                                      "/arm-none-eabi/lib")))
+           (lambda _
              (with-directory-excursion "platform_linux"
                (invoke "sh" "compile_firmware.sh"))))
          (replace 'install
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index ee1ab1bcad..d7aca1f37a 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -1236,7 +1236,9 @@ command.")
 (define-public tzdata
   (package
     (name "tzdata")
-    (version "2020f")
+    ;; This package should be kept in sync with python-pytz in (gnu packages
+    ;; time).
+    (version "2021a")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -1244,7 +1246,7 @@ command.")
                    version ".tar.gz"))
              (sha256
               (base32
-               "10b8cr55x6ji14n3kqkn3avj1s9b79b8gszh81fxrrisij8k248j"))))
+               "022fn6gkmp7pamlgab04x0dm5hnyn2m2fcnyr3pvm36612xd5rrr"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f
@@ -1303,7 +1305,7 @@ command.")
                                 version ".tar.gz"))
                           (sha256
                            (base32
-                            "1i998crd9fxdfhv4jd241j1arx0ng7j7cvczpmj4y5j5fwmfmvng"))))))
+                            "1l02b0jiwp3fl0xd6227i69d26rmx3yrnq0ssq9vvdmm4jhvyipb"))))))
     (home-page "https://www.iana.org/time-zones")
     (synopsis "Database of current and historical time zones")
     (description "The Time Zone Database (often called tz or zoneinfo)
diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm
index 0bcd9a67cd..171736064c 100644
--- a/gnu/packages/bioconductor.scm
+++ b/gnu/packages/bioconductor.scm
@@ -619,6 +619,32 @@ as provided by UCSC (hg38, Dec. 2013) and stored in Biostrings objects.")
      "This package exposes an annotation database generated from Ensembl.")
     (license license:artistic2.0)))
 
+(define-public r-txdb-dmelanogaster-ucsc-dm6-ensgene
+  (package
+    (name "r-txdb-dmelanogaster-ucsc-dm6-ensgene")
+    (version "3.12.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "TxDb.Dmelanogaster.UCSC.dm6.ensGene"
+                              version 'annotation))
+       (sha256
+        (base32
+         "0yij7zyqkmmr13389rs2gfa5anvvw648nnl1kjbsgvyxkggif8q4"))))
+    (properties
+     `((upstream-name . "TxDb.Dmelanogaster.UCSC.dm6.ensGene")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-annotationdbi" ,r-annotationdbi)
+       ("r-genomicfeatures" ,r-genomicfeatures)))
+    (home-page
+     "https://bioconductor.org/packages/TxDb.Dmelanogaster.UCSC.dm6.ensGene")
+    (synopsis "Annotation package for TxDb object(s)")
+    (description
+     "This package exposes an annotation databases generated from UCSC by
+exposing these as TxDb objects.")
+    (license license:artistic2.0)))
+
 (define-public r-txdb-hsapiens-ucsc-hg19-knowngene
   (package
     (name "r-txdb-hsapiens-ucsc-hg19-knowngene")
@@ -1087,7 +1113,7 @@ package @code{affy}.")
     (properties `((upstream-name . "gageData")))
     (build-system r-build-system)
     (home-page "https://bioconductor.org/packages/gageData")
-    (synopsis "Auxillary data for gage package")
+    (synopsis "Auxiliary data for the gage package")
     (description
      "This is a supportive data package for the software package @code{gage}.
 However, the data supplied here are also useful for gene set or pathway
@@ -1233,6 +1259,39 @@ data.  In addition, provides numerous plotting functions for commonly
 used visualizations.")
    (license license:artistic2.0)))
 
+(define-public r-delayedarray
+  (package
+    (name "r-delayedarray")
+    (version "0.16.3")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "DelayedArray" version))
+              (sha256
+               (base32
+                "0w1wppy6m2iv41852dscg3y19sq84ahdx3m7c2p2pxjcznmv6hys"))))
+    (properties
+     `((upstream-name . "DelayedArray")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-biocgenerics" ,r-biocgenerics)
+       ("r-s4vectors" ,r-s4vectors)
+       ("r-iranges" ,r-iranges)
+       ("r-matrix" ,r-matrix)
+       ("r-matrixgenerics" ,r-matrixgenerics)))
+    (native-inputs
+     `(("r-knitr" ,r-knitr)))
+    (home-page "https://bioconductor.org/packages/DelayedArray")
+    (synopsis "Delayed operations on array-like objects")
+    (description
+     "Wrapping an array-like object (typically an on-disk object) in a
+@code{DelayedArray} object allows one to perform common array operations on it
+without loading the object in memory.  In order to reduce memory usage and
+optimize performance, operations on the object are either delayed or executed
+using a block processing mechanism.  Note that this also works on in-memory
+array-like objects like @code{DataFrame} objects (typically with Rle columns),
+@code{Matrix} objects, and ordinary arrays and data frames.")
+    (license license:artistic2.0)))
+
 (define-public r-bluster
   (package
    (name "r-bluster")
@@ -1315,6 +1374,60 @@ naming and share the same rich and consistent \"Vector API\" as much as
 possible.")
     (license license:artistic2.0)))
 
+;; This is a CRAN package, but it depends on r-biobase and r-limma from Bioconductor.
+(define-public r-absfiltergsea
+  (package
+    (name "r-absfiltergsea")
+    (version "1.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "AbsFilterGSEA" version))
+       (sha256
+        (base32 "15srxkxsvn38kd5frdrwfdf0ad8gskrd0h01wmdf9hglq8fjrp7w"))))
+    (properties `((upstream-name . "AbsFilterGSEA")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-biobase" ,r-biobase)
+       ("r-deseq" ,r-deseq)
+       ("r-limma" ,r-limma)
+       ("r-rcpp" ,r-rcpp)
+       ("r-rcpparmadillo" ,r-rcpparmadillo)))
+    (home-page "https://cran.r-project.org/web/packages/AbsFilterGSEA/")
+    (synopsis "Improved false positive control of gene-permuting with absolute filtering")
+    (description
+     "This package provides a function that performs gene-permuting of a gene-set
+enrichment analysis (GSEA) calculation with or without the absolute filtering.
+  Without filtering, users can perform (original) two-tailed or one-tailed
+absolute GSEA.")
+    (license license:gpl2)))
+
+;; This is a CRAN package, but it depends on r-biobase from Bioconductor.
+(define-public r-bisquerna
+  (package
+   (name "r-bisquerna")
+   (version "1.0.4")
+   (source (origin
+            (method url-fetch)
+            (uri (cran-uri "BisqueRNA" version))
+            (sha256
+             (base32
+              "01g34n87ml7n3pck77497ddgbv3rr5p4153ac8ninpgjijlm3jw2"))))
+   (properties `((upstream-name . "BisqueRNA")))
+   (build-system r-build-system)
+   (propagated-inputs
+    `(("r-biobase" ,r-biobase)
+      ("r-limsolve" ,r-limsolve)))
+   (home-page "https://www.biorxiv.org/content/10.1101/669911v1")
+   (synopsis "Decomposition of bulk expression with single-cell sequencing")
+   (description "This package provides tools to accurately estimate cell type
+abundances from heterogeneous bulk expression.  A reference-based method
+utilizes single-cell information to generate a signature matrix and
+transformation of bulk expression for accurate regression based estimates.
+A marker-based method utilizes known cell-specific marker genes to measure
+relative abundances across samples.")
+   (license license:gpl3)))
+
 ;; This is a CRAN package, but it depends on r-bsgenome-hsapiens-ucsc-hg19
 ;; from Bioconductor.
 (define-public r-deconstructsigs
@@ -1559,6 +1672,35 @@ structure.")
 microarrays.")
     (license license:artistic2.0)))
 
+(define-public r-annotationdbi
+  (package
+    (name "r-annotationdbi")
+    (version "1.52.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "AnnotationDbi" version))
+              (sha256
+               (base32
+                "0zqxgh3nx6y8ry12s2vss2f4axz5vpqxha1y4ifhhcx4zhpzsglr"))))
+    (properties
+     `((upstream-name . "AnnotationDbi")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-biobase" ,r-biobase)
+       ("r-biocgenerics" ,r-biocgenerics)
+       ("r-dbi" ,r-dbi)
+       ("r-iranges" ,r-iranges)
+       ("r-rsqlite" ,r-rsqlite)
+       ("r-s4vectors" ,r-s4vectors)))
+    (native-inputs
+     `(("r-knitr" ,r-knitr)))
+    (home-page "https://bioconductor.org/packages/AnnotationDbi")
+    (synopsis "Annotation database interface")
+    (description
+     "This package provides user interface and database connection code for
+annotation data packages using SQLite data storage.")
+    (license license:artistic2.0)))
+
 (define-public r-annotationforge
   (package
     (name "r-annotationforge")
@@ -1591,6 +1733,148 @@ microarrays.")
 databases.  Packages produced are intended to be used with AnnotationDbi.")
     (license license:artistic2.0)))
 
+(define-public r-biobase
+  (package
+    (name "r-biobase")
+    (version "2.50.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "Biobase" version))
+              (sha256
+               (base32
+                "11kgc4flywlm3i18603558l8ksv91c24vkc5fnnbcd375i2dhhd4"))))
+    (properties
+     `((upstream-name . "Biobase")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-biocgenerics" ,r-biocgenerics)))
+    (home-page "https://bioconductor.org/packages/Biobase")
+    (synopsis "Base functions for Bioconductor")
+    (description
+     "This package provides functions that are needed by many other packages
+on Bioconductor or which replace R functions.")
+    (license license:artistic2.0)))
+
+(define-public r-biomart
+  (package
+    (name "r-biomart")
+    (version "2.46.3")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "biomaRt" version))
+              (sha256
+               (base32
+                "0gwmd0ykpv0gyh34c56g5m12lil20fvig49f3ih1jxrxf3q4wmq7"))))
+    (properties
+     `((upstream-name . "biomaRt")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-annotationdbi" ,r-annotationdbi)
+       ("r-biocfilecache" ,r-biocfilecache)
+       ("r-httr" ,r-httr)
+       ("r-openssl" ,r-openssl)
+       ("r-progress" ,r-progress)
+       ("r-rappdirs" ,r-rappdirs)
+       ("r-stringr" ,r-stringr)
+       ("r-xml" ,r-xml)
+       ("r-xml2" ,r-xml2)))
+    (native-inputs
+     `(("r-knitr" ,r-knitr)))
+    (home-page "https://bioconductor.org/packages/biomaRt")
+    (synopsis "Interface to BioMart databases")
+    (description
+     "biomaRt provides an interface to a growing collection of databases
+implementing the @url{BioMart software suite, http://www.biomart.org}.  The
+package enables retrieval of large amounts of data in a uniform way without
+the need to know the underlying database schemas or write complex SQL queries.
+Examples of BioMart databases are Ensembl, COSMIC, Uniprot, HGNC, Gramene,
+Wormbase and dbSNP mapped to Ensembl.  These major databases give biomaRt
+users direct access to a diverse set of data and enable a wide range of
+powerful online queries from gene annotation to database mining.")
+    (license license:artistic2.0)))
+
+(define-public r-biocparallel
+  (package
+    (name "r-biocparallel")
+    (version "1.24.1")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "BiocParallel" version))
+              (sha256
+               (base32
+                "1iryicvmcagcrj29kp49mqhiq2kn72j4idj380hi9illmdrg9ism"))))
+    (properties
+     `((upstream-name . "BiocParallel")))
+    (build-system r-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'make-reproducible
+           (lambda _
+             ;; Remove generated documentation.
+             (for-each delete-file
+                       '("inst/doc/BiocParallel_BatchtoolsParam.pdf"
+                         "inst/doc/Introduction_To_BiocParallel.pdf"
+                         "inst/doc/Errors_Logs_And_Debugging.pdf"
+                         "inst/doc/BiocParallel_BatchtoolsParam.R"
+                         "inst/doc/Introduction_To_BiocParallel.R"
+                         "inst/doc/Errors_Logs_And_Debugging.R"))
+
+             ;; Remove time-dependent macro
+             (substitute* '("inst/doc/BiocParallel_BatchtoolsParam.Rnw"
+                            "inst/doc/Introduction_To_BiocParallel.Rnw"
+                            "inst/doc/Errors_Logs_And_Debugging.Rnw"
+                            "vignettes/BiocParallel_BatchtoolsParam.Rnw"
+                            "vignettes/Introduction_To_BiocParallel.Rnw"
+                            "vignettes/Errors_Logs_And_Debugging.Rnw")
+               (("\\today") "later"))
+
+             ;; Initialize the random number generator seed when building.
+             (substitute* "R/internal_rng_stream.R"
+               (("\"L'Ecuyer-CMRG\"\\)" m)
+                (string-append
+                 m "; if (!is.na(Sys.getenv(\"SOURCE_DATE_EPOCH\"))) {set.seed(100)}\n"))))))))
+    (propagated-inputs
+     `(("r-futile-logger" ,r-futile-logger)
+       ("r-snow" ,r-snow)
+       ("r-bh" ,r-bh)))
+    (native-inputs
+     `(("r-knitr" ,r-knitr)))
+    (home-page "https://bioconductor.org/packages/BiocParallel")
+    (synopsis "Bioconductor facilities for parallel evaluation")
+    (description
+     "This package provides modified versions and novel implementation of
+functions for parallel evaluation, tailored to use with Bioconductor
+objects.")
+    (license (list license:gpl2+ license:gpl3+))))
+
+(define-public r-biostrings
+  (package
+    (name "r-biostrings")
+    (version "2.58.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "Biostrings" version))
+              (sha256
+               (base32
+                "1rbqhs73mhfr1gi0rx28jiyan7i3hb45ai3jpl1656fnrhgjfxq5"))))
+    (properties
+     `((upstream-name . "Biostrings")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-biocgenerics" ,r-biocgenerics)
+       ("r-crayon" ,r-crayon)
+       ("r-iranges" ,r-iranges)
+       ("r-s4vectors" ,r-s4vectors)
+       ("r-xvector" ,r-xvector)))
+    (home-page "https://bioconductor.org/packages/Biostrings")
+    (synopsis "String objects and algorithms for biological sequences")
+    (description
+     "This package provides memory efficient string containers, string
+matching algorithms, and other utilities, for fast manipulation of large
+biological sequences or sets of sequences.")
+    (license license:artistic2.0)))
+
 (define-public r-category
   (package
     (name "r-category")
@@ -1764,13 +2048,13 @@ high-throughput sequencing experiments.")
 (define-public r-genomeinfodb
   (package
     (name "r-genomeinfodb")
-    (version "1.26.4")
+    (version "1.26.6")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "GenomeInfoDb" version))
               (sha256
                (base32
-                "1sbhdpgabqbi749ixih8nlmq5id7sg8y6kkfj46r00642rc293ys"))))
+                "1wy4dwiv0pgim975var802z565py4a0nakx6zdvbhry4c0dfczd1"))))
     (properties
      `((upstream-name . "GenomeInfoDb")))
     (build-system r-build-system)
@@ -1791,6 +2075,37 @@ translation between different chromosome sequence naming conventions (e.g.,
 names in their natural, rather than lexicographic, order.")
     (license license:artistic2.0)))
 
+(define-public r-genomicranges
+  (package
+    (name "r-genomicranges")
+    (version "1.42.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "GenomicRanges" version))
+              (sha256
+               (base32
+                "0j4py5g6pdj35xhlaqhxxhg55j9l4mcdk3yck4dgyavv5f2dh24i"))))
+    (properties
+     `((upstream-name . "GenomicRanges")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-biocgenerics" ,r-biocgenerics)
+       ("r-genomeinfodb" ,r-genomeinfodb)
+       ("r-iranges" ,r-iranges)
+       ("r-s4vectors" ,r-s4vectors)
+       ("r-xvector" ,r-xvector)))
+    (native-inputs
+     `(("r-knitr" ,r-knitr)))
+    (home-page "https://bioconductor.org/packages/GenomicRanges")
+    (synopsis "Representation and manipulation of genomic intervals")
+    (description
+     "This package provides tools to efficiently represent and manipulate
+genomic annotations and alignments is playing a central role when it comes to
+analyzing high-throughput sequencing data (a.k.a. NGS data).  The
+GenomicRanges package defines general purpose containers for storing and
+manipulating genomic intervals and variables defined along a genome.")
+    (license license:artistic2.0)))
+
 (define-public r-gostats
   (package
     (name "r-gostats")
@@ -1871,6 +2186,25 @@ Enrichment Analysis} (GSEA).")
 the Human Protein Atlas project.")
     (license license:artistic2.0)))
 
+(define-public r-limma
+  (package
+    (name "r-limma")
+    (version "3.46.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "limma" version))
+              (sha256
+               (base32
+                "1xxv493q1kip9bjfv7v7k5dnq7hz7gvl80i983v4mvwavhgnbxfz"))))
+    (build-system r-build-system)
+    (home-page "http://bioinf.wehi.edu.au/limma")
+    (synopsis "Package for linear models for microarray and RNA-seq data")
+    (description "This package can be used for the analysis of gene expression
+studies, especially the use of linear models for analysing designed experiments
+and the assessment of differential expression.  The analysis methods apply to
+different technologies, including microarrays, RNA-seq, and quantitative PCR.")
+    (license license:gpl2+)))
+
 (define-public r-rbgl
   (package
     (name "r-rbgl")
@@ -1975,6 +2309,49 @@ reports together for a particular project that can be viewed in a web
 browser.")
     (license license:artistic2.0)))
 
+(define-public r-rsamtools
+  (package
+    (name "r-rsamtools")
+    (version "2.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "Rsamtools" version))
+              (sha256
+               (base32
+                "040pggkwglc6wy90qnc7xcdnaj0v3iqlykvvsl74241409qly554"))))
+    (properties
+     `((upstream-name . "Rsamtools")))
+    (build-system r-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'use-system-zlib
+           (lambda _
+             (substitute* "DESCRIPTION"
+               (("zlibbioc, ") ""))
+             (substitute* "NAMESPACE"
+               (("import\\(zlibbioc\\)") ""))
+             #t)))))
+    (propagated-inputs
+     `(("r-biocgenerics" ,r-biocgenerics)
+       ("r-biocparallel" ,r-biocparallel)
+       ("r-biostrings" ,r-biostrings)
+       ("r-bitops" ,r-bitops)
+       ("r-genomeinfodb" ,r-genomeinfodb)
+       ("r-genomicranges" ,r-genomicranges)
+       ("r-iranges" ,r-iranges)
+       ("r-rhtslib" ,r-rhtslib)
+       ("r-s4vectors" ,r-s4vectors)
+       ("r-xvector" ,r-xvector)))
+    (home-page "https://bioconductor.org/packages/release/bioc/html/Rsamtools.html")
+    (synopsis "Interface to samtools, bcftools, and tabix")
+    (description
+     "This package provides an interface to the @code{samtools},
+@code{bcftools}, and @code{tabix} utilities for manipulating SAM (Sequence
+Alignment / Map), FASTA, binary variant call (BCF) and compressed indexed
+tab-delimited (tabix) files.")
+    (license license:expat)))
+
 (define-public r-shortread
   (package
     (name "r-shortread")
@@ -2110,6 +2487,42 @@ annotation infrastructure.")
 coding changes and predict coding outcomes.")
     (license license:artistic2.0)))
 
+(define-public r-xvector
+  (package
+    (name "r-xvector")
+    (version "0.30.0")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "XVector" version))
+              (sha256
+               (base32
+                "1pqljikg4f6jb7wgm5537zwgq5b013nyz1agjrwfq2cljb0ym6lq"))))
+    (properties
+     `((upstream-name . "XVector")))
+    (build-system r-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'use-system-zlib
+           (lambda _
+             (substitute* "DESCRIPTION"
+               (("zlibbioc, ") ""))
+             (substitute* "NAMESPACE"
+               (("import\\(zlibbioc\\)") ""))
+             #t)))))
+    (inputs
+     `(("zlib" ,zlib)))
+    (propagated-inputs
+     `(("r-biocgenerics" ,r-biocgenerics)
+       ("r-iranges" ,r-iranges)
+       ("r-s4vectors" ,r-s4vectors)))
+    (home-page "https://bioconductor.org/packages/XVector")
+    (synopsis "Representation and manpulation of external sequences")
+    (description
+     "This package provides memory efficient S4 classes for storing sequences
+\"externally\" (behind an R external pointer, or on disk).")
+    (license license:artistic2.0)))
+
 (define-public r-geneplotter
   (package
     (name "r-geneplotter")
@@ -2318,14 +2731,14 @@ signal in the input, that lead to spurious peaks during peak calling.")
 (define-public r-diffbind
   (package
     (name "r-diffbind")
-    (version "3.0.14")
+    (version "3.0.15")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "DiffBind" version))
        (sha256
         (base32
-         "1siabhjd0w7bb6v2gfhsm9j7c7c86z8m6lfsyl8p84h0zhjs2vrw"))))
+         "06f613s8d9z51njyf839g22gwybx9zs5n6xghwr5j1ad2n4m6qwi"))))
     (properties `((upstream-name . "DiffBind")))
     (build-system r-build-system)
     (propagated-inputs
@@ -2532,14 +2945,14 @@ determining dependencies between variables, code improvement suggestions.")
 (define-public r-chippeakanno
   (package
     (name "r-chippeakanno")
-    (version "3.24.1")
+    (version "3.24.2")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ChIPpeakAnno" version))
        (sha256
         (base32
-         "0qdkwjv8s46d1kmgg2chijv7yzy9sv49kiks18w8x2z89prn15gj"))))
+         "0l417aygs89wf1j9fjpfjhahzskbpbgcrm8xpx3qm4s0307vfzkw"))))
     (properties `((upstream-name . "ChIPpeakAnno")))
     (build-system r-build-system)
     (propagated-inputs
@@ -2548,6 +2961,7 @@ determining dependencies between variables, code improvement suggestions.")
        ("r-biomart" ,r-biomart)
        ("r-biostrings" ,r-biostrings)
        ("r-dbi" ,r-dbi)
+       ("r-dplyr" ,r-dplyr)
        ("r-ensembldb" ,r-ensembldb)
        ("r-genomeinfodb" ,r-genomeinfodb)
        ("r-genomicalignments" ,r-genomicalignments)
@@ -6521,14 +6935,14 @@ annotations.")
 (define-public r-rsubread
   (package
     (name "r-rsubread")
-    (version "2.4.2")
+    (version "2.4.3")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Rsubread" version))
        (sha256
         (base32
-         "1wczrw5jb69x45hd3rdqqs9vkysdqwlxn9h3kjzn57r4x5q7jrra"))))
+         "0c4akc89p5467n5rzq9bi7h0h15rbpqpvh7fw42qcj7g2vc41wba"))))
     (properties `((upstream-name . "Rsubread")))
     (build-system r-build-system)
     (inputs `(("zlib" ,zlib)))
@@ -7987,14 +8401,14 @@ data.")
 (define-public r-universalmotif
   (package
     (name "r-universalmotif")
-    (version "1.8.3")
+    (version "1.8.4")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "universalmotif" version))
        (sha256
         (base32
-         "1ys2kbayc1rzv8nzi60208yfslm4kzynndfg7vw2n0c30dvzycrc"))))
+         "0pmi5mp5v0srr482vlkfmkp28bywq969fvv9g5kjl5rxki963zmr"))))
     (properties
      `((upstream-name . "universalmotif")))
     (build-system r-build-system)
@@ -10140,8 +10554,8 @@ experiments, and visualize de influence of the involved factors.")
 by spectral counts, to discover differentially expressed proteins between two
 biological conditions.  Three tests are available: Poisson GLM regression,
 quasi-likelihood GLM regression, and the negative binomial of the edgeR
-package.The three models admit blocking factors to control for nuissance
-variables.To assure a good level of reproducibility a post-test filter is
+package.  The three models admit blocking factors to control for nuisance
+variables.  To assure a good level of reproducibility a post-test filter is
 available, where we may set the minimum effect size considered biologicaly
 relevant, and the minimum expression of the most abundant condition.")
     (license license:gpl2)))
@@ -10415,14 +10829,14 @@ family of feature/genome hypotheses.")
 (define-public r-gviz
   (package
     (name "r-gviz")
-    (version "1.34.0")
+    (version "1.34.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "Gviz" version))
        (sha256
         (base32
-         "0v7bz46b91dnrr55ah42ljj1i2xs3090s4w0lw8098pag00p4vh2"))))
+         "0bmlfz9ri1gkwyl605a2hqi5b8jdpvynrxwghwmrsd657ip6c7n1"))))
     (properties `((upstream-name . "Gviz")))
     (build-system r-build-system)
     (propagated-inputs
@@ -10677,7 +11091,7 @@ the earlier snpMatrix package, allowing for uncertainty in genotypes.")
     (description
      "This package implements functions for combinatorial and differential
 analysis of ChIP-seq data.  It includes uni- and multivariate peak-calling,
-export to genome browser viewable files, and functi ons for enrichment
+export to genome browser viewable files, and functions for enrichment
 analyses.")
     (license license:artistic2.0)))
 
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index e008ca16fb..313c70784a 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2016, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2016, 2018 Raoul Bonnal <ilpuccio.febo@gmail.com>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2017, 2021 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
 ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2018, 2019, 2020, 2021 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
@@ -2546,15 +2546,27 @@ accessing bigWig files.")
 (define-public python-schema-salad
   (package
     (name "python-schema-salad")
-    (version "7.0.20200811075006")
+    (version "7.1.20210316164414")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "schema-salad" version))
         (sha256
          (base32
-          "0wanbwmqb189x1m0vacnhpivfsr8rwbqknngivzxxs8j46yj80bg"))))
+          "04jaykdpgfnkrghvli5swxzqp7yba842am4bz42hcfljsmkrxvrk"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'skip-failing-tests
+           (lambda _
+             ;; Skip tests that require network access.
+             (substitute* "schema_salad/tests/test_cwl11.py"
+               (("^def test_(secondaryFiles|outputBinding)" all)
+                (string-append "@pytest.mark.skip(reason="
+                               "\"test requires network access\")\n"
+                               all)))
+             #t)))))
     (propagated-inputs
      `(("python-cachecontrol" ,python-cachecontrol-0.11)
        ("python-lockfile" ,python-lockfile)
@@ -2582,7 +2594,7 @@ and record oriented data modeling and the Semantic Web.")
 (define-public cwltool
   (package
     (name "cwltool")
-    (version "3.0.20201121085451")
+    (version "3.0.20210319143721")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2591,7 +2603,7 @@ and record oriented data modeling and the Semantic Web.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1awf99n7aglxc5zszrlrv6jxp355jp45ws7wpsgjlgcdv7advn0w"))))
+                "1sgs9ckyxb9f9169mc3wm9lnjg4080ai42xqsrwpw9l8apy4c9m5"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -2599,8 +2611,9 @@ and record oriented data modeling and the Semantic Web.")
          (add-after 'unpack 'loosen-version-restrictions
            (lambda _
              (substitute* "setup.py"
-               (("== 1.5.1") ">=1.5.1") ; prov
-               ((", < 3.5") ""))        ; shellescape
+               (("== 1.5.1") ">=1.5.1")   ; prov
+               ((", < 3.5") "")           ; shellescape
+               ((" >= 6.0.2, < 6.2") "")) ; pytest
              #t))
          (add-after 'unpack 'dont-use-git
            (lambda _
@@ -2612,6 +2625,7 @@ and record oriented data modeling and the Semantic Web.")
          (add-after 'unpack 'modify-tests
            (lambda _
              ;; Tries to connect to the internet.
+             (delete-file "tests/test_content_type.py")
              (delete-file "tests/test_udocker.py")
              (delete-file "tests/test_http_input.py")
              (substitute* "tests/test_load_tool.py"
@@ -6235,7 +6249,7 @@ subsequent visualization, annotation and storage of results.")
 (define-public plink-ng
   (package (inherit plink)
     (name "plink-ng")
-    (version "1.90b4")
+    (version "2.00a2.3")
     (source
      (origin
        (method git-fetch)
@@ -6244,29 +6258,26 @@ subsequent visualization, annotation and storage of results.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "02npdwgkpfkdnhw819rhj5kw02a5k5m90b14zq9zzya4hyg929c0"))))
+        (base32 "1p88lz9agzjlspjhciz61qjc36cfniv4nkxszyy0njqyc5rzc0cd"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f ;no "check" target
+     `(#:tests? #f ;no "check" target
        #:make-flags (list "BLASFLAGS=-llapack -lopenblas"
                           "CFLAGS=-Wall -O2 -DDYNAMIC_ZLIB=1"
                           "ZLIB=-lz"
-                          "-f" "Makefile.std")
+                          "BIN=plink prettify"
+                          (string-append "CC=" ,(cc-for-target))
+                          (string-append "PREFIX=" (assoc-ref %outputs "out"))
+                          "DESTDIR=")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'chdir
            (lambda _ (chdir "1.9") #t))
-         (delete 'configure) ; no "configure" script
-         (replace 'install
-                  (lambda* (#:key outputs #:allow-other-keys)
-                    (let ((bin (string-append (assoc-ref outputs "out")
-                                              "/bin/")))
-                      (install-file "plink" bin)
-                      #t))))))
+         (delete 'configure)))) ; no "configure" script
     (inputs
-     `(("zlib" ,zlib)
-       ("lapack" ,lapack)
-       ("openblas" ,openblas)))
+     `(("lapack" ,lapack)
+       ("openblas" ,openblas)
+       ("zlib" ,zlib)))
     (home-page "https://www.cog-genomics.org/plink/")
     (license license:gpl3+)))
 
@@ -6728,9 +6739,9 @@ of these reads to align data quickly through a hash-based indexing scheme.")
     (synopsis "Biological sequence analysis tool for NGS reads")
     (description
      "SortMeRNA is a biological sequence analysis tool for filtering, mapping
-and operational taxonomic unit (OTU) picking of next generation
-sequencing (NGS) reads.  The core algorithm is based on approximate seeds and
-allows for fast and sensitive analyses of nucleotide sequences.  The main
+and @acronym{OTU, operational taxonomic unit} picking of @acronym{NGS, next
+generation sequencing} reads.  The core algorithm is based on approximate seeds
+and allows for fast and sensitive analyses of nucleotide sequences.  The main
 application of SortMeRNA is filtering rRNA from metatranscriptomic data.")
     ;; The source includes x86 specific code
     (supported-systems '("x86_64-linux" "i686-linux"))
@@ -7622,311 +7633,6 @@ including VCF header and contents in RDF and JSON.")
     (home-page "https://github.com/vcflib/bio-vcf")
     (license license:expat)))
 
-(define-public r-limma
-  (package
-    (name "r-limma")
-    (version "3.46.0")
-    (source (origin
-              (method url-fetch)
-              (uri (bioconductor-uri "limma" version))
-              (sha256
-               (base32
-                "1xxv493q1kip9bjfv7v7k5dnq7hz7gvl80i983v4mvwavhgnbxfz"))))
-    (build-system r-build-system)
-    (home-page "http://bioinf.wehi.edu.au/limma")
-    (synopsis "Package for linear models for microarray and RNA-seq data")
-    (description "This package can be used for the analysis of gene expression
-studies, especially the use of linear models for analysing designed experiments
-and the assessment of differential expression.  The analysis methods apply to
-different technologies, including microarrays, RNA-seq, and quantitative PCR.")
-    (license license:gpl2+)))
-
-(define-public r-xvector
-  (package
-    (name "r-xvector")
-    (version "0.30.0")
-    (source (origin
-              (method url-fetch)
-              (uri (bioconductor-uri "XVector" version))
-              (sha256
-               (base32
-                "1pqljikg4f6jb7wgm5537zwgq5b013nyz1agjrwfq2cljb0ym6lq"))))
-    (properties
-     `((upstream-name . "XVector")))
-    (build-system r-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'use-system-zlib
-           (lambda _
-             (substitute* "DESCRIPTION"
-               (("zlibbioc, ") ""))
-             (substitute* "NAMESPACE"
-               (("import\\(zlibbioc\\)") ""))
-             #t)))))
-    (inputs
-     `(("zlib" ,zlib)))
-    (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)))
-    (home-page "https://bioconductor.org/packages/XVector")
-    (synopsis "Representation and manpulation of external sequences")
-    (description
-     "This package provides memory efficient S4 classes for storing sequences
-\"externally\" (behind an R external pointer, or on disk).")
-    (license license:artistic2.0)))
-
-(define-public r-genomicranges
-  (package
-    (name "r-genomicranges")
-    (version "1.42.0")
-    (source (origin
-              (method url-fetch)
-              (uri (bioconductor-uri "GenomicRanges" version))
-              (sha256
-               (base32
-                "0j4py5g6pdj35xhlaqhxxhg55j9l4mcdk3yck4dgyavv5f2dh24i"))))
-    (properties
-     `((upstream-name . "GenomicRanges")))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (home-page "https://bioconductor.org/packages/GenomicRanges")
-    (synopsis "Representation and manipulation of genomic intervals")
-    (description
-     "This package provides tools to efficiently represent and manipulate
-genomic annotations and alignments is playing a central role when it comes to
-analyzing high-throughput sequencing data (a.k.a. NGS data).  The
-GenomicRanges package defines general purpose containers for storing and
-manipulating genomic intervals and variables defined along a genome.")
-    (license license:artistic2.0)))
-
-(define-public r-biobase
-  (package
-    (name "r-biobase")
-    (version "2.50.0")
-    (source (origin
-              (method url-fetch)
-              (uri (bioconductor-uri "Biobase" version))
-              (sha256
-               (base32
-                "11kgc4flywlm3i18603558l8ksv91c24vkc5fnnbcd375i2dhhd4"))))
-    (properties
-     `((upstream-name . "Biobase")))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)))
-    (home-page "https://bioconductor.org/packages/Biobase")
-    (synopsis "Base functions for Bioconductor")
-    (description
-     "This package provides functions that are needed by many other packages
-on Bioconductor or which replace R functions.")
-    (license license:artistic2.0)))
-
-(define-public r-annotationdbi
-  (package
-    (name "r-annotationdbi")
-    (version "1.52.0")
-    (source (origin
-              (method url-fetch)
-              (uri (bioconductor-uri "AnnotationDbi" version))
-              (sha256
-               (base32
-                "0zqxgh3nx6y8ry12s2vss2f4axz5vpqxha1y4ifhhcx4zhpzsglr"))))
-    (properties
-     `((upstream-name . "AnnotationDbi")))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-biocgenerics" ,r-biocgenerics)
-       ("r-dbi" ,r-dbi)
-       ("r-iranges" ,r-iranges)
-       ("r-rsqlite" ,r-rsqlite)
-       ("r-s4vectors" ,r-s4vectors)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (home-page "https://bioconductor.org/packages/AnnotationDbi")
-    (synopsis "Annotation database interface")
-    (description
-     "This package provides user interface and database connection code for
-annotation data packages using SQLite data storage.")
-    (license license:artistic2.0)))
-
-(define-public r-biomart
-  (package
-    (name "r-biomart")
-    (version "2.46.3")
-    (source (origin
-              (method url-fetch)
-              (uri (bioconductor-uri "biomaRt" version))
-              (sha256
-               (base32
-                "0gwmd0ykpv0gyh34c56g5m12lil20fvig49f3ih1jxrxf3q4wmq7"))))
-    (properties
-     `((upstream-name . "biomaRt")))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-annotationdbi" ,r-annotationdbi)
-       ("r-biocfilecache" ,r-biocfilecache)
-       ("r-httr" ,r-httr)
-       ("r-openssl" ,r-openssl)
-       ("r-progress" ,r-progress)
-       ("r-rappdirs" ,r-rappdirs)
-       ("r-stringr" ,r-stringr)
-       ("r-xml" ,r-xml)
-       ("r-xml2" ,r-xml2)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (home-page "https://bioconductor.org/packages/biomaRt")
-    (synopsis "Interface to BioMart databases")
-    (description
-     "biomaRt provides an interface to a growing collection of databases
-implementing the @url{BioMart software suite, http://www.biomart.org}.  The
-package enables retrieval of large amounts of data in a uniform way without
-the need to know the underlying database schemas or write complex SQL queries.
-Examples of BioMart databases are Ensembl, COSMIC, Uniprot, HGNC, Gramene,
-Wormbase and dbSNP mapped to Ensembl.  These major databases give biomaRt
-users direct access to a diverse set of data and enable a wide range of
-powerful online queries from gene annotation to database mining.")
-    (license license:artistic2.0)))
-
-(define-public r-biocparallel
-  (package
-    (name "r-biocparallel")
-    (version "1.24.1")
-    (source (origin
-              (method url-fetch)
-              (uri (bioconductor-uri "BiocParallel" version))
-              (sha256
-               (base32
-                "1iryicvmcagcrj29kp49mqhiq2kn72j4idj380hi9illmdrg9ism"))))
-    (properties
-     `((upstream-name . "BiocParallel")))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-futile-logger" ,r-futile-logger)
-       ("r-snow" ,r-snow)
-       ("r-bh" ,r-bh)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (home-page "https://bioconductor.org/packages/BiocParallel")
-    (synopsis "Bioconductor facilities for parallel evaluation")
-    (description
-     "This package provides modified versions and novel implementation of
-functions for parallel evaluation, tailored to use with Bioconductor
-objects.")
-    (license (list license:gpl2+ license:gpl3+))))
-
-(define-public r-biostrings
-  (package
-    (name "r-biostrings")
-    (version "2.58.0")
-    (source (origin
-              (method url-fetch)
-              (uri (bioconductor-uri "Biostrings" version))
-              (sha256
-               (base32
-                "1rbqhs73mhfr1gi0rx28jiyan7i3hb45ai3jpl1656fnrhgjfxq5"))))
-    (properties
-     `((upstream-name . "Biostrings")))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-crayon" ,r-crayon)
-       ("r-iranges" ,r-iranges)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
-    (home-page "https://bioconductor.org/packages/Biostrings")
-    (synopsis "String objects and algorithms for biological sequences")
-    (description
-     "This package provides memory efficient string containers, string
-matching algorithms, and other utilities, for fast manipulation of large
-biological sequences or sets of sequences.")
-    (license license:artistic2.0)))
-
-(define-public r-rsamtools
-  (package
-    (name "r-rsamtools")
-    (version "2.6.0")
-    (source (origin
-              (method url-fetch)
-              (uri (bioconductor-uri "Rsamtools" version))
-              (sha256
-               (base32
-                "040pggkwglc6wy90qnc7xcdnaj0v3iqlykvvsl74241409qly554"))))
-    (properties
-     `((upstream-name . "Rsamtools")))
-    (build-system r-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'use-system-zlib
-           (lambda _
-             (substitute* "DESCRIPTION"
-               (("zlibbioc, ") ""))
-             (substitute* "NAMESPACE"
-               (("import\\(zlibbioc\\)") ""))
-             #t)))))
-    (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-biocparallel" ,r-biocparallel)
-       ("r-biostrings" ,r-biostrings)
-       ("r-bitops" ,r-bitops)
-       ("r-genomeinfodb" ,r-genomeinfodb)
-       ("r-genomicranges" ,r-genomicranges)
-       ("r-iranges" ,r-iranges)
-       ("r-rhtslib" ,r-rhtslib)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-xvector" ,r-xvector)))
-    (home-page "https://bioconductor.org/packages/release/bioc/html/Rsamtools.html")
-    (synopsis "Interface to samtools, bcftools, and tabix")
-    (description
-     "This package provides an interface to the @code{samtools},
-@code{bcftools}, and @code{tabix} utilities for manipulating SAM (Sequence
-Alignment / Map), FASTA, binary variant call (BCF) and compressed indexed
-tab-delimited (tabix) files.")
-    (license license:expat)))
-
-(define-public r-delayedarray
-  (package
-    (name "r-delayedarray")
-    (version "0.16.2")
-    (source (origin
-              (method url-fetch)
-              (uri (bioconductor-uri "DelayedArray" version))
-              (sha256
-               (base32
-                "09lpj951v1afxkrnjvnhzp4qgklq23ykdwlny7k1lyfcdy9q6wm0"))))
-    (properties
-     `((upstream-name . "DelayedArray")))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-biocgenerics" ,r-biocgenerics)
-       ("r-s4vectors" ,r-s4vectors)
-       ("r-iranges" ,r-iranges)
-       ("r-matrix" ,r-matrix)
-       ("r-matrixgenerics" ,r-matrixgenerics)))
-    (native-inputs
-     `(("r-knitr" ,r-knitr)))
-    (home-page "https://bioconductor.org/packages/DelayedArray")
-    (synopsis "Delayed operations on array-like objects")
-    (description
-     "Wrapping an array-like object (typically an on-disk object) in a
-@code{DelayedArray} object allows one to perform common array operations on it
-without loading the object in memory.  In order to reduce memory usage and
-optimize performance, operations on the object are either delayed or executed
-using a block processing mechanism.  Note that this also works on in-memory
-array-like objects like @code{DataFrame} objects (typically with Rle columns),
-@code{Matrix} objects, and ordinary arrays and data frames.")
-    (license license:artistic2.0)))
-
 (define-public r-summarizedexperiment
   (package
     (name "r-summarizedexperiment")
@@ -8045,13 +7751,13 @@ as well as query and modify the browser state, such as the current viewport.")
 (define-public r-genomicfeatures
   (package
     (name "r-genomicfeatures")
-    (version "1.42.2")
+    (version "1.42.3")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "GenomicFeatures" version))
               (sha256
                (base32
-                "17ns5hvx5q8mrmkgb6linspwml62mi34i6al5bxlib5xi9d9f04s"))))
+                "168cf261vmcqffbzassavkjyz9a2af0l6zbv9cagkx6b1qrk3siz"))))
     (properties
      `((upstream-name . "GenomicFeatures")))
     (build-system r-build-system)
diff --git a/gnu/packages/boost.scm b/gnu/packages/boost.scm
index bc0e95b1ba..33f05cff15 100644
--- a/gnu/packages/boost.scm
+++ b/gnu/packages/boost.scm
@@ -16,6 +16,7 @@
 ;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2021 Franck Pérignon <franck.perignon@univ-grenoble-alpes.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -47,6 +48,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python)
   #:use-module (gnu packages shells)
+  #:use-module (gnu packages mpi)
   #:use-module (srfi srfi-1))
 
 (define (version-with-underscores version)
@@ -333,6 +335,30 @@ Boost.Thread.")
 signals and slots system.")
     (license (license:x11-style "https://www.boost.org/LICENSE_1_0.txt"))))
 
+
+(define-public boost-mpi
+  (package
+    (inherit boost)
+    (name "boost-mpi")
+    (native-inputs
+     `(("perl" ,perl)
+       ,@(if (%current-target-system)
+             '()
+             `(("python" ,python-wrapper)))
+       ("openmpi" , openmpi)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments boost)
+      ((#:phases phases)
+       `(modify-phases ,phases
+          (add-after 'configure 'update-jam
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (let ((output-port (open-file "project-config.jam" "a")))
+                (display "using mpi ;" output-port)
+                (newline output-port)
+                (close output-port))))))))
+    (home-page "https://www.boost.org")
+    (synopsis "Message Passing Interface (MPI) library for C++")))
+
 (define-public mdds
   (package
     (name "mdds")
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index c9a3d2c217..6093e0d9e6 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -478,15 +478,15 @@ tree binary files.  These are board description files used by Linux and BSD.")
 (define u-boot
   (package
     (name "u-boot")
-    (version "2021.01")
+    (version "2021.04")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "ftp://ftp.denx.de/pub/u-boot/"
+                    "https://ftp.denx.de/pub/u-boot/"
                     "u-boot-" version ".tar.bz2"))
               (sha256
                (base32
-                "0m04glv9kn3bhs62sn675w60wkrl4m3a4hnbnnw67s3l198y21xl"))))
+                "06p1vymf0dl6jc2xy5w7p42mpgppa46lmpm2ishmgsycnldqnhqd"))))
     (native-inputs
      `(("bc" ,bc)
        ("bison" ,bison)
diff --git a/gnu/packages/build-tools.scm b/gnu/packages/build-tools.scm
index b47a790f75..9a18b77ff0 100644
--- a/gnu/packages/build-tools.scm
+++ b/gnu/packages/build-tools.scm
@@ -316,7 +316,7 @@ resembles Python.")
 (define-public meson-next
   (package
     (inherit meson)
-    (version "0.57.1")
+    (version "0.57.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/mesonbuild/meson/"
@@ -324,7 +324,7 @@ resembles Python.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "19n8alcpzv6npgp27iqljkmvdmr7s2c7zm8y997j1nlvpa1cgqbj"))))))
+                "1iac7p99zfgkznq4qlnkk7b8xwwlilcrnkf33sczm56yqnqyg0rs"))))))
 
 (define-public premake4
   (package
@@ -535,3 +535,43 @@ besides executing the make build command, updates the JSON compilation
 database file corresponding to that build, resulting in a command-line
 interface similar to Bear.")
     (license license:gpl3)))
+
+(define-public build
+  (package
+    (name "build")
+    (version "0.3.10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.codesynthesis.com/download/"
+                           "build/" (version-major+minor version)
+                           "/build-" version ".tar.bz2"))
+       (sha256
+        (base32 "1lx5rpnmsbip43zpp0a57sl5rm7pjb0y6i2si6rfglfp4p9d3z76"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags (list (string-append "install_prefix=" %output))
+       #:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (delete 'build)
+                  (delete 'configure))))
+    (home-page "https://www.codesynthesis.com/projects/build/")
+    (synopsis "Massively-parallel build system implemented on top of GNU make")
+    (description "Build is a massively-parallel software build system
+implemented on top of GNU Make, designed with the following tasks in mind:
+@itemize
+@item configuration
+@item building
+@item testing
+@item installation
+@end itemize
+Build has features such as:
+@itemize
+@item Position-independent makefiles.
+@item Non-recursive multi-makefile include-based structure.
+@item Leaf makefiles are full-fledged GNU makefiles, not just variable definitions.
+@item Complete dependency graph.
+@item Inter-project dependency tracking.
+@item Extensible language/compiler framework.
+@end itemize")
+    (license license:gpl2+)))
diff --git a/gnu/packages/c.scm b/gnu/packages/c.scm
index 429ff94070..36a9366554 100644
--- a/gnu/packages/c.scm
+++ b/gnu/packages/c.scm
@@ -546,7 +546,7 @@ portability.")
 (define-public aws-c-common
   (package
     (name "aws-c-common")
-    (version "0.5.2")
+    (version "0.5.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -555,7 +555,7 @@ portability.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0rd2qzaa9mmn5f6f2bl1wgv54f17pqx3vwyy9f8ylh59qfnilpmg"))))
+                "03fcvh3l1l6fkzkcbaprk10qmy8l77zhmh60h1px2ik09sqd9p72"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags
diff --git a/gnu/packages/calendar.scm b/gnu/packages/calendar.scm
index 4e1e4f05b6..d473900ac5 100644
--- a/gnu/packages/calendar.scm
+++ b/gnu/packages/calendar.scm
@@ -156,7 +156,7 @@ the <tz.h> library for handling time zones and leap seconds.")
     (native-inputs
      `(("docbook-xml" ,docbook-xml-4.3)
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
diff --git a/gnu/packages/ccache.scm b/gnu/packages/ccache.scm
index c5b9790f27..112f613c88 100644
--- a/gnu/packages/ccache.scm
+++ b/gnu/packages/ccache.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2014, 2015, 2016, 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,7 +23,7 @@
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:select (gpl3+))
   #:use-module (guix download)
-  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system cmake)
   #:use-module (gnu packages)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages compression))
@@ -30,25 +31,32 @@
 (define-public ccache
   (package
     (name "ccache")
-    (version "3.7.12")
+    (version "4.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/ccache/ccache/releases/download/v"
                            version "/ccache-" version ".tar.xz"))
        (sha256
-        (base32 "005liq8csgxdn7m9hj2ah07hishww855p8sc96y1hrnwc21lwbx0"))))
-    (build-system gnu-build-system)
+        (base32 "0kx9ggbbm899zwyyxvm4dgzn1b95zi1niz0l734pi5y3i0cb251g"))))
+    (build-system cmake-build-system)
     (native-inputs `(("perl" ,perl)     ; for test/run
                      ("which" ,(@ (gnu packages base) which))))
-    (inputs `(("zlib" ,zlib)))
+    (inputs `(("zlib" ,zlib)
+              ("zstd" ,zstd "lib")))
     (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (add-before 'check 'setup-tests
-                    (lambda _
-                      (substitute* '("unittest/test_hashutil.c" "test/suites/base.bash")
-                        (("#!/bin/sh") (string-append "#!" (which "sh"))))
-                      #t)))))
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'setup-tests
+           (lambda _
+             (substitute* '("unittest/test_hashutil.cpp" "test/suites/base.bash")
+               (("#!/bin/sh") (string-append "#!" (which "sh"))))
+             #t))
+         ;; tests require a writable HOME
+         (add-before 'check 'set-home
+           (lambda _
+             (setenv "HOME" (getenv "TMPDIR"))
+	     #t)))))
     (home-page "https://ccache.dev/")
     (synopsis "Compiler cache")
     (description
diff --git a/gnu/packages/certs.scm b/gnu/packages/certs.scm
index 5bdf3b5a4a..fae0d5fc54 100644
--- a/gnu/packages/certs.scm
+++ b/gnu/packages/certs.scm
@@ -111,7 +111,7 @@ taken from the NSS package and thus ultimately from the Mozilla project.")
 (define-public le-certs
   (package
     (name "le-certs")
-    (version "0")
+    (version "1")
     (source #f)
     (build-system trivial-build-system)
     (arguments
@@ -119,9 +119,12 @@ taken from the NSS package and thus ultimately from the Mozilla project.")
        #:builder
        (begin
          (use-modules (guix build utils))
-         (let ((root (assoc-ref %build-inputs "isrgrootx1.pem"))
-               (intermediate (assoc-ref %build-inputs "letsencryptauthorityx3.pem"))
-               (backup (assoc-ref %build-inputs "letsencryptauthorityx4.pem"))
+         (let ((root-rsa (assoc-ref %build-inputs "isrgrootx1.pem"))
+               (root-ecdsa (assoc-ref %build-inputs "isrgrootx2.pem"))
+               (intermediate-rsa (assoc-ref %build-inputs "letsencryptauthorityr3.pem"))
+               (intermediate-ecdsa (assoc-ref %build-inputs "letsencryptauthoritye1.pem"))
+               (backup-rsa (assoc-ref %build-inputs "letsencryptauthorityr4.pem"))
+               (backup-ecdsa (assoc-ref %build-inputs "letsencryptauthoritye2.pem"))
                (out (string-append (assoc-ref %outputs "out") "/etc/ssl/certs"))
                (openssl (assoc-ref %build-inputs "openssl"))
                (perl (assoc-ref %build-inputs "perl")))
@@ -130,7 +133,9 @@ taken from the NSS package and thus ultimately from the Mozilla project.")
              (lambda (cert)
                (copy-file cert (string-append out "/"
                                               (strip-store-file-name cert))))
-             (list root intermediate backup))
+             (list root-rsa root-ecdsa
+                   intermediate-rsa intermediate-ecdsa
+                   backup-rsa backup-ecdsa))
 
            ;; Create hash symlinks suitable for OpenSSL ('SSL_CERT_DIR' and
            ;; similar.)
@@ -150,26 +155,55 @@ taken from the NSS package and thus ultimately from the Mozilla project.")
            (sha256
             (base32
              "1la36n2f31j9s03v847ig6ny9lr875q3g7smnq33dcsmf2i5gd92"))))
-       ;; "Let’s Encrypt Authority X3", the active Let's Encrypt intermediate
-       ;; certificate.
-       ("letsencryptauthorityx3.pem"
+      ; Upcoming ECDSA Let's Encrypt root certificate, "ISRG Root X2"
+      ; Let's Encrypt describes it as "Active, limited availability"
+      ("isrgrootx2.pem"
         ,(origin
            (method url-fetch)
-           (uri "https://letsencrypt.org/certs/letsencryptauthorityx3.pem")
+           (uri "https://letsencrypt.org/certs/isrg-root-x2.pem")
            (sha256
             (base32
-             "100lxxvqv4fj563bm03zzk5r36hq5jx9nnrajzs38g825c5k0cg2"))))
-       ;; "Let’s Encrypt Authority X4", the backup Let's Encrypt intermediate
-       ;; certificate.  This will be used for disaster recovery and will only be
-       ;; used should Let's Encrypt lose the ability to issue with "Let’s
-       ;; Encrypt Authority X3".
-       ("letsencryptauthorityx4.pem"
-        ,(origin
-           (method url-fetch)
-           (uri "https://letsencrypt.org/certs/letsencryptauthorityx4.pem")
-           (sha256
-            (base32
-             "0d5256gwf73drq6q6jala28rfzhrgbk5pjfq27vc40ly91pdyh8m"))))))
+             "04xh8912nwkghqydbqvvmslpqbcafgxgjh9qnn0z2vgy24g8hgd1"))))
+      ;; "Let’s Encrypt Authority R3", the active Let's Encrypt intermediate
+      ;; RSA certificate.
+      ("letsencryptauthorityr3.pem"
+       ,(origin
+          (method url-fetch)
+          (uri "https://letsencrypt.org/certs/lets-encrypt-r3.pem")
+          (sha256
+           (base32
+            "0clxry49rx6qd3pgbzknpgzywbg3j96zy0227wwjnwivqj7inzhp"))))
+      ;; "Let’s Encrypt Authority E1", the active Let's Encrypt intermediate
+      ;; ECDSA certificate.
+      ("letsencryptauthoritye1.pem"
+       ,(origin
+          (method url-fetch)
+          (uri "https://letsencrypt.org/certs/lets-encrypt-e1.pem")
+          (sha256
+           (base32
+            "1zwrc6dlk1qig0z23x6x7fib14rrw41ccbf2ds0rw75zccc59xx0"))))
+      ;; "Let’s Encrypt Authority R4", the backup Let's Encrypt intermediate
+      ;; RSA certificate.  This will be used for disaster recovery and will only be
+      ;; used should Let's Encrypt lose the ability to issue with "Let’s
+      ;; Encrypt Authority R3".
+      ("letsencryptauthorityr4.pem"
+       ,(origin
+          (method url-fetch)
+          (uri "https://letsencrypt.org/certs/lets-encrypt-r4.pem")
+          (sha256
+           (base32
+            "09bzxzbwb9x2xxan3p1fyj1pi2p5yks0879gwz5f28y9mzq8vmd8"))))
+      ;; "Let’s Encrypt Authority E2", the backup Let's Encrypt intermediate
+      ;; ECDSA certificate.  This will be used for disaster recovery and will
+      ;; only be used should Let's Encrypt lose the ability to issue with "Let’s
+      ;; Encrypt Authority E1".
+      ("letsencryptauthoritye2.pem"
+       ,(origin
+          (method url-fetch)
+          (uri "https://letsencrypt.org/certs/lets-encrypt-e2.pem")
+          (sha256
+           (base32
+            "1wfmsa29lyi9dkh6xdcamb2rhkp5yl2ppnsgrzcrjl5c7gbqh9ml"))))))
     (home-page "https://letsencrypt.org/certificates/")
     (synopsis "Let's Encrypt root and intermediate certificates")
     (description "This package provides a certificate store containing only the
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 81e583775c..b47d2b58d4 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -24,11 +24,11 @@
 ;;; Copyright © 2017, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017, 2019 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2017 Nikita <nikita@n0.is>
-;;; Copyright © 2015, 2017, 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2017, 2018, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
-;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2019, 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2019 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
@@ -562,7 +562,7 @@ and it supports a very flexible form of test discovery.")
 (define-public doctest
   (package
     (name "doctest")
-    (version "2.4.5")
+    (version "2.4.6")
     (home-page "https://github.com/onqtam/doctest")
     (source (origin
               (method git-fetch)
@@ -570,7 +570,7 @@ and it supports a very flexible form of test discovery.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1pc34dvpgdzx3paqdf0khgs87kvjncx27yn434f5ic33r1lwr9r4"))))
+                "14m3q6d96zg6d99x1152jkly50gdjrn5ylrbhax53pfgfzzc5yqx"))))
     (build-system cmake-build-system)
     (synopsis "C++ test framework")
     (description
@@ -1089,6 +1089,37 @@ supports coverage of subprocesses.")
 (define-public python2-pytest-cov
   (package-with-python2 python-pytest-cov))
 
+(define-public python-pytest-httpserver
+  (package
+    (name "python-pytest-httpserver")
+    (version "1.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "pytest_httpserver" version))
+              (sha256
+               (base32
+                "0vbls0j570l5my83j4jnk5blmnir44i0w511azlh41nl6k8rac5f"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (propagated-inputs
+     `(("python-werkzeug" ,python-werkzeug)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'fix-library-loading
+           (lambda _
+             (setenv "PYTHONPATH" (string-append (getenv "PYTHONPATH") ":."))))
+         (replace 'check
+           (lambda _
+             (invoke "pytest" "tests" "-vv")
+             (invoke "pytest" "tests" "-vv" "--ssl"))))))
+    (home-page "https://github.com/csernazs/pytest-httpserver")
+    (synopsis "HTTP server for pytest")
+    (description "Pytest plugin library to test http clients without
+contacting the real http server.")
+    (license license:expat)))
+
 (define-public python-pytest-runner
   (package
     (name "python-pytest-runner")
@@ -1704,7 +1735,7 @@ C/C++, R, and more, and uploads it to the @code{codecov.io} service.")
 (define-public python-testpath
   (package
     (name "python-testpath")
-    (version "0.2")
+    (version "0.4.4")
     (source
      (origin
        (method git-fetch)
@@ -1714,7 +1745,7 @@ C/C++, R, and more, and uploads it to the @code{codecov.io} service.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0r4iiizjql6ny1ln7ciw7rrbjadz1s9zrf2hl0xkgnh3ypd8936f"))))
+         "1fwv4d3p54xx1x942s104irr35lszvv6jnr4nn1scsfvc0m1qmbk"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f ; this package does not even have a setup.py
@@ -1723,19 +1754,25 @@ C/C++, R, and more, and uploads it to the @code{codecov.io} service.")
                   (srfi srfi-1))
        #:phases
        (modify-phases %standard-phases
-         (delete 'install)
          (replace 'build
+           (lambda _
+             ;; A ZIP archive should be generated, but it fails with "ZIP does
+             ;; not support timestamps before 1980".  Luckily,
+             ;; SOURCE_DATE_EPOCH is respected, which we set to some time in
+             ;; 1980.
+             (setenv "SOURCE_DATE_EPOCH" "315532800")
+             (invoke "flit" "build")))
+         (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((version (last
-                              (string-split (assoc-ref inputs "python") #\-)))
-                    (x.y (string-join (take (string-split version #\.) 2)
-                                        "."))
-                    (dir (string-append
-                          (assoc-ref outputs "out")
-                          "/lib/python" x.y "/site-packages/testpath")))
-               (mkdir-p dir)
-               (copy-recursively "testpath" dir))
-             #t)))))
+             (add-installed-pythonpath inputs outputs)
+             (let ((out (assoc-ref outputs "out")))
+               (for-each (lambda (wheel)
+                           (format #true wheel)
+                           (invoke "python" "-m" "pip" "install"
+                                   wheel (string-append "--prefix=" out)))
+                         (find-files "dist" "\\.whl$"))))))))
+    (native-inputs
+     `(("python-flit" ,python-flit)))
     (home-page "https://github.com/takluyver/testpath")
     (synopsis "Test utilities for code working with files and commands")
     (description
@@ -2687,7 +2724,7 @@ provides a simple way to achieve this.")
     (native-inputs
      `(("vala" ,vala)
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
 
        ;; For tests.
diff --git a/gnu/packages/chez.scm b/gnu/packages/chez.scm
index 11cd04c161..25a4d5f156 100644
--- a/gnu/packages/chez.scm
+++ b/gnu/packages/chez.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2017, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Brendan Tildesley <mail@brendan.scot>
+;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,6 +30,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
+  #:use-module (guix gexp)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages ncurses)
@@ -43,23 +45,27 @@
   #:use-module (srfi srfi-1))
 
 (define nanopass
-  (let ((version "1.9.1"))
+  (let ((version "1.9.2"))
     (origin
       (method git-fetch)
       (uri (git-reference
             (url "https://github.com/nanopass/nanopass-framework-scheme")
             (commit (string-append "v" version))))
-      (sha256 (base32 "1synadgaycca39jfx525975ss9y0lkl516sdrc62wrrllamm8n21"))
+      (sha256 (base32 "16vjsik9rrzbabbhbxbaha51ppi3f9n8rk59pc6zdyffs0vziy4i"))
       (file-name (git-file-name "nanopass" version)))))
 
 (define stex
-  (let ((version "1.2.2"))
+  ;; This commit includes a fix, which we would otherwise want to use as
+  ;; patch.  Let's revert to tagged releases as soon as one becomes available.
+  (let* ((commit "54051494434a197772bf6ca5b4e6cf6be55f39a5")
+         (version "1.2.2")
+         (version (git-version version "1" commit)))
     (origin
       (method git-fetch)
       (uri (git-reference
             (url "https://github.com/dybvig/stex")
-            (commit (string-append "v" version))))
-      (sha256 (base32 "1q5i8pf4cdfjsj6r2k1rih7ljbfggyxdng2p2fvsgarzihpsin2i"))
+            (commit commit)))
+      (sha256 (base32 "01jnvw8qw33gnpzwrakwhsr05h6b609lm180jnspcrb7lds2p23d"))
       (file-name (git-file-name "stex" version)))))
 
 (define-public chez-scheme
@@ -74,21 +80,41 @@
              (commit (string-append "v" version))))
        (sha256
         (base32 "0prgn2z9l888j93ydxaf04ph424g0fi3a8w7f8m0b2r7fr1v7388"))
-       (file-name (git-file-name name version))))
+       (file-name (git-file-name name version))
+       (patches
+        (search-patches
+         ;; backported from upstream: remove on next release
+         "chez-scheme-build-util-paths-backport.patch"))
+       (snippet
+        ;; remove bundled libraries
+        (with-imported-modules '((guix build utils))
+          #~(begin
+              (use-modules (guix build utils))
+              (for-each (lambda (dir)
+                          (when (directory-exists? dir)
+                            (delete-file-recursively dir)))
+                        '("stex"
+                          "nanopass"
+                          "lz4"
+                          "zlib")))))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)
-       ("libuuid" ,util-linux "lib")
-       ("libx11" ,libx11)
-       ("lz4" ,lz4)
-       ("lz4:static" ,lz4 "static")
-       ("xorg-rgb" ,xorg-rgb)
-       ("nanopass" ,nanopass)
+     `(("libuuid" ,util-linux "lib")
        ("zlib" ,zlib)
        ("zlib:static" ,zlib "static")
-       ("stex" ,stex)))
+       ("lz4" ,lz4)
+       ("lz4:static" ,lz4 "static")
+       ;; for expeditor:
+       ("ncurses" ,ncurses)
+       ;; for X11 clipboard support in expeditor:
+       ;; https://github.com/cisco/ChezScheme/issues/9#issuecomment-222057232
+       ("libx11" ,libx11)))
     (native-inputs
-     `(("texlive" ,(texlive-updmap.cfg (list texlive-latex-oberdiek
+     `(("nanopass" ,nanopass) ; source only
+       ;; for docs
+       ("stex" ,stex)
+       ("xorg-rgb" ,xorg-rgb)
+       ("texlive" ,(texlive-union (list texlive-latex-oberdiek
                                         texlive-generic-epsf)))
        ("ghostscript" ,ghostscript)
        ("netpbm" ,netpbm)))
@@ -98,96 +124,54 @@
             (files (list (string-append "lib/csv" version "-site"))))))
     (outputs '("out" "doc"))
     (arguments
-     `(#:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (ice-9 match))
+     `(#:modules
+       ((guix build gnu-build-system)
+        (guix build utils)
+        (ice-9 ftw)
+        (ice-9 match))
        #:test-target "test"
        #:configure-flags
-       (list ,(match (or (%current-target-system) (%current-system))
-                ("x86_64-linux" '(list "--machine=ta6le"))
-                ("i686-linux" '(list "--machine=ti3le"))
-                ;; Let autodetection have its attempt on other architectures.
-                (_
-                 '())))
+       '("--threads") ;; TODO when we fix armhf, it doesn't support --threads
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-processor-detection
-           (lambda _ (substitute* "configure"
-                       (("uname -a") "uname -m"))
-                   #t))
-         ;; Adapt the custom 'configure' script.
+         ;; put these where configure expects them to be
+         (add-after 'unpack 'unpack-nanopass+stex
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (for-each (lambda (dep)
+                         (define src
+                           (assoc-ref (or native-inputs inputs) dep))
+                         (copy-recursively src dep
+                                           #:keep-mtime? #t))
+                       '("nanopass" "stex"))
+               #t))
+         ;; NOTE: the custom Chez 'configure' script doesn't allow
+         ;; unrecognized flags, such as those automatically added
+         ;; by `gnu-build-system`.
          (replace 'configure
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (nanopass (assoc-ref inputs "nanopass"))
-                   (stex (assoc-ref inputs "stex"))
-                   (lz4-static (assoc-ref inputs "lz4:static"))
-                   (zlib-static (assoc-ref inputs "zlib:static"))
-                   (unpack (assoc-ref %standard-phases 'unpack))
-                   (patch-source-shebangs
-                    (assoc-ref %standard-phases 'patch-source-shebangs)))
-               (map (match-lambda
-                      ((src orig-name new-name)
-                       (with-directory-excursion "."
-                         (apply unpack (list #:source src))
-                         (apply patch-source-shebangs (list #:source src)))
-                       (delete-file-recursively new-name)
-                       (invoke "mv" orig-name new-name)))
-                    `((,nanopass "source" "nanopass")
-                      (,stex "source" "stex")))
-               ;; The configure step wants to CURL all submodules as it
-               ;; detects a checkout without submodules. Disable curling,
-               ;; and manually patch the needed modules for compilation.
-               (substitute* "configure"
-                 (("! -f '") "-d '")) ; working around CURL.
-               (substitute* (find-files "mats" "Mf-.*")
-                 (("^[[:space:]]+(cc ) *") "\tgcc "))
-               (substitute*
-                   (find-files "." (string-append
-                                    "("
-                                    "Mf-[a-zA-Z0-9.]+"
-                                    "|Makefile[a-zA-Z0-9.]*"
-                                    "|checkin"
-                                    "|stex\\.stex"
-                                    "|newrelease"
-                                    "|workarea"
-                                    "|unix\\.ms"
-                                    "|^6\\.ms"
-                                    ;;"|[a-zA-Z0-9.]+\\.ms" ; guile can't read
-                                    ")"))
-                 (("/bin/rm") (which "rm"))
-                 (("/bin/ln") (which "ln"))
-                 (("/bin/cp") (which "cp"))
-                 (("/bin/echo") (which "echo")))
-               (substitute* "makefiles/installsh"
-                 (("/bin/true") (which "true")))
-               (substitute* "stex/Makefile"
-                 (("PREFIX=/usr") (string-append "PREFIX=" out)))
-               (invoke "./configure" "--threads"
-                       (string-append "ZLIB=" zlib-static "/lib/libz.a")
-                       (string-append "LZ4=" lz4-static "/lib/liblz4.a")
-                       (string-append "--installprefix=" out)))))
-         ;; Installation of the documentation requires a running "chez".
-         (add-after 'install 'install-doc
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((doc (string-append (assoc-ref outputs "doc")
-                                       "/share/doc/" ,name "-" ,version)))
-               (invoke "make" "docs")
-               (with-directory-excursion "csug"
-                 (substitute* "Makefile"
-                   ;; The ‘installdir=’ can't be overruled on the command line.
-                   (("/tmp/csug9") doc)
-                   ;; $m is the ‘machine type’, e.g. ‘ta6le’ on x86_64, but is
-                   ;; set incorrectly for some reason, e.g. to ‘a6le’ on x86_64.
-                   ;; Avoid the whole mess by running the (machine-independent)
-                   ;; ‘installsh’ script at its original location.
-                   (("\\$m/installsh") "makefiles/installsh"))
-                 (invoke "make" "install")
-                 (install-file "csug.pdf" doc))
-               (with-directory-excursion "release_notes"
-                 (install-file "release_notes.pdf" doc))
+           (lambda* (#:key inputs outputs
+                           (configure-flags '())
+                           #:allow-other-keys)
+             (let* ((zlib-static (assoc-ref inputs "zlib:static"))
+                    (lz4-static (assoc-ref inputs "lz4:static"))
+                    (out (assoc-ref outputs "out"))
+                    ;; add flags which are always required:
+                    (flags (cons*
+                            (string-append "--installprefix=" out)
+                            (string-append "ZLIB=" zlib-static "/lib/libz.a")
+                            (string-append "LZ4=" lz4-static "/lib/liblz4.a")
+                            ;; Guix will do compress man pages,
+                            ;; and letting Chez try causes an error
+                            "--nogzip-man-pages"
+                            configure-flags)))
+               (format #t "configure flags: ~s~%" flags)
+               ;; Some makefiles (for tests) don't seem to propagate CC
+               ;; properly, so we take it out of their hands:
+               (setenv "CC" ,(cc-for-target))
+               (apply invoke
+                      "./configure"
+                      flags)
                #t)))
-         ;; The binary file name is called "scheme" as the one from MIT/GNU
+         ;; The binary file name is called "scheme" as is the one from MIT/GNU
          ;; Scheme.  We add a symlink to use in case both are installed.
          (add-after 'install 'install-symlink
            (lambda* (#:key outputs #:allow-other-keys)
@@ -202,16 +186,75 @@
                                                    "/" name ".boot")))
                     (find-files lib "scheme.boot"))
                #t)))
-         (add-before 'reset-gzip-timestamps 'make-manpages-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (map (lambda (file)
-                    (make-file-writable file))
-                  (find-files (string-append (assoc-ref outputs "out")
-                                             "/share/man")
-                              ".*\\.gz$"))
-             #t)))))
-    ;; According to the documentation MIPS is not supported.
-    ;; Cross-compiling for the Raspberry Pi is supported, but not native ARM.
+         ;; Building explicitly lets us avoid using substitute*
+         ;; to re-write makefiles.
+         (add-after 'install-symlink 'prepare-stex
+           (lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
+             (let* ((stex+version
+                     (strip-store-file-name
+                      (assoc-ref (or native-inputs inputs) "stex")))
+                    ;; Eventually we want to install stex as a real
+                    ;; package so it's reusable. For now:
+                    (stex-output "/tmp")
+                    (doc-dir (string-append stex-output
+                                            "/share/doc/"
+                                            stex+version)))
+               (with-directory-excursion "stex"
+                 (invoke "make"
+                         "install"
+                         (string-append "LIB="
+                                        stex-output
+                                        "/lib/"
+                                        stex+version)
+                         (string-append "Scheme="
+                                        (assoc-ref outputs "out")
+                                        "/bin/scheme"))
+                 (for-each (lambda (pth)
+                             (install-file pth doc-dir))
+                           '("ReadMe" ; includes the license
+                             "doc/stex.html"
+                             "doc/stex.css"
+                             "doc/stex.pdf"))
+                 #t))))
+         ;; Building the documentation requires stex and a running scheme.
+         ;; FIXME: this is probably wrong for cross-compilation
+         (add-after 'prepare-stex 'install-doc
+           (lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
+             (let* ((chez+version (strip-store-file-name
+                                   (assoc-ref outputs "out")))
+                    (stex+version
+                     (strip-store-file-name
+                      (assoc-ref (or native-inputs inputs) "stex")))
+                    (scheme (string-append (assoc-ref outputs "out")
+                                           "/bin/scheme"))
+                    ;; see note on stex-output in phase build-stex, above:
+                    (stexlib (string-append "/tmp"
+                                            "/lib/"
+                                            stex+version))
+                    (doc-dir (string-append (assoc-ref outputs "doc")
+                                            "/share/doc/"
+                                            chez+version)))
+               (define* (stex-make #:optional (suffix ""))
+                 (invoke "make"
+                         "install"
+                         (string-append "Scheme=" scheme)
+                         (string-append "STEXLIB=" stexlib)
+                         (string-append "installdir=" doc-dir suffix)))
+               (with-directory-excursion "csug"
+                 (stex-make "/csug"))
+               (with-directory-excursion "release_notes"
+                 (stex-make "/release_notes"))
+               (with-directory-excursion doc-dir
+                 (symlink "release_notes/release_notes.pdf"
+                          "release_notes.pdf")
+                 (symlink "csug/csug9_5.pdf"
+                          "csug.pdf"))
+               #t))))))
+    ;; Chez Scheme does not have a  MIPS backend.
+    ;; FIXME: Debian backports patches to get armhf working.
+    ;; We should too. It is the Chez machine type arm32le
+    ;; (no threaded version upstream yet, though there is in
+    ;; Racket's fork), more specifically (per the release notes) ARMv6.
     (supported-systems (fold delete %supported-systems
                              '("mips64el-linux" "armhf-linux")))
     (home-page "https://cisco.github.io/ChezScheme/")
diff --git a/gnu/packages/chromium.scm b/gnu/packages/chromium.scm
index de7c887061..835e9e2050 100644
--- a/gnu/packages/chromium.scm
+++ b/gnu/packages/chromium.scm
@@ -21,8 +21,6 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix gexp)
-  #:use-module (guix store)
-  #:use-module (guix monads)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
@@ -305,7 +303,7 @@
                   (string-append "ungoogled-chromium-" category "-" name))))
     (sha256 (base32 hash))))
 
-(define %ungoogled-revision "89.0.4389.90-1")
+(define %ungoogled-revision "89.0.4389.114-1")
 (define %debian-revision "debian/84.0.4147.105-1")
 
 (define %debian-patches
@@ -325,7 +323,7 @@
                                   %ungoogled-revision)))
     (sha256
      (base32
-      "0pr756d1b4wc67d61b21yszi7mx1hsjy14i44j0kvcwm05pgnf79"))))
+      "0cr2i51gxhgl55c8f9w0ra3m5q2dk03sf7p2qn4bqq1l1l72hw6s"))))
 
 (define %guix-patches
   (list (local-file
@@ -466,7 +464,7 @@
                                   ".tar.xz"))
               (sha256
                (base32
-                "16i7bgk2jbcqs2p28nk5mlf0k6wah594pcsfm8b154nxbyf0iihi"))
+                "007df9p78bbmk3iyfi8qn57mmn68qqrdhx6z8n2hl8ksd7lspw7j"))
               (modules '((guix build utils)))
               (snippet (force ungoogled-chromium-snippet))))
     (build-system gnu-build-system)
diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm
index e0c7238f2b..8d93513332 100644
--- a/gnu/packages/ci.scm
+++ b/gnu/packages/ci.scm
@@ -25,49 +25,38 @@
   #:use-module ((guix licenses) #:prefix l:)
   #:use-module (gnu packages)
   #:use-module (guix packages)
+  #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix download)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages check)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages guile-xyz)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages lisp-xyz)
   #:use-module (gnu packages mail)
   #:use-module (gnu packages package-management)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-compression)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages serialization)
+  #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
+  #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu))
 
-(define-public guile-mastodon-dev
-  (let ((commit "88115d85221876b1baea4accb7c76995da32f479")
-        (revision "1"))
-    (package
-      (inherit guile-mastodon)
-      (name "guile-mastodon")
-      (version (git-version "0.0.1" revision commit))
-      (home-page "https://framagit.org/mothacehe/guile-mastodon.git")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url home-page)
-                      (commit commit)))
-                (sha256
-                 (base32
-                  "04dgxliz9bmhn0f7h1n0dj0r5h0fzhg80nxl1rpbxh4zs1yw9qvj"))
-                (file-name (string-append name "-" version "-checkout")))))))
-
 (define-public cuirass
-  (let ((commit "6f4a203a0bb2d441d091d561c1735fbe2d170cf7")
-        (revision "2"))
+  (let ((commit "922cc66089035d4dbc277df06366e41a0806bffb")
+        (revision "11"))
     (package
       (name "cuirass")
       (version (git-version "1.0.0" revision commit))
@@ -80,17 +69,29 @@
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "120cnnjy4j2dinfmas1ddmqzzc7ikj9c76sl4li6g6dn8g7s8f69"))))
+           "1kanag19dvaqpij7j6gznsfzajc5iir9qj6vq016bc4al5x6ggj4"))))
       (build-system gnu-build-system)
       (arguments
-       '(#:modules ((guix build utils)
+       `(#:modules ((guix build utils)
                     (guix build gnu-build-system)
                     (ice-9 rdelim)
                     (ice-9 popen))
          #:configure-flags '("--localstatedir=/var") ;for /var/log/cuirass
+         ;; XXX: HTTP tests fail on aarch64 due to Fibers errors, disable them
+         ;; on that architecture for now.
+         #:tests? ,(let ((s (or (%current-target-system)
+                                (%current-system))))
+                     (not (string-prefix? "aarch64" s)))
          #:parallel-tests? #f
          #:phases
          (modify-phases %standard-phases
+           (add-before 'bootstrap 'fix-version-gen
+             (lambda _
+              (patch-shebang "build-aux/git-version-gen")
+
+              (call-with-output-file ".tarball-version"
+                (lambda (port)
+                  (display ,version port)))))
            (add-before 'check 'set-PATH-for-tests
              (lambda* (#:key inputs #:allow-other-keys)
                (let ((pg (assoc-ref inputs "ephemeralpg"))
@@ -158,7 +159,7 @@
          ("guile-squee" ,guile-squee)
          ("guile-git" ,guile-git)
          ("guile-zlib" ,guile-zlib)
-         ("guile-mastodon" ,guile-mastodon-dev)
+         ("guile-mastodon" ,guile-mastodon)
          ("gnutls" ,gnutls)
          ("mailutils" ,mailutils)
          ;; FIXME: this is propagated by "guile-git", but it needs to be among
@@ -186,5 +187,120 @@
       (description
        "Cuirass is a continuous integration tool using GNU Guix.  It is
 intended as a replacement for Hydra.")
-      (home-page "https://www.gnu.org/software/guix/")
+      (home-page "https://guix.gnu.org/cuirass/")
       (license l:gpl3+))))
+
+(define-public laminar
+  (package
+    (name "laminar")
+    (version "1.0")
+    (source
+     (origin (method url-fetch)
+             (uri (string-append "https://github.com/ohwgiles/laminar/archive/"
+                                 version
+                                 ".tar.gz"))
+             (file-name (string-append name "-" version ".tar.gz"))
+             (sha256
+              (base32
+               "11m6h3rdmj2rsmsryy7r40gqccj4gg1cnqwy6blscs87gx4s423g"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f                      ; TODO Can't build tests
+       #:configure-flags
+       (list "-DCMAKE_CXX_STANDARD=17"
+             ;; "-DBUILD_TESTS=true" TODO: objcopy: js/stPskyUS: can't add
+             ;; section '.note.GNU-stack': file format not recognized
+             (string-append "-DLAMINAR_VERSION=" ,version))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-CMakeLists.txt
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("file\\(DOWNLOAD.*\n$")
+                "# file download removed by Guix --")
+               (("install\\(FILES etc/laminar.service DESTINATION \\$\\{SYSTEMD\\_UNITDIR\\}\\)")
+                "")
+               (("install\\(FILES \\$\\{CMAKE\\_CURRENT\\_BINARY\\_DIR\\}\\/laminar\\.service DESTINATION \\$\\{SYSTEMD\\_UNITDIR\\}\\)")
+                "")
+               (("install\\(FILES etc/laminar\\.conf DESTINATION \\/etc\\)") "")
+               (("\\/usr\\/") ""))
+             #t))
+         (add-after 'configure 'copy-in-javascript-and-css
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (use-modules (ice-9 popen))
+
+             (mkdir-p "../build/js")
+             (for-each (lambda (name)
+                         (let* ((file
+                                 (assoc-ref inputs (string-append name ".js")))
+                                (port
+                                 (open-pipe* OPEN_READ "uglify-js" file))
+                                (destination
+                                 (string-append
+                                  "../build/js/" name ".min.js")))
+
+                           (call-with-output-file destination
+                             (lambda (output-port)
+                               (dump-port port output-port)))
+
+                           (let ((exit (close-pipe port)))
+                             (unless (zero? exit)
+                               (error "uglify-js failed" exit)))))
+
+                       '("vue"
+                         "vue-router"
+                         "Chart"))
+
+             ;; ansi_up.js isn't minified
+             (copy-file (assoc-ref inputs "ansi_up.js")
+                        "../build/js/ansi_up.js")
+
+             #t)))))
+    (inputs
+     `(("capnproto" ,capnproto)
+       ("rapidjson" ,rapidjson)
+       ("sqlite" ,sqlite)
+       ("boost" ,boost)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("googletest" ,googletest)
+       ("uglify-js" ,uglify-js)
+
+       ("vue.js"
+        ,(origin (method url-fetch)
+                 (uri (string-append "https://raw.githubusercontent.com/"
+                                     "vuejs/vue/v2.6.12/dist/vue.js"))
+                 (sha256
+                  (base32
+                   "1mq2dn6yqbmzar77xf4x2bvvanf9xc9nwfq06sksl5zmr300m7qm"))))
+       ("vue-router.js"
+        ,(origin (method url-fetch)
+                 (uri (string-append "https://raw.githubusercontent.com/"
+                                     "vuejs/vue-router/v3.4.8/dist/vue-router.js"))
+                 (sha256
+                  (base32
+                   "1hkrbgzhpnrsb4zdafslqagy1vkac6bkdj7kh49js2lhkp9z4nj5"))))
+       ("ansi_up.js"
+        ,(origin (method url-fetch)
+                 (uri (string-append "https://raw.githubusercontent.com/"
+                                     "drudru/ansi_up/v1.3.0/ansi_up.js"))
+                 (sha256
+                  (base32
+                   "1993dywxqi2ylnxybwk7m0s0bg2bq7kfllpyr0s8ck6chd0p8i6r"))))
+       ("Chart.js"
+        ,(origin (method url-fetch)
+                 (uri (string-append "https://github.com/chartjs/Chart.js/"
+                                     "releases/download/v2.7.2/Chart.js"))
+                 (sha256
+                  (base32
+                   "05m3gk6hqjx92j20drnk7q075qpjraywqaf25lnglmsgsgpiqsr7"))))))
+    (synopsis "Lightweight continuous integration service")
+    (description
+     "Laminar is a lightweight and modular continuous integration service.  It
+doesn't have a configuration web UI instead uses version-controllable
+configuration files and scripts.
+
+Laminar encourages the use of existing tools such as bash and cron instead of
+reinventing them.")
+    (home-page "https://laminar.ohwg.net/")
+    (license l:gpl3+)))
diff --git a/gnu/packages/code.scm b/gnu/packages/code.scm
index 4e30dacdf4..a79d8b4a2b 100644
--- a/gnu/packages/code.scm
+++ b/gnu/packages/code.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2015, 2018, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015, 2018, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2017, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
@@ -180,7 +180,7 @@ around in a large, deeply nested project.")
     (version "2.26")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://www.dwheeler.com/sloccount/sloccount-"
+              (uri (string-append "https://dwheeler.com/sloccount/sloccount-"
                                   version ".tar.gz"))
               (sha256
                (base32
@@ -221,7 +221,7 @@ around in a large, deeply nested project.")
         #:make-flags (list (string-append "PREFIX="
                                           (assoc-ref %outputs "out")))))
     (inputs `(("perl" ,perl)))
-    (home-page "http://www.dwheeler.com/sloccount/")
+    (home-page "https://dwheeler.com/sloccount/")
     (synopsis "Count physical source lines of code (SLOC)")
     (description
      "SLOCCount is a set of the programs for counting source lines of
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index e28b78a3fa..174aaf71e4 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -7,7 +7,7 @@
 ;;; Copyright © 2015, 2016, 2017, 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2017, 2018 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2015 Jeff Mickey <j@codemac.net>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -2072,7 +2072,8 @@ decompression is a little bit slower.")
                                  version "/upx-" version "-src.tar.xz"))
              (sha256
               (base32
-               "051pk5jk8fcfg5mpgzj43z5p4cn7jy5jbyshyn78dwjqr7slsxs7"))))
+               "051pk5jk8fcfg5mpgzj43z5p4cn7jy5jbyshyn78dwjqr7slsxs7"))
+             (patches (search-patches "upx-CVE-2021-20285.patch"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("perl" ,perl)))
diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm
index 2233d2e993..58345e7c33 100644
--- a/gnu/packages/cpp.scm
+++ b/gnu/packages/cpp.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Ethan R. Jones <doubleplusgood23@gmail.com>
-;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
 ;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2019, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
@@ -17,6 +17,8 @@
 ;;; Copyright © 2020, 2021 Greg Hogan <code@greghogan.com>
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Milkey Mouse <milkeymouse@meme.institute>
+;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
+
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,6 +39,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix utils)
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
@@ -45,6 +48,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages c)
   #:use-module (gnu packages check)
   #:use-module (gnu packages code)
@@ -59,12 +63,14 @@
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages logging)
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
   #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages tls)
-  #:use-module (gnu packages web))
+  #:use-module (gnu packages web)
+  #:use-module (gnu packages xml))
 
 (define-public range-v3
   (package
@@ -267,7 +273,7 @@ combination of these streams.")
 (define-public xsimd
   (package
     (name "xsimd")
-    (version "7.4.9")
+    (version "7.4.10")
     (source
      (origin
        (method git-fetch)
@@ -275,7 +281,7 @@ combination of these streams.")
              (url "https://github.com/QuantStack/xsimd")
              (commit version)))
        (sha256
-        (base32 "11by8gbshm4vv6flqp0ihff8c6nmbaqq7ms93b38rrq68bigcply"))
+        (base32 "097yvxrxdldi5s5m4nsxv8f4gwv9xj42mqig98a1z3hkjj1j2gn5"))
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
@@ -482,7 +488,7 @@ tools (containers, algorithms) used by other QuantStack packages.")
 (define-public ccls
   (package
     (name "ccls")
-    (version "0.20201025")
+    (version "0.20201219")
     (source
      (origin
        (method git-fetch)
@@ -490,8 +496,7 @@ tools (containers, algorithms) used by other QuantStack packages.")
              (url "https://github.com/MaskRay/ccls")
              (commit version)))
        (sha256
-        (base32
-         "13v00q1bz8g0ckw1sv0zyicbc44irc00vhwxdv3vvwlvylm7s21p"))
+        (base32 "0nkg92rgb1x6scpiwdamfrd1ag87j7ajxyn5qi861r916m5mh9m8"))
        (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
@@ -1015,3 +1020,194 @@ Linear Congruential Generator (LCG) with a permutation function to increase
 output randomness while retaining speed, simplicity, and conciseness.")
       (home-page "https://www.pcg-random.org")
       (license (list license:expat license:asl2.0))))) ; dual licensed
+
+(define-public libcutl
+  (package
+    (name "libcutl")
+    (version "1.10.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://www.codesynthesis.com/download/libcutl/"
+                    (version-major+minor version)
+                    "/libcutl-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "070j2x02m4gm1fn7gnymrkbdxflgzxwl7m96aryv8wp3f3366l8j"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Remove bundled sources.
+                  (with-directory-excursion "cutl/details"
+                    (for-each delete-file-recursively
+                              ;; FIXME: Boost_RegEx isn't being detected.
+                              (list
+                               ;;"boost"
+                               "expat")))))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags (list "--disable-static"
+                               ;;"--with-external-boost"
+                               "--with-external-expat")))
+    (inputs
+     `(;;("boost ,boost)
+       ("expat" ,expat)))
+    (home-page "https://www.codesynthesis.com/projects/libcutl/")
+    (synopsis "C++ utility library with generic and independent components")
+    (description "libcutl is a C++ utility library.  It contains a collection
+of generic and independent components such as meta-programming tests, smart
+pointers, containers, compiler building blocks, etc.")
+    (license (list license:expat        ;everything except...
+                   license:boost1.0)))) ;...the files under cutl/details/boost
+
+(define-public libxsd-frontend
+  (package
+    (name "libxsd-frontend")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.codesynthesis.com/download/"
+                           "libxsd-frontend/" (version-major+minor version)
+                           "/libxsd-frontend-" version ".tar.bz2"))
+       (sha256
+        (base32 "1nmzchsvwvn66jpmcx18anzyl1a3l309x1ld4zllrg37ijc31fim"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:test-target "test"
+       #:imported-modules ((guix build copy-build-system)
+                           ,@%gnu-build-system-modules)
+       #:modules (((guix build copy-build-system) #:prefix copy:)
+                  (guix build gnu-build-system)
+                  (guix build utils))
+       #:make-flags (list (string-append "--include-dir="
+                                         (assoc-ref %build-inputs "build")
+                                         "/include/"))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'install
+           (lambda args
+             (apply (assoc-ref copy:%standard-phases 'install)
+                    #:install-plan
+                    '(("xsd-frontend" "include/xsd-frontend"
+                       #:include-regexp ("\\.?xx$"))
+                      ("xsd-frontend" "lib"
+                       #:include-regexp ("\\.so$")))
+                    args))))))
+    (native-inputs
+     `(("build" ,build)))
+    (inputs
+     `(("libcutl" ,libcutl)
+       ("libxerces-c" ,xerces-c)))
+    (synopsis "XSD Front-end")
+    (description "@code{libxsd-frontend} is a compiler frontend for the W3C
+XML Schema definition language.  It includes a parser, semantic graph types
+and a traversal mechanism.")
+    (home-page "https://www.codesynthesis.com/projects/libxsd-frontend/")
+    (license license:gpl2+)))
+
+(define-public cli
+  (package
+    (name "cli")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.codesynthesis.com/download/"
+                           "cli/" (version-major+minor version)
+                           "/cli-" version ".tar.bz2"))
+       (sha256
+        (base32 "0bg0nsai2q4h3mldpnj0jz4iy4svs0bcfvmq0v0c9cdyknny606g"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:test-target "test"
+       #:make-flags (list (string-append "--include-dir="
+                                         (assoc-ref %build-inputs "build")
+                                         "/include")
+                          (string-append "install_prefix="
+                                         (assoc-ref %outputs "out")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch
+           (lambda _
+             (substitute* (find-files "." "\\.make$")
+               (("build-0\\.3")
+                (string-append (assoc-ref %build-inputs "build")
+                               "/include/build-0.3")))
+             ;; Add the namespace prefix, to avoid errors such as "error:
+             ;; ‘iterate_and_dispatch’ was not declared in this scope".
+             (substitute* (find-files "." "\\.?xx$")
+               (("add \\(typeid \\(type\\), \\*this\\);" all)
+                (string-append "traverser_map<B>::" all))
+               (("iterate_and_dispatch \\(s\\.names_begin.*;" all)
+                (string-append "edge_dispatcher::" all)))))
+         (delete 'configure))))
+    (native-inputs
+     `(("build" ,build)))
+    (inputs
+     `(("libcutl" ,libcutl)))
+    (synopsis "C++ Command Line Interface (CLI) definition language")
+    (description "@code{cli} is a domain-specific language (DSL) for defining
+command line interfaces of C++ programs.  It allows you to describe the
+options that your program supports, their types, default values, and
+documentation.")
+    (home-page "https://codesynthesis.com/projects/cli/")
+    (license license:expat)))
+
+(define-public xsd
+  (package
+    (name "xsd")
+    (version "4.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.codesynthesis.com/download/"
+                           "xsd/" (version-major+minor version)
+                           "/xsd-" version ".tar.bz2"))
+       (sha256
+        (base32 "1hi9ppxd34np8ydv1h0vgc2qpdmgcd1cdzgk30aidv670xjg91fx"))))
+    (build-system gnu-build-system)
+    (outputs '("out" "doc"))            ;3.8 MiB of doc and examples
+    (arguments
+     `(#:test-target "test"
+       #:make-flags (list (string-append "--include-dir="
+                                         (assoc-ref %build-inputs "build")
+                                         "/include/")
+                          (string-append "install_prefix="
+                                         (assoc-ref %outputs "out")))
+       #:phases (modify-phases %standard-phases
+                  (add-after 'install 'move-doc
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out (assoc-ref outputs "out"))
+                            (doc (assoc-ref outputs "doc")))
+                        (mkdir-p (string-append doc "/share/doc"))
+                        (rename-file (string-append out "/share/doc/xsd")
+                                     (string-append doc "/share/doc/xsd-"
+                                                    ,version)))))
+                  (delete 'configure))))
+    (native-inputs
+     `(("build" ,build)
+       ("cli" ,cli)))
+    (inputs
+     `(("libcutl" ,libcutl)
+       ("libnsl" ,libnsl)
+       ("libxsd-frontend" ,libxsd-frontend)))
+    (propagated-inputs
+     ;; The code XSD generates requires the following library at run time;
+     ;; propagate it for convenience.
+     `(("xerces-c" ,xerces-c)))
+    (synopsis "XML Data Binding for C++")
+    (description "CodeSynthesis XSD (also known as libxsd or xsdcxx) is an XML
+Schema to C++ data binding compiler.  Provided with an XML instance
+specification (XML Schema), it generates C++ classes that represent the given
+vocabulary as well as XML parsing and serialization code.  The data stored in
+XML can then be accessed using types and functions that semantically
+correspond to an application domain rather than dealing with the intricacies
+of reading and writing XML.")
+    (home-page "https://codesynthesis.com/projects/xsd/")
+    ;; Exceptions are made to allow using the generated source files as well
+    ;; as the libxsd library in free software projects whose license is
+    ;; incompatible with the GPL v2.  Refer to the file named FLOSSE for the
+    ;; details.
+    (license license:gpl2+)))
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index b9842ca954..6f931f06c2 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2016, 2017 Ben Woodcroft <donttrustben@gmail.com>
-;;; Copyright © 2016, 2017, 2018, 2020 Roel Janssen <roel@gnu.org>
+;;; Copyright © 2016, 2017, 2018, 2020, 2021 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Raoul Bonnal <ilpuccio.febo@gmail.com>
 ;;; Copyright © 2018 Vijayalakshmi Vedantham <vijimay12@gmail.com>
@@ -33,6 +33,7 @@
 ;;; Copyright © 2020 Magali Lemes <magalilemes00@gmail.com>
 ;;; Copyright © 2020 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2020 Aniket Patil <aniket112.patil@gmail.com>
+;;; Copyright © 2021 Tim Howes <timhowes@lavabit.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -155,14 +156,14 @@ automatically pruning objects to maintain the constraints.")
 (define-public r-diffobj
   (package
     (name "r-diffobj")
-    (version "0.3.3")
+    (version "0.3.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "diffobj" version))
        (sha256
         (base32
-         "1x3d5sk8mk0s2d7dq8wxi1zv6krlx33n22ls2jwnb58b8xrmakj1"))))
+         "1z4yhfasjpi9rxl1lh9bny7yvs947a6hhc768azc1wwad748mk9q"))))
     (properties `((upstream-name . "diffobj")))
     (build-system r-build-system)
     (propagated-inputs `(("r-crayon" ,r-crayon)))
@@ -392,13 +393,13 @@ variables.")
 (define-public r-ggpmisc
   (package
     (name "r-ggpmisc")
-    (version "0.3.8-1")
+    (version "0.3.9")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "ggpmisc" version))
               (sha256
                (base32
-                "0kcrh73nwha52vl6z35wafmqs5lsdh2p4nqvi2ir70cv1k5y46zf"))))
+                "0nb0lpwqph9334s9sq77mk3nd22icy9d9hywz4awhf6nvp5rcc2v"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-dplyr" ,r-dplyr)
@@ -500,14 +501,14 @@ higher.")
 (define-public r-oenb
   (package
     (name "r-oenb")
-    (version "0.0.1")
+    (version "0.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "oenb" version))
        (sha256
         (base32
-         "1x1jlqp6r27c4gb7wafzpmh5rq6yq61a2d395r5lsmv2g5jb4biz"))))
+         "1jgxw7ycx2lcdzglg9nix8k08fs4r6i5jdsjzrd6w1dg6smsinl5"))))
     (properties `((upstream-name . "oenb")))
     (build-system r-build-system)
     (propagated-inputs
@@ -926,14 +927,14 @@ package is a port of the Python package @code{cssselect}.")
 (define-public r-reprex
   (package
     (name "r-reprex")
-    (version "1.0.0")
+    (version "2.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "reprex" version))
        (sha256
         (base32
-         "07nzx0fdl48jw95ipx17ql0l13q60yl3rjrkj1m375wrc7h1v5nx"))))
+         "1lcnxczy28n4g3rvph09va7svcznfyqa7zdggklqb924qvy7flwh"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-callr" ,r-callr)
@@ -944,6 +945,7 @@ package is a port of the Python package @code{cssselect}.")
        ("r-knitr" ,r-knitr)
        ("r-rlang" ,r-rlang)
        ("r-rmarkdown" ,r-rmarkdown)
+       ("r-rstudioapi" ,r-rstudioapi)
        ("r-withr" ,r-withr)))
     (native-inputs
      `(("r-knitr" ,r-knitr)))
@@ -982,14 +984,14 @@ same time tries to group instances from the same class together.")
 (define-public r-callr
   (package
     (name "r-callr")
-    (version "3.5.1")
+    (version "3.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "callr" version))
        (sha256
         (base32
-         "15l6ppsxdadlnl4fk0f8bvf327n8izk96px5d08m1ay9iij8qcyf"))))
+         "050s7l1ipi6snbj6xnk052l6acycnxjyzv84026adw5x8kki0yz6"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-r6" ,r-r6)
@@ -1057,6 +1059,25 @@ the embedded @code{RapidXML} C++ library.")
 into a pipeline of data manipulation and visualisation.")
     (license license:gpl3)))
 
+(define-public r-hmm
+  (package
+    (name "r-hmm")
+    (version "1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "HMM" version))
+              (sha256
+               (base32
+                "0z0hcqfixx1l2a6d3lpy5hmh0n4gjgs0jnck441akpp3vh37glzw"))))
+    (properties `((upstream-name . "HMM")))
+    (build-system r-build-system)
+    (home-page "https://cran.r-project.org/web/packages/HMM/")
+    (synopsis "Hidden Markov Models")
+    (description "This package provides an easy to use library to setup, apply
+and make inference with discrete time and discrete space hidden Markov
+models.")
+    (license license:gpl2+)))
+
 (define-public r-httpuv
   (package
     (name "r-httpuv")
@@ -2838,31 +2859,6 @@ where the bound function accepts additional arguments.")
 bindings that call a C++ function.")
     (license license:expat)))
 
-(define-public r-bisquerna
-  (package
-   (name "r-bisquerna")
-   (version "1.0.4")
-   (source (origin
-            (method url-fetch)
-            (uri (cran-uri "BisqueRNA" version))
-            (sha256
-             (base32
-              "01g34n87ml7n3pck77497ddgbv3rr5p4153ac8ninpgjijlm3jw2"))))
-   (properties `((upstream-name . "BisqueRNA")))
-   (build-system r-build-system)
-   (propagated-inputs
-    `(("r-biobase" ,r-biobase)
-      ("r-limsolve" ,r-limsolve)))
-   (home-page "https://www.biorxiv.org/content/10.1101/669911v1")
-   (synopsis "Decomposition of bulk expression with single-cell sequencing")
-   (description "This package provides tools to accurately estimate cell type
-abundances from heterogeneous bulk expression.  A reference-based method
-utilizes single-cell information to generate a signature matrix and
-transformation of bulk expression for accurate regression based estimates.
-A marker-based method utilizes known cell-specific marker genes to measure
-relative abundances across samples.")
-   (license license:gpl3)))
-
 (define-public r-auc
   (package
     (name "r-auc")
@@ -3792,7 +3788,7 @@ statistics/methods are implemented.")
        (uri (cran-uri "SuppDists" version))
        (sha256
         (base32
-         "01j6p94m1g363nph2158fq2rmd6z3h5dvcv6aidh2d6syw131xak"))))
+         "1i3iq12a5x5k49ac01mikzcrrq9gc148xq3m08h4xm07bha6f2v8"))))
     (properties `((upstream-name . "SuppDists")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/SuppDists")
@@ -4246,19 +4242,21 @@ problems as well as resampling based estimators of prediction error.")
 (define-public r-psych
   (package
     (name "r-psych")
-    (version "2.0.12")
+    (version "2.1.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "psych" version))
        (sha256
         (base32
-         "0k5dw5nb7kx7f21b0z01dry99qcpnk7iaicv7xq9d35wv2hx8wca"))))
+         "1ibh1ivr280wpmk3qjgm715dk79wx0ikjl9jjjcqs03q6vz4wmdx"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-lattice" ,r-lattice)
        ("r-mnormt" ,r-mnormt)
        ("r-nlme" ,r-nlme)))
+    (native-inputs
+     `(("r-knitr" ,r-knitr)))
     (home-page "https://cran.r-project.org/web/packages/psych/")
     (synopsis "Procedures for psychological, psychometric, and personality research")
     (description
@@ -4299,14 +4297,14 @@ by base R methods related to model fitting.")
 (define-public r-broom
   (package
     (name "r-broom")
-    (version "0.7.5")
+    (version "0.7.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "broom" version))
        (sha256
         (base32
-         "1qjyl5b100bsakm48w1vi3819lkpys7vb86n1sv9h4y2wr1c4jmw"))))
+         "1ljcl8mh0yqxw3qxzar482qwbxbcaim1x6y1wm82ws12pfdw0j8n"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-backports" ,r-backports)
@@ -4789,14 +4787,14 @@ structure.")
 (define-public r-vioplot
   (package
     (name "r-vioplot")
-    (version "0.3.5")
+    (version "0.3.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "vioplot" version))
        (sha256
         (base32
-         "0aiy615kn9lpr2cs757g3pklg81n01yhqh0wrwv111fn3cy86r0v"))))
+         "15vmrm9gwdhfg8mnq8rsg7m59kzc9h53cv96am4ds1dkm56w4n6p"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-sm" ,r-sm)
@@ -5072,18 +5070,17 @@ plots in @code{ggplot2}.")
 (define-public r-cli
   (package
     (name "r-cli")
-    (version "2.3.1")
+    (version "2.4.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "cli" version))
        (sha256
         (base32
-         "1jh64ixn6mg2ap1sx4azrxkjnlsyjbfxyc9zjkx8m9dlakgf4v2i"))))
+         "0l1s9yv23bc7mm0hfdlamgz4wjfrisv8aylr65ihjs98jsynrkg3"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-assertthat" ,r-assertthat)
-       ("r-glue" ,r-glue)))
+     `(("r-glue" ,r-glue)))
     (home-page "https://github.com/r-lib/cli#readme")
     (synopsis "Helpers for developing command line interfaces")
     (description "This package provides a suite of tools designed to build
@@ -5135,13 +5132,13 @@ constants, and control debugging of packages via environment variables.")
 (define-public r-processx
   (package
     (name "r-processx")
-    (version "3.4.5")
+    (version "3.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "processx" version))
        (sha256
-        (base32 "055v2gdrgqsfy8s672wsq79bqr44b4jjmcbqivx4p2d6lqx10s73"))))
+        (base32 "1z7zag7g041xlhzhkdfl33y2phc877h1pwj9k69p69b967qi6p6k"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-ps" ,r-ps)
@@ -5347,18 +5344,17 @@ to variables on the left-hand side of the assignment.")
 (define-public r-vctrs
   (package
     (name "r-vctrs")
-    (version "0.3.6")
+    (version "0.3.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "vctrs" version))
        (sha256
         (base32
-         "09ddxgzyah7lw42hn6n8fynsixf43s10jamsf94d2aidky63czfz"))))
+         "03hyxk3x635xfdn2x707gygdb2xk0cayl1nl44zib9bwqyyb7nas"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-digest" ,r-digest)
-       ("r-ellipsis" ,r-ellipsis)
+     `(("r-ellipsis" ,r-ellipsis)
        ("r-glue" ,r-glue)
        ("r-rlang" ,r-rlang)))
     (native-inputs
@@ -5436,14 +5432,14 @@ terminals.")
 (define-public r-tinytex
   (package
     (name "r-tinytex")
-    (version "0.30")
+    (version "0.31")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tinytex" version))
        (sha256
         (base32
-         "0dk6mpszwh1m65b0wfwjlcvpzywmasf6p31niqiq53wnd92my0gw"))))
+         "04a3ncaxix30n9m73slpsn1idxv7j1f7fy3nhxpvkk514x9rgg0p"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-xfun" ,r-xfun)))
@@ -5751,14 +5747,14 @@ sapa R packages.")
 (define-public r-sapa
   (package
     (name "r-sapa")
-    (version "2.0-2")
+    (version "2.0-3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sapa" version))
        (sha256
         (base32
-         "056xlh14dnzq4x7sbp7ff2k61jxy7110a742b502vz549qfrr5ds"))))
+         "0kj681rd4c2lvqr926lb6f4qwp281x5274dg6vbk8pf5y7s0qlpc"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-ifultools" ,r-ifultools)
@@ -6730,14 +6726,14 @@ evaluated by the @dfn{Akaike Information Criterion} (AIC).")
 (define-public r-arules
   (package
     (name "r-arules")
-    (version "1.6-6")
+    (version "1.6-7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "arules" version))
        (sha256
         (base32
-         "1pk3jjizn2m5rwi7qkdkbq9f07acgpy0qdzzqmx0agg47cwahlkm"))))
+         "0m80kndfbannw8h53nqdd5wl8h33q2z259aa1cp1nwadaxf9fc1q"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-matrix" ,r-matrix)))
@@ -7255,14 +7251,14 @@ Python's @url{https://github.com/ActiveState/appdirs,Appdirs} to R.")
 (define-public r-rastervis
   (package
     (name "r-rastervis")
-    (version "0.50")
+    (version "0.50.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rasterVis" version))
        (sha256
         (base32
-         "0m7fjd53apxim0d0rjnyzc28vmfcg4spcrn0zbnk8llillxji1hi"))))
+         "1fkmyllydnmk3j2cmgf86r91wyxf2kh573x8bkck7wgkfniw4h7w"))))
     (properties `((upstream-name . "rasterVis")))
     (build-system r-build-system)
     (propagated-inputs
@@ -7314,14 +7310,14 @@ those searches and pull data into their R sessions.")
 (define-public r-renv
   (package
     (name "r-renv")
-    (version "0.13.0")
+    (version "0.13.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "renv" version))
        (sha256
         (base32
-         "16n2dz9jibc03f7q1wrzxss6l5jmaks7m2lnli9dz9anvcmxbdia"))))
+         "0jlsf6vfvqhr4i35xy3xf1ixkfillivzy3wbpl6ca9vyjpnhiwj1"))))
     (properties `((upstream-name . "renv")))
     (build-system r-build-system)
     (native-inputs
@@ -7885,14 +7881,14 @@ hierarchical models using Markov Chain Monte Carlo (MCMC) simulation.")
 (define-public r-rbibutils
   (package
     (name "r-rbibutils")
-    (version "2.0")
+    (version "2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rbibutils" version))
        (sha256
         (base32
-         "1vfg2188i4dyhrmvnwpsh2la8qkd4wkryz2fpj4cppi1wfz3ml83"))))
+         "13phw0dk3p3s1z45ff7dbqnn27zws1209mp3d4763zh7xnsdsl44"))))
     (properties `((upstream-name . "rbibutils")))
     (build-system r-build-system)
     (home-page "https://geobosh.github.io/rbibutils/")
@@ -7933,14 +7929,14 @@ references and Rd files.")
 (define-public r-officer
   (package
     (name "r-officer")
-    (version "0.3.17")
+    (version "0.3.18")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "officer" version))
        (sha256
         (base32
-         "1apg0dh1zfhrqcbbmm8318l40gyjbqc2l9sdvwxx7qi8mzc1mqvw"))))
+         "1j3bv4j8x5ijj0j447vpdsk4p8pl3ncwdwnns6n3plfrqgsf3vsg"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-r6" ,r-r6)
@@ -8194,14 +8190,14 @@ other add-on packages.")
 (define-public r-insight
   (package
     (name "r-insight")
-    (version "0.13.1")
+    (version "0.13.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "insight" version))
        (sha256
         (base32
-         "1la4yxzfl9fnknamnaziil6gvpdzl78z16lfzis9jgzg8r9q0y5l"))))
+         "03b7kd17h25mi1si40ibcp3jpasyqpj51mr8js0ywywyfw7909j1"))))
     (build-system r-build-system)
     (native-inputs
      `(("r-knitr" ,r-knitr)))
@@ -9561,10 +9557,10 @@ singular or ill-conditioned Jacobian.")
      `((upstream-name . "PhysicalActivity")))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/PhysicalActivity/")
-    (synopsis "Procesing accelerometer data for physical activity measurement")
+    (synopsis "Processing accelerometer data for physical activity measurement")
     (description
      "This @code{r-physicalactivity} package provides a function @code{wearingMarking}
-for classification of monitor wear and nonwear time intervals in accelerometer
+for classification of monitored wear and nonwear time intervals in accelerometer
 data collected to assess physical activity.  The package also contains functions
 for making plots of accelerometer data and obtaining the summary of various
 information including daily monitor wear time and the mean monitor wear time
@@ -9691,14 +9687,14 @@ samples is large and the number of mixture components is not too large.")
 (define-public r-magick
   (package
     (name "r-magick")
-    (version "2.7.0")
+    (version "2.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "magick" version))
        (sha256
         (base32
-         "0m1kij6pp7dmsrhl80h60iyccjqmbbb3zdnqdc9sgy1kj1x3pscp"))))
+         "16svy84dq25g69axqgympsrh8dzssa1w3zz08zc8m6nprr3jqwqf"))))
     (build-system r-build-system)
     (inputs
      `(("imagemagick" ,imagemagick)
@@ -10133,14 +10129,14 @@ Hothorn, Westfall, 2010, CRC Press).")
 (define-public r-emmeans
   (package
     (name "r-emmeans")
-    (version "1.5.4")
+    (version "1.5.5-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "emmeans" version))
        (sha256
         (base32
-         "1rbh3ls23fazrwpsam5llk3kqdzz2zvsms3i4f1cgn34ky3w8361"))))
+         "0l5dd71ihhs7zy6ygniy07iisgy7a1ai1w41hqf84swb0j3cl6iz"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-estimability" ,r-estimability)
@@ -10423,14 +10419,14 @@ effects models and Bayesian models.")
 (define-public r-ggeffects
   (package
     (name "r-ggeffects")
-    (version "1.0.1")
+    (version "1.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ggeffects" version))
        (sha256
         (base32
-         "1c5rvycaqp7zp1j6j17c84v8nlpi0w7bhfxmcha4n37m0snk1kgy"))))
+         "0qh8x8yi8gkb5x7zfxmb1c689k7bhc1f5947yymny34j7xdsb9s8"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-insight" ,r-insight)
@@ -10453,14 +10449,14 @@ results using @code{ggplot2}.")
 (define-public r-effectsize
   (package
     (name "r-effectsize")
-    (version "0.4.4")
+    (version "0.4.4-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "effectsize" version))
        (sha256
         (base32
-         "0mgkq12ym72ncakkjpkzkjglhksyhj3iw8v4a8fjgpf7prvn191g"))))
+         "02rwf3lxnzgc8yh0wridsc6lqr9s6v0cqzbk4biwnr494rvs46zb"))))
     (properties `((upstream-name . "effectsize")))
     (build-system r-build-system)
     (propagated-inputs
@@ -10570,14 +10566,14 @@ repositories.")
 (define-public r-gh
   (package
     (name "r-gh")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gh" version))
        (sha256
         (base32
-         "1zvy3ylxvni10lhvmbm9h14mg4wlsbdbzbzviwf28jxss8749219"))))
+         "16xa1qb1r28f8yc6ybjrxiq2zigxj886dp9k29jpsn5091xbzkq0"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-cli" ,r-cli)
@@ -10681,14 +10677,14 @@ user credentials.")
 (define-public r-gert
   (package
     (name "r-gert")
-    (version "1.2.0")
+    (version "1.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gert" version))
        (sha256
         (base32
-         "0ag2ia6cfb5drf3517lg5nhik1w0nv09a75wdy5jdciws1qra3d6"))))
+         "1fh72p92wj83yv1ch77jms6k1gjqfji8cmgw23vpxd0p8l9jj4h7"))))
     (properties `((upstream-name . "gert")))
     (build-system r-build-system)
     (inputs
@@ -10781,14 +10777,14 @@ more information about packages, and where they were installed from.")
 (define-public r-remotes
   (package
     (name "r-remotes")
-    (version "2.2.0")
+    (version "2.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "remotes" version))
        (sha256
         (base32
-         "1f1kdw9j1wald3fs8b3n68x1kljy07j60g3aw1aarx26ikyk9whj"))))
+         "0f35648bdxhvplcfj80r4hfj5w21f1s01kcz6b29d098c1mnfzb7"))))
     (build-system r-build-system)
     (native-inputs
      `(("r-knitr" ,r-knitr)))
@@ -10907,14 +10903,14 @@ ways.")
 (define-public r-summarytools
   (package
     (name "r-summarytools")
-    (version "0.9.8")
+    (version "0.9.9")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "summarytools" version))
        (sha256
         (base32
-         "0n7rad6bkfn9cb99wbfzbwl5qzch48r0gafhddfcqvyh4fbn2k0j"))))
+         "0ig7vgjvldbndwhky1bsi38zifr9ji8xvvfqbfffplac08llvrbr"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-base64enc" ,r-base64enc)
@@ -11298,15 +11294,17 @@ netCDF files.")
 (define-public r-biocmanager
   (package
     (name "r-biocmanager")
-    (version "1.30.10")
+    (version "1.30.12")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "BiocManager" version))
        (sha256
-        (base32 "03n9s2vf7vgpgb5alpxwamf9xfkn32cbzngwyn6spq1bnh9a9dzk"))))
+        (base32 "0c2anza01pc36manj3cvycbq8p57qpq18dsimk3y3gpks70hhqf3"))))
     (properties `((upstream-name . "BiocManager")))
     (build-system r-build-system)
+    (native-inputs
+     `(("r-knitr" ,r-knitr)))
     (home-page "https://cran.r-project.org/web/packages/BiocManager/")
     (synopsis "Access the Bioconductor project package repository")
     (description
@@ -11723,19 +11721,21 @@ redundant complex conjugate when the input is real data.")
 (define-public r-tiff
   (package
     (name "r-tiff")
-    (version "0.1-7")
+    (version "0.1-8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tiff" version))
        (sha256
         (base32
-         "101n6x70fr1dhcwx53g3s8q1j4wh93y0388v1s1316f8558rxqxh"))))
+         "18m17g5q3nz4v4wrqxnb129b1j02873g2vknddczkklf1pvq4x2b"))))
     (build-system r-build-system)
     (inputs
      `(("libtiff" ,libtiff)
        ("libjpeg" ,libjpeg-turbo)
        ("zlib" ,zlib)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
     (home-page "https://www.rforge.net/tiff/")
     (synopsis "Read and write TIFF images")
     (description
@@ -12637,21 +12637,24 @@ and manipulating sets of ontological terms.")
 (define-public r-gargle
   (package
     (name "r-gargle")
-    (version "1.0.0")
+    (version "1.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gargle" version))
        (sha256
         (base32
-         "0hsqn4hf935wn6vk2pwym7la4sdvy271y4cashp38pg4hkpg9zph"))))
+         "03y29dzz54bw9px5k8a72vmc000lcyrkc5l0izkqcciyi9ijkr3w"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-fs" ,r-fs)
+     `(("r-cli" ,r-cli)
+       ("r-fs" ,r-fs)
        ("r-glue" ,r-glue)
        ("r-httr" ,r-httr)
        ("r-jsonlite" ,r-jsonlite)
+       ("r-rappdirs" ,r-rappdirs)
        ("r-rlang" ,r-rlang)
+       ("r-rstudioapi" ,r-rstudioapi)
        ("r-withr" ,r-withr)))
     (native-inputs
      `(("r-knitr" ,r-knitr)))
@@ -12726,14 +12729,14 @@ limitations\" using the GNU Multiple Precision library.")
 (define-public r-rmpfr
   (package
     (name "r-rmpfr")
-    (version "0.8-2")
+    (version "0.8-3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Rmpfr" version))
        (sha256
         (base32
-         "007pc7fpzl2mcg3qxa2vfjip6m2dr314qjsnybkj3kdj70bszxkl"))))
+         "1m9wwwch9wg886147brr2zfih65yfdfs3vmfvim1w6jykycasc9a"))))
     (properties `((upstream-name . "Rmpfr")))
     (build-system r-build-system)
     (inputs
@@ -15151,14 +15154,14 @@ utilities for sequence data management under the ACNUC system.")
 (define-public r-units
   (package
     (name "r-units")
-    (version "0.7-0")
+    (version "0.7-1")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "units" version))
         (sha256
           (base32
-            "0kwfcrrbcwl7s50n1wp33vswqzmprh91clvakbd1jpznqpg5m3js"))))
+            "0wwndzjjgqj795xvx1jwa86nwd8adfiwj0pn15yyzzk9baky2axw"))))
     (build-system r-build-system)
     (inputs
      `(("udunits" ,udunits)))
@@ -15304,14 +15307,14 @@ tessellation.")
 (define-public r-sf
   (package
     (name "r-sf")
-    (version "0.9-7")
+    (version "0.9-8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sf" version))
        (sha256
         (base32
-         "175fmnnw11fjhfgjv9sn9b0jfjcqbybpgwsvv99d5yddigvw5jja"))))
+         "096gg2hbynn6mv3w8n69x987fklg5rrgd0d4nbqaw7vhg1jhlmqi"))))
     (build-system r-build-system)
     (inputs
      `(("gdal" ,gdal)
@@ -15341,14 +15344,14 @@ datum transformations.")
 (define-public r-spdep
   (package
     (name "r-spdep")
-    (version "1.1-5")
+    (version "1.1-7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spdep" version))
        (sha256
         (base32
-         "0pbd7wrg5v44p2yxsjp774lpyzap3madir5mn5p3ix7ibk7ldjs7"))))
+         "0sg417d95paww625663lgmk6jwhs88djqzc96gbs1hxazlf77qb1"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-boot" ,r-boot)
@@ -15544,13 +15547,13 @@ lspec, polyclass, and polymars.")
 (define-public r-rms
   (package
     (name "r-rms")
-    (version "6.1-1")
+    (version "6.2-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rms" version))
        (sha256
-        (base32 "1zgfd60lzbakcv7x0i5k3lkw3s0xx5bzssjgangna5lq2j17cdli"))))
+        (base32 "1di4xvsx0rwkr77nfqiysbg4qf699199xqil70i39d4zwfzqrm8h"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-cluster" ,r-cluster)
@@ -16288,14 +16291,14 @@ packages with Rcpp.")
 (define-public r-tweenr
   (package
     (name "r-tweenr")
-    (version "1.0.1")
+    (version "1.0.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tweenr" version))
        (sha256
         (base32
-         "0sq90pbln6lkc2q3zflhkxxwpqdw5dd7igrxhdnlynkdrmi83mpg"))))
+         "17znizh4yabh2zs9mzyr0sl6p0pw49961i61br7cl1b7v9sza18q"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-farver" ,r-farver)
@@ -16392,7 +16395,7 @@ sets of URLs.")
     (description
      "The aim of the ggplot2 package is to aid in visual data investigations.
 This focus has led to a lack of facilities for composing specialized plots.
-Thi package aims to be a collection of mainly new statistics and geometries
+This package aims to be a collection of mainly new statistics and geometries
 that fills this gap.")
     (license license:expat)))
 
@@ -17202,14 +17205,14 @@ batch correction, and data correction.")
 (define-public r-styler
   (package
     (name "r-styler")
-    (version "1.3.2")
+    (version "1.4.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "styler" version))
        (sha256
         (base32
-         "1waglhsy2c53qjgd2qhlzda3z0lbzbwx9fkrfhac41y6h91mgkrz"))))
+         "10fj4cnazicb2z9djbv5pszcmrf7wbzagbjvksffqpdc5vbbbw5x"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-backports" ,r-backports)
@@ -17223,6 +17226,8 @@ batch correction, and data correction.")
        ("r-tibble" ,r-tibble)
        ("r-withr" ,r-withr)
        ("r-xfun" ,r-xfun)))
+    (native-inputs
+     `(("r-knitr" ,r-knitr)))
     (home-page "https://github.com/r-lib/styler")
     (synopsis "Non-invasive pretty printing of R code")
     (description
@@ -17476,14 +17481,14 @@ classification and regression models.")
 (define-public r-dae
   (package
     (name "r-dae")
-    (version "3.1-32")
+    (version "3.1-37")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "dae" version))
        (sha256
         (base32
-         "126w1lb9pz8mb2ajl2vz5dj798nbifp0dypnzfgcwixif5g5bpqi"))))
+         "102fgbdpn7yvm1zj180cv4sr1096sz35d4gndsv7w9kriqyi1c1l"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-ggplot2" ,r-ggplot2)
@@ -17515,14 +17520,14 @@ been used in the call to @code{aov}.")
 (define-public r-dalex
   (package
     (name "r-dalex")
-    (version "2.1.1")
+    (version "2.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "DALEX" version))
        (sha256
         (base32
-         "1dnqsml94s648w8swsrq8spddnd4mj5pl3q6xxr917w6a1jxgyfz"))))
+         "1qnjbhilv4jfmwqxfi9xc5ysrh8gr84a2a5imjfci7d1n3zcnryn"))))
     (properties `((upstream-name . "DALEX")))
     (build-system r-build-system)
     (propagated-inputs
@@ -19595,14 +19600,14 @@ discussed in Reisen et al. (2017) @url{doi:10.1016/j.jspi.2017.02.008}.")
 (define-public r-gamlss-data
   (package
     (name "r-gamlss-data")
-    (version "5.1-4")
+    (version "6.0-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gamlss.data" version))
        (sha256
         (base32
-         "1dgfspbmps6ipzcmw681wjdp320nm50dwsxafgrcwxndqgc7fdqd"))))
+         "1cjb2n5i5mnhmb5qbqycdbfg65j7nxb9s74yihqs9kpa39byrzcq"))))
     (properties `((upstream-name . "gamlss.data")))
     (build-system r-build-system)
     (home-page "http://www.gamlss.org/")
@@ -19616,14 +19621,14 @@ models.")
 (define-public r-gamlss
   (package
     (name "r-gamlss")
-    (version "5.3-1")
+    (version "5.3-4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gamlss" version))
        (sha256
         (base32
-         "1ngf6g4zixwm6ni5r0fs0f6132xd2f2a6mlski9hlqnvvwb46iwr"))))
+         "06mh00jjxnqwknbv777hawjk0zm81ixrp35fg59mrlqz8y3p2w3j"))))
     (properties `((upstream-name . "gamlss")))
     (build-system r-build-system)
     (propagated-inputs
@@ -20827,14 +20832,14 @@ API; see the package vignette for details.")
 (define-public r-actuar
   (package
     (name "r-actuar")
-    (version "3.1-1")
+    (version "3.1-2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "actuar" version))
        (sha256
         (base32
-         "0sxn1mskh7x164f1vbrqnadgxnq7y2p3a9mlmqc0sp6cqkw9lhp9"))))
+         "0gaqm8bkjly2b1jkr1nqnxlp5vqvfpj0a4jd70jv4f9ndlif676y"))))
     (properties `((upstream-name . "actuar")))
     (build-system r-build-system)
     (propagated-inputs `(("r-expint" ,r-expint)))
@@ -20904,14 +20909,14 @@ number embedded in the file rather than the file extension.")
 (define-public r-imager
   (package
     (name "r-imager")
-    (version "0.42.7")
+    (version "0.42.8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "imager" version))
        (sha256
         (base32
-         "1dq0rblnrmnk689bcdmml179gk9lff8x92s2npkjllgjq5q2vfpd"))))
+         "1kzl93l6k9i4528bbycbqxdn28mj7hnx0fbxisva859xl1wys5c5"))))
     (properties `((upstream-name . "imager")))
     (build-system r-build-system)
     (inputs
@@ -21053,14 +21058,14 @@ functions.")
 (define-public r-univoutl
   (package
     (name "r-univoutl")
-    (version "0.2")
+    (version "0.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "univOutl" version))
        (sha256
         (base32
-         "0rlc3w7cx2hfxacpjs9kmjzv5p8v9wxnlpxi3rh276wiy5zdr91v"))))
+         "1hhpxrpmp2wbrynx9xjndnp2sccirgky2x6ksd6yk6phmk0rbzjp"))))
     (properties `((upstream-name . "univOutl")))
     (build-system r-build-system)
     (propagated-inputs
@@ -21268,14 +21273,14 @@ different conceptual parts of the algorithm.")
 (define-public r-shapes
   (package
     (name "r-shapes")
-    (version "1.2.5")
+    (version "1.2.6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "shapes" version))
        (sha256
         (base32
-         "0gfpdydfysp5mwg7qmkn73s67gvh2szb40mzqrx97h41ijgcgd8s"))))
+         "1p9fr95zk3q2v277c5ksb0nh26mcpzwjzjb2lmag51z6hck8cb66"))))
     (properties `((upstream-name . "shapes")))
     (build-system r-build-system)
     (propagated-inputs
@@ -22068,32 +22073,23 @@ Norwegian, Portuguese, Romanian, Russian, Spanish, Swedish and Turkish.")
 (define-public r-quanteda
   (package
     (name "r-quanteda")
-    (version "2.1.2")
+    (version "3.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "quanteda" version))
        (sha256
         (base32
-         "13rjwgmg5v1dbryrs9ifyy76s5ib6wrbrm2y5af44vhf1h6p9cvy"))))
+         "0b1jfkdhpsg5jhjz4p0nf4cmi9p8w40wv3i2f17jf2x1n1y2hjj8"))))
     (properties `((upstream-name . "quanteda")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-data-table" ,r-data-table)
-       ("r-digest" ,r-digest)
-       ("r-extrafont" ,r-extrafont)
-       ("r-fastmatch" ,r-fastmatch)
-       ("r-ggplot2" ,r-ggplot2)
-       ("r-ggrepel" ,r-ggrepel)
-       ("r-jsonlite" ,r-jsonlite)
+     `(("r-fastmatch" ,r-fastmatch)
        ("r-magrittr" ,r-magrittr)
        ("r-matrix" ,r-matrix)
-       ("r-network" ,r-network)
-       ("r-proxyc" ,r-proxyc)
        ("r-rcpp" ,r-rcpp)
        ("r-rcpparmadillo" ,r-rcpparmadillo)
        ("r-rcppparallel" ,r-rcppparallel)
-       ("r-sna" ,r-sna)
        ("r-snowballc" ,r-snowballc)
        ("r-stopwords" ,r-stopwords)
        ("r-stringi" ,r-stringi)
@@ -22862,14 +22858,14 @@ interesting features. iheatmapr uses the plotly library for interactivity.")
 (define-public r-packrat
   (package
     (name "r-packrat")
-    (version "0.5.0")
+    (version "0.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "packrat" version))
        (sha256
         (base32
-         "1xy5dd2hrpqa07jfl4s7dsrya05mf36ms74j833scdz0zf89586n"))))
+         "01cn2vf95nc8bh0hh8imkn030yra3hx64q1fb8jwsr52p9s397fr"))))
     (properties `((upstream-name . "packrat")))
     (build-system r-build-system)
     (home-page "https://github.com/rstudio/packrat/")
@@ -23538,17 +23534,19 @@ appropriate dog and cat images for many status codes.")
 (define-public r-latex2exp
   (package
     (name "r-latex2exp")
-    (version "0.4.0")
+    (version "0.5.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "latex2exp" version))
               (sha256
                (base32
-                "12nbcgfmv13k6sc6m326ras9bcvy380b7rxcxphn06r3cfkby0zw"))))
+                "0qknpw7zwwbzsbry94j8fn48mq7kq5rc5448g9hybbisain3wfvg"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-stringr" ,r-stringr)
        ("r-magrittr" ,r-magrittr)))
+    (native-inputs
+     `(("r-knitr" ,r-knitr)))
     (home-page "https://github.com/stefano-meschiari/latex2exp/")
     (synopsis "Use LaTeX expressions in plots")
     (description "@code{latex2exp} parses and converts LaTeX math formulas to
@@ -24408,14 +24406,14 @@ input.")
 (define-public r-lightgbm
   (package
     (name "r-lightgbm")
-    (version "3.1.1")
+    (version "3.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "lightgbm" version))
        (sha256
         (base32
-         "1pwsh6j9ksahh58b15j5ij56bsc6syy3z4k4a5zhy5n7829rz555"))))
+         "0aw1zcrg7nhddfaif9544hn8g8qcylv6vzpkf8d3kl07nzvgxkvj"))))
     (properties `((upstream-name . "lightgbm")))
     (build-system r-build-system)
     (propagated-inputs
@@ -24444,14 +24442,14 @@ designed to be distributed and efficient with the following goals:
 (define-public r-shapforxgboost
   (package
     (name "r-shapforxgboost")
-    (version "0.1.0")
+    (version "0.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "SHAPforxgboost" version))
        (sha256
         (base32
-         "0jgyss9bawl7sf4dwa75sn7ld3mvrrr0z2074lbkq3f5qb9gwsly"))))
+         "106nsf02b1w3yshb55lwnyw1rl1a60162v2wk8znjz3b4ln3mqj5"))))
     (properties
      `((upstream-name . "SHAPforxgboost")))
     (build-system r-build-system)
@@ -24462,9 +24460,10 @@ designed to be distributed and efficient with the following goals:
        ("r-ggforce" ,r-ggforce)
        ("r-ggplot2" ,r-ggplot2)
        ("r-ggpubr" ,r-ggpubr)
-       ("r-lightgbm" ,r-lightgbm)
        ("r-rcolorbrewer" ,r-rcolorbrewer)
        ("r-xgboost" ,r-xgboost)))
+    (native-inputs
+     `(("r-knitr" ,r-knitr)))
     (home-page "https://github.com/liuyanguu/SHAPforxgboost")
     (synopsis "SHAP Plots for XGBoost")
     (description
@@ -24796,14 +24795,14 @@ diagonals.  This package allows you to compute the tensor product of arrays.")
 (define-public r-spatstat-utils
   (package
     (name "r-spatstat-utils")
-    (version "2.0-0")
+    (version "2.1-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat.utils" version))
        (sha256
         (base32
-         "1li0vksxpkvgyx3j2wi40kj5687vwakkfdix6icm6g01a0lb2m5d"))))
+         "18gqsc1a85pk69aifi10wprv1c0lci3zxp4wqjb27dlmlbz6jdgd"))))
     (properties
      `((upstream-name . "spatstat.utils")))
     (build-system r-build-system)
@@ -24817,14 +24816,14 @@ which may also be useful for other purposes.")
 (define-public r-spatstat-sparse
   (package
     (name "r-spatstat-sparse")
-    (version "1.2-1")
+    (version "2.0-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat.sparse" version))
        (sha256
         (base32
-         "1w312q7gxzchigxxzk9akscdsz66j5085lgjryamschjgp4f8yk2"))))
+         "1iqrpazb88s4w208adf2qgm4ajwz3kwqck65k9g5l28zw9jcxyr7"))))
     (properties
      `((upstream-name . "spatstat.sparse")))
     (build-system r-build-system)
@@ -24844,14 +24843,14 @@ matrix calculations that are common in statistics, such as quadratic forms.")
 (define-public r-spatstat-data
   (package
     (name "r-spatstat-data")
-    (version "2.0-0")
+    (version "2.1-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat.data" version))
        (sha256
         (base32
-         "1z1jb1yzb7qhfg55dhzcrdvn5x8hpg9xif0hpnapddbmhxd1hbb7"))))
+         "0csmz5vjaxnznkbsfah8qd3v8p0y56jvis01ialxzvf71snl160v"))))
     (properties `((upstream-name . "spatstat.data")))
     (build-system r-build-system)
     (propagated-inputs
@@ -24867,21 +24866,20 @@ package.")
 (define-public r-spatstat-geom
   (package
     (name "r-spatstat-geom")
-    (version "1.65-5")
+    (version "2.0-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat.geom" version))
        (sha256
         (base32
-         "0g0m5b3nbzpyblbp77n56k6aiw3fn23jkk72h9fhqlg1ydn2fzpk"))))
+         "1r7nlgh62apchidg28fxq1a22iv1b29y5xmsg1kjwfvkbq8zxsvh"))))
     (properties `((upstream-name . "spatstat.geom")))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-deldir" ,r-deldir)
        ("r-polyclip" ,r-polyclip)
        ("r-spatstat-data" ,r-spatstat-data)
-       ("r-spatstat-sparse" ,r-spatstat-sparse)
        ("r-spatstat-utils" ,r-spatstat-utils)))
     (home-page "http://spatstat.org/")
     (synopsis "Geometrical functionality of the spatstat package")
@@ -24894,14 +24892,14 @@ for the geometry of linear networks.")
 (define-public r-spatstat-core
   (package
     (name "r-spatstat-core")
-    (version "1.65-5")
+    (version "2.0-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat.core" version))
        (sha256
         (base32
-         "0wq61sd53hwyk3fzjdc2prrr66n67zbwb5i3ii7kvyhfwx0xikm3"))))
+         "19wv27nfx48xkqa1amys4jf93k0d8xns20p84n5kqyibscdsksgx"))))
     (properties `((upstream-name . "spatstat.core")))
     (build-system r-build-system)
     (propagated-inputs
@@ -24926,14 +24924,14 @@ user-level code from spatstat, except for the code for linear networks.")
 (define-public r-spatstat-linnet
   (package
     (name "r-spatstat-linnet")
-    (version "1.65-3")
+    (version "2.1-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat.linnet" version))
        (sha256
         (base32
-         "1y088r26h5yv006ydgcb4iwpvnc7ql857gky0hbi7xqqciqr8wdv"))))
+         "1ia0qgggddiwhhyd3q516f3p6by0p4xnq26wqz7410n2ja60bbb4"))))
     (properties
      `((upstream-name . "spatstat.linnet")))
     (build-system r-build-system)
@@ -24953,14 +24951,14 @@ for spatial data on a linear network.")
 (define-public r-spatstat
   (package
     (name "r-spatstat")
-    (version "2.0-1")
+    (version "2.1-0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "spatstat" version))
        (sha256
         (base32
-         "1xq11ijc0d0lbixxb3wnvyr4gplfj2d2i64ynsa089xd525zzzbw"))))
+         "0vr5md53247v6crvjvg9m82vc6h914zzvkzfkga8x79hv35ii4as"))))
     (properties `((upstream-name . "spatstat")))
     (build-system r-build-system)
     (propagated-inputs
@@ -25014,14 +25012,14 @@ for linear mixed models (AIREML).")
 (define-public r-cpp11
   (package
     (name "r-cpp11")
-    (version "0.2.6")
+    (version "0.2.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "cpp11" version))
        (sha256
         (base32
-         "118i8s7978vl9xyhnb47wcbd6rcc6b958mq2w8s3rdsd4pxv62gz"))))
+         "1m31yq3kn5wqvm0ahj08kb4bszbbhfybx3l2x975cjzgv3058h8x"))))
     (properties `((upstream-name . "cpp11")))
     (build-system r-build-system)
     (native-inputs `(("r-knitr" ,r-knitr)))
@@ -25199,14 +25197,14 @@ to speed up repeated queries of the same set of target points.")
 (define-public r-muhaz
   (package
     (name "r-muhaz")
-    (version "1.2.6.1")
+    (version "1.2.6.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "muhaz" version))
        (sha256
         (base32
-         "08qh43zx6h3yby44q2vxphfvmfdmqxpgyp0734yn341sy9n8pkkk"))))
+         "1lzc8arbpcxgfap3dfsgq8crpp1cxd9qlbrhvyvl79zgpxjqx4q2"))))
     (properties `((upstream-name . "muhaz")))
     (build-system r-build-system)
     (propagated-inputs
@@ -25671,14 +25669,14 @@ workflow.  The advantages are:
 (define-public r-yardstick
   (package
     (name "r-yardstick")
-    (version "0.0.7")
+    (version "0.0.8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "yardstick" version))
        (sha256
         (base32
-         "1yrvlhn4gxyn9f20z5yv3xam0j0a8z362jwa32r33r0g0jk5z2fq"))))
+         "13b0lyj2k0r568mwlyz9yvp9156rzlj4jqnjazaffh9vwqh4whir"))))
     (properties `((upstream-name . "yardstick")))
     (build-system r-build-system)
     (propagated-inputs
@@ -25686,7 +25684,8 @@ workflow.  The advantages are:
        ("r-generics" ,r-generics)
        ("r-proc" ,r-proc)
        ("r-rlang" ,r-rlang)
-       ("r-tidyselect" ,r-tidyselect)))
+       ("r-tidyselect" ,r-tidyselect)
+       ("r-vctrs" ,r-vctrs)))
     (native-inputs
      `(("r-knitr" ,r-knitr)))
     (home-page "https://github.com/tidymodels/yardstick")
@@ -25725,18 +25724,19 @@ observations.")
 (define-public r-slider
   (package
     (name "r-slider")
-    (version "0.1.5")
+    (version "0.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "slider" version))
        (sha256
         (base32
-         "1x4jwfxam4czfkb1s5qds5krfw1h2p5a4rh6f5z4yvhsv0d81xck"))))
+         "1jijh8f3qcn8fa677sqvgl2fb4r5vca1cw4l2vbcqscxb2hr4bqw"))))
     (properties `((upstream-name . "slider")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-glue" ,r-glue)
+     `(("r-ellipsis" ,r-ellipsis)
+       ("r-glue" ,r-glue)
        ("r-rlang" ,r-rlang)
        ("r-vctrs" ,r-vctrs)
        ("r-warp" ,r-warp)))
@@ -25877,31 +25877,71 @@ for finding reasonable values of hyper-parameters in models, pre-processing
 methods, and post-processing steps.")
     (license license:expat)))
 
+(define-public r-workflowsets
+  (package
+    (name "r-workflowsets")
+    (version "0.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "workflowsets" version))
+       (sha256
+        (base32
+         "1q41isvj7hhbkx3y8k6kazpiygig92xannsz8dpklh0k3j9l3c2p"))))
+    (properties `((upstream-name . "workflowsets")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-cli" ,r-cli)
+       ("r-dplyr" ,r-dplyr)
+       ("r-ggplot2" ,r-ggplot2)
+       ("r-prettyunits" ,r-prettyunits)
+       ("r-purrr" ,r-purrr)
+       ("r-rlang" ,r-rlang)
+       ("r-rsample" ,r-rsample)
+       ("r-tibble" ,r-tibble)
+       ("r-tidyr" ,r-tidyr)
+       ("r-tune" ,r-tune)
+       ("r-vctrs" ,r-vctrs)
+       ("r-withr" ,r-withr)
+       ("r-workflows" ,r-workflows)))
+    (native-inputs
+     `(("r-knitr" ,r-knitr)))
+    (home-page "https://github.com/tidymodels/workflowsets")
+    (synopsis "Create a collection of tidymodels workflows")
+    (description
+     "A workflow is a combination of a model and preprocessors (e.g, a
+formula, recipe, etc.).  In order to try different combinations of these, an
+object can be created that contains many workflows.  There are functions to
+create workflows en masse as well as training them and visualizing the
+results.")
+    (license license:expat)))
+
 (define-public r-tidyposterior
   (package
     (name "r-tidyposterior")
-    (version "0.0.3")
+    (version "0.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tidyposterior" version))
        (sha256
         (base32
-         "0wsv800w056ziqbnwal7ncmdy4li8cn5yrdx07w35b7j8kl4mwhg"))))
+         "1h1664sjrg6akph6nrk8ynn2kjiswv6gshy35gamam1h4axf6wah"))))
     (properties `((upstream-name . "tidyposterior")))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-dplyr" ,r-dplyr)
        ("r-generics" ,r-generics)
        ("r-ggplot2" ,r-ggplot2)
-       ("r-lifecycle" ,r-lifecycle)
        ("r-purrr" ,r-purrr)
        ("r-rlang" ,r-rlang)
        ("r-rsample" ,r-rsample)
        ("r-rstanarm" ,r-rstanarm)
        ("r-tibble" ,r-tibble)
        ("r-tidyr" ,r-tidyr)
-       ("r-vctrs" ,r-vctrs)))
+       ("r-tune" ,r-tune)
+       ("r-vctrs" ,r-vctrs)
+       ("r-workflowsets" ,r-workflowsets)))
     (native-inputs
      `(("r-knitr" ,r-knitr)))
     (home-page "https://tidyposterior.tidymodels.org")
@@ -26297,14 +26337,14 @@ phylogenetic relatedness) can also be conducted.")
 (define-public r-altmeta
   (package
     (name "r-altmeta")
-    (version "3.2")
+    (version "3.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "altmeta" version))
        (sha256
         (base32
-         "0z252lbsknqp33i0b0xf5r7spr535iq47bv40vgip6nsqhgrl7b0"))))
+         "1xq12hnzxh7kgv2i36xprg4lkvqfmxwz3sq4a1jlq2d5g3narvcm"))))
     (properties `((upstream-name . "altmeta")))
     (build-system r-build-system)
     (propagated-inputs
@@ -26359,14 +26399,14 @@ covariate (usually group indicator) and the scores.")
 (define-public r-qtl
   (package
     (name "r-qtl")
-    (version "1.47-9")
+    (version "1.48-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "qtl" version))
        (sha256
         (base32
-         "0hffirsvw9j82cdx6l7vhqn3a7ab52claqjlinv3lswl1nsfg93b"))))
+         "098mgmfj8ndi8yipr9b3f6gbbh78cgp9j7y561nlnhrnyc8bsih9"))))
     (build-system r-build-system)
     (home-page "https://rqtl.org/")
     (synopsis "R package for analyzing QTL experiments in genetics")
@@ -26508,27 +26548,15 @@ other R users.")
 (define-public r-seurat
   (package
     (name "r-seurat")
-    (version "4.0.0")
+    (version "4.0.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "Seurat" version))
               (sha256
                (base32
-                "1mp3py00bmzj4541d8ry5sfzkpfzvnl9dpa8n4qhakd13dl30xdn"))))
+                "17cmp9mimvykb8ny796dn1zwmvg0pwwjw1zcixyamc5q1lwnxi3p"))))
     (properties `((upstream-name . "Seurat")))
     (build-system r-build-system)
-    ;; This is needed because r-spatstat has been split up and there has
-    ;; been no new release of Seurat since then.
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-spatstat-import
-           (lambda _
-             (substitute* "NAMESPACE"
-               (("importFrom\\(spatstat,markvario\\)")
-                "importFrom(spatstat.core,markvario)")
-               (("importFrom\\(spatstat,ppp\\)")
-                "importFrom(spatstat.geom,ppp)")))))))
     (propagated-inputs
      `(("r-cluster" ,r-cluster)
        ("r-cowplot" ,r-cowplot)
@@ -26569,7 +26597,8 @@ other R users.")
        ("r-sctransform" ,r-sctransform)
        ("r-seuratobject" ,r-seuratobject)
        ("r-shiny" ,r-shiny)
-       ("r-spatstat" ,r-spatstat)
+       ("r-spatstat-core" ,r-spatstat-core)
+       ("r-spatstat-geom" ,r-spatstat-geom)
        ("r-tibble" ,r-tibble)
        ("r-uwot" ,r-uwot)))
     (home-page "http://www.satijalab.org/seurat")
@@ -26586,14 +26615,14 @@ discovery of differentially expressed genes and markers.")
 (define-public r-phangorn
   (package
     (name "r-phangorn")
-    (version "2.5.5")
+    (version "2.6.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "phangorn" version))
        (sha256
         (base32
-         "0ihkaykqjmf80d8wrk3saphxvnv58zma6pd13633bd3cwanc33f5"))))
+         "08yqz8qlw960x4b52wzrm22f242xnpc8695pjkhy7bi1nzm303ga"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-ape" ,r-ape)
@@ -26603,6 +26632,8 @@ discovery of differentially expressed genes and markers.")
        ("r-matrix" ,r-matrix)
        ("r-quadprog" ,r-quadprog)
        ("r-rcpp" ,r-rcpp)))
+    (native-inputs
+     `(("r-knitr" ,r-knitr)))
     (home-page "https://github.com/KlausVigo/phangorn")
     (synopsis "Phylogenetic analysis in R")
     (description
@@ -26642,33 +26673,6 @@ include Markov models of discrete and continuous trait evolution and constant
 rate speciation and extinction.")
     (license license:gpl2+)))
 
-(define-public r-absfiltergsea
-  (package
-    (name "r-absfiltergsea")
-    (version "1.5.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (cran-uri "AbsFilterGSEA" version))
-       (sha256
-        (base32 "15srxkxsvn38kd5frdrwfdf0ad8gskrd0h01wmdf9hglq8fjrp7w"))))
-    (properties `((upstream-name . "AbsFilterGSEA")))
-    (build-system r-build-system)
-    (propagated-inputs
-     `(("r-biobase" ,r-biobase)
-       ("r-deseq" ,r-deseq)
-       ("r-limma" ,r-limma)
-       ("r-rcpp" ,r-rcpp)
-       ("r-rcpparmadillo" ,r-rcpparmadillo)))
-    (home-page "https://cran.r-project.org/web/packages/AbsFilterGSEA/")
-    (synopsis "Improved false positive control of gene-permuting with absolute filtering")
-    (description
-     "This package provides a function that performs gene-permuting of a gene-set
-enrichment analysis (GSEA) calculation with or without the absolute filtering.
-  Without filtering, users can perform (original) two-tailed or one-tailed
-absolute GSEA.")
-    (license license:gpl2)))
-
 (define-public r-calculus
   (package
     (name "r-calculus")
@@ -26889,13 +26893,13 @@ are.")
 (define-public r-mlr3misc
   (package
     (name "r-mlr3misc")
-    (version "0.7.0")
+    (version "0.8.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "mlr3misc" version))
               (sha256
                (base32
-                "19k3l2d6wnqvdng0m7p54rrlvwl5457lcy7bg82m2bbpqxi8qch3"))))
+                "0mzicqs8rhzppyd7v3ljqs35k8pp7p2jg5cs7hx21mxr831bwsys"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-backports" ,r-backports)
@@ -26975,13 +26979,13 @@ computational operations, add-on packages provide additional functionality.")
 (define-public r-mlr3learners
   (package
     (name "r-mlr3learners")
-    (version "0.4.3")
+    (version "0.4.5")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "mlr3learners" version))
               (sha256
                (base32
-                "1wxlpzz3hpkn77n4ag1v868dmp140j1pmrhynsv5xfgk9fg0w7ri"))))
+                "02v4y32yn1m0akkqzhfg65ib21rgy9iz8db4kdcrvi949clkxnfk"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-data-table" ,r-data-table)
@@ -27001,14 +27005,14 @@ vector machines, and gradient boosting.")
 (define-public r-bbotk
   (package
     (name "r-bbotk")
-    (version "0.3.1")
+    (version "0.3.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "bbotk" version))
        (sha256
         (base32
-         "1f29wxnxr73c4yp5afk05jqggpm7k1z8wiak8xsyw68h7xflq550"))))
+         "0bd9nxfgsj4ixpgky1mj6knb8l8nivvxpqpyw8vgpkj0za7gp4gr"))))
     (properties `((upstream-name . "bbotk")))
     (build-system r-build-system)
     (propagated-inputs
@@ -27330,14 +27334,14 @@ clusterings as resolution increases.")
 (define-public r-textshaping
   (package
     (name "r-textshaping")
-    (version "0.3.2")
+    (version "0.3.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "textshaping" version))
        (sha256
         (base32
-         "0fqh4z505b2qriqcj70g2hhdgiawd3w2rs9rqxdwizz5vk8jjygx"))))
+         "0yl3cv6r8k27h4lzbrsikjydhz94skdjmxx4zqzihvb7h3jfnlpn"))))
     (properties `((upstream-name . "textshaping")))
     (build-system r-build-system)
     (inputs
@@ -27363,14 +27367,14 @@ the font tool-set provided by the @code{systemfonts} package.")
 (define-public r-ragg
   (package
     (name "r-ragg")
-    (version "1.1.1")
+    (version "1.1.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "ragg" version))
        (sha256
         (base32
-         "0nh1xxrxgdbq9anzkc6k3n519czp9hqyiizakm3m2gl4l4w0vp0q"))))
+         "0q28bwjdxpxm1wlkd8sxdf1m1q8wp4mmzp83d3m09nyy90ydkd8w"))))
     (properties `((upstream-name . "ragg")))
     (build-system r-build-system)
     (inputs
@@ -27600,7 +27604,7 @@ in same length matches).")
       `(("r-data-table" ,r-data-table)
         ("r-slam" ,r-slam)
         ("r-stringi" ,r-stringi)))
-    (home-page "http://github.com/trinker/textshape")
+    (home-page "https://github.com/trinker/textshape")
     (synopsis "Tools for Reshaping Text")
     (description
       "Tools that can be used to reshape and restructure text data.")
@@ -28031,28 +28035,30 @@ and formatted text files with additional meta-data, such including @code{.csv},
 (define-public r-lwgeom
   (package
     (name "r-lwgeom")
-    (version "0.2-5")
+    (version "0.2-6")
     (source
-      (origin
-        (method url-fetch)
-        (uri (cran-uri "lwgeom" version))
-        (sha256
-          (base32
-            "0byhjqa2acns8mznl1ngnfygxxxyszvnq66qfg0smhhhdkwr67aa"))))
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "lwgeom" version))
+       (sha256
+        (base32
+         "1733iwinn426bcmgjxp4j0scvbz35rvqkanmw7g7f47l6j7w14vn"))))
     (properties `((upstream-name . "lwgeom")))
     (build-system r-build-system)
-    (inputs `(("geos" ,geos) ("proj" ,proj) ("sqlite" ,sqlite)))
+    (inputs
+     `(("geos" ,geos)
+       ("proj" ,proj)
+       ("sqlite" ,sqlite)
+       ("zlib" ,zlib)))
     (propagated-inputs
-      `(("r-rcpp" ,r-rcpp)
-        ("r-sf" ,r-sf)
-        ("r-units" ,r-units)))
+     `(("r-rcpp" ,r-rcpp)
+       ("r-sf" ,r-sf)
+       ("r-units" ,r-units)))
     (native-inputs `(("pkg-config" ,pkg-config)))
-    (home-page
-      "https://github.com/r-spatial/lwgeom/")
-    (synopsis
-      "Bindings to Selected 'liblwgeom' Functions for Simple Features")
+    (home-page "https://github.com/r-spatial/lwgeom/")
+    (synopsis "Bindings to Selected 'liblwgeom' Functions for Simple Features")
     (description
-      "Access to selected functions found in
+     "Access to selected functions found in
 @url{https://github.com/postgis/postgis/tree/master/liblwgeom,liblwgeom}, the
 light-weight geometry library used by @url{http://postgis.net/,PostGIS}.")
     (license license:gpl2)))
@@ -28060,14 +28066,14 @@ light-weight geometry library used by @url{http://postgis.net/,PostGIS}.")
 (define-public r-stars
   (package
     (name "r-stars")
-    (version "0.5-1")
+    (version "0.5-2")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "stars" version))
         (sha256
           (base32
-            "0ybk899rc0rpf2cv5kwk78fvis5xnr255hfcy5khdxsxdqgl0m9j"))))
+            "0w2svw02ywvclq0nsnjns1n0rfr54q7x30y64y14n7zfr969ly1n"))))
     (properties `((upstream-name . "stars")))
     (build-system r-build-system)
     (propagated-inputs
@@ -28280,3 +28286,79 @@ functionalities for displaying text co-occurrence networks, text correlation
 networks, dependency relationships as well as text clustering.  Feel free to
 join the effort of providing interesting text visualisations.")
     (license license:gpl2)))
+
+(define-public r-gsa
+  (package
+    (name "r-gsa")
+    (version "1.03.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "GSA" version))
+       (sha256
+        (base32
+         "05x9wspah1cdznjpncqam1iawsxdiigyl8v2anyhss2k7wwd94p1"))))
+    (properties `((upstream-name . "GSA")))
+    (build-system r-build-system)
+    (home-page "https://statweb.stanford.edu/~tibs/GSA/")
+    (synopsis "Gene set analysis")
+    (description "This package lets you determine the significance of
+pre-defined sets of genes with respect to an outcome variable, such as a group
+indicator, a quantitative variable or a survival time.")
+    ;; Any version of the LGPL
+    (license license:lgpl3+)))
+
+(define-public r-samr
+  (package
+    (name "r-samr")
+    (version "3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "samr" version))
+       (sha256
+        (base32
+         "01km0f7qgm73x19vbvsxl083hs1dq4dj8qm5h64cxbf20b08my15"))))
+    (properties `((upstream-name . "samr")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-gsa" ,r-gsa)
+       ("r-impute" ,r-impute)
+       ("r-matrixstats" ,r-matrixstats)
+       ("r-openxlsx" ,r-openxlsx)
+       ("r-shiny" ,r-shiny)
+       ("r-shinyfiles" ,r-shinyfiles)))
+    (native-inputs `(("gfortran" ,gfortran)))
+    (home-page "https://statweb.stanford.edu/~tibs/SAM/")
+    (synopsis "Significance analysis of Microarrays")
+    (description
+     "This is a package for significance analysis of Microarrays for
+differential expression analysis, RNAseq data and related problems.")
+    ;; Any version of the LGPL
+    (license license:lgpl3+)))
+
+(define-public r-randomforestsrc
+  (package
+    (name "r-randomforestsrc")
+    (version "2.9.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "randomForestSRC" version))
+       (sha256
+        (base32
+         "05ifvj49jv0n5p6k46milpgj9r10sc5aw23fypyyibdgwpwvwixw"))))
+    (properties
+     `((upstream-name . "randomForestSRC")))
+    (build-system r-build-system)
+    (home-page "https://cran.r-project.org/web/packages/randomForestSRC/")
+    (synopsis "Random forests for survival, regression, and classification")
+    (description
+     "This package implements fast OpenMP parallel computing of Breiman's
+random forests for survival, competing risks, regression and classification
+based on Ishwaran and Kogalur's popular random survival forests (RSF) package.
+It handles missing data and now includes multivariate, unsupervised forests,
+quantile regression and solutions for class imbalanced data.  It provides a
+fast interface using subsampling and confidence regions for variable
+importance.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/crates-graphics.scm b/gnu/packages/crates-graphics.scm
index 3485e53938..cd1712dc13 100644
--- a/gnu/packages/crates-graphics.scm
+++ b/gnu/packages/crates-graphics.scm
@@ -1934,6 +1934,7 @@ interactive applications.")
         ("rust-arbitrary" ,rust-arbitrary-0.4)
         ("rust-arg-enum-proc-macro" ,rust-arg-enum-proc-macro-0.3)
         ("rust-arrayvec" ,rust-arrayvec-0.5)
+        ("rust-assert-cmd" ,rust-assert-cmd-1)
         ("rust-av-metrics" ,rust-av-metrics-0.6)
         ("rust-backtrace" ,rust-backtrace-0.3)
         ("rust-bitstream-io" ,rust-bitstream-io-1)
@@ -1942,6 +1943,7 @@ interactive applications.")
         ("rust-cfg-if" ,rust-cfg-if-1)
         ("rust-clap" ,rust-clap-2)
         ("rust-console" ,rust-console-0.14)
+        ("rust-criterion" ,rust-criterion-0.3)
         ("rust-crossbeam" ,rust-crossbeam-0.8)
         ("rust-dav1d-sys" ,rust-dav1d-sys-0.3)
         ("rust-fern" ,rust-fern-0.6)
@@ -1957,6 +1959,7 @@ interactive applications.")
         ("rust-num-derive" ,rust-num-derive-0.3)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-paste" ,rust-paste-1)
+        ("rust-pretty-assertions" ,rust-pretty-assertions-0.6)
         ("rust-rand" ,rust-rand-0.8)
         ("rust-rand-chacha" ,rust-rand-chacha-0.3)
         ("rust-rayon" ,rust-rayon-1)
diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index ae169b8988..4d3a7d541b 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -14,7 +14,7 @@
 ;;; Copyright © 2020 Antoine Côté <antoine.cote@posteo.net>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 aecepoglu <aecepoglu@fastmail.fm>
-;;; Copyright @ 2021 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -12978,6 +12978,26 @@ Standard.")
      "Streaming transcoding for encoding_rs.")
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-endian-type-0.1
+  (package
+    (name "rust-endian-type")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "endian-type" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0bbh88zaig1jfqrm7w3gx0pz81kw2jakk3055vbgapw3dmk08ky3"))))
+    (build-system cargo-build-system)
+    (arguments `(#:skip-build? #t))
+    (home-page "https://github.com/Lolirofle/endian-type")
+    (synopsis "Type safe wrappers for types with a defined byte order")
+    (description
+     "This crates provides type safe wrappers for types with a defined byte
+order.")
+    (license license:expat)))
+
 (define-public rust-enum-as-inner-0.3
   (package
     (name "rust-enum-as-inner")
@@ -13950,7 +13970,7 @@ supported in purely NFA-based implementations.")
     (synopsis "Find the physical space used by a file")
     (description
      "@code{filesize} abstracts platform-specific methods of determining the
-real space used by files, taking into account filesystem compression and
+real space used by files, taking into account file system compression and
 sparse files.")
     (license license:expat)))
 
@@ -17252,6 +17272,29 @@ highlighting for a large number of languages, git integration, and automatic
 paging.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-hamcrest2-0.3
+  (package
+    (name "rust-hamcrest2")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "hamcrest2" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0x8hx7jyzz2bl0wf6nir62imd26yhp6qcr7zf76cjpg05p33gy29"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-num" ,rust-num-0.2)
+        ("rust-regex" ,rust-regex-1))))
+    (home-page "https://github.com/Valloric/hamcrest2-rust")
+    (synopsis "Rust port of the Hamcrest testing library")
+    (description
+     "This package provides a port of the Hamcrest testing library.")
+    (license (list license:expat license:asl2.0))))
+
 (define-public rust-handlebars-2
   (package
     (name "rust-handlebars")
@@ -18038,8 +18081,8 @@ Hash-based Message Authentication Code}.")
     (home-page "https://github.com/pantsman0/rust-hmac-sha1")
     (synopsis "Minimal implementation of HMAC-SHA1 in Rust")
     (description
-     "This package is a pure Rust implementation of the Hash-based Message
-Authentication Code Algoritm (HMAC) for SHA1.")
+     "This package is a pure Rust implementation of the @acronym{HMAC,
+Hash-based Message Authentication Code algorithm} for SHA1.")
     (license license:bsd-3)))
 
 (define-public rust-hostname-0.3
@@ -22313,14 +22356,13 @@ image together with its neighboring pixels.")
     (name "rust-lopdf")
     (version "0.26.0")
     (source
-     (origin
-       (method url-fetch)
-       (uri (crate-uri "lopdf" version))
-       (file-name
-        (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1wqnmibs8qzi6pr3ig4h3sg6bfkkgyv4ngdng81x069725r056ml"))))
+      (origin
+        (method url-fetch)
+        (uri (crate-uri "lopdf" version))
+        (file-name
+          (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32 "1wqnmibs8qzi6pr3ig4h3sg6bfkkgyv4ngdng81x069725r056ml"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
@@ -22328,7 +22370,7 @@ image together with its neighboring pixels.")
         ("rust-dtoa" ,rust-dtoa-0.4)
         ("rust-encoding" ,rust-encoding-0.2)
         ("rust-flate2" ,rust-flate2-1)
-        ("rust-image" ,rust-image-0.23)
+        ("rust-image" ,rust-image-0.20)
         ("rust-itoa" ,rust-itoa-0.4)
         ("rust-linked-hash-map" ,rust-linked-hash-map-0.5)
         ("rust-log" ,rust-log-0.4)
@@ -22336,17 +22378,7 @@ image together with its neighboring pixels.")
         ("rust-nom" ,rust-nom-6)
         ("rust-pom" ,rust-pom-3)
         ("rust-rayon" ,rust-rayon-1)
-        ("rust-time" ,rust-time-0.2))
-       #:phases (modify-phases %standard-phases
-                  (add-before 'check 'disable-problematic-tests
-                    (lambda _
-                      ;; This tests depends on the test_1_create.pdf file
-                      ;; having created by create_document, but the file does
-                      ;; not always exist at the time the test run (see:
-                      ;; https://github.com/J-F-Liu/lopdf/issues/137).
-                      (substitute* "src/parser_aux.rs"
-                        (("fn load_and_save" all)
-                         (string-append "#[ignore] " all))))))))
+        ("rust-time" ,rust-time-0.2))))
     (home-page "https://github.com/J-F-Liu/lopdf")
     (synopsis "Rust library for PDF document manipulation")
     (description
@@ -24853,6 +24885,27 @@ cryptographic library.")
 release (fork of debug_unreachable)")
     (license license:expat)))
 
+(define-public rust-nibble-vec-0.1
+  (package
+    (name "rust-nibble-vec")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "nibble_vec" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0hsdp3s724s30hkqz74ky6sqnadhp2xwcj1n1hzy4vzkz4yxi9bp"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-smallvec" ,rust-smallvec-1))))
+    (home-page "https://github.com/michaelsproul/rust_nibble_vec")
+    (synopsis "Vector data-structure for half-byte values")
+    (description "NibbleVec is a data structure for storing a sequence of half-bytes.")
+    (license license:expat)))
+
 (define-public rust-nickel-0.11
   (package
     (name "rust-nickel")
@@ -24918,8 +24971,36 @@ selectors.  You can use the jQuery-like syntax to query and manipulate an HTML
 document quickly.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-nix-0.20
+  (package
+    (name "rust-nix")
+    (version "0.20.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "nix" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "12n1syfd967hblrcrrqk63a4s1h4hsybfqwblh71rihvv8cli6zs"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-cc" ,rust-cc-1)
+        ("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-libc" ,rust-libc-0.2))))
+    (home-page "https://github.com/nix-rust/nix")
+    (synopsis "Rust friendly bindings to *nix APIs")
+    (description
+     "Nix seeks to provide friendly bindings to various *nix platform APIs.
+The goal is to not provide a 100% unified interface, but to unify what can be
+while still providing platform specific APIs.")
+    (license license:expat)))
+
 (define-public rust-nix-0.19
   (package
+    (inherit rust-nix-0.20)
     (name "rust-nix")
     (version "0.19.1")
     (source
@@ -24929,7 +25010,6 @@ document quickly.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32 "1wk1pmaf9pv84sc4jf19gm1as2yq3ydwcx0n5nc1bpsgzq6bmk5j"))))
-    (build-system cargo-build-system)
     (arguments
      `(#:tests? #f                      ; test suite hangs
        #:cargo-inputs
@@ -24944,14 +25024,7 @@ document quickly.")
         ("rust-rand" ,rust-rand-0.6)
         ("rust-semver" ,rust-semver-0.9)
         ("rust-sysctl" ,rust-sysctl-0.1)
-        ("rust-tempfile" ,rust-tempfile-3))))
-    (home-page "https://github.com/nix-rust/nix")
-    (synopsis "Rust friendly bindings to *nix APIs")
-    (description
-     "Nix seeks to provide friendly bindings to various *nix platform APIs.
-The goal is to not provide a 100% unified interface, but to unify what can be
-while still providing platform specific APIs.")
-    (license license:expat)))
+        ("rust-tempfile" ,rust-tempfile-3))))))
 
 (define-public rust-nix-0.18
   (package
@@ -31051,6 +31124,31 @@ that must be shared-mutable, but merely may use atomic instructions to do so.")
 radix.")
     (license license:asl2.0)))
 
+(define-public rust-radix-trie-0.2
+  (package
+    (name "rust-radix-trie")
+    (version "0.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "radix_trie" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1zaq3im5ss03w91ij11cj97vvzc5y1f3064d9pi2ysnwziww2sf0"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-endian-type" ,rust-endian-type-0.1)
+        ("rust-nibble-vec" ,rust-nibble-vec-0.1)
+        ("rust-serde" ,rust-serde-1))))
+    (home-page "https://github.com/michaelsproul/rust_radix_trie")
+    (synopsis "Generic radix trie data-structure")
+    (description
+     "This is a Radix Trie implementation in Rust, building on the lessons
+learnt from TrieMap and Sequence Trie.")
+    (license license:expat)))
+
 (define-public rust-rand-0.8
   (package
     (name "rust-rand")
@@ -31271,14 +31369,14 @@ useful types and distributions, and some randomness-related algorithms.")
 (define-public rust-rand-core-0.6
   (package
     (name "rust-rand-core")
-    (version "0.6.1")
+    (version "0.6.2")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rand_core" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1rfjrcyaj7blz2nawv2pypm5kqc59p80n6f5pg691399iggxf9n0"))))
+        (base32 "1rvas1afjvd2827b8mf2ilg78h3ksl9npkrdds3wbw9x33mndkrl"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -33090,14 +33188,14 @@ MessagePack format.")
 (define-public rust-rocket-0.4
   (package
     (name "rust-rocket")
-    (version "0.4.6")
+    (version "0.4.7")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rocket" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1sb6i0y65hq4wy4awa14diyv19wcd1sii2mfjdlcwam3mbbfbisg"))))
+        (base32 "04ybnhjw92zaan92lsmx6mkhqc9cpsg3885svb3wzyj39pyzvsvz"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -33127,14 +33225,14 @@ and speed.")
 (define-public rust-rocket-codegen-0.4
   (package
     (name "rust-rocket-codegen")
-    (version "0.4.6")
+    (version "0.4.7")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rocket_codegen" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0n4k00fwwabvkjvnl62gwdc5v7rsg6bnmmwwiwm5bzpmdnqm94ai"))))
+        (base32 "18s2dll8c4sd26s8cfr6cizj5z55xwnk6r6x7b2wvcf8n9ajrb6f"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -33155,14 +33253,14 @@ and speed.")
 (define-public rust-rocket-http-0.4
   (package
     (name "rust-rocket-http")
-    (version "0.4.6")
+    (version "0.4.7")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rocket_http" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0msjjclqcgh8kpa54b4kv6zbybambc9kmkfm1q5adiq3fbg8gl59"))))
+        (base32 "0ga98nbcga8amg4xhrfkn1wljnqx9h0vv7mnay9g66vsxl042dnf"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -35152,17 +35250,17 @@ sub-processes using a fork-like interface.")
         ("rust-tempfile" ,rust-tempfile-3)
         ("rust-wait-timeout" ,rust-wait-timeout-0.2))))))
 
-(define-public rust-rustyline-7
+(define-public rust-rustyline-8
   (package
     (name "rust-rustyline")
-    (version "7.1.0")
+    (version "8.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "rustyline" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1v1czmy3ir7d06xldp8bg94l97hrm15hcgdxxkq3cwbizhdk09w2"))))
+        (base32 "14z8hyx33ygyhm5ihcl9n2g646dawlw3ajavnbbb3vnizjbvbqdr"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -35174,19 +35272,51 @@ sub-processes using a fork-like interface.")
         ("rust-libc" ,rust-libc-0.2)
         ("rust-log" ,rust-log-0.4)
         ("rust-memchr" ,rust-memchr-2)
-        ("rust-nix" ,rust-nix-0.19)
+        ("rust-nix" ,rust-nix-0.20)
+        ("rust-radix-trie" ,rust-radix-trie-0.2)
         ("rust-scopeguard" ,rust-scopeguard-1)
+        ("rust-smallvec" ,rust-smallvec-1)
         ("rust-unicode-segmentation" ,rust-unicode-segmentation-1)
         ("rust-unicode-width" ,rust-unicode-width-0.1)
         ("rust-utf8parse" ,rust-utf8parse-0.2)
         ("rust-winapi" ,rust-winapi-0.3)
-        ("skim" ,skim-0.7))))
+        ("skim" ,skim))))
     (home-page "https://github.com/kkawakam/rustyline")
     (synopsis "Readline implementation in Rust")
     (description
-     "Rustyline, a readline implementation based on the linenoise package.")
+     "Rustyline is a readline implementation based on the linenoise package.")
     (license license:expat)))
 
+(define-public rust-rustyline-7
+  (package
+    (inherit rust-rustyline-8)
+    (name "rust-rustyline")
+    (version "7.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "rustyline" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1v1czmy3ir7d06xldp8bg94l97hrm15hcgdxxkq3cwbizhdk09w2"))))
+    (arguments
+     `(#:skip-build? #t
+       #:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-1)
+        ("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-dirs-next" ,rust-dirs-next-2)
+        ("rust-fs2" ,rust-fs2-0.4)
+        ("rust-libc" ,rust-libc-0.2)
+        ("rust-log" ,rust-log-0.4)
+        ("rust-memchr" ,rust-memchr-2)
+        ("rust-nix" ,rust-nix-0.19)
+        ("rust-scopeguard" ,rust-scopeguard-1)
+        ("rust-unicode-segmentation" ,rust-unicode-segmentation-1)
+        ("rust-unicode-width" ,rust-unicode-width-0.1)
+        ("rust-utf8parse" ,rust-utf8parse-0.2)
+        ("rust-winapi" ,rust-winapi-0.3)
+        ("skim" ,skim-0.7))))))
+
 (define-public rust-rustyline-6
   (package
     (inherit rust-rustyline-7)
@@ -35673,8 +35803,9 @@ with one of the implemented strategies.")
        (("rust-fs2" ,rust-fs2-0.4))))
     (home-page "https://github.com/dtolnay/scratch")
     (synopsis "Compile-time temporary directory")
-    (description "This crate exposes a compile-time temporary directory sharable
-by multiple crates in a build graph and erased by @code{cargo clean}.")
+    (description "This crate exposes a compile-time temporary directory
+shareable by multiple crates in a build graph and erased by @code{cargo
+clean}.")
     (license (list license:expat license:asl2.0))))
 
 (define-public rust-scrypt-0.3
@@ -38890,7 +39021,7 @@ I/O programming.")
 (define-public rust-smallvec-1
   (package
     (name "rust-smallvec")
-    (version "1.4.1")
+    (version "1.6.1")
     (source
      (origin
        (method url-fetch)
@@ -38899,7 +39030,7 @@ I/O programming.")
         (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0gqgmbfj8228lc55xxg331flizzwq6hfyy6gw4j2y6hni6fwnmrp"))))
+         "0kk08axr0ybfbjzk65a41k84mb6sfhyajmfndaka9igkx34kf3zy"))))
     (build-system cargo-build-system)
     (arguments
      `(#:cargo-inputs
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index c5b11b5e8a..6df36966c6 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -153,7 +153,7 @@ base compiler and using LIBC (which may be either a libc package or #f.)"
                                "--disable-decimal-float" ;would need libc
                                "--disable-libcilkrts"
 
-                              ,@(if (equal? "powerpc64le-linux-gnu" target)
+                              ,@(if (string-prefix? "powerpc64le-" target)
                                    ;; On POWER9 (little endian) glibc needs
                                    ;; the 128-bit long double type.
                                    '("--with-long-double-128")
diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm
index 9316af8d97..fd0663ea3f 100644
--- a/gnu/packages/crypto.scm
+++ b/gnu/packages/crypto.scm
@@ -773,15 +773,18 @@ data on your platform, so the seed itself will be as random as possible.
 (define-public crypto++
   (package
     (name "crypto++")
-    (version "8.4.0")
+    (version "8.5.0")
     (source (origin
-              (method url-fetch/zipbomb)
-              (uri (string-append "https://cryptopp.com/cryptopp"
-                                  (string-join (string-split version #\.) "")
-                                  ".zip"))
+              (method git-fetch)
+              (uri
+               (git-reference
+                (url "https://github.com/weidai11/cryptopp")
+                (commit
+                 (string-append "CRYPTOPP_"
+                                (string-replace-substring version "." "_")))))
               (sha256
                (base32
-                "16kvfm11xv7j9a3yykzysjgw38a9b7lnc5n5x5h82g395k6ybxf0"))))
+                "0in7rlazq91vfi519g9wr7bh87hii47cimxv7fmj0f88vhjaidq3"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
diff --git a/gnu/packages/cryptsetup.scm b/gnu/packages/cryptsetup.scm
index a12ac93b25..1b3da5389c 100644
--- a/gnu/packages/cryptsetup.scm
+++ b/gnu/packages/cryptsetup.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2019–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,7 +35,7 @@
 (define-public cryptsetup
   (package
    (name "cryptsetup")
-   (version "2.3.4")
+   (version "2.3.5")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://kernel.org/linux/utils/cryptsetup/v"
@@ -43,7 +43,7 @@
                                 "/cryptsetup-" version ".tar.xz"))
             (sha256
              (base32
-              "0wrpz2fzbsszmsgxxbssxjgylpyiindh24z8g13m2fxmjsxyw5lx"))))
+              "1hbhzlv4vbib1da20vnrqaikhxi7ljnchbzrv8v2a4sd8ipr9nff"))))
    (build-system gnu-build-system)
    (arguments
     `(#:configure-flags
diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm
index b723e3ab67..236b45d90e 100644
--- a/gnu/packages/cups.scm
+++ b/gnu/packages/cups.scm
@@ -744,14 +744,15 @@ printer/driver specific, but spooler-independent PPD file.")
 (define-public foo2zjs
   (package
     (name "foo2zjs")
-    (version "20200610")
-    (source (origin
-              (method url-fetch)
-              ;; XXX: This is an unversioned URL!
-              (uri "http://foo2zjs.rkkda.com/foo2zjs.tar.gz")
-              (sha256
-               (base32
-                "11ddx6wf8b5ksl4fqw6fnyz9m3y470lryyrskkya2bsch2bvj9lg"))))
+    (version "20200610.1")
+    (source
+     (origin
+       (method url-fetch)
+       ;; The upstream tarball is unversioned: use a stable snapshot.
+       (uri (string-append "https://web.archive.org/web/20210224094943if_/"
+                           "http://foo2zjs.rkkda.com/foo2zjs.tar.gz"))
+       (sha256
+        (base32 "03ncif50n7ck7drggqxbc7w0kgzdb90ha0dbvqk98ky8lw3k76xd"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm
index 17bee2e4ab..3e8ad938b2 100644
--- a/gnu/packages/curl.scm
+++ b/gnu/packages/curl.scm
@@ -62,6 +62,7 @@
               (base32
                "1j2g04m6als6hmqzvddv84c31m0x90bfgyz3bjrwdkarbkby40k3"))
              (patches (search-patches "curl-use-ssl-cert-env.patch"))))
+   (replacement curl/fixed)
    (build-system gnu-build-system)
    (outputs '("out"
               "doc"))                             ;1.2 MiB of man3 pages
@@ -145,6 +146,20 @@ tunneling, and so on.")
 (define-public curl-minimal
   (deprecated-package "curl-minimal" curl))
 
+(define-public curl/fixed
+  (package
+    (inherit curl)
+    (version "7.76.0")
+    (source
+     (origin
+       (inherit (package-source curl))
+       (uri (string-append "https://curl.haxx.se/download/curl-"
+                           version ".tar.xz"))
+       (patches (search-patches "curl-7.76-use-ssl-cert-env.patch"))
+       (sha256
+        (base32
+         "1j2g04m6als6hmqzvddv84c31m0x90bfgyz3bjrwdkarbkby40k3"))))))
+
 (define-public kurly
   (package
     (name "kurly")
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index f7b03e96ab..3c865b05c1 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -48,6 +48,7 @@
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2021 David Larsson <david.larsson@selfhosted.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -734,6 +735,7 @@ Language.")
                             (append (find-files "extra/wolfssl")
                                     (find-files "zlib")))
                   #t))))
+    (replacement mariadb/fixed)
     (build-system cmake-build-system)
     (outputs '("out" "lib" "dev"))
     (arguments
@@ -969,6 +971,13 @@ Language.")
 as a drop-in replacement of MySQL.")
     (license license:gpl2)))
 
+(define mariadb/fixed
+  (package
+    (inherit mariadb)
+    (source (origin
+              (inherit (package-source mariadb))
+              (patches (search-patches "mariadb-CVE-2021-27928.patch"))))))
+
 (define-public mariadb-connector-c
   (package
     (name "mariadb-connector-c")
@@ -994,6 +1003,31 @@ as a drop-in replacement of MySQL.")
 developed in C/C++ to MariaDB and MySQL databases.")
     (license license:lgpl2.1+)))
 
+(define-public galera
+  (package
+    (name "galera")
+    (version "26.4.7")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (commit "bac8171266cb982fe013ce496d78085438c6f23e")
+                    (url "https://github.com/codership/galera")
+                    (recursive? #t)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32 "0h7s670pcasq8wzprhyxqfca2cghi62b8xz2kikb2a86wd453qil"))))
+    (build-system cmake-build-system)
+    (inputs
+     `(("check" ,check)
+       ("boost" ,boost)
+       ("openssl" ,openssl)))
+    (home-page "https://github.com/codership/galera/")
+    (synopsis "Extension to the MariaDB database server")
+    (description
+     "Galera is a wsrep-provider that is used with MariaDB for load-balancing
+and high-availability (HA).")
+    (license license:gpl2)))                  ;'COPYING' says "version 2" only
+
 ;; Don't forget to update the other postgresql packages when upgrading this one.
 (define-public postgresql-13
   (package
@@ -2467,7 +2501,10 @@ can autogenerate peewee models using @code{pwiz}, a model generator.")
                     (lambda _
                       (substitute* "setup.py"
                         (("pypika>=0\\.44\\.0,<0\\.45\\.0") "pypika")
-                        (("aiosqlite>=0.16.0,<0.17.0") "aiosqlite"))
+                        (("aiosqlite>=0.16.0,<0.17.0") "aiosqlite")
+                        (("pytz>=2020\\.4,<2021\\.0") "pytz")
+                        ;; Not required, since ciso8601 is used.
+                        (("'iso8601>=0\\.1\\.13,<0\\.2\\.0',") ""))
                       #t)))))
     (native-inputs
      `(("python-asynctest" ,python-asynctest)
@@ -2476,6 +2513,7 @@ can autogenerate peewee models using @code{pwiz}, a model generator.")
      `(("python-aiosqlite" ,python-aiosqlite)
        ("python-pypika" ,python-pypika)
        ("python-ciso8601" ,python-ciso8601)
+       ("python-pytz" ,python-pytz)
        ("python-typing-extensions"
         ,python-typing-extensions)))
     (home-page
@@ -3776,7 +3814,8 @@ The drivers officially supported by @code{libdbi} are:
                (base32
                 "14x2gjblkgpflv75wl144cyjp1sis5rbxnr9r2gj3yw16v2av0bp"))))
     (build-system cmake-build-system)
-    (inputs
+    (propagated-inputs
+     ;; Headers of soci has include-references to headers of these inputs.
      `(("firebird" ,firebird)
        ("postgresql" ,postgresql)
        ("sqlite" ,sqlite)
@@ -3799,14 +3838,14 @@ PostreSQL, SQLite, ODBC and MySQL.")
 (define-public freetds
   (package
     (name "freetds")
-    (version "1.2.18")
+    (version "1.2.19")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.freetds.org/files/stable/"
                            "freetds-" version ".tar.gz"))
        (sha256
-        (base32 "1hspvwxwdd1apadsy2b40dpjik8kfwcvdamvhpg3lnm15n02fb50"))))
+        (base32 "11xf2w8gh2p9cq4i38jfvdiwgig8wqbg098xjc08kx4iii8lxy3m"))))
     (build-system gnu-build-system)
     (arguments
      ;; NOTE: (Sharlatan-20210110213908+0000) some tests require DB connection,
diff --git a/gnu/packages/debian.scm b/gnu/packages/debian.scm
index 221f23e42b..26b7f5194e 100644
--- a/gnu/packages/debian.scm
+++ b/gnu/packages/debian.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;;
@@ -41,7 +41,7 @@
 (define-public debian-archive-keyring
   (package
     (name "debian-archive-keyring")
-    (version "2019.1")
+    (version "2021.1.1")
     (source
       (origin
         (method git-fetch)
@@ -51,7 +51,7 @@
         (file-name (git-file-name name version))
         (sha256
          (base32
-          "0bphwji3ywk1zi5bq8bhqk7l51fwjy1idwsw7zfqnxca8m5wvw1g"))))
+          "0dcmv7y1k6j3a646kr0rkd2a0c4j2wrz868bh8j9zjx1npzns73q"))))
     (build-system gnu-build-system)
     (arguments
      '(#:test-target "verify-results"
@@ -84,7 +84,7 @@ contains the archive keys used for that.")
 (define-public ubuntu-keyring
   (package
     (name "ubuntu-keyring")
-    (version "2018.09.18.1")
+    (version "2021.03.26")
     (source
       (origin
         (method url-fetch)
@@ -92,7 +92,7 @@ contains the archive keys used for that.")
                             "+files/" name "_" version ".tar.gz"))
         (sha256
          (base32
-          "0csx2n62rj9rxjv4y8qhby7l9rbybfwrb0406pc2cjr7f2yk91af"))))
+          "1ccvwh4s51viyhcg8gh189jmvbrhc5wv1bbp4minz3200rffsbj9"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
@@ -284,7 +284,7 @@ other apt sources typically provided by open source developers.")
 (define-public dpkg
   (package
     (name "dpkg")
-    (version "1.20.7.1")
+    (version "1.20.9")
     (source
       (origin
         (method git-fetch)
@@ -294,7 +294,7 @@ other apt sources typically provided by open source developers.")
         (file-name (git-file-name name version))
         (sha256
          (base32
-          "0d1cppigwhpv0z1ac94gjalkzs3n0gjyi383pkhz1h9d4fvmadk9"))))
+          "16wlb8hwbdvxar187bjd4pzdzj95g3l2ryi2khqqmwbyca4sjm1n"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/debug.scm b/gnu/packages/debug.scm
index 2913c348f3..9a4ce7067a 100644
--- a/gnu/packages/debug.scm
+++ b/gnu/packages/debug.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2016, 2017, 2019, 2020 Eric Bavier <bavier@posteo.net>
-;;; Copyright © 2016, 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2019 Pkill -9 <pkill9@runbox.com>
@@ -179,12 +179,13 @@ tools that process C/C++ code.")
                    ("aarch64-linux"  "aarch64")
                    ("armhf-linux"    "arm")
                    ("mips64el-linux" "mips64el")
+                   ("powerpc-linux"  "ppc")
                    ;; Prevent errors when querying this package on unsupported
                    ;; platforms, e.g. when running "guix package --search="
                    (_                "UNSUPPORTED"))))
     (package
       (name "american-fuzzy-lop")
-      (version "2.56b")             ;It seems all releases have the 'b' suffix
+      (version "2.57b")             ;It seems all releases have the 'b' suffix
       (source
        (origin
          (method git-fetch)
@@ -192,7 +193,7 @@ tools that process C/C++ code.")
                (url "https://github.com/google/AFL")
                (commit (string-append "v" version))))
          (sha256
-          (base32 "1q1g59gkm48aa4cg9h70jx4i2gapmypgp5rzs156b2avd95vwkn1"))
+          (base32 "0ks0s8iizp7mpc9mlpv126rsny0dkljfsw68689g9jiisjz2z530"))
          (file-name (git-file-name name version))))
       (build-system gnu-build-system)
       (inputs
@@ -254,6 +255,7 @@ down the road.")
                    ("aarch64-linux"  "aarch64")
                    ("armhf-linux"    "arm")
                    ("mips64el-linux" "mips64el")
+                   ("powerpc-linux"  "ppc")
                    ;; Prevent errors when querying this package on unsupported
                    ;; platforms, e.g. when running "guix package --search="
                    (_                "UNSUPPORTED"))))
@@ -269,7 +271,8 @@ down the road.")
               (base32
                "17w21spvaxaidi2am5lpsln8yjpyp2zi3s3gc6nsxj5arlgamzgw"))
              (patches
-              (search-patches "qemu-glibc-2.27.patch"))))
+              (search-patches "qemu-glibc-2.27.patch"
+                              "qemu-glibc-2.30.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(;; Running tests in parallel can occasionally lead to failures, like:
diff --git a/gnu/packages/diffoscope.scm b/gnu/packages/diffoscope.scm
index 20ba92709a..d5f782e68d 100644
--- a/gnu/packages/diffoscope.scm
+++ b/gnu/packages/diffoscope.scm
@@ -72,7 +72,7 @@
 (define-public diffoscope
   (package
     (name "diffoscope")
-    (version "170")
+    (version "172")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -81,7 +81,7 @@
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0s1z4yc5d10ns4x28d2lm8py30r7sq4764q6b8yxcwxwfrjibmb0"))))
+                "1lglxn9h8s7kvmfd2rsyhrcv3y8a4bppbxr9nf2sgnlbdln1vwqq"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm
index ed112f2ec2..bf0897b083 100644
--- a/gnu/packages/disk.scm
+++ b/gnu/packages/disk.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2016, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
@@ -302,17 +302,69 @@ fdisk.  fdisk is used for the creation and manipulation of disk partition
 tables, and it understands a variety of different formats.")
     (license license:gpl3+)))
 
+(define-public gpart
+  ;; The latest (0.3) release is from 2015 and is missing a crash fix.
+  (let ((commit "ec03350a01ad69708b5a3e2d47b8e002b0eba6c9")
+        (revision "0"))
+    (package
+      (name "gpart")
+      (version (git-version "0.3" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/baruch/gpart")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1dassswliaiwhhmx7yz540yyxgk53fvg672dbvgc5q0v6cqrh5jx"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:configure-flags
+         (list (string-append "--docdir=" (assoc-ref %outputs "out") "/share/doc/"
+                              ,name "-" ,version))
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'skip-premature-configuration
+             (lambda _
+               (substitute* "autogen.sh"
+                 (("\\./configure") "")))))))
+      (native-inputs
+       `(("autoconf" ,autoconf)
+         ("automake" ,automake)))
+      (home-page "https://github.com/baruch/gpart")
+      (synopsis "Guess and recover PC-style partition tables")
+      (description
+       "Gpart tries to guess the partitions on a PC-style, MBR-partitioned disk
+after they have been inadvertently deleted or the primary partition table at
+sector 0 damaged.  In both cases, the contents of these partitions still exist
+on the disk but the operating system cannot access them.
+
+Gpart ignores the partition table and scans each sector of the device or image
+file for several known file system and partition types.  Only partitions which
+have been formatted in some way can be recognized.  Several file system guessing
+modules are built in; more can be written and loaded at run time.
+
+The guessed table can be restored manually, for example with @command{fdisk},
+written to a file, or---if you firmly believe it's entirely correct---directly
+to disk.
+
+It should be stressed that gpart does a very heuristic job.  It can easily be
+right in its guesswork but it can also be terribly wrong.  Never believe its
+output without any plausibility checks.")
+      (license license:gpl2+))))
+
 (define-public gptfdisk
   (package
     (name "gptfdisk")
-    (version "1.0.6")
+    (version "1.0.7")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://sourceforge/gptfdisk/gptfdisk/"
                           version "/gptfdisk-" version ".tar.gz"))
       (sha256
-       (base32 "1a4c2ss6n2s6x8v11h79jykh96y46apd6i838ka0ngx58gb53ifx"))))
+       (base32 "1h1871gwlq05gdc2wym98ghfmq6pn5lh8g5cqy3r49svz2vh8h3m"))))
     (build-system gnu-build-system)
     (inputs
      `(("gettext" ,gettext-minimal)
@@ -363,6 +415,8 @@ scheme.")
       (sha256
        (base32 "0qqh38izl5ppap9a5izf3hijh94k65s3zbfkczd4b7x04syqwlyf"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags (list (string-append "CXX=" ,(cxx-for-target)))))
     (home-page "https://www.gnu.org/software/ddrescue/ddrescue.html")
     (synopsis "Data recovery utility")
     (native-inputs `(("lzip" ,lzip)))
diff --git a/gnu/packages/django.scm b/gnu/packages/django.scm
index 0006f25207..2817160d7b 100644
--- a/gnu/packages/django.scm
+++ b/gnu/packages/django.scm
@@ -48,13 +48,13 @@
 (define-public python-django
   (package
     (name "python-django")
-    (version "3.1.7")
+    (version "3.1.8")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "Django" version))
               (sha256
                (base32
-                "19v5lfijnjx18y9ax962z3gnbxy9k8i3w4j0qfzcp85nx4p7kkij"))))
+                "1b0ymqv09b523k3c2jnpb2gjy2fsy6irbfyc2g9x5hjyw41k2fgq"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -120,13 +120,13 @@ to the @dfn{don't repeat yourself} (DRY) principle.")
 (define-public python-django-2.2
   (package
     (inherit python-django)
-    (version "2.2.19")
+    (version "2.2.20")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "Django" version))
               (sha256
                (base32
-                "0hysjf8bz4g8xrn2cdx6pmawimpyr6ag2fg3jxsnc1byr3g3bhih"))))
+                "0r3a6gbhwngxl172yy6n0sq5knibl2vxc0wbk1g8licfbzfgjs95"))))
     (native-inputs
      `(;; XXX: In 2.2 and 3.0, selenium is required for the test suite.
        ("python-selenium" ,python-selenium)
diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm
index 16e2ec4f41..3cf88febae 100644
--- a/gnu/packages/dns.scm
+++ b/gnu/packages/dns.scm
@@ -18,6 +18,7 @@
 ;;; Copyright © 2020 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2020 Simon South <simon@simonsouth.net>
+;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -277,7 +278,7 @@ prompt the user with the option to go with insecure DNS only.")
 (define-public dnsmasq
   (package
     (name "dnsmasq")
-    (version "2.84")
+    (version "2.85")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -285,7 +286,7 @@ prompt the user with the option to go with insecure DNS only.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "0305a0c3snwqcv77sipyynr55xip1fp2843yn04pc4vk9g39acb0"))))
+                "1yhjwgz8g5qrqvxh6bbmg3443zi8qqjks3q872wyb1zn7n0d765d"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -538,14 +539,14 @@ asynchronous fashion.")
 (define-public nsd
   (package
     (name "nsd")
-    (version "4.3.5")
+    (version "4.3.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.nlnetlabs.nl/downloads/nsd/nsd-"
                            version ".tar.gz"))
        (sha256
-        (base32 "0wj490rxqs86z8s4lxjwk06ry5pvkdqqyq1cf83z7mxk60zb98kx"))))
+        (base32 "062zwx4k5rgpg2c0b4721ldj36aj8clrxv79mlfw9b15ap7w1rmy"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -812,7 +813,7 @@ Extensions} (DNSSEC).")
 (define-public knot
   (package
     (name "knot")
-    (version "3.0.4")
+    (version "3.0.5")
     (source
      (origin
        (method git-fetch)
@@ -821,7 +822,7 @@ Extensions} (DNSSEC).")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1mbjl18zi8yxs7pa3395lqjwdw0agjbfpl32x42i6d9zb8fsblzs"))
+        (base32 "16rgcmgj21w2niyz45d3zjlci9i22gxcvfzqw7g5zwsjdy9610nx"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -942,14 +943,14 @@ synthesis, and on-the-fly re-configuration.")
 (define-public knot-resolver
   (package
     (name "knot-resolver")
-    (version "5.3.0")
+    (version "5.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://secure.nic.cz/files/knot-resolver/"
                                   "knot-resolver-" version ".tar.xz"))
               (sha256
                (base32
-                "0gp3ivv3zccz4b6s1wxbsvvlrc837lw2g089l3cbvzsg7z0b4v7v"))))
+                "1j99sz6r1hdvvd8rffx1917r9cyb7z46ivp5934sq57irmxnnkcx"))))
     (build-system meson-build-system)
     (outputs '("out" "doc"))
     (arguments
@@ -1109,20 +1110,17 @@ attempts the update when it has changed.")
     (license license:gpl2+)))
 
 (define-public hnsd
-  ;; There have been no releases yet, hence this commit.
-  (let ((revision "0")
-        (commit "895d89c25d316d18df9d374fe78aae3902bc89fb"))
    (package
      (name "hnsd")
-     (version (git-version "0.0" revision commit))
+     (version "1.0.0")
      (source (origin
                (method git-fetch)
                (uri (git-reference
                      (url "https://github.com/handshake-org/hnsd")
-                     (commit commit)))
+                     (commit (string-append "v" version))))
                (sha256
                 (base32
-                 "0704y73sddn24jga9csw4gxyfb3pnrfnk0vdcph84n1h38490l16"))
+                 "1kdgff8rf8gmvwz2p758ilbjxpvz4xm6z41pa5353asg6xb853bb"))
                (file-name (git-file-name name version))
                (modules '((guix build utils)))
                (snippet
@@ -1159,7 +1157,7 @@ attempts the update when it has changed.")
      (description
       "@command{hnsd} is a @dfn{host name resolver} for the Handshake Naming
 System (HNS) peer-to-peer network.")
-     (license license:expat))))
+     (license license:expat)))
 
 (define-public libmicrodns
   (package
diff --git a/gnu/packages/docbook.scm b/gnu/packages/docbook.scm
index acc17f0c80..3fd1930c79 100644
--- a/gnu/packages/docbook.scm
+++ b/gnu/packages/docbook.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,6 +36,7 @@
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module ((guix build utils) #:select (alist-replace))
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system python))
@@ -469,6 +471,17 @@ DB2LaTeX.")
     ;; lib/contrib/which is under an X11 license
     (license gpl2+)))
 
+;; This is a variant of the 'dblatex' package that is not updated often.  It
+;; is intended to be used as a native-input at build-time only, e.g. by
+;; 'gtk-doc' for generating package documentation.  This allows the main
+;; 'dblatex' and 'imagemagick' packages to be freely updated on the 'master'
+;; branch without triggering an excessive number of rebuilds.
+(define-public dblatex/stable
+  (hidden-package
+   (package/inherit dblatex
+     (inputs (alist-replace "imagemagick" `(,imagemagick/stable)
+                            (package-inputs dblatex))))))
+
 (define-public docbook-utils
   (package
     (name "docbook-utils")
diff --git a/gnu/packages/docker.scm b/gnu/packages/docker.scm
index 5c6292c122..6083ed780b 100644
--- a/gnu/packages/docker.scm
+++ b/gnu/packages/docker.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2016 David Thompson <davet@gnu.org>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Katherine Cox-Buday <cox.katherine.e@gmail.com>
 ;;; Copyright © 2020 Jesse Dowell <jessedowell@gmail.com>
@@ -177,7 +177,7 @@ Python without keeping their credentials in a Docker configuration file.")
 (define-public containerd
   (package
     (name "containerd")
-    (version "1.3.10")
+    (version "1.4.4")
     (source
      (origin
        (method git-fetch)
@@ -186,49 +186,55 @@ Python without keeping their credentials in a Docker configuration file.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "10fz7359aydbz0yb01qkrsq2diypayfal618lvvb1x0gvgkp526i"))))
+        (base32 "0qjbfj1dw6pykxhh8zahcxlgpyjzgnrngk5vjaf34akwyan8nrxb"))))
     (build-system go-build-system)
     (arguments
-     `(#:import-path "github.com/containerd/containerd"
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'chdir 'patch-paths
-           (lambda* (#:key inputs import-path outputs #:allow-other-keys)
-             ;; TODO: Patch "socat", "unpigz".
-             (with-directory-excursion (string-append "src/" import-path)
-               (substitute* "./runtime/v1/linux/runtime.go"
-                 (("defaultRuntime[ \t]*=.*")
-                  (string-append "defaultRuntime = \""
-                                 (assoc-ref inputs "runc")
-                                 "/sbin/runc\"\n"))
-                 (("defaultShim[ \t]*=.*")
-                  (string-append "defaultShim = \""
-                                 (assoc-ref outputs "out")
-                                 "/bin/containerd-shim\"\n")))
-               (substitute* "./vendor/github.com/containerd/go-runc/runc.go"
-                 (("DefaultCommand[ \t]*=.*")
-                  (string-append "DefaultCommand = \""
-                                 (assoc-ref inputs "runc")
-                                 "/sbin/runc\"\n")))
-               (substitute* "vendor/github.com/containerd/continuity/testutil/loopback/loopback_linux.go"
-                 (("exec\\.Command\\(\"losetup\"") ; )
-                  (string-append "exec.Command(\""
-                                 (assoc-ref inputs "util-linux")
-                                 "/sbin/losetup\""))) ;)
-               #t)))
-         (replace 'build
-           (lambda* (#:key import-path (make-flags '()) #:allow-other-keys)
-             (with-directory-excursion (string-append "src/" import-path)
-               (apply invoke "make" make-flags))))
-         (replace 'install
-           (lambda* (#:key import-path outputs (make-flags '()) #:allow-other-keys)
-             (with-directory-excursion (string-append "src/" import-path)
-               (let* ((out (assoc-ref outputs "out")))
-                 (apply invoke "make" (string-append "DESTDIR=" out) "install"
-                        make-flags))))))))
+     (let ((make-flags (list (string-append "VERSION=" version)
+                             "REVISION=0")))
+       `(#:import-path "github.com/containerd/containerd"
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'chdir 'patch-paths
+             (lambda* (#:key inputs import-path outputs #:allow-other-keys)
+               (with-directory-excursion (string-append "src/" import-path)
+                 (substitute* "runtime/v1/linux/runtime.go"
+                   (("defaultRuntime[ \t]*=.*")
+                    (string-append "defaultRuntime = \""
+                                   (assoc-ref inputs "runc")
+                                   "/sbin/runc\"\n"))
+                   (("defaultShim[ \t]*=.*")
+                    (string-append "defaultShim = \""
+                                   (assoc-ref outputs "out")
+                                   "/bin/containerd-shim\"\n")))
+                 (substitute* "vendor/github.com/containerd/go-runc/runc.go"
+                   (("DefaultCommand[ \t]*=.*")
+                    (string-append "DefaultCommand = \""
+                                   (assoc-ref inputs "runc")
+                                   "/sbin/runc\"\n")))
+                 (substitute* "vendor/github.com/containerd/continuity/testutil\
+/loopback/loopback_linux.go"
+                   (("exec\\.Command\\(\"losetup\"")
+                    (string-append "exec.Command(\""
+                                   (assoc-ref inputs "util-linux")
+                                   "/sbin/losetup\"")))
+                 (substitute* "archive/compression/compression.go"
+                   (("exec\\.LookPath\\(\"unpigz\"\\)")
+                    (string-append "\"" (assoc-ref inputs "pigz")
+                                   "/bin/unpigz\", error(nil)"))))))
+           (replace 'build
+             (lambda* (#:key import-path #:allow-other-keys)
+               (with-directory-excursion (string-append "src/" import-path)
+                 (apply invoke "make" ',make-flags))))
+           (replace 'install
+             (lambda* (#:key import-path outputs #:allow-other-keys)
+               (with-directory-excursion (string-append "src/" import-path)
+                 (let* ((out (assoc-ref outputs "out")))
+                   (apply invoke "make" (string-append "DESTDIR=" out) "install"
+                          ',make-flags)))))))))
     (inputs
      `(("btrfs-progs" ,btrfs-progs)
        ("libseccomp" ,libseccomp)
+       ("pigz" ,pigz)
        ("runc" ,runc)
        ("util-linux" ,util-linux)))
     (native-inputs
diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm
index a68d24760b..4731c0fa80 100644
--- a/gnu/packages/ebook.scm
+++ b/gnu/packages/ebook.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2015, 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Alex Griffin <a@ajgrf.com>
-;;; Copyright © 2017, 2019, 2020 Brendan Tildesley <mail@brendan.scot>
+;;; Copyright © 2017, 2019, 2020, 2021 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
@@ -58,10 +58,14 @@
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
+  #:use-module (gnu packages python-compression)
+  #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages serialization)
+  #:use-module (gnu packages speech)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
@@ -88,10 +92,30 @@
     (description "CHMLIB is a library for dealing with ITSS/CHM format files.")
     (license license:lgpl2.1+)))
 
+(define-public python-pychm
+  (package
+    (name "python-pychm")
+    (version "0.8.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pychm" version))
+       (sha256
+        (base32
+         "0wpn9ijlsmrpyiwg3drmgz4dms1i1i347adgqw37bkrh3vn6yq16"))))
+    (build-system python-build-system)
+    (inputs
+     `(("chmlib" ,chmlib)))
+    (home-page "https://github.com/dottedmag/pychm")
+    (synopsis "Handle CHM files")
+    (description "This package provides a Python module for interacting
+with Microsoft Compiled HTML (CHM) files")
+    (license license:gpl2+)))
+
 (define-public calibre
   (package
     (name "calibre")
-    (version "4.18.0")
+    (version "5.14.0")
     (source
       (origin
         (method url-fetch)
@@ -100,7 +124,7 @@
                             version ".tar.xz"))
         (sha256
          (base32
-          "0w9pcfvskjh4v00vjw3i6hzrafy863pgsmmqdx4lffip3p856brw"))
+          "0w8j9r9qa56r8gm9b10dwh8zrzqlv79s2br82jqg02lrnrbwwv0q"))
         (modules '((guix build utils)))
         (snippet
           '(begin
@@ -112,8 +136,6 @@
                 ""))
 
              ;; Remove unneeded resources.
-             (delete-file "resources/viewer.js")
-             (delete-file "resources/viewer.html")
              (delete-file "resources/mozilla-ca-certs.pem")
              (delete-file "resources/calibre-portable.bat")
              (delete-file "resources/calibre-portable.sh")
@@ -125,57 +147,60 @@
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("qtbase" ,qtbase) ; for qmake
-       ("python2-flake8" ,python2-flake8)
+       ("python-flake8" ,python-flake8)
+       ("python-pyqt-builder" ,python-pyqt-builder)
        ("xdg-utils" ,xdg-utils)))
     (inputs
-     `(("chmlib" ,chmlib)
-       ("fontconfig" ,fontconfig)
+     `(("fontconfig" ,fontconfig)
        ("font-liberation" ,font-liberation)
        ("glib" ,glib)
        ("hunspell" ,hunspell)
        ("hyphen" ,hyphen)
        ("icu4c" ,icu4c)
-       ("js-mathjax" ,js-mathjax)
        ("libmtp" ,libmtp)
        ("libpng" ,libpng)
+       ("libjpeg" ,libjpeg-turbo)
+       ("libjxr" ,libjxr)
        ("libusb" ,libusb)
        ("openssl" ,openssl)
        ("optipng" ,optipng)
        ("podofo" ,podofo)
        ("poppler" ,poppler)
-       ("python" ,python-2)
-       ("python2-apsw" ,python2-apsw)
-       ("python2-beautifulsoup4" ,python2-beautifulsoup4)
-       ("python2-chardet" ,python2-chardet)
-       ("python2-cssselect" ,python2-cssselect)
-       ("python2-css-parser" ,python2-css-parser)
-       ("python2-dateutil" ,python2-dateutil)
-       ("python2-dbus" ,python2-dbus)
-       ("python2-dnspython" ,python2-dnspython-1.16)
-       ("python2-dukpy" ,python2-dukpy)
-       ("python2-feedparser" ,python2-feedparser)
-       ("python2-html2text" ,python2-html2text)
-       ("python2-html5-parser" ,python2-html5-parser)
-       ("python2-html5lib" ,python2-html5lib)
-       ("python2-lxml" ,python2-lxml)
-       ("python2-markdown" ,python2-markdown)
-       ("python2-mechanize" ,python2-mechanize)
-       ;; python2-msgpack is needed for the network content server to work.
-       ("python2-msgpack" ,python2-msgpack)
-       ("python2-netifaces" ,python2-netifaces)
-       ("python2-odfpy" ,python2-odfpy)
-       ("python2-pillow" ,python2-pillow)
-       ("python2-psutil" ,python2-psutil)
-       ("python2-pygments" ,python2-pygments)
-       ("python2-pyqtwebengine" ,python2-pyqtwebengine)
-       ("python2-pyqt" ,python2-pyqt)
-       ("python2-sip" ,python2-sip)
-       ("python2-regex" ,python2-regex)
+       ("python-apsw" ,python-apsw)
+       ("python-beautifulsoup4" ,python-beautifulsoup4)
+       ("python-cchardet" ,python-cchardet)
+       ("python-css-parser" ,python-css-parser)
+       ("python-cssselect" ,python-cssselect)
+       ("python-dateutil" ,python-dateutil)
+       ("python-dbus" ,python-dbus)
+       ("python-dnspython" ,python-dnspython-1.16)
+       ("python-dukpy" ,python-dukpy)
+       ("python-feedparser" ,python-feedparser)
+       ("python-html2text" ,python-html2text)
+       ("python-html5-parser" ,python-html5-parser)
+       ("python-html5lib" ,python-html5lib)
+       ("python-lxml" ,python-lxml)
+       ("python-markdown" ,python-markdown)
+       ("python-mechanize" ,python-mechanize)
+       ;; python-msgpack is needed for the network content server to work.
+       ("python-msgpack" ,python-msgpack)
+       ("python-netifaces" ,python-netifaces)
+       ("python-odfpy" ,python-odfpy)
+       ("python-pillow" ,python-pillow)
+       ("python-psutil" ,python-psutil)
+       ("python-py7zr" ,python-py7zr)
+       ("python-pychm" ,python-pychm)
+       ("python-pycryptodome" ,python-pycryptodome)
+       ("python-pygments" ,python-pygments)
+       ("python-pyqt" ,python-pyqt)
+       ("python-pyqtwebengine" ,python-pyqtwebengine)
+       ("python-regex" ,python-regex)
+       ("python-speechd" ,speech-dispatcher)
+       ("python-zeroconf" ,python-zeroconf)
        ("qtwebengine" ,qtwebengine)
        ("sqlite" ,sqlite)))
     (arguments
-     `(#:python ,python-2
-       ;; Calibre is using setuptools by itself, but the setup.py is not
+     `(;; Calibre is using setuptools by itself, but the setup.py is not
        ;; compatible with the shim wrapper (taken from pip) we are using.
        #:use-setuptools? #f
        #:phases
@@ -207,18 +232,27 @@
          (add-before 'build 'configure
           (lambda* (#:key inputs outputs #:allow-other-keys)
             (let ((podofo (assoc-ref inputs "podofo"))
-                  (pyqt (assoc-ref inputs "python2-pyqt"))
-                  (python-sip (assoc-ref inputs "python2-sip"))
+                  (pyqt (assoc-ref inputs "python-pyqt"))
+                  (python-sip (assoc-ref inputs "python-sip"))
                   (out (assoc-ref outputs "out")))
-              (substitute* "setup/build_environment.py"
-                (("= get_sip_dir\\(\\)")
-                 (string-append "= '" pyqt "/share/sip'")))
-
+              (substitute* "setup/build.py"
+                (("\\[tool.sip.bindings.pictureflow\\]")
+                 "[tool.sip.bindings.pictureflow]
+tags = [\"WS_X11\"]")
+                (("\\[tool.sip.project\\]")
+                 (string-append "[tool.sip.project]
+sip-include-dirs = [\"" pyqt "/share/sip" "\"]")))
               (substitute* "src/calibre/ebooks/pdf/pdftohtml.py"
                 (("PDFTOHTML = 'pdftohtml'")
                  (string-append "PDFTOHTML = \"" (assoc-ref inputs "poppler")
                                 "/bin/pdftohtml\"")))
-
+              ;; get_exe_path looks in poppler's output for these binaries. Make
+              ;; it not do that.
+              (substitute* "src/calibre/utils/img.py"
+                (("get_exe_path..jpegtran..") (string-append "'" (which "jpegtran") "'"))
+                (("get_exe_path..cjpeg..") (string-append "'" (which "cjpeg") "'"))
+                (("get_exe_path..optipng..") (string-append "'" (which "optipng") "'"))
+                (("get_exe_path..JxrDecApp..") (string-append "'" (which "JxrDecApp") "'")))
               ;; Calibre thinks we are installing desktop files into a home
               ;; directory, but here we butcher the script in to installing
               ;; to calibres /share directory.
@@ -237,7 +271,6 @@
                                       "/share/fonts")
                        "/tmp/.fonts")
 
-              (setenv "SIP_BIN" (string-append python-sip "/bin/sip"))
               (setenv "PODOFO_INC_DIR" (string-append podofo "/include/podofo"))
               (setenv "PODOFO_LIB_DIR" (string-append podofo "/lib"))
               ;; This informs the tests we are a continuous integration
@@ -248,13 +281,11 @@
               ;; fix it, so I'm not sure how to fix it.  TODO: Fix test and remove this.
               (setenv "SKIP_QT_BUILD_TEST" "true")
               #t)))
-         (add-after 'build 'build-extra
+         (add-after 'install 'install-rapydscript
            (lambda* (#:key inputs #:allow-other-keys)
-             (invoke "python2" "setup.py" "mathjax""--system-mathjax"
-                     "--path-to-mathjax" (string-append
-                                          (assoc-ref inputs "js-mathjax")
-                                          "/share/javascript/mathjax"))
-             (invoke "python2" "setup.py" "rapydscript")
+              ;; Unset so QtWebengine doesn't dump temporary files here.
+             (unsetenv "XDG_DATA_HOME")
+             (invoke "python" "setup.py" "rapydscript")
              #t))
          (add-after 'install 'install-man-pages
            (lambda* (#:key outputs #:allow-other-keys)
diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index c61fdd32a6..2118ebbf6e 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -689,17 +689,6 @@ language and very flexible regarding to new or unknown keyboard layouts.")
         (sha256
          (base32 "10lm2p8w26c9n6lhvw3301myfss0dq7hl7rawzb3hsy1lqvmvdib"))))
     (build-system qt-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'configure 'patch-makefiles
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((qtdec (assoc-ref inputs "qtdeclarative")))
-               (substitute* '("src/CMakeFiles/ktouch_autogen.dir/build.make"
-                              "src/CMakeFiles/ktouch.dir/build.make")
-                 (("/gnu/store/.*qmlcachegen")
-                  (string-append qtdec "/bin/qmlcachegen"))))
-             #t)))))
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
        ("kdoctools" ,kdoctools)
diff --git a/gnu/packages/efi.scm b/gnu/packages/efi.scm
index 11cfe586ac..8bbd873435 100644
--- a/gnu/packages/efi.scm
+++ b/gnu/packages/efi.scm
@@ -38,14 +38,14 @@
 (define-public gnu-efi
   (package
     (name "gnu-efi")
-    (version "3.0.12")
+    (version "3.0.13")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/gnu-efi/"
                            "gnu-efi-" version ".tar.bz2"))
        (sha256
-        (base32 "0sbn6am3k5lqafycggh1g964fcwjwnh0i9hhwrk4ncrwzphz55h1"))))
+        (base32 "0z9v5pl5pmlw8pjpd66iyh9pml2hh6pqd4c5qilywilw4wazgk1g"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; none exist
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 29958f7316..c8b31d7456 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -85,7 +85,7 @@
 ;;; Copyright © 2020 Adam Kandur <rndd@tuta.io>
 ;;; Copyright © 2020 Tim Howes <timhowes@lavabit.com>
 ;;; Copyright © 2020 Noah Landis <noahlandis@posteo.net>
-;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2020, 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;; Copyright © 2020 André A. Gomes <andremegafone@gmail.com>
 ;;; Copyright © 2020 Jonathan Rostran <rostranjj@gmail.com>
 ;;; Copyright © 2020, 2021 Noah Evans <noah@nevans.me>
@@ -95,6 +95,8 @@
 ;;; Copyright © 2021 Alexey Abramov <levenson@mmer.org>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2021 Eugene Klimov <lipklim@mailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -139,6 +141,7 @@
   #:use-module (gnu packages djvu)
   #:use-module (gnu packages ebook)
   #:use-module (gnu packages emacs)
+  #:use-module (gnu packages golang)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages gnome)
@@ -937,6 +940,29 @@ Files with the @file{.graphql} and @file{.gql} extensions are
 automatically opened with this mode.")
       (license license:gpl3+))))
 
+(define-public emacs-ghq
+  (package
+    (name "emacs-ghq")
+    (version "0.1.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rcoedo/emacs-ghq")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0rh2k93c3a0vl073a3s3a3h6gkw454v1lyd7y8l3pd24vw9hc628"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("ghq" ,ghq)))
+    (home-page "https://github.com/rcoedo/emacs-ghq")
+    (synopsis "Emacs interface for @code{ghq} tool")
+    (description
+     "This package provides a set of functions wrapping @code{ghq}, a tool for
+organizing remote Go repository clones.")
+    (license license:gpl3+)))
+
 (define-public emacs-ghub
   (package
     (name "emacs-ghub")
@@ -1525,6 +1551,46 @@ reformat the current buffer using a command-line program, together with an
 optional minor mode which can apply this command automatically on save.")
     (license license:gpl3+)))
 
+(define-public emacs-relative-buffers
+  (let ((release "0.0.1")
+        (revision "0")
+        (commit "9762fe268e9ff150dcec2e2e45d862d82d5c4008"))
+    (package
+      (name "emacs-relative-buffers")
+      (version (git-version release revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/emacsattic/relative-buffers")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0fzhwbpyndwrmxip9zlcwkrr675l5pzwcygi45hv7w1hn39w0hxp"))
+         (snippet
+          '(begin
+             ;; Delete the Cask test runners.
+             (for-each delete-file '("Cask" "test/test-helper.el"))
+             #t))))
+      (build-system emacs-build-system)
+      (arguments
+       `(#:tests? #t
+         #:test-command '("ert-runner")))
+      (native-inputs
+       `(("ert-runner" ,emacs-ert-runner)))
+      (propagated-inputs
+       `(("emacs-dash" ,emacs-dash)
+         ("emacs-f" ,emacs-f)
+         ("emacs-s" ,emacs-s)))
+      (home-page "https://github.com/emacsattic/relative-buffers")
+      (synopsis "Minor mode to rename buffers by project structure")
+      (description
+       "This package provides a minor mode for renaming buffers according to
+project structure.  For Python buffers, that will be the whole module name.
+For temporary files and directories, that will be the relative path from the
+project root.")
+      (license license:gpl3+))))
+
 (define-public emacs-relint
   (package
     (name "emacs-relint")
@@ -1742,14 +1808,14 @@ incrementally confined in Isearch manner.")
 (define emacs-emms-print-metadata
   (package
     (name "emacs-emms-print-metadata")
-    (version "6.3")
+    (version "7.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "emms-" version ".tar"))
        (sha256
-        (base32 "12cfq503li0gcqmm5bmqz8yjvfdif5xvz0l9vx3g5jl6ljygwgmf"))))
+        (base32 "1dng8dy0w0wsdvvnjnrllwv5a8wq3kj20jik994b7prdx5dn6y52"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags '("emms-print-metadata")
@@ -2210,14 +2276,14 @@ as a library for other Emacs packages.")
 (define-public emacs-auctex
   (package
     (name "emacs-auctex")
-    (version "13.0.5")
+    (version "13.0.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "auctex-" version ".tar"))
        (sha256
-        (base32 "072wwsqfl8n2gi2inbp0s8k1ydr6fh1zyvc3rgynwzibjjniy319"))))
+        (base32 "00wp388rh2nnk8fam53kilykg90jylps31qxv9ijy1lsp1hqdjys"))))
     (build-system emacs-build-system)
     ;; We use 'emacs' because AUCTeX requires dbus at compile time
     ;; ('emacs-minimal' does not provide dbus).
@@ -2522,15 +2588,15 @@ into mode hooks and is intended to be used that way.")
 (define-public emacs-ggtags
   (package
     (name "emacs-ggtags")
-    (version "0.8.13")
+    (version "0.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/ggtags-"
-                           version ".el"))
+                           version ".tar"))
        (sha256
         (base32
-         "1qa7lcrcmf76sf6dy8sxbg4adq7rg59fm0n5848w3qxgsr0h45fg"))))
+         "0p79x9g94jynl83ndvqp9349vhgkzxzhnc517r8hn44iqxqf6ghg"))))
     (build-system emacs-build-system)
     (inputs
      `(("global" ,global)))
@@ -2675,9 +2741,9 @@ using the DOT syntax, and use Graphviz to convert these files to diagrams.")
     (license license:gpl2+)))
 
 (define-public emacs-imenu-list
-  (let ((commit "46008738f8fef578a763c308cf6695e5b4d4aa77")
-        (revision "0")
-        (version "0.8"))
+  (let ((commit "b50222378412fbe321622a84cb2b036e084c697a")
+        (revision "1")
+        (version "0.9"))
     (package
       (name "emacs-imenu-list")
       (version (git-version version revision commit))
@@ -2690,7 +2756,7 @@ using the DOT syntax, and use Graphviz to convert these files to diagrams.")
            (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "14l3yw9y1nk103s7z5i1fmd6kvlb2p6ayi6sf9l1x1ydg9glrpl8"))))
+          (base32 "1936dd41fa05ndzf2bwhllvjz97iz0rflkazjipr7dvz5q072wj2"))))
       (build-system emacs-build-system)
       (home-page "https://github.com/bmag/imenu-list")
       (synopsis
@@ -3535,7 +3601,7 @@ representation.")
 (define-public emacs-git-gutter
   (package
     (name "emacs-git-gutter")
-    (version "0.90")
+    (version "0.91")
     (source
      (origin
        (method git-fetch)
@@ -3544,7 +3610,7 @@ representation.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1abagq0psip7cgsqbfjv72qy60ywsny0ibsfcn74ldj6a9v17mz5"))))
+        (base32 "0zc9f73app1d7j4yb10sy4xidh5252ncyxlvr5kh0kiqk88ck6j9"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/syohex/emacs-git-gutter")
     (synopsis "See and manage hunks of text in a version control system")
@@ -3587,7 +3653,7 @@ window.")
 (define-public emacs-git-link
   (package
     (name "emacs-git-link")
-    (version "0.7.5")
+    (version "0.8.3")
     (source
      (origin
        (method git-fetch)
@@ -3596,7 +3662,7 @@ window.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "04xa6lp8wkjb6zs096bf4sz124grcjj15xv1h009bmn2j95rggj6"))))
+        (base32 "0l7xmvmj5s93hc39wjjv75f22zbhahnmcxpmvx3dfvsbig9pmk75"))))
     (build-system emacs-build-system)
     (arguments
      `(#:tests? #t
@@ -4639,6 +4705,32 @@ Also included are keybindings for spec files and Dired buffers, as well as
 snippets for yasnippet.")
       (license license:gpl3+))))
 
+(define-public emacs-mode-line-idle
+  ;; Package has no release.  Version is extracted from "Version:" keyword in
+  ;; main file.
+  (let ((commit "02b1da6278e43cc9cc0356110cc6bfbb37eb8241")
+	(revision "1"))
+    (package
+      (name "emacs-mode-line-idle")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (file-name (git-file-name name version))
+         (uri (git-reference
+               (url "https://gitlab.com/ideasman42/emacs-mode-line-idle")
+               (commit commit)))
+         (sha256
+          (base32 "0ky330b2sfbzkbxbfp9b21hdywsjw26bllspglz08hrbni7jmry8"))))
+      (build-system emacs-build-system)
+      (home-page "https://gitlab.com/ideasman42/emacs-mode-line-idle")
+      (synopsis "Simple delayed text evaluation for the mode-line")
+      (description
+       "Mode Line Idle provides a convenient way to defer text evaluation
+which integrates into existing mode-line without requiring a minor mode or
+configuration.")
+      (license license:gpl3+))))
+
 (define-public emacs-smart-mode-line
   (package
     (name "emacs-smart-mode-line")
@@ -8696,6 +8788,69 @@ E-Prime forbids the use of the \"to be\" form to strengthen your writing.")
 programming language.")
       (license license:expat)))
 
+(define-public emacs-julia-repl
+  (package
+    (name "emacs-julia-repl")
+    (version "1.3.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/tpapp/julia-repl")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "11vpqqnxqj9nxh8kccj4y6h3f8lib6jxnsk6vxc2j2fqw6alnafm"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/tpapp/julia-repl")
+    (synopsis "Minor mode for interacting with a Julia REPL")
+    (description "This package provides a minor mode for interacting with a
+Julia REPL running inside Emacs.  The julia process is started in an ANSI
+terminal (term), which allows text formatting and colors, and interaction with
+the help system and the debugger.  It is recommended that you use this minor
+mode with the package emacs-julia-mode.")
+    (license license:expat)))
+
+(define-public emacs-julia-snail
+  (package
+    (name "emacs-julia-snail")
+    (version "1.0.0rc4")               ;rc5 requires CSTParser (julia package)
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/gcv/julia-snail")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "065ix3jycsx3wvkq7a6060i93caxisdvgxgqb1l6rq15n4qln78y"))))
+    (build-system emacs-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'JuliaSnail-jl
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (install-file "JuliaSnail.jl"
+                             (string-append out "/share/emacs/site-lisp/")))
+             #t)))))
+    (inputs
+     `(("emacs-dash" ,emacs-dash)
+       ("emacs-s" ,emacs-s)
+       ("emacs-spinner" ,emacs-spinner)
+       ("emacs-xref" ,emacs-xref)))
+    (propagated-inputs
+     `(("libvterm" ,libvterm)
+       ("emacs-julia-mode" ,emacs-julia-mode) ;required by parser
+       ("emacs-parsec" ,emacs-parsec)         ;required by parser
+       ("emacs-vterm" ,emacs-vterm)))
+    (home-page "https://github.com/gcv/julia-snail")
+    (synopsis "Development environment and REPL interaction package for Julia")
+    (description "This package provides a development environment and REPL
+interaction package for Julia in the spirit of Common Lisp’s SLIME and
+Clojure’s CIDER.  It enables convenient and dynamic REPL-driven development.")
+    (license license:gpl3)))
+
 (define-public emacs-smex
   (package
     (name "emacs-smex")
@@ -9079,6 +9234,30 @@ duplicated a lot.  Org-mode makes the book keeping of tags and feeds
 much easier.")
       (license license:gpl3+))))
 
+(define-public emacs-elfeed-protocol
+  (package
+    (name "emacs-elfeed-protocol")
+    (version "0.8.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/fasheng/elfeed-protocol")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "07r1qlldgd0kfikd0y737y5n42ab3nkw2s5jx7frimj41yandbdp"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-elfeed" ,emacs-elfeed)))
+    (home-page "https://github.com/fasheng/elfeed-protocol")
+    (synopsis "Fever/NewsBlur/ownCloud/tt-RSS protocols for Elfeed")
+    (description
+     "Elfeed-protocol provides extra protocols to make self-hosting RSS
+readers like Fever, NewsBlur, ownCloud News and Tiny TIny RSS work
+with Elfeed.")
+    (license license:gpl3+)))
+
 (define-public emacs-elfeed-score
   (package
     (name "emacs-elfeed-score")
@@ -10905,13 +11084,13 @@ passive voice.")
     (name "emacs-org")
     ;; emacs-org-contrib inherits from this package.  Please update it as
     ;; well.
-    (version "9.4.4")
+    (version "9.4.5")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/org-" version ".tar"))
        (sha256
-        (base32 "05ma8n6hr10323d85ay8ai0xrpc9q2m93n8avqh7j9fmmb3bhr0b"))))
+        (base32 "0h5qhrd984vf17qc227wz68191xfgbpq32dyhw0lcz2d9i0pl3xk"))))
     (build-system emacs-build-system)
     (arguments
      `(#:phases
@@ -10932,7 +11111,7 @@ passive voice.")
                     (doc-dir (string-append share "/doc/" ,name "-" ,version)))
                (install-file "org.info" info-dir)
                (install-file "orgguide.info" info-dir)
-               ;; XXX: "orgcard.pdf" is not built in Org 9.4.4.
+               ;; XXX: "orgcard.pdf" is not built in Org 9.4.5.
                ;; (install-file "orgcard.pdf" doc-dir)
                )
              #t)))))
@@ -10948,14 +11127,14 @@ programming and reproducible research.")
   (package
     (inherit emacs-org)
     (name "emacs-org-contrib")
-    (version "20201222")
+    (version "20210329")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://orgmode.org/elpa/"
                            "org-plus-contrib-" version ".tar"))
        (sha256
-        (base32 "1pa8h5dpi5yj3j7v0aaby8sjwxvmgnbip2ilyl5pac1rlbz0jn40"))
+        (base32 "1l0ycz77hwmjb4sffhabb0d0hg1c9ypxbpbyv8xj5ib4nbi87f2h"))
        ;; ob-sclang.el is packaged separately to avoid the dependency on
        ;; SuperCollider and qtwebengine.
        (modules '((guix build utils)))
@@ -12382,13 +12561,11 @@ using Imenu, and Compilation mode support for MSBuild, devenv and xbuild.")
         (base32 "0bs9q62bd7885c39v7x1qz3w1fhpmpdgm72xwsk2yygw0ii425nn"))))
     (build-system emacs-build-system)
     (arguments
-     `(#:include (cons "^lisp/" %default-include)
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
-         (add-after 'add-source-to-load-path 'add-lisp-dir-to-emacs-load-path
+         (add-after 'unpack 'enter-source-directory
            (lambda _
-             (setenv "EMACSLOADPATH"
-                     (string-append (getcwd) "/lisp:" (getenv "EMACSLOADPATH"))))))))
+             (chdir "lisp"))))))
     (propagated-inputs `(("emacs-projectile" ,emacs-projectile)))
     (home-page "https://github.com/ejmr/php-mode")
     (synopsis "Major mode for editing PHP code")
@@ -12473,14 +12650,14 @@ shuangpin, wubi and cangjie.")
 (define-public emacs-posframe
   (package
     (name "emacs-posframe")
-    (version "0.8.8")
+    (version "1.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "posframe-" version ".tar"))
        (sha256
-        (base32 "1ij6brzcxv9viz37qafcinlfx5l20w8x8s6786r1rsda5n1xsmvd"))))
+        (base32 "1k06dbh9xqn2vix5qkcapl57v0c21b344r8dx6j5qr4jxirsn2x5"))))
     (build-system emacs-build-system)
     ;; emacs-minimal does not include the function font-info.
     (arguments
@@ -19176,7 +19353,7 @@ try completing.  See @code{fish-completion-fallback-on-bash-p}.")
 (define-public emacs-gif-screencast
   (package
     (name "emacs-gif-screencast")
-    (version "1.1")
+    (version "1.2")
     (source
      (origin
        (method git-fetch)
@@ -19186,7 +19363,7 @@ try completing.  See @code{fish-completion-fallback-on-bash-p}.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1g1by8lvf8c9vzm4wwsi5kp285kaj0ahsl54048ympin4pi0njw9"))))
+         "1yf6yipvhhna29mzaan5vb3d5qvbrkp2awr5diyf381mvxgk8akh"))))
     (build-system emacs-build-system)
     (inputs
      `(("scrot" ,scrot)
@@ -21335,6 +21512,33 @@ DBI, and provides DB-accessing API and the simple management UI.")
 to open SQLite databases.")
       (license license:gpl3+))))
 
+(define-public emacs-nice-citation
+  (let ((commit "1013b56d9d1495a335f40a5f76203034dc5fa0ea")
+        (revision "0"))
+    (package
+      (name "emacs-nice-citation")
+      (version (git-version "0.0.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/damiencollard/nice-citation")
+               (commit commit)))
+         (sha256
+          (base32 "00xqr7haca5vd0bzd043lc6x4fjb903z96frz9b8cbd7spp63z7q"))
+         (file-name (git-file-name name version))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/damiencollard/nice-citation")
+      (synopsis "Depth-colored citations for Gnus")
+      (description
+       "This package replaces the traditional chevron citation marks @samp{>}
+with a Unicode vertical bar with the same color as the text it is quoting.
+
+It is purely presentation: the underlying text is unchanged.  In particular,
+if you send a message containing a citation, it will contain the traditional
+chevron marks.")
+      (license license:gpl3+))))
+
 (define-public emacs-nix-mode
   (package
     (name "emacs-nix-mode")
@@ -21470,6 +21674,31 @@ stored playlists.")
 display a terminal in an Emacs buffer.")
       (license license:gpl3+))))
 
+(define-public emacs-vterm-toggle
+  ;; There have been no releases.
+  (let ((commit "d10239b7bb89b78dddb82f66ac2286bc0b02747b")
+        (revision "1"))
+    (package
+      (name "emacs-vterm-toggle")
+      (version (git-version "0.0.4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/jixiuf/vterm-toggle")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0r9n23wg9cfy10h5f9zqr8jpkvw34f9rylri3nxq870awjab7rqi"))))
+      (build-system emacs-build-system)
+      (propagated-inputs `(("emacs-vterm" ,emacs-vterm)))
+      (home-page "https://github.com/jixiuf/vterm-toggle")
+      (synopsis "Toggle between a vterm buffer and other buffers")
+      (description
+       "This package provides a DWIM way to switch from an Emacs buffer to
+a vterm buffer and back again.")
+      (license license:gpl3+))))
+
 (define-public emacs-simple-mpc
   ;; There have been no releases.
   (let ((commit "bee8520e81292b4c7353e45b193f9a13b482f5b2")
@@ -22808,9 +23037,9 @@ based on diff output.")
       (license license:gpl3+))))
 
 (define-public emacs-all-the-icons-dired
-  (let ((commit "980b7747d6c4a7992a1ec56afad908956db0a519")
+  (let ((commit "fc2dfa1e9eb8bf1c402a675e7089638d702a27a5")
         (version "1.0")
-        (revision "1"))
+        (revision "2"))
     (package
       (name "emacs-all-the-icons-dired")
       (version (git-version version revision commit))
@@ -22823,7 +23052,7 @@ based on diff output.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "1pvbgyxfj4j205nj1r02045f1y4wgavdsk7f45hxkkhms1rj8jyy"))))
+           "0zhyhz4lhx0d8wwh1xxxf7ck4s621fk9757ql2ypxbr4iqh7sjlp"))))
       (build-system emacs-build-system)
       (propagated-inputs
        `(("emacs-all-the-icons" ,emacs-all-the-icons)))
@@ -23299,6 +23528,39 @@ Dash docsets.")
 through Dash docsets.")
       (license license:expat))))
 
+(define-public emacs-cascading-dir-locals
+  (let ((release "0.1")
+        (revision "0")
+        (commit "efdf5e6d62b955ee0ca3c170eae1d388799f9fa0"))
+    (package
+      (name "emacs-cascading-dir-locals")
+      (version (git-version release revision commit))
+      (home-page "https://github.com/fritzgrabo/cascading-dir-locals")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url home-page)
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1jwd99kk5l588n7wwi1x3b4bgimm66x1icna3n20pwaj49kf0zy8"))))
+      (build-system emacs-build-system)
+      (synopsis "Apply all @file{.dir-locals.el} from root to current directory")
+      (description
+       "This package provides a global minor mode that changes how Emacs
+handles the lookup of applicable dir-locals files (@file{.dir-locals.el}):
+instead of starting at the directory of the visited file and moving up the
+directory tree only until a first dir-locals file is found, collect and apply
+all (!) dir-locals files found from the current directory up to the root one.
+
+Values specified in files nearer to the current directory take precedence over
+values in files farther away from it.
+
+You might want to use this to globally set dir-local variables that apply to
+all of your projects, then override or add variables on a per-project basis.")
+      (license license:gpl3+))))
+
 (define-public emacs-calibredb
   (package
     (name "emacs-calibredb")
@@ -23438,14 +23700,14 @@ well as an option for visually flashing evaluated s-expressions.")
 (define-public emacs-tramp
   (package
     (name "emacs-tramp")
-    (version "2.5.0.2")
+    (version "2.5.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "tramp-" version ".tar"))
        (sha256
-        (base32 "16f782rjkmxxs5sz3wv4d46i7hbl483ashmrkvljf7lpnrl91s93"))))
+        (base32 "0c77d1ihn17lzk9jb7ss346ryprnbii1zmijl6zj0kk4lm8fpfl3"))))
     (build-system emacs-build-system)
     (arguments
      `(#:emacs ,emacs                   ;need D-Bus
@@ -25248,21 +25510,21 @@ current buffer.")
 (define-public emacs-repl-toggle
   (package
     (name "emacs-repl-toggle")
-    (version "0.6.1")
+    (version "0.7.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/tomterl/repl-toggle")
+             (url "https://git.sr.ht/~tomterl/repl-toggle")
              (commit version)))
        (sha256
         (base32
-         "12h3xxja3isnhvrqx7m2g7a5d8h68cc85pbqyhiipfxyafyl1yxd"))
+         "0nycm8a4wwkkaif958z4m89slayp17k20lp2h7lvddjx8prn6yfp"))
        (file-name (git-file-name name version))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-fullframe" ,emacs-fullframe)))
-    (home-page "https://github.com/tomterl/repl-toggle")
+    (home-page "https://git.sr.ht/~tomterl/repl-toggle")
     (synopsis "Switch to and from current major mode's REPL")
     (description "This package provides a function to switch to and from a
 REPL appropriate to the current major mode.")
@@ -25367,14 +25629,14 @@ interface.")
 (define-public emacs-ivy-posframe
   (package
     (name "emacs-ivy-posframe")
-    (version "0.5.5")
+    (version "0.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://elpa.gnu.org/packages/"
                            "ivy-posframe-" version ".tar"))
        (sha256
-        (base32 "184730grclxmlw6nfs41d4g6fvz9c6xnclvwgqx1ii0xm7p9xy95"))))
+        (base32 "07dzglrcdl54lkznyphw97xwd9bcwzdcgzkav0vqfk7f5cwh1wkf"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-ivy" ,emacs-ivy)
@@ -25409,6 +25671,56 @@ can specify how popup-displaying functions occupy the screen.")
       (home-page "https://github.com/wasamasa/shackle")
       (license license:gpl3+))))
 
+(define-public emacs-showtip
+  (let ((commit "930da302809a4257e8d69425455b29e1cc91949b")
+        (revision "0"))
+    (package
+      (name "emacs-showtip")
+      (version (git-version "0.01" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/emacsorphanage/showtip")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "01zak0zhha6dp7a2hm28d065gjnc462iwpsfyxhbxgfzcdlicqc7"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/emacsorphanage/showtip")
+      (synopsis "Show tip at cursor")
+      (description
+       "This library provide one function to show tooltip near the cursor.")
+      (license license:gpl2+))))
+
+(define-public emacs-sdcv
+  ;; No tagged version upstream.
+  (let ((commit "943ae3e90cc9a0a88a37cc710acd7424fd4defc4" )
+        (revision "0"))
+    (package
+      (name "emacs-sdcv")
+      (version (git-version "1.5.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/stardiviner/sdcv.el")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0i1ylvw7p46pkf3yyyzcdmdhsspzymnnnvx8s0i7vynngr5x0vzh"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-popup" ,emacs-popup)
+         ("emacs-pos-tip" ,emacs-pos-tip)
+         ("emacs-showtip" ,emacs-showtip)))
+      (home-page "https://www.emacswiki.org/emacs/download/sdcv.el")
+      (synopsis "Emacs interface for @code{sdcv}")
+      (description
+       "This plugin translates words with @code{sdcv}, and displays
+translation using a tooltip or in a dedicated buffer.")
+      (license license:gpl3+))))
+
 (define-public emacs-helm-lacarte
   (let ((commit "40a6c449720be521435b6b1da7911af3a0b9dca0")
         (revision "1"))
@@ -26441,34 +26753,36 @@ snippets for Emacs.")
       (license license:expat))))
 
 (define-public emacs-org-roam
-  (package
-    (name "emacs-org-roam")
-    (version "1.2.3")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/org-roam/org-roam")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0n8c0yxqb62i39kn0d5x83s96vwc0nbg0sx5hplffnbkfbj88bba"))))
-    (build-system emacs-build-system)
-    (propagated-inputs
-     `(("emacs-company" ,emacs-company)
-       ("emacs-dash" ,emacs-dash)
-       ("emacs-emacsql-sqlite3" ,emacs-emacsql-sqlite3)
-       ("emacs-f" ,emacs-f)
-       ("emacs-org-ref" ,emacs-org-ref)
-       ("emacs-s" ,emacs-s)))
-    (home-page "https://github.com/org-roam/org-roam/")
-    (synopsis "Non-hierarchical note-taking with Org mode")
-    (description "Emacs Org Roam is a solution for taking non-hierarchical
+  (let ((commit "8ad57b121831eda8d226faa14ff2ba7ab652849c")
+        (revision "0")
+        (version "1.2.3"))
+    (package
+      (name "emacs-org-roam")
+      (version (git-version version revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/org-roam/org-roam")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "162qhb6rkpl1n0l8yhnwgagsx56ykaj9lchsny1id5z1257kgw9w"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-dash" ,emacs-dash)
+         ("emacs-emacsql-sqlite3" ,emacs-emacsql-sqlite3)
+         ("emacs-f" ,emacs-f)
+         ("emacs-org" ,emacs-org)
+         ("emacs-s" ,emacs-s)))
+      (home-page "https://github.com/org-roam/org-roam/")
+      (synopsis "Non-hierarchical note-taking with Org mode")
+      (description "Emacs Org Roam is a solution for taking non-hierarchical
 notes with Org mode.  Notes are captured without hierarchy and are connected
 by tags.  Notes can be found and created quickly.  Org Roam should also work
 as a plug-and-play solution for anyone already using Org mode for their
 personal wiki.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-org-roam-bibtex
   (package
@@ -27240,7 +27554,7 @@ rules about where space should be left to separate words and parentheses.")
     (description "This mode allows to paste whole buffers or parts of buffers
 to pastebin-like services.  It supports more than one service and will
 failover if one service fails.  More services can easily be added over time
-and prefered services can easily be configured.")
+and preferred services can easily be configured.")
     (license license:gpl3+)))
 
 (define-public emacs-keystore-mode
@@ -27302,6 +27616,39 @@ and prefered services can easily be configured.")
      "This package adds a \"C-'\" binding to Ivy minibuffer that uses Avy.")
     (license license:gpl3+)))
 
+(define-public emacs-vertico
+  (package
+    (name "emacs-vertico")
+    (version "0.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/minad/vertico")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0ijahr9dzs7v56w2n74xp0akzbzbxlw5852bywc4h24xdspakj52"))))
+    (build-system emacs-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'build-doc
+           (lambda _
+             (invoke "makeinfo" "vertico.texi"))))))
+    (native-inputs
+     `(("texinfo" ,texinfo)))
+    (home-page "https://github.com/minad/vertico")
+    (synopsis "Vertical interactive completion")
+    (description
+     "Vertico provides a minimalistic vertical completion UI, which is based
+on Emacs' default completion system.  By reusing the default system, it
+achieves full compatibility with built-in Emacs commands and completion
+tables.  Vertico is pretty bare-bone and only provides a minimal set of
+commands.  Additional optional enhancements can be provided externally by
+complementary packages.")
+    (license license:gpl3+)))
+
 (define-public emacs-ivy-hydra
   (package
     (name "emacs-ivy-hydra")
@@ -27325,3 +27672,4 @@ and prefered services can easily be configured.")
 quasi-prefix map, with many useful bindings.  These bindings are
 shorter than usual, using mostly unprefixed keys.")
     (license license:gpl3+)))
+
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index fe5b3b25b3..309be612c6 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -15,7 +15,7 @@
 ;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
-;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018, 2019, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Jesse John Gildersleve <jessejohngildersleve@zohomail.eu>
 ;;; Copyright © 2019 Valentin Ignatev <valentignatev@gmail.com>
 ;;; Copyright © 2019 Leo Prikler <leo.prikler@student.tugraz.at>
@@ -77,14 +77,14 @@
 (define-public emacs
   (package
     (name "emacs")
-    (version "27.1")
+    (version "27.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/emacs/emacs-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "0h9f2wpmp6rb5rfwvqwv1ia1nw86h74p7hnz3vb3gjazj67i4k2a"))
+                "1ff182gjw9wqsbx1kj5gl2r5pbqhp4ar54g04j33fgz6g17cr9xl"))
               (patches (search-patches "emacs-exec-path.patch"
                                        "emacs-fix-scheme-indent-function.patch"
                                        "emacs-ignore-empty-xim-styles.patch"
diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm
index 413760ab72..480bbf7835 100644
--- a/gnu/packages/embedded.scm
+++ b/gnu/packages/embedded.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -147,7 +148,9 @@
               (files '("arm-none-eabi/include")))
              (search-path-specification
               (variable "CROSS_CPLUS_INCLUDE_PATH")
-              (files '("arm-none-eabi/include")))
+              (files '("arm-none-eabi/include"
+                       "arm-none-eabi/include/c++"
+                       "arm-none-eabi/include/c++/arm-none-eabi")))
              (search-path-specification
               (variable "CROSS_LIBRARY_PATH")
               (files '("arm-none-eabi/lib"))))))))
@@ -227,7 +230,41 @@ usable on embedded products.")
            "--enable-lite-exit"
            "--enable-newlib-global-atexit"
            "--enable-newlib-nano-formatted-io"
-           "--disable-nls"))))
+           "--disable-nls"))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           ;; XXX: Most arm toolchains offer both *.a and *_nano.a as newlib
+           ;; and newlib-nano respectively.  The headers are usually
+           ;; arm-none-eabi/include/newlib.h for newlib and
+           ;; arm-none-eabi/include/newlib-nano/newlib.h for newlib-nano.  We
+           ;; have two different toolchain packages for each which works but
+           ;; is a little strange.
+           (add-after 'install 'hardlink-newlib
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out")))
+                 ;; The nano.specs file says that newlib-nano files should end
+                 ;; in "_nano.a" instead of just ".a".  Note that this applies
+                 ;; to all the multilib folders too.
+                 (for-each
+                  (lambda (file)
+                    (link file
+                          (string-append
+                           ;; Strip ".a" off the end
+                           (substring file 0 (- (string-length file) 2))
+                           ;; Add "_nano.a" onto the end
+                           "_nano.a")))
+                  (find-files
+                   out
+                   "^(libc.a|libg.a|librdimon.a|libstdc\\+\\+.a|libsupc\\+\\+.a)$"))
+
+                 ;; newlib.h is usually in this location instead so both
+                 ;; newlib and newlib-nano can be in the toolchain at the same
+                 ;; time
+                 (mkdir (string-append out "/arm-none-eabi/include/newlib-nano"))
+                 (symlink
+                   "../newlib.h"
+                   (string-append out "/arm-none-eabi/include/newlib-nano/newlib.h"))
+                 #t)))))))
     (synopsis "Newlib variant for small systems with limited memory")))
 
 
@@ -317,7 +354,9 @@ usable on embedded products.")
               (files '("arm-none-eabi/include")))
              (search-path-specification
               (variable "CROSS_CPLUS_INCLUDE_PATH")
-              (files '("arm-none-eabi/include")))
+              (files '("arm-none-eabi/include"
+                       "arm-none-eabi/include/c++"
+                       "arm-none-eabi/include/c++/arm-none-eabi")))
              (search-path-specification
               (variable "CROSS_LIBRARY_PATH")
               (files '("arm-none-eabi/lib"))))))))
@@ -380,7 +419,7 @@ usable on embedded products.")
              "--with-newlib"
              ,(string-append "--with-gxx-include-dir="
                              (assoc-ref %outputs "out")
-                             "/arm-none-eabi/include")))))
+                             "/arm-none-eabi/include/c++")))))
       (native-inputs
        `(("newlib" ,newlib)
          ("xgcc" ,xgcc)
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 74f3f09926..584eb8800d 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -540,7 +540,7 @@ The following systems are supported:
 (define-public mgba
   (package
     (name "mgba")
-    (version "0.8.4")
+    (version "0.9.0")
     (source
      (origin
        (method git-fetch)
@@ -549,7 +549,7 @@ The following systems are supported:
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0nqj4bnn5c2z1bq4bnbw1wznc0wpmq4sy3w8pipd6n6620b9m4qq"))
+        (base32 "16v08m9irping65d94vb5skp4m6nc63zj6bfajbzhmf944dswmi5"))
        (modules '((guix build utils)))
        (snippet
         ;; Make sure we don't use the bundled software.
@@ -1589,7 +1589,7 @@ This is a part of the TiLP project.")
 (define-public mame
   (package
     (name "mame")
-    (version "0.229")
+    (version "0.230")
     (source
      (origin
        (method git-fetch)
@@ -1598,7 +1598,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 "0s5q6fjk739p1bfh72fmh35xi13fwbrgjqrn45i5xzx3v3gadmbg"))
+        (base32 "0dk8q2691pycv9mq77h6sdfwjnwdrfwrblf8nwyykrmdawzi56ks"))
        (modules '((guix build utils)))
        (snippet
         ;; Remove bundled libraries.
@@ -1743,7 +1743,7 @@ This is a part of the TiLP project.")
        ("texinfo" ,texinfo)))
     (inputs
      `(("alsa-lib" ,alsa-lib)
-       ("asio" ,asio)
+       ("asio" ,asio-1.12)              ;the bundled copy is at 1.11
        ("expat" ,expat)
        ("flac" ,flac)
        ("fontconfig" ,fontconfig)
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index d7c9f9f142..cbe9d79d78 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016, 2017, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017, 2018 Theodoros Foradis <theodoros@foradis.org>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
-;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018, 2019 Jonathan Brielmaier <jonathan.brielmaier@web.de>
 ;;; Copyright © 2018, 2019, 2020 Arun Isaac <arunisaac@systemreboot.net>
@@ -17,7 +17,7 @@
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2020,2021 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2020 Ekaitz Zarraga <ekaitz@elenq.tech>
+;;; Copyright © 2020, 2021 Ekaitz Zarraga <ekaitz@elenq.tech>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020, 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
@@ -112,6 +112,8 @@
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
+  #:use-module (gnu packages serialization)
+  #:use-module (gnu packages sqlite)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages tbb)
   #:use-module (gnu packages tcl)
@@ -122,6 +124,7 @@
   #:use-module (gnu packages web)
   #:use-module (gnu packages wxwidgets)
   #:use-module (gnu packages xml)
+  #:use-module (gnu packages xiph)
   #:use-module (gnu packages openkinect)
   #:use-module (gnu packages xorg))
 
@@ -266,7 +269,7 @@ plans and designs.")
 suite grouped together under the gEDA name.  gEDA/gaf is a collection of tools
 which currently includes: gschem, a schematic capture program; gnetlist, a
 netlist generation program; gsymcheck, a syntax checker for schematic symbols;
-gattrib, a spreadsheet programm that manipulates the properties of symbols of
+gattrib, a spreadsheet programme that manipulates the properties of symbols of
 a schematic; libgeda, libraries for gschem gnetlist and gsymcheck; gsch2pcb, a
 tool to forward annotation from your schematic to layout using PCB; some minor
 utilities.")
@@ -1248,7 +1251,7 @@ replacement for the OpenDWG libraries.")
 (define-public minicom
   (package
     (name "minicom")
-    (version "2.7.1")
+    (version "2.8")
     (source
      (origin
        (method git-fetch)
@@ -1256,13 +1259,16 @@ replacement for the OpenDWG libraries.")
              (url "https://salsa.debian.org/minicom-team/minicom.git")
              (commit (string-append "v" version))))
        (sha256
-        (base32 "0f36wv015zpz1x895qv0z6marlynzyh0d5mfkyd7lfyy2xd1i2w0"))
+        (base32 "0kfihxbh9qkjk9m1932ajyqx384c2aj3d9yaphh3i9i7y1shxlpx"))
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--enable-lock-dir=/var/lock")
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'make-git-checkout-writable
+           (lambda _
+             (for-each make-file-writable (find-files "."))))
          (replace 'bootstrap
            ;; autogen.sh needlessly hard-codes aclocal-1.14.
            (lambda _
@@ -2016,256 +2022,6 @@ parallel computing platforms.  It also supports serial execution.")
     (license (list license:gpl2+
                    license:lgpl2.0+)))) ; freehdl's libraries
 
-(define-public qucs
-  ;; Qucs 0.0.19 segfaults when using glibc-2.26. Temporarily build from git.
-  ;; TODO: When qucs-0.0.20 is released, revert the commit that introduced this
-  ;; comment and update the package.
-  (let ((commit "b4f27d9222568066cd59e4c387c51a35056c99d8")
-        (revision "0"))
-    (package
-      (name "qucs")
-      (version (git-version "0.0.19" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/Qucs/qucs")
-                      (commit commit)))
-                (sha256
-                 (base32 "10bclay9xhkffmsh4j4l28kj1qpxx0pnxja5vx6305cllnq4r3gb"))
-                (file-name (string-append name "-" version "-checkout"))))
-      (build-system gnu-build-system)
-      (arguments
-       `(#:phases
-         (modify-phases %standard-phases
-           (add-before 'bootstrap 'patch-bootstrap
-             (lambda _
-               (for-each patch-shebang
-                         '("bootstrap"
-                           "qucs/bootstrap"
-                           "qucs-doc/bootstrap"
-                           "qucs-core/bootstrap"))
-               #t))
-           (add-before 'configure 'patch-configure
-             (lambda* (#:key inputs #:allow-other-keys)
-               (substitute* "qucs/configure"
-                 (("\\$QTDIR") (assoc-ref inputs "qt4")))
-               #t))
-           (add-after 'patch-configure 'patch-scripts
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (substitute* '("qucs/qucs/qucsdigi"
-                              "qucs/qucs/qucsdigilib"
-                              "qucs/qucs/qucsveri")
-                 (("\\$BINDIR")
-                  (string-append (assoc-ref outputs "out") "/bin"))
-                 (("freehdl-config")
-                  (string-append (assoc-ref inputs "freehdl") "/bin/freehdl-config"))
-                 (("freehdl-v2cc")
-                  (string-append (assoc-ref inputs "freehdl") "/bin/freehdl-v2cc"))
-                 (("cp ")
-                  (string-append (assoc-ref inputs "coreutils") "/bin/cp "))
-                 (("glibtool")
-                  (string-append (assoc-ref inputs "libtool") "/bin/libtool"))
-                 (("sed")
-                  (string-append (assoc-ref inputs "sed") "/bin/sed"))
-                 (("iverilog")
-                  (string-append (assoc-ref inputs "iverilog") "/bin/iverilog"))
-                 (("vvp")
-                  (string-append (assoc-ref inputs "iverilog") "/bin/vvp")))
-               #t))
-           (add-before 'check 'pre-check
-             (lambda _
-               ;; The test suite requires a running X server.
-               (system "Xvfb :1 &")
-               (setenv "DISPLAY" ":1")
-               #t))
-           (add-after 'install 'make-wrapper
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
-                 ;; 'qucs' directly invokes gcc, hence this wrapping.
-                 (wrap-program (string-append out "/bin/qucs")
-                   `("CPLUS_INCLUDE_PATH" ":" prefix
-                     (,(string-append (assoc-ref inputs "gcc-toolchain")
-                                      "/include")))
-                   `("PATH" ":" prefix
-                     (,(string-append (assoc-ref inputs "gcc-toolchain")
-                                      "/bin")))
-                   `("LIBRARY_PATH" ":" prefix
-                     (,(string-append (assoc-ref inputs "gcc-toolchain")
-                                      "/lib")))
-                   `("ADMSXMLBINDIR" ":" prefix
-                     (,(string-append (assoc-ref inputs "adms") "/bin")))
-                   `("ASCOBINDIR" ":" prefix
-                     (,(string-append (assoc-ref inputs "asco") "/bin")))
-                   `("QUCS_OCTAVE" ":" prefix
-                     (,(string-append (assoc-ref inputs "octave") "/bin/octave")))))
-               #t)))
-         #:parallel-build? #f ; race condition
-         #:configure-flags '("--disable-doc"))) ; we need octave-epstk
-      (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("bison" ,bison)
-         ("flex" ,flex)
-         ("gperf" ,gperf)
-         ("libtool-native" ,libtool)
-         ("pkg-config" ,pkg-config)
-         ("python" ,python-2) ; for tests
-         ("matplotlib" ,python2-matplotlib) ; for tests
-         ("numpy" ,python2-numpy) ; for tests
-         ("xorg-server" ,xorg-server-for-tests))) ; for tests
-      (inputs
-       `(("adms" ,adms)
-         ("asco" ,asco)
-         ("coreutils" ,coreutils)
-         ("freehdl" ,freehdl)
-         ("gcc-toolchain" ,gcc-toolchain)
-         ("iverilog" ,iverilog)
-         ("libtool" ,libtool)
-         ("octave" ,octave-cli)
-         ("qt4" ,qt-4)
-         ("sed" ,sed)))
-      (home-page "http://qucs.sourceforge.net/")
-      (synopsis "Circuit simulator with graphical user interface")
-      (description
-       "Qucs is a circuit simulator with graphical user interface.  The software
-aims to support all kinds of circuit simulation types---e.g. DC, AC,
-S-parameter, transient, noise and harmonic balance analysis.  Pure digital
-simulations are also supported.")
-      (license license:gpl2+))))
-
-(define-public qucs-s
-  (package
-    (name "qucs-s")
-    (version "0.0.21")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/ra3xdh/qucs_s/archive/"
-                                  version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "12m1jwhb9qwvb141qzyskbxnw3wn1x22d02z4b4862p7xvccl5h7"))))
-    (build-system cmake-build-system)
-    (arguments
-     `(#:tests? #f ; no tests
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'patch-scripts
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* '("qucs/qucsdigi"
-                            "qucs/qucsdigilib"
-                            "qucs/qucsveri")
-               (("\\$BINDIR")
-                (string-append (assoc-ref inputs "qucs") "/bin"))
-               (("freehdl-config")
-                (string-append (assoc-ref inputs "freehdl") "/bin/freehdl-config"))
-               (("freehdl-v2cc")
-                (string-append (assoc-ref inputs "freehdl") "/bin/freehdl-v2cc"))
-               (("cp ")
-                (string-append (assoc-ref inputs "coreutils") "/bin/cp "))
-               (("glibtool")
-                (string-append (assoc-ref inputs "libtool") "/bin/libtool"))
-               (("sed")
-                (string-append (assoc-ref inputs "sed") "/bin/sed"))
-               (("iverilog")
-                (string-append (assoc-ref inputs "iverilog") "/bin/iverilog"))
-               (("vvp")
-                (string-append (assoc-ref inputs "iverilog") "/bin/vvp")))
-             #t))
-         (add-after 'patch-scripts 'patch-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "qucs/main.cpp"
-               (((string-append "QucsSettings\\.Qucsator = QucsSettings\\.BinDir "
-                                "\\+ \"qucsator\" \\+ executableSuffix"))
-                (string-append "}{ QucsSettings.Qucsator = \""
-                               (assoc-ref inputs "qucs") "/bin/qucsator\""))
-               (((string-append "QucsSettings\\.XyceExecutable = "
-                                "\"/usr/local/Xyce-Release-6.8.0-OPENSOURCE/bin/Xyce"))
-                (string-append "}{ QucsSettings.XyceExecutable = \""
-                               (assoc-ref inputs "xyce-serial") "/bin/Xyce"))
-               (((string-append "else QucsSettings\\.XyceParExecutable = "
-                                "\"mpirun -np %p /usr/local"
-                                "/Xyce-Release-6.8.0-OPENMPI-OPENSOURCE/bin/Xyce"))
-                (string-append "QucsSettings.XyceParExecutable = \""
-                               (assoc-ref inputs "mpi") "/bin/mpirun -np %p "
-                               (assoc-ref inputs "xyce-parallel") "/bin/Xyce"))
-               (("else QucsSettings\\.NgspiceExecutable = \"ngspice\"")
-                (string-append "QucsSettings.NgspiceExecutable = " "\""
-                               (assoc-ref inputs "ngspice") "/bin/ngspice\"")))
-             (substitute* "qucs/extsimkernels/ngspice.cpp"
-               (("share/qucs/xspice_cmlib") "share/qucs-s/xspice_cmlib"))
-             (substitute* "qucs/qucs_actions.cpp"
-               (("qucstrans")
-                (string-append (assoc-ref inputs "qucs") "/bin/qucstrans"))
-               (("qucsattenuator")
-                (string-append (assoc-ref inputs "qucs") "/bin/qucsattenuator"))
-               (("qucsrescodes")
-                (string-append (assoc-ref inputs "qucs") "/bin/qucsrescodes")))
-             #t))
-         (add-after 'install 'install-scripts
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (for-each
-              (lambda (script)
-                (let ((file (string-append "../qucs_s-" ,version
-                                           "/qucs/" script))
-                      (out (assoc-ref outputs "out")))
-                  (install-file file (string-append out "/bin"))
-                  (chmod (string-append out "/bin/" script) #o555)))
-              '("qucsdigi" "qucsdigilib" "qucsveri"))
-             #t))
-         (add-after 'install-scripts 'make-wrapper
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (file (string-append out "/bin/qucs-s"))
-                    (qucs (assoc-ref inputs "qucs"))
-                    (qucsator (string-append qucs "/bin/qucsator")))
-               (wrap-program file
-                 `("CPLUS_INCLUDE_PATH" ":" prefix
-                   (,(string-append (assoc-ref inputs "gcc-toolchain")
-                                    "/include")))
-                 `("PATH" ":" prefix
-                   (,(string-append (assoc-ref inputs "gcc-toolchain")
-                                    "/bin")))
-                 `("LIBRARY_PATH" ":" prefix
-                   (,(string-append (assoc-ref inputs "gcc-toolchain")
-                                    "/lib")))
-                 `("QUCSATOR" ":" prefix (,qucsator))
-                 `("QUCSCONV" ":" prefix (,(string-append qucsator "/bin/qucsconv")))
-                 `("ADMSXMLBINDIR" ":" prefix (,(string-append (assoc-ref inputs "adms")
-                                                               "/bin")))
-                 `("ASCOBINDIR" ":" prefix (,(string-append (assoc-ref inputs "asco")
-                                                            "/bin")))
-                 `("QUCS_OCTAVE" ":" prefix (,(string-append (assoc-ref inputs "octave")
-                                                             "/bin/octave"))))
-               (symlink qucsator (string-append out "/bin/qucsator"))
-               #t))))))
-    (native-inputs
-     `(("libtool-native" ,libtool)))
-    (inputs
-     `(("adms" ,adms)
-       ("asco" ,asco)
-       ("coreutils" ,coreutils)
-       ("freehdl" ,freehdl)
-       ("gcc-toolchain" ,gcc-toolchain)
-       ("iverilog" ,iverilog)
-       ("libtool" ,libtool)
-       ("mpi" ,openmpi)
-       ("ngspice" ,ngspice)
-       ("octave" ,octave-cli)
-       ("qt4" ,qt-4)
-       ("qucs" ,qucs)
-       ("sed" ,sed)
-       ("xyce-serial" ,xyce-serial)
-       ("xyce-parallel" ,xyce-parallel)))
-    (home-page "https://ra3xdh.github.io/")
-    (synopsis "Circuit simulator with graphical user interface")
-    (description
-     "Qucs-S is a spin-off of the Qucs cross-platform circuit simulator.
-The S letter indicates SPICE.  The purpose of the Qucs-S subproject is to use
-free SPICE circuit simulation kernels with the Qucs GUI.  It provides the
-simulator backends @code{Qucsator}, @code{ngspice} and @code{Xyce}.")
-    (license license:gpl2+)))
-
 (define-public librepcb
   (package
     (name "librepcb")
@@ -2601,104 +2357,120 @@ OpenSCAD code.  It supports syntax highlighting, indenting and refilling of
 comments.")))
 
 (define-public freecad
-  (let ((commit-ref "7616153b3c31ace006169cdc2fdafab484498858")
-        (revision "1"))
-    (package
-      (name "freecad")
-      (version (git-version "0.18.5" revision commit-ref))
-      (source
-        (origin
-          (method git-fetch)
-          (uri (git-reference
-                 (url "https://github.com/FreeCAD/FreeCAD")
-                 (commit commit-ref)))
-          (file-name (git-file-name name version))
-          (sha256
-            (base32
-              "16965yxnp2pq7nm8z3p0pjkzjdyq62vfrj8j3nk26bwc898czyn2"))))
-      (build-system qt-build-system)
-      (native-inputs
-       `(("doxygen" ,doxygen)
-         ("graphviz" ,graphviz)
-         ("qttools" ,qttools)
-         ("pkg-config" ,pkg-config)
-         ("python-pyside-2-tools" ,python-pyside-2-tools)
-         ("swig" ,swig)))
-      (inputs
-       `(("boost" ,boost)
-         ("coin3D" ,coin3D)
-         ("eigen" ,eigen)
-         ("freetype" ,freetype)
-         ("glew" ,glew)
-         ("hdf5" ,hdf5-1.10)
-         ("libarea" ,libarea)
-         ("libmedfile" ,libmedfile)
-         ("libspnav" ,libspnav)
-         ("libxi" ,libxi)
-         ("libxmu" ,libxmu)
-         ("openmpi" ,openmpi)
-         ("opencascade-occt" ,opencascade-occt)
-         ("python-matplotlib" ,python-matplotlib)
-         ("python-pyside-2" ,python-pyside-2)
-         ("python-shiboken-2" ,python-shiboken-2)
-         ("python-pivy" ,python-pivy)
-         ("python-wrapper" ,python-wrapper)
-         ("qtbase" ,qtbase)
-         ("qtsvg" ,qtsvg)
-         ("qtx11extras" ,qtx11extras)
-         ("qtxmlpatterns" ,qtxmlpatterns)
-         ("qtwebkit" ,qtwebkit)
-         ("tbb" ,tbb)
-         ("vtk" ,vtk)
-         ("xerces-c" ,xerces-c)
-         ("zlib" ,zlib)))
-      (arguments
-       `(#:tests? #f
-         #:configure-flags
-         (list
-          "-DBUILD_QT5=ON"
-          (string-append "-DCMAKE_INSTALL_LIBDIR=" (assoc-ref %outputs "out") "/lib")
-          (string-append "-DPYSIDE2UICBINARY="
-                         (assoc-ref %build-inputs "python-pyside-2-tools")
-                         "/bin/uic")
-          (string-append "-DPYSIDE2RCCBINARY="
-                         (assoc-ref %build-inputs "python-pyside-2-tools")
-                         "/bin/rcc")
-          "-DPYSIDE_LIBRARY=PySide2::pyside2"
-          (string-append
-           "-DPYSIDE_INCLUDE_DIR="
-           (assoc-ref %build-inputs "python-pyside-2") "/include;"
-           (assoc-ref %build-inputs "python-pyside-2") "/include/PySide2;"
-           (assoc-ref %build-inputs "python-pyside-2") "/include/PySide2/QtCore;"
-           (assoc-ref %build-inputs "python-pyside-2") "/include/PySide2/QtWidgets;"
-           (assoc-ref %build-inputs "python-pyside-2") "/include/PySide2/QtGui;")
-          "-DSHIBOKEN_LIBRARY=Shiboken2::libshiboken"
-          (string-append "-DSHIBOKEN_INCLUDE_DIR="
-                         (assoc-ref %build-inputs "python-shiboken-2")
-                         "/include/shiboken2"))
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'install 'wrap-pythonpath
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
-                 (wrap-program (string-append out "/bin/FreeCAD")
-                   (list "GUIX_PYTHONPATH"
-                         'prefix (list (getenv "GUIX_PYTHONPATH"))))))))))
-      (home-page "https://www.freecadweb.org/")
-      (synopsis "Your Own 3D Parametric Modeler")
-      (description
-       "FreeCAD is a general purpose feature-based, parametric 3D modeler for
+  (package
+    (name "freecad")
+    (version "0.19.1")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/FreeCAD/FreeCAD")
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32
+            "0c53q2iawy4yfp11czyc7lbr9ivp3r7v24x4c20myh11wyplffc0"))))
+    (build-system qt-build-system)
+    (native-inputs
+     `(("doxygen" ,doxygen)
+       ("graphviz" ,graphviz)
+       ("qttools" ,qttools)
+       ("pkg-config" ,pkg-config)
+       ("python-pyside-2-tools" ,python-pyside-2-tools)
+       ("swig" ,swig)))
+    (inputs
+     `(("boost" ,boost)
+       ("coin3D" ,coin3D)
+       ("double-conversion" ,double-conversion)
+       ("eigen" ,eigen)
+       ("freetype" ,freetype)
+       ("gl2ps" ,gl2ps)
+       ("glew" ,glew)
+       ("hdf5" ,hdf5-1.10)
+       ("jsoncpp" ,jsoncpp)
+       ("libarea" ,libarea)
+       ("libjpeg-turbo" ,libjpeg-turbo)
+       ("libmedfile" ,libmedfile)
+       ("libspnav" ,libspnav)
+       ("libtheora" ,libtheora)
+       ("libtiff" ,libtiff)
+       ("libxi" ,libxi)
+       ("libxmlplusplus" ,libxmlplusplus)
+       ("libxmu" ,libxmu)
+       ("lz4" ,lz4)
+       ("netcdf" ,netcdf)
+       ("opencascade-occt" ,opencascade-occt)
+       ("openmpi" ,openmpi)
+       ("proj" ,proj)
+       ("python-gitpython" ,python-gitpython)
+       ("python-matplotlib" ,python-matplotlib)
+       ("python-pivy" ,python-pivy)
+       ("python-pyside-2" ,python-pyside-2)
+       ("python-pyyaml" ,python-pyyaml)
+       ("python-shiboken-2" ,python-shiboken-2)
+       ("python-wrapper" ,python-wrapper)
+       ("qtbase" ,qtbase)
+       ("qtsvg" ,qtsvg)
+       ("qtwebkit" ,qtwebkit)
+       ("qtx11extras" ,qtx11extras)
+       ("qtxmlpatterns" ,qtxmlpatterns)
+       ("sqlite" ,sqlite)
+       ("tbb" ,tbb)
+       ("vtk" ,vtk-8)
+       ("xerces-c" ,xerces-c)
+       ("zlib" ,zlib)))
+    (arguments
+     `(#:tests? #f          ; Project has no tests
+       #:configure-flags
+       (list
+        "-DBUILD_QT5=ON"
+        "-DBUILD_FLAT_MESH:BOOL=ON"
+        (string-append "-DCMAKE_INSTALL_LIBDIR=" (assoc-ref %outputs "out") "/lib")
+        (string-append "-DPYSIDE2UICBINARY="
+                       (assoc-ref %build-inputs "python-pyside-2-tools")
+                       "/bin/uic")
+        (string-append "-DPYSIDE2RCCBINARY="
+                       (assoc-ref %build-inputs "python-pyside-2-tools")
+                       "/bin/rcc")
+        "-DPYSIDE_LIBRARY=PySide2::pyside2"
+        (string-append
+         "-DPYSIDE_INCLUDE_DIR="
+         (assoc-ref %build-inputs "python-pyside-2") "/include;"
+         (assoc-ref %build-inputs "python-pyside-2") "/include/PySide2;"
+         (assoc-ref %build-inputs "python-pyside-2") "/include/PySide2/QtCore;"
+         (assoc-ref %build-inputs "python-pyside-2") "/include/PySide2/QtWidgets;"
+         (assoc-ref %build-inputs "python-pyside-2") "/include/PySide2/QtGui;")
+        "-DSHIBOKEN_LIBRARY=Shiboken2::libshiboken"
+        (string-append "-DSHIBOKEN_INCLUDE_DIR="
+                       (assoc-ref %build-inputs "python-shiboken-2")
+                       "/include/shiboken2"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'restore-pythonpath
+           (lambda _
+             (substitute* "src/Main/MainGui.cpp"
+               (("_?putenv\\(\"PYTHONPATH=\"\\);") ""))))
+         (add-after 'install 'wrap-pythonpath
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (wrap-program (string-append out "/bin/FreeCAD")
+                 (list "PYTHONPATH"
+                       'prefix (list (getenv "PYTHONPATH"))))))))))
+    (home-page "https://www.freecadweb.org/")
+    (synopsis "Your Own 3D Parametric Modeler")
+    (description
+     "FreeCAD is a general purpose feature-based, parametric 3D modeler for
 CAD, MCAD, CAx, CAE and PLM, aimed directly at mechanical engineering and
 product design but also fits a wider range of uses in engineering, such as
 architecture or other engineering specialties.  It is 100% Open Source (LGPL2+
 license) and extremely modular, allowing for very advanced extension and
 customization.")
-      (license
-       (list
-        license:lgpl2.1+
-        license:lgpl2.0+
-        license:gpl3+
-        license:bsd-3)))))
+    (license
+     (list
+      license:lgpl2.1+
+      license:lgpl2.0+
+      license:gpl3+
+      license:bsd-3))))
 
 (define-public libmedfile
   (package
diff --git a/gnu/packages/fcitx5.scm b/gnu/packages/fcitx5.scm
index cae8a74289..a01eacb7cb 100644
--- a/gnu/packages/fcitx5.scm
+++ b/gnu/packages/fcitx5.scm
@@ -172,14 +172,14 @@ client.")
 (define-public libime
   (package
     (name "libime")
-    (version "1.0.5")
+    (version "1.0.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.fcitx-im.org/fcitx5/libime/libime-"
                            version "_dict.tar.xz"))
        (sha256
-        (base32 "1w3cxk11kbfmz7snivxq948zfav6dy2245j12ghlxcmdxjshrlhq"))))
+        (base32 "1s8gzpzyn16pg9gm7kw1nhl09drdndi6j4mjam14ymqsrfsdqr1r"))))
     (build-system cmake-build-system)
     (inputs
      `(("fcitx5" ,fcitx5)
@@ -190,7 +190,7 @@ client.")
        ("python" ,python)))             ;needed to run test
     (home-page "https://github.com/fcitx/libime")
     (synopsis "Library for implementing generic input method")
-    (description "Libime is a library for implmenting various input methods
+    (description "Libime is a library for implementing various input methods
 editors.")
     (license license:lgpl2.1+)))
 
diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
index 198653c639..d970fe7198 100644
--- a/gnu/packages/file-systems.scm
+++ b/gnu/packages/file-systems.scm
@@ -80,7 +80,7 @@
 (define-public autofs
   (package
     (name "autofs")
-    (version "5.1.6")
+    (version "5.1.7")
     (source
      (origin
        (method url-fetch)
@@ -88,7 +88,7 @@
                            "v" (version-major version) "/"
                            "autofs-" version ".tar.xz"))
        (sha256
-        (base32 "1vya21mb4izj3khcr3flibv7xc15vvx2v0rjfk5yd31qnzcy7pnx"))))
+        (base32 "1myfz6a3wj2c4j9h5g44zj796fdi82jhp1s92w2hg6xp2632csx3"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -112,6 +112,12 @@
                (("^searchpath=\".*\"")
                 "searchpath=\"$PATH\""))
              #t))
+         (add-before 'configure 'fix-rpath
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (substitute* "Makefile.rules"
+                 (("^AUTOFS_LIB_LINK.*=" match)
+                  (string-append match " -Wl,-rpath=" out "/lib"))))))
          (add-before 'install 'omit-obsolete-lookup_nis.so-link
            ;; Building lookup_yp.so depends on $(YPCLNT) but this doesn't,
            ;; leading to a make error.  Since it's broken, comment it out.
@@ -178,7 +184,7 @@ large and/or frequently changing (network) environment.")
     (home-page "https://bindfs.org")
     (synopsis "Bind mount a directory and alter permission bits")
     (description
-     "@command{bindfs} is a FUSE filesystem for mounting a directory to
+     "@command{bindfs} is a FUSE file system for mounting a directory to
 another location, similar to @command{mount --bind}.  It can be used for:
 @itemize
 @item Making a directory read-only.
@@ -245,9 +251,9 @@ another location, similar to @command{mount --bind}.  It can be used for:
     (description
      "The @acronym{WebDAV, Web Distributed Authoring and Versioning} extension
 to the HTTP protocol defines a standard way to author resources on a remote Web
-server.  Davfs2 exposes such resources as a typical filesystem which can be used
-by standard applications with no built-in support for WebDAV, such as the GNU
-coreutils (@command{cp}, @command{mv}, etc.) or a graphical word processor.
+server.  Davfs2 exposes such resources as a typical file system which can be
+used by standard applications with no built-in support for WebDAV, such as the
+GNU coreutils (@command{cp}, @command{mv}, etc.) or a graphical word processor.
 
 Davfs2 works with most WebDAV servers with no or little configuration.  It
 supports TLS (HTTPS), HTTP proxies, HTTP basic and digest authentication, and
@@ -334,8 +340,8 @@ from a mounted file system.")
     (license license:gpl2+)))
 
 (define-public bcachefs-tools
-  (let ((commit "612f6b9ab73c7f46e0254355b707d494a8ad9270")
-        (revision "3"))
+  (let ((commit "bb6eccc2ecd4728871bfc70462d3a4a20daa9d68")
+        (revision "4"))
     (package
       (name "bcachefs-tools")
       (version (git-version "0.1" revision commit))
@@ -347,7 +353,7 @@ from a mounted file system.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "1a62wkv1i6pg5k1cjw7fzn933cbz8cp8y40cdpfd8rxjx0wg2szb"))))
+          (base32 "0ziqmcxbrak6bjck6s46hqrqx44zc97yaj0kbk3amsxf18rsfs0n"))))
       (build-system gnu-build-system)
       (arguments
        `(#:make-flags
@@ -1077,14 +1083,14 @@ compatible directories.")
 (define-public python-dropbox
   (package
     (name "python-dropbox")
-    (version "11.2.0")
+    (version "11.5.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "dropbox" version))
         (sha256
          (base32
-          "0ml6z37k6nkhkiy483kvifs8im8z7vabd2g9jl6fkf1fzy3n6bym"))))
+          "16bxx9xqx2s4d9khrw57a0bj4q7nc6kq355wl4pfddn9cqvh9rg2"))))
     (build-system python-build-system)
     (arguments '(#:tests? #f))  ; Tests require a network connection.
     (native-inputs
@@ -1189,10 +1195,10 @@ local file system using FUSE.")
      `(("go-github-com-mattn-go-sqlite3" ,go-github-com-mattn-go-sqlite3)
        ("go-github-com-hanwen-fuse" ,go-github-com-hanwen-fuse)))
     (home-page "https://github.com/oniony/TMSU")
-    (synopsis "Tag files and access them through a virtual filesystem")
+    (synopsis "Tag files and access them through a virtual file system")
     (description
      "TMSU is a tool for tagging your files.  It provides a simple
-command-line utility for applying tags and a virtual filesystem to give you a
+command-line utility for applying tags and a virtual file system to give you a
 tag-based view of your files from any other program.  TMSU does not alter your
 files in any way: they remain unchanged on disk, or on the network, wherever
 your put them.  TMSU maintains its own database and you simply gain an
diff --git a/gnu/packages/file.scm b/gnu/packages/file.scm
index bed272ae35..6fb98244f9 100644
--- a/gnu/packages/file.scm
+++ b/gnu/packages/file.scm
@@ -47,6 +47,8 @@
                       `(("self" ,this-package))
                       '()))
 
+   (properties
+    `((release-monitoring-url . "http://ftp.astron.com/pub/file/")))
    (synopsis "File type guesser")
    (description
     "The file command is a file type guesser, a command-line tool that tells
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index 3ccc077b94..f8d15b8856 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -601,6 +601,7 @@ other machines/servers.  Electrum does not download the Bitcoin blockchain.")
        ("python-hidapi" ,python-hidapi)
        ("python-jsonrpclib-pelix" ,python-jsonrpclib-pelix)
        ("python-keepkey" ,python-keepkey)
+       ("python-pathvalidate" ,python-pathvalidate)
        ("python-protobuf" ,python-protobuf)
        ("python-pyaes" ,python-pyaes)
        ("python-pyqt" ,python-pyqt)
@@ -651,7 +652,7 @@ other machines/servers.  Electroncash does not download the Bitcoin Cash blockch
   ;; the system's dynamically linked library.
   (package
     (name "monero")
-    (version "0.17.1.9")
+    (version "0.17.2.0")
     (source
      (origin
        (method git-fetch)
@@ -671,7 +672,7 @@ other machines/servers.  Electroncash does not download the Bitcoin Cash blockch
               "external/unbound"))
            #t))
        (sha256
-        (base32 "0jqss4csvkcrhrmaa3vrnyv6yiwqpbfw7037clx9xcfm4qrrfiwy"))))
+        (base32 "0jwlmrpzisvw1c06cvd5b3s3hd4w0pa1qmrypfwah67qj3x6hnb6"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("doxygen" ,doxygen)
@@ -761,7 +762,7 @@ the Monero command line client and daemon.")
 (define-public monero-gui
   (package
     (name "monero-gui")
-    (version "0.17.1.9")
+    (version "0.17.2.0")
     (source
      (origin
        (method git-fetch)
@@ -778,7 +779,7 @@ the Monero command line client and daemon.")
            (delete-file-recursively "monero")
            #t))
        (sha256
-        (base32 "0vpvpvsbbj547yir15g84qy9l9lwbip795zlliz79i7d66l23b1w"))))
+        (base32 "17il26gh0g69x7lqkyb461x1712959wajg3iadx0p08djr3m13mf"))))
     (build-system qt-build-system)
     (native-inputs
      `(,@(package-native-inputs monero)
@@ -1404,16 +1405,16 @@ following three utilities are included with the library:
 (define-public bitcoin-unlimited
   (package
     (name "bitcoin-unlimited")
-    (version "1.9.0.1")
+    (version "1.9.1.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/BitcoinUnlimited/BitcoinUnlimited")
+             (url "https://gitlab.com/bitcoinunlimited/BCHUnlimited.git/")
              (commit (string-append "BCHunlimited" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1pan24g3d5csa004d7zvlizj4mv58ly5i579341isp944phl3g5v"))))
+        (base32 "0vyvfawss40v9jaic9zq0z3cjvxiq04d4wgq4rnkha7ilm9zqyd7"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("autoconf" ,autoconf)
diff --git a/gnu/packages/flashing-tools.scm b/gnu/packages/flashing-tools.scm
index 669c45fd68..4b597dca50 100644
--- a/gnu/packages/flashing-tools.scm
+++ b/gnu/packages/flashing-tools.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2017 Jonathan Brielmaier <jonathan.brielmaier@web.de>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,18 +33,23 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages admin)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
+  #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages flex)
   #:use-module (gnu packages elf)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages ghostscript)
+  #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages groff)
   #:use-module (gnu packages pciutils)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages libftdi)
   #:use-module (gnu packages pciutils)
-  #:use-module (gnu packages qt)
-  #:use-module (gnu packages autotools)
-  #:use-module (gnu packages admin))
+  #:use-module (gnu packages qt))
 
 (define-public flashrom
   (package
@@ -476,3 +482,38 @@ ME as far as possible (it only edits ME firmware image files).")
     (description "@code{uefitool} is a graphical image file editor for
 Unifinished Extensible Firmware Interface (UEFI) images.")
     (license license:bsd-2)))
+
+(define-public srecord
+  (package
+    (name "srecord")
+    (version "1.64")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/srecord/srecord/"
+                           version "/srecord-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1qk75q0k5vzmm3932q9hqz2gp8n9rrdfjacsswxc02656f3l3929"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list (string-append "SH="
+                            (assoc-ref %build-inputs "bash")
+                            "/bin/bash"))))
+    (inputs
+     `(("boost" ,boost)
+       ("libgcrypt" ,libgcrypt)))
+    (native-inputs
+     `(("bison" ,bison)
+       ("diffutils" ,diffutils)
+       ("ghostscript" ,ghostscript)
+       ("groff" ,groff)
+       ("libtool" ,libtool)
+       ("which" ,which)))
+    (home-page "http://srecord.sourceforge.net/")
+    (synopsis "Tools for EPROM files")
+    (description "The SRecord package is a collection of powerful tools for
+manipulating EPROM load files.  It reads and writes numerous EPROM file
+formats, and can perform many different manipulations.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index d67c5dc466..764baf800d 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -998,7 +998,7 @@ Unicode Charts.  It was developed for use with DejaVu Fonts project.")
     (arguments
      `(#:configure-flags (list "--disable-static")))
     (native-inputs
-     `(("gtk-doc" ,gtk-doc)
+     `(("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)))
     (inputs
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index de8355c419..9e491ea6d8 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -22,6 +22,7 @@
 ;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;; Copyright © 2020 Anders Thuné <asse.97@gmail.com>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
+;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -173,7 +174,7 @@
        ("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
        ("gperf" ,gperf)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)
        ("xsltproc" ,libxslt)))
@@ -261,7 +262,7 @@ application-centers for distributions.")
        ("docbook-xml" ,docbook-xml-4.1.2)
        ("docbook-xsl" ,docbook-xsl)
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("libtool" ,libtool)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
@@ -313,7 +314,7 @@ for videoconferencing.")
      `(("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)
-       ("gtk-doc" ,gtk-doc)))
+       ("gtk-doc" ,gtk-doc/stable)))
     (inputs
      `(("dbus" ,dbus)
        ("glib" ,glib)))
@@ -1230,7 +1231,7 @@ Analysis and Reporting Technology) functionality.")
        ("glib:bin" ,glib "bin")         ; for glib-mkenums
        ("gnome-common" ,gnome-common)   ; TODO: Why is this needed?
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
        ("xsltproc" ,libxslt)))
@@ -1626,7 +1627,7 @@ wish to perform colour calibration.")
      `(("eudev" ,eudev)
        ("glib:bin" ,glib "bin")         ; for {glib-,}mkenums
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)             ; for 88 KiB of API documentation
+       ("gtk-doc" ,gtk-doc/stable)             ; for 88 KiB of API documentation
        ("pkg-config" ,pkg-config)))
     (inputs
      `(("glib" ,glib)
@@ -1948,6 +1949,26 @@ encoding names are iconv-compatible.")
     ;; combination is GPL 2.0+.
     (license license:gpl2+)))
 
+(define-public python-cchardet
+  (package
+  (name "python-cchardet")
+  (version "2.1.7")
+  (source
+    (origin
+      (method url-fetch)
+      (uri (pypi-uri "cchardet" version))
+      (sha256
+        (base32
+          "1bqfz85cd51sw0bvhvdq9ikccxi2ld7g5jpni4jkq1a5clrvca64"))))
+  (build-system python-build-system)
+  (inputs
+   `(("uchardet" ,uchardet)))
+  (home-page "https://github.com/PyYoshi/cChardet")
+  (synopsis "High-performance character encoding detection for Python")
+  (description "cChardet is a character encoding detector, written in
+Python, that binds to the C library @code{uchardet} to increase performance.")
+  (license license:gpl2+)))
+
 (define-public udiskie
   (package
     (name "udiskie")
@@ -2225,7 +2246,7 @@ fallback to generic Systray support if none of those are available.")
                  #t))))))
       (native-inputs
        `(("pkg-config" ,pkg-config)
-         ("gtk-doc" ,gtk-doc)
+         ("gtk-doc" ,gtk-doc/stable)
          ("docbook-xsl" ,docbook-xsl)
          ("docbook-xml" ,docbook-xml)
          ("libxml2" ,libxml2)
diff --git a/gnu/packages/ftp.scm b/gnu/packages/ftp.scm
index b178063556..961ce3a464 100644
--- a/gnu/packages/ftp.scm
+++ b/gnu/packages/ftp.scm
@@ -1,9 +1,10 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2018, 2021, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Rene Saavedra <rennes@openmailbox.org>
+;;; Copyright © 2021 David Larsson <david.larsson@selfhosted.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,12 +29,14 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages cpio)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages libidn)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages nettle)
   #:use-module (gnu packages pkg-config)
@@ -115,6 +118,8 @@ reliability in mind.")
                     (("a freeware program")
                      "free software"))
                   #t))))
+    (properties
+     `((release-monitoring-url . "https://www.ncftp.com/download/")))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -251,40 +256,82 @@ directory comparison and more.")
     (properties '((upstream-name . "FileZilla")))))
 
 (define-public vsftpd
-  (package
-    (name "vsftpd")
-    (version "3.0.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://security.appspot.com/downloads/"
-                                  name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1xsyjn68k3fgm2incpb3lz2nikffl9by2safp994i272wvv2nkcx"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:make-flags '("LDFLAGS=-lcrypt")
-       #:tests? #f                      ; No tests exist.
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-installation-directory
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "Makefile"
-               (("/usr") (assoc-ref outputs "out")))
-             #t))
-         (add-before 'install 'mkdir
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (mkdir-p out)
-               (mkdir (string-append out "/sbin"))
-               (mkdir (string-append out "/man"))
-               (mkdir (string-append out "/man/man5"))
-               (mkdir (string-append out "/man/man8"))
-               #t)))
-         (delete 'configure))))
-    (synopsis "vsftpd FTP daemon")
-    (description "@command{vsftpd} is a daemon that listens on a TCP socket
+  ;; Use a significantly patched CentOS variant with TLSv1.2 support and
+  ;; further bug and security fixes.
+  (let ((upstream-version "3.0.3")
+        (centos-version "8.3.2011")
+        (revision "32.el8"))
+    (package
+      (name "vsftpd")
+      (version (string-append upstream-version "-" revision))
+      (source
+       (origin
+         (method url-fetch)
+         (uri (string-append
+               "https://vault.centos.org/centos/" centos-version
+               "/AppStream/Source/SPackages/vsftpd-" upstream-version "-"
+               revision ".src.rpm"))
+         (sha256
+          (base32 "1xl0kqcismf82hl99klqbvvpylpyk1yr1qjy5hd8f80cj4lyl0f4"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:make-flags '("LDFLAGS=-lcrypt -lssl -pie")
+         #:tests? #f                    ; no tests exist
+         #:phases
+         (modify-phases %standard-phases
+           (replace 'unpack
+             (lambda* (#:key source #:allow-other-keys)
+               (invoke "7z" "e" source "-ocpio")
+               (invoke "cpio" "-idmv"
+                       (string-append "--file=cpio/vsftpd-"
+                                      ,upstream-version "-" ,revision
+                                      ".src.cpio"))
+               (invoke "tar" "xvf"
+                       (string-append "vsftpd-" ,upstream-version ".tar.gz"))
+               (chdir (string-append "vsftpd-" ,upstream-version))))
+           (add-after 'unpack 'apply-CentOS-patches
+             ;; Apply all patches as enumerated in vsftpd.spec, in order:
+             ;; simply using FIND-FILES would silently corrupt the result.
+             (lambda _
+               (call-with-input-file "../vsftpd.spec"
+                 (lambda (port)
+                   (use-modules (ice-9 rdelim))
+                   (let loop ()
+                     (let ((line (read-line port)))
+                       (unless (eof-object? line)
+                         (when (string-prefix? "Patch" line)
+                           (let* ((space (string-rindex line #\space))
+                                  (patch (string-drop line (+ 1 space))))
+                             (format #t "Applying '~a'.\n" patch)
+                             (invoke "patch" "-Np1"
+                                     "-i" (string-append "../" patch))))
+                         (loop))))))))
+           (add-after 'unpack 'patch-installation-directory
+             (lambda* (#:key outputs #:allow-other-keys)
+               (substitute* "Makefile"
+                 (("/usr") (assoc-ref outputs "out")))
+               #t))
+           (add-before 'install 'mkdir
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out")))
+                 (mkdir-p out)
+                 (mkdir (string-append out "/sbin"))
+                 (mkdir (string-append out "/man"))
+                 (mkdir (string-append out "/man/man5"))
+                 (mkdir (string-append out "/man/man8"))
+                 #t)))
+           (delete 'configure))))
+      (native-inputs
+       ;; Used to unpack the source RPM.
+       `(("p7zip" ,p7zip)
+         ("cpio" ,cpio)))
+      (inputs
+       `(("libcap" ,libcap)
+         ("linux-pam" ,linux-pam)
+         ("openssl" ,openssl)))
+      (home-page "https://security.appspot.com/vsftpd.html")
+      (synopsis "Share files securely over FTP or FTPS")
+      (description "@command{vsftpd} is a daemon that listens on a TCP socket
 for clients and gives them access to local files via File Transfer
 Protocol.")
-    (home-page "https://security.appspot.com/vsftpd.html")
-    (license gpl2)))
+      (license gpl2))))
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index 21a4ef8c0d..83f41da850 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -20,6 +20,7 @@
 ;;; Copyright © 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Timotej Lazar <timotej.lazar@araneo.si>
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -55,6 +56,7 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages check)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages fltk)
@@ -446,7 +448,7 @@ support.")
 (define-public tiled
   (package
     (name "tiled")
-    (version "1.4.3")
+    (version "1.5.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -455,7 +457,7 @@ support.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "14bx4gywfzr2f07ldqk3la82g5ag1agj21f7ccrxip12ydmpx0xb"))))
+                "1prajkx1xpp3csa0xpkrn3c2cnzvmwzxgrqb9d3gqszp3sllr2dg"))))
     (build-system gnu-build-system)
     (inputs
      `(("qtbase" ,qtbase)
@@ -1090,7 +1092,7 @@ to create fully featured games and multimedia programs in the python language.")
 
 (define-public python2-pygame-sdl2
   (let ((real-version "2.1.0")
-        (renpy-version "7.4.2"))
+        (renpy-version "7.4.4"))
     (package
       (inherit python2-pygame)
       (name "python2-pygame-sdl2")
@@ -1100,7 +1102,7 @@ to create fully featured games and multimedia programs in the python language.")
          (method url-fetch)
          (uri (string-append "https://www.renpy.org/dl/" renpy-version
                              "/pygame_sdl2-" version ".tar.gz"))
-         (sha256 (base32 "1lpk69nh379x5pdlr838x5b49spzksn9hyqiq2g0q28k0xk4lm67"))
+         (sha256 (base32 "1lj5c3kfnl8s824j3hs47dg3g5rlabscmwrbb0lgpyy4633pv9ka"))
          (modules '((guix build utils)))
          (snippet
           '(begin
@@ -1143,13 +1145,13 @@ developed mainly for Ren'py.")
 (define-public python2-renpy
   (package
     (name "python2-renpy")
-    (version "7.4.2")
+    (version "7.4.4")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.renpy.org/dl/" version
                            "/renpy-" version "-source.tar.bz2"))
-       (sha256 (base32 "1mlrq9q3r36izyskq674qhp8s32iirvvfb4r8z6hi26189aaydsw"))
+       (sha256 (base32 "1cbbvsk1snjrsh59blb8q2h86555gi23pylmwlnk9dx0jxckdi21"))
        (modules '((guix build utils)))
        (patches
         (search-patches
@@ -1760,6 +1762,44 @@ provide high-quality 3D rendering, it contains an animation editor, and can be
 scripted in a Python-like language.")
     (license license:expat)))
 
+(define-public entt
+  (package
+    (name "entt")
+    (version "3.7.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/skypjack/entt")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0nzvnhiw3r6nkmxp749zwxc8kzja09nijyxibdbri3g2i7pysf58"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags (list "-DENTT_BUILD_TESTING=ON"
+                               "-DENTT_FIND_GTEST_PACKAGE=ON"
+                               "-DENTT_BUILD_DOCS=ON")
+       ;; Only tests are compiled, and they need assertions to work correctly.
+       #:build-type "Debug"))
+    (native-inputs
+     `(;; for testing
+       ("googletest" ,googletest)
+       ;; for documentation
+       ("doxygen" ,doxygen)
+       ("graphviz" ,graphviz)))
+    (synopsis "Entity component system")
+    (description "EnTT is a header-only library, containing (among other things)
+@itemize
+@item an entity component system based on sparse sets,
+@item a configuration system using the monostate pattern,
+@item a static reflection system,
+@item and a cooperative scheduler.
+@end itemize")
+    (home-page "https://github.com/skypjack/entt")
+    (license (list license:expat        ; code
+                   license:cc-by4.0)))) ; documentation
+
 (define-public eureka
   (package
     (name "eureka")
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 9fbfad040e..9b2bbb036b 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -52,7 +52,7 @@
 ;;; Copyright © 2020 Jack Hill <jackhill@jackhill.us>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020 Trevor Hass <thass@okstate.edu>
+;;; Copyright © 2020, 2021 Trevor Hass <thass@okstate.edu>
 ;;; Copyright © 2020, 2021 Leo Prikler <leo.prikler@student.tugraz.at>
 ;;; Copyright © 2020 Lu hux <luhux@outlook.com>
 ;;; Copyright © 2020 Tomás Ortín Fernández <tomasortin@mailbox.org>
@@ -743,7 +743,7 @@ battlestar (explore the world around, starting from dying spaceship),
 phantasia (role-play as an rogue), trek (hunt the Klingons, and save the
 Federation), and wump (hunt the big smelly Wumpus in a dark cave).
 
-Quizes: arithmetic, and quiz.")
+Quizzes: arithmetic and quiz.")
     ;; "Auxiliary and data files, distributed with the games in NetBSD, but
     ;; not bearing copyright notices, probably fall under the terms of the UCB
     ;; or NetBSD copyrights and licences.  The file "fortune/Notes" contains a
@@ -2325,7 +2325,7 @@ and defeat them with your bubbles!")
     (name "solarus")
     ;; XXX: When updating this package, please also update hash in
     ;; `solarus-quest-editor' below.
-    (version "1.6.4")
+    (version "1.6.5")
     (source
      (origin
        (method git-fetch)
@@ -2334,7 +2334,7 @@ and defeat them with your bubbles!")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1n6l91yyqjx0pz4w1lp3yybpq0fs2yjswfcm8c1wjfkxwiznbdxi"))))
+        (base32 "0ny9dgqphjv2l39rff2621hnrzpf8qin8vmnv7jdz20azjk4m8id"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
@@ -2393,19 +2393,9 @@ in mind.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1qbc2j9kalk7xqk9j27s7wnm5zawiyjs47xqkqphw683idmzmjzn"))))
+        (base32 "1pvjgd4faxii5sskw1h55lw90hlbazhwni8nxyywzrmkjbq7irm0"))))
     (arguments
-     `(#:tests? #false                  ;no test
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-qt-build
-           ;; XXX: Fix build with Qt 5.15.  It has been applied upstream as
-           ;; 81d5c7f1 and can be removed at next upgrade.
-           (lambda _
-             (substitute* "src/entities/jumper.cpp"
-               (("#include <QPainter>" all)
-                (string-append all "\n" "#include <QPainterPath>\n")))
-             #t)))))
+     `(#:tests? #false))                ; no test suite
     (inputs
      `(("solarus" ,solarus)
        ,@(package-inputs solarus)))
@@ -3464,7 +3454,7 @@ match, cannon keep, and grave-itation pit.")
 (define-public minetest
   (package
     (name "minetest")
-    (version "5.4.0")
+    (version "5.4.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3473,7 +3463,7 @@ match, cannon keep, and grave-itation pit.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1a17g6cmxrscnqwpwrd4w2ck3dgvplyfq4kzyimilfpqar1q69j9"))
+                "062ilb7s377q3hwfhl8q06vvcw2raydz5ljzlzwy2dmyzmdcndb8"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -3496,8 +3486,13 @@ match, cannon keep, and grave-itation pit.")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-sources
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/filesys.cpp"
+               ;; Use store-path for "rm" instead of non-existing FHS path.
+               (("\"/bin/rm\"")
+                (string-append "\"" (assoc-ref inputs "coreutils") "/bin/rm\"")))
              (substitute* "src/CMakeLists.txt"
+               ;; Let minetest binary remain in build directory.
                (("set\\(EXECUTABLE_OUTPUT_PATH .*\\)") ""))
              (substitute* "src/unittest/test_servermodmanager.cpp"
                ;; do no override MINETEST_SUBGAME_PATH
@@ -3521,7 +3516,8 @@ match, cannon keep, and grave-itation pit.")
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
-     `(("curl" ,curl)
+     `(("coreutils" ,coreutils)
+       ("curl" ,curl)
        ("freetype" ,freetype)
        ("gettext" ,gettext-minimal)
        ("gmp" ,gmp)
@@ -3561,7 +3557,7 @@ in different ways.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "11dz36z0pj2r7i8xm8v5lskzws81ckj6sc0avlmvdl8qdc9x83w5"))))
+                "0i45lbnikvgj9kxdp0yphpjjwjcgp4ibn49xkj78j5ic1s9n8jd4"))))
     (build-system trivial-build-system)
     (native-inputs
      `(("source" ,source)))
@@ -5847,7 +5843,7 @@ for Un*x systems with X11.")
 (define-public freeciv
   (package
    (name "freeciv")
-   (version "2.6.3")
+   (version "2.6.4")
    (source
     (origin
      (method url-fetch)
@@ -5859,7 +5855,7 @@ for Un*x systems with X11.")
                   (version-major+minor version) "/" version
                   "/freeciv-" version ".tar.bz2")))
      (sha256
-      (base32 "1lgq7wcbhwpy2yqdw4biwfmp5q8fh7lhlwxcgm0fpaapfl12whvp"))))
+      (base32 "1kn122f57wn5a8ryxaz73dlbd5m93mqx3bqmmz2lkgdccrvrbns0"))))
    (build-system gnu-build-system)
    (inputs
     `(("curl" ,curl)
@@ -8738,7 +8734,7 @@ where the player draws runes in real time to effect the desired spell.")
 (define-public edgar
   (package
     (name "edgar")
-    (version "1.33")
+    (version "1.34")
     (source
      (origin
        (method url-fetch)
@@ -8746,7 +8742,7 @@ where the player draws runes in real time to effect the desired spell.")
         (string-append "https://github.com/riksweeney/edgar/releases/download/"
                        version "/edgar-" version "-1.tar.gz"))
        (sha256
-        (base32 "1mbx7dvizdca4g1blcv3bdh6yxd13k47rkya4rdzg0nvvz24m175"))))
+        (base32 "1121rq5wk3g8rs413av84s2kcy6qj6maspgy2vsxs36c2jd3yygl"))))
     (build-system gnu-build-system)
     (arguments '(#:tests? #f            ; there are no tests
                  #:make-flags
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index e9f5889570..9dff1a1238 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -571,20 +571,19 @@ It also includes runtime support libraries for these languages.")))
 (define-public gcc-10
   (package
    (inherit gcc-8)
-   (version "10.2.0")
+   (version "10.3.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/gcc/gcc-"
                                 version "/gcc-" version ".tar.xz"))
             (sha256
              (base32
-              "130xdkhmz1bc2kzx061s3sfwk36xah1fw5w332c0nzwwpdl47pdq"))
+              "0i6378ig6h397zkhd7m4ccwjx5alvzrf2hm27p1pzwjhlv0h9x34"))
             (patches (search-patches "gcc-9-strmov-store-file-names.patch"
                                      "gcc-5.0-libvtv-runpath.patch"))))))
 
 ;; Note: When changing the default gcc version, update
-;;       the gcc-toolchain-* definitions and the gfortran definition
-;;       accordingly.
+;;       the gcc-toolchain-* definitions.
 (define-public gcc gcc-8)
 
 (define-public (make-libstdc++ gcc)
diff --git a/gnu/packages/genealogy.scm b/gnu/packages/genealogy.scm
index dde0fddc25..2c3781d361 100644
--- a/gnu/packages/genealogy.scm
+++ b/gnu/packages/genealogy.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
-;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -39,7 +39,7 @@
 (define-public gramps
   (package
     (name "gramps")
-    (version "5.1.2")
+    (version "5.1.3")
     (source
      (origin
        (method git-fetch)
@@ -48,7 +48,7 @@
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "175iwvdp6c1a8rskl2wpk4yvzl437j7hm23v481974a85qy43iv8"))))
+        (base32 "109dwkswz2h2328xkqk2zj736d117s9pp7rz5cc1qg2vxn1lpm93"))))
     (build-system python-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index c988d6b114..c4bdb6aca0 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -151,7 +151,7 @@
        ("automake" ,automake)
        ("docbook-xml" ,docbook-xml-4.3)
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)
@@ -294,36 +294,6 @@ and driving.")
     (home-page "https://wiki.gnome.org/Apps/Maps")
     (license license:gpl2+)))
 
-(define-public libgaiagraphics
-  (package
-    (name "libgaiagraphics")
-    (version "0.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://www.gaia-gis.it/gaia-sins/libgaiagraphics-"
-                           version ".tar.gz"))
-       (sha256
-        (base32
-         "076afqv417ag3hfvnif0qc7qscmnq1dsf6y431yygwgf34rjkayc"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("cairo" ,cairo)
-       ("libpng" ,libpng)
-       ("libjpeg-turbo" ,libjpeg-turbo)
-       ("libtiff" ,libtiff)
-       ("libgeotiff" ,libgeotiff)
-       ("proj.4" ,proj.4)
-       ("libxml2" ,libxml2)
-       ("zlib" ,zlib)))
-     (synopsis "Gaia common graphics support")
-     (description "libgaiagraphics is a library supporting
- common-utility raster handling methods.")
-    (home-page "https://www.gaia-gis.it/fossil/libgaiagraphics/index")
-    (license license:lgpl3+)))
-
 (define-public libgeotiff
   (package
     (name "libgeotiff")
@@ -373,6 +343,63 @@ writing GeoTIFF information tags.")
                    (license:non-copyleft "file://LICENSE"
                                          "See LICENSE in the distribution.")))))
 
+(define-public librasterlite2
+  (package
+    (name "librasterlite2")
+    (version "1.1.0-beta1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://www.gaia-gis.it/gaia-sins/librasterlite2-sources/"
+             "librasterlite2-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1x24gqp4hsq97c31ncwxblab0x0863q8v1z42jil7lvsq3glqa7p"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("cairo" ,cairo)
+       ("curl" ,curl)
+       ("freetype" ,freetype)
+       ("freexl" ,freexl)
+       ("giflib" ,giflib)
+       ("libgeotiff" ,libgeotiff)
+       ("libjpeg-turbo" ,libjpeg-turbo)
+       ("libpng" ,libpng)
+       ("librttopo" ,librttopo)
+       ("libspatialite" ,libspatialite)
+       ("libtiff" ,libtiff)
+       ("libwebp" ,libwebp)
+       ("libxml2" ,libxml2)
+       ("lz4" ,lz4)
+       ("minizip" ,minizip)
+       ("openjpeg" ,openjpeg)
+       ("proj" ,proj)
+       ("sqlite" ,sqlite)
+       ("zstd" ,zstd "lib")))
+    (synopsis "Library to work with huge raster coverages using a SpatiaLite")
+    (description
+     "librasterlite2 is a library that stores and retrieves huge raster
+coverages using a SpatiaLite DBMS.")
+    (home-page "https://www.gaia-gis.it/fossil/librasterlite2/index")
+    ;; For the genuine librasterlite-sources holds:
+    ;; Any of the licenses MPL1.1, GPL2+ or LGPL2.1+  may be picked.
+    ;; Files under src/control_points are from GRASS
+    ;; and are licensed under GPL2+ only.
+    ;; src/md5.[ch]: Placed into the public domain by Alexander Peslyak.
+    ;; The tools supporting the library (both rl2tool and wmslite) are
+    ;; licensed under the GPL v3 (or any subsequent version) terms.
+    ;; The test/*.svg files are placed in the public domain, except for
+    ;; test/Car_Yellow.svg which is licensed under the Free Art License 1.3.
+    (license (list license:gpl2+
+                   license:gpl3+
+                   license:lal1.3
+                   license:lgpl2.1+
+                   license:mpl1.1
+                   license:public-domain))))
+
 (define-public librttopo
   (package
     (name "librttopo")
@@ -442,9 +469,8 @@ writing GeoTIFF information tags.")
        ("librttopo" ,librttopo)
        ("libxml2" ,libxml2)
        ("minizip" ,minizip)
-       ("proj.4" ,proj.4)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+       ("proj" ,proj)
+       ("sqlite" ,sqlite)))
     (arguments
      `(#:configure-flags
        '("--enable-rttopo=yes")
@@ -454,7 +480,7 @@ writing GeoTIFF information tags.")
          (add-after 'unpack 'ignore-broken-tests
            (lambda _
              (substitute* '("test/Makefile.in")
-               (("\tcheck_sql_stm.*" all) "\tcheck_multithread$(EXEEXT) \\\n")
+               (("\tcheck_sql_stmt.* (check_sql_.*)" all tiny) (string-append "\t" tiny))
                (("(\tch.*) check_v.*ble2.*$" all vt1) (string-append vt1 " \\\n"))
                (("\tch.* (check_v.*ble4.*)$" all vt4) (string-append "\t" vt4)))
              #t)))))
@@ -686,29 +712,39 @@ development.")
 (define-public spatialite-gui
   (package
     (name "spatialite-gui")
-    (version "1.7.1")
+    (version "2.1.0-beta1")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://www.gaia-gis.it/gaia-sins/spatialite_gui-"
-                           version ".tar.gz"))
+       (uri (string-append
+             "https://www.gaia-gis.it/gaia-sins/spatialite-gui-sources/"
+             "spatialite_gui-" version ".tar.gz"))
        (sha256
-        (base32
-         "1r05dz9pyc8vsd2wbqxcsracpfbaamz470rcyp2myfpqwznv376b"))))
+        (base32 "0cyv4cycl073p9lnnnglcb72qn71g8h9g5zn4gzw7swcy5nxjj5s"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
-     `(("freexl" ,freexl)
+     `(("curl" ,curl)
+       ("freexl" ,freexl)
        ("geos" ,geos)
-       ("libgaiagraphics" ,libgaiagraphics)
+       ("giflib" ,giflib)
        ("libjpeg-turbo" ,libjpeg-turbo)
+       ("librasterlite2" ,librasterlite2)
+       ("librttopo" ,librttopo)
        ("libspatialite" ,libspatialite)
+       ("libwebp" ,libwebp)
+       ("libxlsxwriter" ,libxlsxwriter)
        ("libxml2" ,libxml2)
-       ("proj.4" ,proj.4)
+       ("lz4" ,lz4)
+       ("minizip" ,minizip)
+       ("openjpeg" ,openjpeg)
+       ("postgresql" ,postgresql)
+       ("proj" ,proj)
        ("sqlite" ,sqlite)
-       ("wxwidgets" ,wxwidgets-2)
-       ("zlib" ,zlib)))
+       ("virtualpg" ,virtualpg)
+       ("wxwidgets" ,wxwidgets)
+       ("zstd" ,zstd "lib")))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'fix-gui
@@ -1066,7 +1102,7 @@ map, geocoding with Nominatim, or general analysis.")
 (define-public tippecanoe
   (package
     (name "tippecanoe")
-    (version "1.31.5")
+    (version "1.36.0")
     (source
      (origin
        (method git-fetch)
@@ -1075,14 +1111,14 @@ map, geocoding with Nominatim, or general analysis.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1m0x931a945sr7axyhcvpwh798m58hx1zxh6ikgf9gsgqhdhmszz"))))
+        (base32 "0lbmhly4ivnqc6qk1k3sdqvsg6x3nfd8gnjx846bhqj4wag3f88m"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases (delete 'configure))
        #:test-target "test"
        #:make-flags
-       (list "CC=gcc"
+       (list (string-append "CC=" ,(cc-for-target))
              (string-append "PREFIX=" (assoc-ref %outputs "out")))))
     (inputs
      `(("perl" ,perl)
@@ -1138,7 +1174,7 @@ OpenStreetMap data files.")
     (build-system gnu-build-system)
     (native-inputs
      `(("gnome-common" ,gnome-common)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)))
     (inputs
      `(("cairo" ,cairo)
@@ -1748,10 +1784,9 @@ associated attribute file (@file{.dbf}).")
        ("libspatialite" ,libspatialite)
        ("libxml2" ,libxml2)
        ("minizip" ,minizip)
-       ("proj.4" ,proj.4)
+       ("proj" ,proj)
        ("readosm" ,readosm)
-       ("sqlite" ,sqlite)
-       ("zlib" ,zlib)))
+       ("sqlite" ,sqlite)))
     (synopsis "Collection of command line tools for SpatiaLite")
     (description
      "@code{spatialite-tools} is a collection of Command Line Interface (CLI)
@@ -1978,7 +2013,7 @@ visualization.")
 (define-public saga
   (package
     (name "saga")
-    (version "7.6.2")
+    (version "7.9.0")
     (source
      (origin
        (method url-fetch)
@@ -1986,7 +2021,7 @@ visualization.")
                            (version-major version) "/SAGA%20-%20" version
                            "/saga-" version ".tar.gz"))
        (sha256
-        (base32 "09j5magmayq2y620kqa490mfd1kpdp3lng2ifcgbrmssc079ybm0"))))
+        (base32 "1n051yxxkylly0k9rlkx2ih3j2lf9d4csg00sm7161r7nhjvggd1"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -2001,7 +2036,7 @@ visualization.")
        ("libtiff" ,libtiff)
        ("opencv" ,opencv)
        ("postgresql" ,postgresql)
-       ("proj.4" ,proj.4)
+       ("proj" ,proj)
        ("python" ,python)
        ("qhull" ,qhull)
        ("unixodbc" ,unixodbc)
@@ -2047,7 +2082,21 @@ growing set of geoscientific methods.")
                (("sip_dir = cfg.default_sip_dir")
                 (string-append "sip_dir = \""
                                (assoc-ref inputs "python-pyqt+qscintilla")
-                               "/share/sip\"")))
+                               "/share/sip\""))
+               ;; Fix building with python-sip@5.
+               ;;
+               ;; The reason for this is that python-sip@5 introduces some
+               ;; changes such as a new build system 'sip-build' as well as the
+               ;; use of the path "/lib/pythonX.X/site-packages/*/bindings/"
+               ;; instead of "/share/sip/" for .sip files. However, we do not
+               ;; actually use that those yet. QGIS detects SIP5 and assumes we
+               ;; are, messing up the build. The long term solution is to fully
+               ;; upgrade SIP, use sip-build and fix all failing packages, but
+               ;; for now I just want to get the build working.
+               ((".pyqt_sip_dir...os.path.join.*,")
+                (string-append "'pyqt_sip_dir': \""
+                               (assoc-ref inputs "python-pyqt+qscintilla")
+                               "/share/sip"  "\",")))
              (substitute* (list "scripts/prepare_commit.sh"
                                 "scripts/qstringfixup.sh"
                                 "scripts/release.pl"
diff --git a/gnu/packages/gimp.scm b/gnu/packages/gimp.scm
index 3670f60b02..7ac064de81 100644
--- a/gnu/packages/gimp.scm
+++ b/gnu/packages/gimp.scm
@@ -36,7 +36,9 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages graphviz)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
@@ -166,7 +168,7 @@ of a larger interface.")
 (define-public babl
   (package
     (name "babl")
-    (version "0.1.78")
+    (version "0.1.86")
     (source (origin
               (method url-fetch)
               (uri (list (string-append "https://download.gimp.org/pub/babl/"
@@ -180,10 +182,11 @@ of a larger interface.")
                                         "/babl-" version ".tar.xz")))
               (sha256
                (base32
-                "0fjjfb0pbgimlqi7rk8cqz8pq595b7gw8nrpkxfmixdz6cv4km8p"))))
+                "1w68h81kqkqnziixrx21qs0gfv2z79651h19sxn226xdb58mjgqb"))))
     (build-system meson-build-system)
     (arguments
-     `(#:configure-flags
+     `(#:meson ,meson-0.55
+       #:configure-flags
        (list "-Denable-gir=false")))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -205,7 +208,7 @@ provided, as well as a framework to add new color models and data types.")
 (define-public gegl
   (package
     (name "gegl")
-    (version "0.4.26")
+    (version "0.4.28")
     (source (origin
               (method url-fetch)
               (uri (list (string-append "https://download.gimp.org/pub/gegl/"
@@ -219,10 +222,11 @@ provided, as well as a framework to add new color models and data types.")
                                         "/gegl-" version ".tar.xz")))
               (sha256
                (base32
-                "097427icgpgvcx40019b3dm8m84cchz79pixzpz648drs8p1wdqg"))))
+                "003ri7yv7lm2fi86ama3vlkwnz656yyib4r36hxwlk6mfy2hs48x"))))
     (build-system meson-build-system)
     (arguments
-     `(#:configure-flags
+     `(#:meson ,meson-0.55
+       #:configure-flags
        (list "-Dintrospection=false")
        #:phases
        (modify-phases %standard-phases
@@ -266,14 +270,15 @@ buffers.")
   (package
     (name "gimp")
     (version "2.10.22")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://download.gimp.org/pub/gimp/v"
-                                  (version-major+minor version)
-                                  "/gimp-" version ".tar.bz2"))
-              (sha256
-               (base32
-                "1fqqyshakvdarf1jipk2n33ibqr23ni22z3d8srq13bpydblpf1d"))))
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://download.gimp.org/pub/gimp/v"
+                           (version-major+minor version)
+                           "/gimp-" version ".tar.bz2"))
+       (sha256
+        (base32 "1fqqyshakvdarf1jipk2n33ibqr23ni22z3d8srq13bpydblpf1d"))
+       (patches (search-patches "gimp-make-gegl-introspect-optional.patch"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "doc"))                            ; 9 MiB of gtk-doc HTML
@@ -541,6 +546,29 @@ healing the border, increasing the resolution while adding detail, and
 transferring the style of an image.")
     (license license:gpl3+)))
 
+(define gegl-for-glimpse
+  ;; Remove this when GIMP commit 2cae9b9acf9da98c4c9990819ffbd5aabe23017e
+  ;; makes it into Glimpse.
+  (package
+    (inherit gegl)
+    (arguments
+     (substitute-keyword-arguments (package-arguments gegl)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'refer-to-dot
+             ;; XXX Without ‘dot’ in $PATH, Glimpse would fail to start with an
+             ;; extremely obtuse ‘GEGL operation missing!’ error.
+             (lambda _
+               (substitute* "gegl/gegl-dot.c"
+                 (("\"dot ")
+                  (format #f "\"~a " (which "dot"))))
+               (substitute* "operations/common/introspect.c"
+                 (("g_find_program_in_path \\(\"dot\"\\)")
+                  (format #f "g_strdup (\"~a\")" (which "dot"))))))))))
+    (inputs
+     `(,@(package-inputs gegl)
+       ("graphviz" ,graphviz)))))
+
 (define-public glimpse
   (package
     (name "glimpse")
@@ -620,7 +648,7 @@ transferring the style of an image.")
        ("poppler-data" ,poppler-data)
        ("python" ,python-2)             ; optional, Python support
        ("python2-pygtk" ,python2-pygtk) ; optional, Python support
-       ("gegl" ,gegl)))
+       ("gegl" ,gegl-for-glimpse)))     ; XXX see comment in gegl-for-glimpse
     (home-page "https://glimpse-editor.github.io/")
     (synopsis "Glimpse Image Editor")
     (description "The Glimpse Image Editor is an application for image
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index c194d269f8..924340746f 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -271,7 +271,7 @@ also known as DXTn or DXTC) for Mesa.")
         ("libxrandr" ,libxrandr)
         ("libxvmc" ,libxvmc)
         ,@(match (%current-system)
-            ((or "x86_64-linux" "i686-linux")
+            ((or "x86_64-linux" "i686-linux" "powerpc64le-linux")
              ;; Note: update the 'clang' input of mesa-opencl when bumping this.
              `(("llvm" ,llvm-11)))
             (_
@@ -283,7 +283,7 @@ also known as DXTn or DXTC) for Mesa.")
         ("flex" ,flex)
         ("gettext" ,gettext-minimal)
         ,@(match (%current-system)
-            ((or "x86_64-linux" "i686-linux")
+            ((or "x86_64-linux" "i686-linux" "powerpc64le-linux")
              `(("glslang" ,glslang)))
             (_
              `()))
@@ -296,8 +296,10 @@ also known as DXTn or DXTC) for Mesa.")
      `(#:configure-flags
        '(,@(match (%current-system)
              ((or "armhf-linux" "aarch64-linux")
-              ;; TODO: Fix svga driver for aarch64 and armhf.
+              ;; TODO: Fix svga driver for non-Intel architectures.
               '("-Dgallium-drivers=etnaviv,freedreno,kmsro,lima,nouveau,panfrost,r300,r600,swrast,tegra,v3d,vc4,virgl"))
+             ("powerpc64le-linux"
+              '("-Dgallium-drivers=nouveau,r300,r600,radeonsi,swrast,virgl"))
              (_
               '("-Dgallium-drivers=iris,nouveau,r300,r600,radeonsi,svga,swrast,virgl")))
          ;; Enable various optional features.  TODO: opencl requires libclc,
@@ -314,16 +316,18 @@ also known as DXTn or DXTC) for Mesa.")
          "-Dgbm=enabled"
          "-Dshared-glapi=enabled"
 
-         ;; Enable Vulkan on i686-linux and x86-64-linux.
+         ;; Explicitly enable Vulkan on some architectures.
          ,@(match (%current-system)
              ((or "i686-linux" "x86_64-linux")
               '("-Dvulkan-drivers=intel,amd"))
+             ("powerpc64le-linux"
+              '("-Dvulkan-drivers=amd"))
              (_
               '("-Dvulkan-drivers=auto")))
 
-         ;; Enable the Vulkan overlay layer on i686-linux and x86-64-linux.
+         ;; Enable the Vulkan overlay layer on architectures using llvm.
          ,@(match (%current-system)
-             ((or "x86_64-linux" "i686-linux")
+             ((or "x86_64-linux" "i686-linux" "powerpc64le-linux")
               '("-Dvulkan-overlay-layer=true"))
              (_
               '()))
@@ -337,6 +341,9 @@ also known as DXTn or DXTC) for Mesa.")
              ((or "x86_64-linux" "i686-linux")
               '("-Ddri-drivers=i915,i965,nouveau,r200,r100"
                 "-Dllvm=enabled"))      ; default is x86/x86_64 only
+             ("powerpc64le-linux"
+              '("-Ddri-drivers=nouveau,r200,r100"
+                "-Dllvm=enabled"))
              (_
               '("-Ddri-drivers=nouveau,r200,r100"))))
 
@@ -350,6 +357,15 @@ also known as DXTn or DXTC) for Mesa.")
                   (guix build meson-build-system))
        #:phases
        (modify-phases %standard-phases
+         ,@(if (string-prefix? "powerpc64le" (or (%current-target-system)
+                                                 (%current-system)))
+               ;; Disable some of the llvmpipe tests.
+               `((add-after 'unpack 'disable-failing-test
+                   (lambda _
+                     (substitute* "src/gallium/drivers/llvmpipe/lp_test_arit.c"
+                       (("0\\.5, ") ""))
+                     #t)))
+               '())
          ,@(if (string-prefix? "i686" (or (%current-target-system)
                                           (%current-system)))
                ;; Disable new test from Mesa 19 that fails on i686.  Upstream
@@ -390,7 +406,7 @@ also known as DXTn or DXTC) for Mesa.")
              (let ((out (assoc-ref outputs "out"))
                    (bin (assoc-ref outputs "bin")))
                ,@(match (%current-system)
-                   ((or "i686-linux" "x86_64-linux")
+                   ((or "i686-linux" "x86_64-linux" "powerpc64le-linux")
                     ;; Install the Vulkan overlay control script to a separate
                     ;; output to prevent a reference on Python, saving ~70 MiB
                     ;; on the closure size.
@@ -728,7 +744,7 @@ OpenGL graphics API.")
     (description
      "libglvnd is a vendor-neutral dispatch layer for arbitrating OpenGL
 API calls between multiple vendors.  It allows multiple drivers from
-different vendors to coexist on the same filesystem, and determines which
+different vendors to coexist on the same file system, and determines which
 vendor to dispatch each API call to at runtime.
 
 Both GLX and EGL are supported, in any combination with OpenGL and OpenGL ES.")
@@ -783,7 +799,7 @@ OpenGL.")
 (define-public glfw
   (package
     (name "glfw")
-    (version "3.3.3")
+    (version "3.3.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/glfw/glfw"
@@ -791,7 +807,7 @@ OpenGL.")
                                   "/glfw-" version ".zip"))
               (sha256
                (base32
-                "0xrrahhbs4sn7sgvdk9sgz5zla4sw3ajq6kxpqrx635l8nnqfc3j"))))
+                "1kcrpl4d6b6h23ib5j9q670d9w3knd07whgbanbmwwhbcqnc9lmv"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ; no test target
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 34d2ba4cf4..b288528c8a 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -1159,7 +1159,7 @@ other API remains the same.")
      `(("bison" ,bison)
        ("flex" ,flex)
        ("glib:bin" ,glib "bin") ;; For glib-mkenums
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (home-page "https://gitlab.gnome.org/GNOME/template-glib")
diff --git a/gnu/packages/gnome-xyz.scm b/gnu/packages/gnome-xyz.scm
index 21192acdd6..af920c501d 100644
--- a/gnu/packages/gnome-xyz.scm
+++ b/gnu/packages/gnome-xyz.scm
@@ -950,9 +950,9 @@ feature-set for programming Vala effectively.")
          #:exclude ("README.md" "LICENSE" "Art/" "package.json"
                     "package-lock.json" "Gulpfile.js")))))
    (home-page "https://github.com/EliverLara/Nordic")
-   (synopsis "Dark Gtk3.20+ theme using the Nord color pallete")
+   (synopsis "Dark Gtk3.20+ theme using the Nord color palette")
    (description "Nordic is a Gtk3.20+ theme created using the Nord color
-pallete.")
+palette.")
    (license license:gpl3))))
 
 (define-public tiramisu
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index f5a8a4d2bd..f393e768af 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -202,7 +202,6 @@
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (gnu artwork)
-  #:use-module ((guix build utils) #:select (modify-phases))
   #:use-module (guix build-system cargo)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system glib-or-gtk)
@@ -216,8 +215,6 @@
   #:use-module (guix packages)
   #:use-module (guix utils)
   #:use-module (guix gexp)
-  #:use-module (guix monads)
-  #:use-module (guix store)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1))
 
@@ -264,7 +261,7 @@
        ("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
      `(("glib" ,glib)
@@ -367,7 +364,7 @@ features to enable users to create their discs easily and quickly.")
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (inputs
@@ -416,7 +413,7 @@ services.")
     (native-inputs
      `(("docbook-xml" ,docbook-xml-4.1.2)
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
      `(("glib" ,glib)
@@ -513,7 +510,7 @@ bindings.")
        ("docbook-xml" ,docbook-xml-4.1.2)
        ("gettext" ,gettext-minimal)
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("intltool" ,intltool)
        ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)))
@@ -623,7 +620,7 @@ It is written in C using GObject and libsoup.")
                        "/share/gtk-doc/html"))))
     (native-inputs
      `(("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
      `(("glib" ,glib)))
@@ -693,7 +690,7 @@ of writing test cases for asynchronous interactions.")
        ("dbus-test-runner" ,dbus-test-runner)
        ("docbook-xml" ,docbook-xml-4.3)
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ;; Would only be required by configure flag "--enable-extended-tests".
        ;("gtx" ,gtx)
        ("pkg-config" ,pkg-config)
@@ -769,7 +766,7 @@ of known objects without needing a central registrar.")
        ("docbook-xml" ,docbook-xml-4.3)
        ("gettext" ,gettext-minimal)
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)
@@ -1178,7 +1175,7 @@ Library reference documentation.")
     `(("docbook-xml" ,docbook-xml-4.3)
       ("gettext" ,gettext-minimal)
       ("glib:bin" ,glib "bin")
-      ("gtk-doc" ,gtk-doc)
+      ("gtk-doc" ,gtk-doc/stable)
       ("pkg-config" ,pkg-config)))
    (inputs
     `(("avahi" ,avahi)
@@ -1296,7 +1293,7 @@ It has miners for Facebook, Flickr, Google, ownCloud and SkyDrive.")
     `(("gettext" ,gettext-minimal)
       ("glib:bin" ,glib "bin")
       ("gobject-introspection" ,gobject-introspection)
-      ("gtk-doc" ,gtk-doc)
+      ("gtk-doc" ,gtk-doc/stable)
       ("pkg-config" ,pkg-config)
       ("vala" ,vala)))
    (inputs
@@ -1327,7 +1324,7 @@ a debugging tool, @command{gssdp-device-sniffer}.")
     `(("gettext" ,gettext-minimal)
       ("glib:bin" ,glib "bin")
       ("gobject-introspection" ,gobject-introspection)
-      ("gtk-doc" ,gtk-doc)
+      ("gtk-doc" ,gtk-doc/stable)
       ("pkg-config" ,pkg-config)
       ("vala" ,vala)))
    (inputs
@@ -1358,7 +1355,7 @@ for creating UPnP devices and control points, written in C using
     `(("gettext" ,gettext-minimal)
       ("glib:bin" ,glib "bin")
       ("gobject-introspection" ,gobject-introspection)
-      ("gtk-doc" ,gtk-doc)
+      ("gtk-doc" ,gtk-doc/stable)
       ("libxml" ,libxml2)
       ("pkg-config" ,pkg-config)
       ("vala" ,vala)))
@@ -1392,7 +1389,7 @@ given profile, etc.  DLNA is a subset of UPnP A/V.")
     `(("gettext" ,gettext-minimal)
       ("glib:bin" ,glib "bin")
       ("gobject-introspection" ,gobject-introspection)
-      ("gtk-doc" ,gtk-doc)
+      ("gtk-doc" ,gtk-doc/stable)
       ("libxml" ,libxml2)
       ("pkg-config" ,pkg-config)))
    (inputs
@@ -1608,7 +1605,7 @@ preview files on the GNOME desktop.")
     (native-inputs
      `(("gettext" ,gettext-minimal)
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (inputs
@@ -1670,7 +1667,7 @@ client devices can handle.")
      `(("docbook-xml" ,docbook-xml-4.3)
        ("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
@@ -2417,7 +2414,7 @@ GNOME Desktop.")
        ("automake" ,automake)
        ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
        ("gnome-common" ,gnome-common)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
        ("libtool" ,libtool)
@@ -3057,7 +3054,7 @@ configuring CUPS.")
        ("gobject-introspection" ,gobject-introspection)
 
        ;; For the documentation.
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("xsltproc" ,libxslt)
        ("docbook-xsl" ,docbook-xsl)))
     (home-page "https://developer-next.gnome.org/libnotify/")
@@ -4216,6 +4213,57 @@ engineering.")
     ;; Dual licensed under GPLv2 or GPLv3 (both without "or later")
      (list license:gpl2 license:gpl3))))
 
+(define-public drawing
+  (package
+    (name "drawing")
+    (version "0.6.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/maoschanz/drawing")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1kfgmalakifcvzhzss9zhmqjbdk24zr22c5xwkkahlvfcafp13wn"))))
+    (build-system meson-build-system)
+    (arguments
+     `(#:glib-or-gtk? #t
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'glib-or-gtk-wrap 'python-and-gi-wrap
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((prog (string-append (assoc-ref outputs "out")
+                                        "/bin/drawing"))
+                   (pylib (string-append (assoc-ref outputs "out")
+                                         "/lib/python"
+                                         ,(version-major+minor
+                                           (package-version python))
+                                         "/site-packages")))
+               (wrap-program prog
+                 `("PYTHONPATH" = (,(getenv "PYTHONPATH") ,pylib))
+                 `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))
+               #t))))))
+    (native-inputs
+     `(("desktop-file-utils" ,desktop-file-utils)
+       ("gettext" ,gettext-minimal)
+       ("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
+       ("gtk+:bin" ,gtk+ "bin")
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("gdk-pixbuf" ,gdk-pixbuf+svg)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("gtk+" ,gtk+)
+       ("pango" ,pango)
+       ("python-pycairo" ,python-pycairo)
+       ("python-pygobject" ,python-pygobject)))
+    (home-page "https://maoschanz.github.io/drawing/")
+    (synopsis "Basic image editor for GNOME")
+    (description
+     "Drawing is a basic image editor aiming at the GNOME desktop.")
+    (license license:gpl3+)))
+
 (define-public gnome-themes-standard
   (package
     (name "gnome-themes-standard")
@@ -4409,7 +4457,7 @@ editors, IDEs, etc.")
                 "0rnm5c6m3abbm81jsfdas0y80z299ny54gr4syn4bfrms3s4g19l"))))
     (build-system meson-build-system)
     (native-inputs
-     `(("gtk-doc" ,gtk-doc)
+     `(("gtk-doc" ,gtk-doc/stable)
        ,@(package-native-inputs vte)))
     (arguments
      `(#:configure-flags '("-Ddocs=true")))
@@ -4526,7 +4574,7 @@ and RDP protocols.")
        ("docbook-xml" ,docbook-xml-4.2)
        ("docbook-xsl" ,docbook-xsl)
        ("glib:bin" ,glib "bin")
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (arguments
@@ -4634,7 +4682,7 @@ GLib and GObject, and integrates JSON with GLib data types.")
      `(("glib:bin"              ,glib "bin") ; for glib-mkenums, etc.
        ("gobject-introspection" ,gobject-introspection)
        ("pkg-config"            ,pkg-config)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("intltool" ,intltool)
        ("which" ,which)
        ("autoconf" ,autoconf)
@@ -4863,7 +4911,7 @@ libxml to ease remote use of the RESTful API.")
      `(("docbook-xml" ,docbook-xml-4.1.2)
        ("glib:bin" ,glib "bin")                   ; for glib-mkenums
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)
@@ -5230,7 +5278,7 @@ keyboard shortcuts.")
      `(("glib:bin" ,glib "bin")         ; for glib-compile-resources, etc.
        ("gettext" ,gettext-minimal)
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)))
     (propagated-inputs
@@ -5275,7 +5323,7 @@ output devices.")
        ("gobject-introspection" ,gobject-introspection)
        ("modem-manager" ,modem-manager)
        ("libnotify" ,libnotify)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("intltool" ,intltool)))
     (inputs
      `(("avahi" ,avahi)
@@ -5320,7 +5368,7 @@ permission from user.")
        ("glibc-locales" ,glibc-locales) ; for tests
        ("gettext" ,gettext-minimal)
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("json-glib" ,json-glib)))
     (propagated-inputs
@@ -5626,7 +5674,7 @@ which are easy to play with the aid of a mouse.")
     (native-inputs
      `(("gobject-introspection" ,gobject-introspection)
        ("glib:bin" ,glib "bin")         ; for glib-mkenums
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)))
     (inputs
      `(("glib" ,glib)
@@ -6043,7 +6091,7 @@ as possible!")
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("vala" ,vala)))
     (inputs
      `(("cyrus-sasl" ,cyrus-sasl)
@@ -6477,7 +6525,7 @@ part of udev-extras, then udev, then systemd.  It's now a project on its own.")
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-genmarshal, etc.
        ("gettext" ,gettext-minimal)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("xsltproc" ,libxslt)))
     (inputs
@@ -6542,7 +6590,7 @@ DAV, and others.")
      `(("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)
        ("vala" ,vala)
-       ("gtk-doc" ,gtk-doc)))
+       ("gtk-doc" ,gtk-doc/stable)))
     (propagated-inputs
      ;; Both of these are required by gusb.pc.
      `(("glib" ,glib)
@@ -6655,9 +6703,11 @@ almost all of them.")
        ("python-pygobject" ,python-pygobject)
        ("python-pycairo" ,python-pycairo)
        ("python-pycrypto" ,python-pycrypto)
+       ("libhandy" ,libhandy)
        ("libsecret" ,libsecret)
        ("gtkspell3" ,gtkspell3)
        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("gnome-settings-daemon" ,gnome-settings-daemon) ; desktop-schemas are not enough
        ("webkitgtk" ,webkitgtk)))
     (home-page "https://wiki.gnome.org/Apps/Eolie")
     (synopsis "Web browser for GNOME")
@@ -7752,7 +7802,7 @@ users.")
      `(("glib" ,glib)))
     (native-inputs
      `(("glib:bin" ,glib "bin")         ; for gdbus-codegen
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("gobject-introspection" ,gobject-introspection)
        ("docbook-xml" ,docbook-xml)
        ("docbook-xsl" ,docbook-xsl)
@@ -8009,7 +8059,7 @@ Cisco's AnyConnect SSL VPN.")
      `(("intltool" ,intltool)
        ("glib:bin" ,glib "bin") ; for glib-compile-resources, etc.
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
      ;; libnm-gtk.pc refers to all these.
@@ -9758,7 +9808,7 @@ compiled.")
                            "--enable-introspection")))
     (native-inputs
      `(("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
 
        ;; The 0.2.4 ‘release’ tarball isn't bootstrapped.
@@ -9830,7 +9880,7 @@ environment, which can notably display keyboard layouts.")
      `(("pkg-config" ,pkg-config)
        ("gobject-introspection" ,gobject-introspection)
        ("glib:bin" ,glib "bin")
-       ("gtk-doc" ,gtk-doc)))
+       ("gtk-doc" ,gtk-doc/stable)))
     (propagated-inputs
      ;; Referred to in .h files and .pc.
      `(("gtk+" ,gtk+)))
@@ -10415,7 +10465,7 @@ photo-booth-like software, such as Cheese.")
        ("docbook-xml" ,docbook-xml-4.3)
        ("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("itstool" ,itstool)
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)
@@ -10847,7 +10897,7 @@ advanced image management tool")
 (define-public terminator
   (package
     (name "terminator")
-    (version "2.1.0")
+    (version "2.1.1")
     (source
      (origin
        (method url-fetch)
@@ -10855,8 +10905,7 @@ advanced image management tool")
                            "releases/download/v" version "/"
                            name "-" version ".tar.gz"))
        (sha256
-        (base32
-         "1vap4li2i24l1iz2q4b8wvhj8flamarf18xcmzq5ik2vzcrisbjy"))))
+        (base32 "0xdgmam7ghnxw6g38a4gjw3kk3rhga8c66lns18k928jlr9fmddw"))))
     (build-system python-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
@@ -10954,7 +11003,7 @@ tabs, and it supports drag and drop re-ordering of terminals.")
      `(("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection) ; for g-ir-scanner
        ("vala" ,vala)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("gettext" ,gettext-minimal)
 
@@ -11489,7 +11538,7 @@ card sheets that you’ll find at most office supply stores.")
      `(("gettext" ,gettext-minimal)
        ("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("intltool" ,intltool)
        ("itstool" ,itstool)
        ("pkg-config" ,pkg-config)
@@ -12081,7 +12130,7 @@ developed with the aim of being used with the Librem 5 phone.")
        ("glib:bin" ,glib "bin")
        ("gnome-common" ,gnome-common)
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("intltool" ,intltool)
        ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)
diff --git a/gnu/packages/gnu-doc.scm b/gnu/packages/gnu-doc.scm
index b64d8ac454..9fb746ee97 100644
--- a/gnu/packages/gnu-doc.scm
+++ b/gnu/packages/gnu-doc.scm
@@ -56,7 +56,7 @@ list.")
 (define-public gnu-standards
   (package
     (name "gnu-standards")
-    (version "2018-02-18")
+    (version "2020-11-25")
     (source
      (origin
        (method cvs-fetch)
@@ -64,11 +64,11 @@ list.")
              (root-directory
               ":pserver:anonymous@cvs.savannah.gnu.org:/sources/gnustandards")
              (module "gnustandards")
-             (revision "2018-02-18")))
+             (revision version)))
        (sha256
         (base32
-         "03yh25fpvfn5pnd0d4x7a2wkh01ffk6vbs1vjnzqicqkgc2g33sd"))
-       (file-name "gnu-standards-src")))
+         "1xlwmgcnvp81ipgfir4ckpgl922mbckvxy1x758r0lksq5vrpglj"))
+       (file-name (string-append name "-" version "-checkout"))))
     (build-system trivial-build-system)
     (native-inputs `(("gzip" ,gzip)
                      ("source" ,source)
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index b9d2de29bc..e7c9b90931 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -1305,11 +1305,11 @@ standards of the IceCat project.")
        (cpe-version . ,(first (string-split version #\-)))))))
 
 ;; Update this together with icecat!
-(define %icedove-build-id "20210223000000") ;must be of the form YYYYMMDDhhmmss
+(define %icedove-build-id "20210323000000") ;must be of the form YYYYMMDDhhmmss
 (define-public icedove
   (package
     (name "icedove")
-    (version "78.8.0")
+    (version "78.9.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 "d801a94f25867ca5f2f3488c4700532351987999"))
+        ,(let ((changeset "1a5cd2aa11de609116f258b413afcf113ed72f3a"))
            (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
-               "19h1s9qcxzcvbd1m07xajk5lhpikj53k5fp3nwvl38xj7a3s0gxw")))))
+               "0qgz9qj8gbn2ccmhvk3259ahs9p435ipvkzsysn3xj8a6klbz02w")))))
        ("autoconf" ,autoconf-2.13)
        ("cargo" ,rust "cargo")
        ("clang" ,clang)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index d9988cd7ad..6502740220 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Matthew Jordan <matthewjordandevops@yandex.com>
 ;;; Copyright © 2016 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2016, 2019 Ludovic Courtès <ludo@gnu.org>
@@ -2099,7 +2099,7 @@ application's http.Handlers.")
 (define-public go-github-com-sirupsen-logrus
   (package
     (name "go-github-com-sirupsen-logrus")
-    (version "1.0.5")
+    (version "1.8.1")
     (source
      (origin
        (method git-fetch)
@@ -2109,17 +2109,16 @@ application's http.Handlers.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0g5z7al7kky11ai2dhac6gkp3b5pxsvx72yj3xg4wg3265gbn7yz"))))
+         "0rvqzic2zz7fpxyizmqxwmhv1m52ii9bgxnqa6km8wsa0l08wh42"))))
     (build-system go-build-system)
     (propagated-inputs
-     `(("go-golang-org-x-crypto"
-        ,go-golang-org-x-crypto)
-       ("go-github-com-stretchr-testify"
-        ,go-github-com-stretchr-testify)
+     `(("go-github-com-davecgh-go-spew" ,go-github-com-davecgh-go-spew)
+       ("go-github-com-pmezard-go-difflib" ,go-github-com-pmezard-go-difflib)
+       ("go-github-com-stretchr-testify" ,go-github-com-stretchr-testify)
+       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
        ("go-golang-org-x-sys" ,go-golang-org-x-sys)))
     (arguments
-     '(#:tests? #f                    ;FIXME missing dependencies
-       #:import-path "github.com/sirupsen/logrus"))
+     '(#:import-path "github.com/sirupsen/logrus"))
     (home-page "https://github.com/sirupsen/logrus")
     (synopsis "Structured, pluggable logging for Go")
     (description "Logrus is a structured logger for Go, completely API
@@ -3966,7 +3965,7 @@ without requiring a real database connection.")
     (home-page "https://github.com/go-sql-driver/mysql")
     (synopsis "MySQL driver for golang")
     (description
-     "This is a pure Go implementaton of the MySQL API, compatible with
+     "This is a pure Go implementation of the MySQL API, compatible with
 golang's database/sql package.")
     (license license:mpl2.0)))
 
@@ -5505,7 +5504,7 @@ the parse trees produced by the html package.")
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/PuerkitoBio/goquery"))
-    (native-inputs
+    (propagated-inputs
      `(("go-github-com-andybalholm-cascadia" ,go-github-com-andybalholm-cascadia)
        ("go-golang-org-x-net" ,go-golang-org-x-net)))
     (home-page "https://github.com/PuerkitoBio/goquery")
@@ -5828,7 +5827,7 @@ which produce colorized output using github.com/fatih/color.")
     (synopsis "Write handsome command-line tools with glamour")
     (description "@code{glamour} lets you render markdown documents and
 templates on ANSI compatible terminals.  You can create your own stylesheet or
-use one of our glamourous default themes.")
+use one of our glamorous default themes.")
     (license license:expat)))
 
 (define-public go-github-com-coreos-go-semver
@@ -6912,7 +6911,7 @@ atomic access.")
     (propagated-inputs
      `(("go-go-uber-org-atomic" ,go-go-uber-org-atomic)))
     (home-page "https://go.uber.org/multierr")
-    (synopsis "Error combination fo Go")
+    (synopsis "Error combination for Go")
     (description
      "@code{multierr} allows combining one or more Go errors together.")
     (license license:expat)))
diff --git a/gnu/packages/gpodder.scm b/gnu/packages/gpodder.scm
index cb7cc176c3..d5c89229f6 100644
--- a/gnu/packages/gpodder.scm
+++ b/gnu/packages/gpodder.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2019, 2020 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2019, 2020, 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -25,6 +25,7 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages check)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages glib)
@@ -38,7 +39,7 @@
 (define-public gpodder
   (package
     (name "gpodder")
-    (version "3.10.17")
+    (version "3.10.18")
     (source
      (origin
        (method git-fetch)
@@ -46,18 +47,23 @@
              (url "https://github.com/gpodder/gpodder")
              (commit version)))
        (sha256
-        (base32 "0wrk8d4q6ricbcjzlhk10vrk1qg9hi323kgyyd0c8nmh7a82h8pd"))
+        (base32 "1d73q46sqandzbn74nfw9bzzah99z91wsxq2hcivwdgnsv2g2d8y"))
        (file-name (git-file-name name version))
        (patches (search-patches "gpodder-disable-updater.patch"))))
     (build-system python-build-system)
     (native-inputs
      `(("intltool" ,intltool)
        ("python-coverage" ,python-coverage)
-       ("python-minimock" ,python-minimock)))
+       ("python-minimock" ,python-minimock)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-cov" ,python-pytest-cov)
+       ("python-pytest-httpserver" ,python-pytest-httpserver)
+       ("which" ,which)))
     (inputs
      `(("gtk+" ,gtk+)
        ("python-pygobject" ,python-pygobject)
        ("python-pycairo" ,python-pycairo)
+       ("python-requests" ,python-requests)
        ("python-dbus" ,python-dbus)
        ("python-html5lib" ,python-html5lib)
        ("python-mygpoclient" ,python-mygpoclient)
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 4a301d387a..f9f19cc28d 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015 Tomáš Čech <sleep_walker@gnu.org>
 ;;; Copyright © 2016, 2019 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2016, 2018 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2018, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2017, 2018 Ben Woodcroft <donttrustben@gmail.com>
@@ -25,6 +25,7 @@
 ;;; Copyright © 2020 Gabriel Arazas <foo.dogsquared@gmail.com>
 ;;; Copyright © 2021 Antoine Côté <antoine.cote@posteo.net>
 ;;; Copyright © 2021 Andy Tai <atai@atai.org>
+;;; Copyright © 2021 Ekaitz Zarraga <ekaitz@elenq.tech>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -463,6 +464,42 @@ Embree is meant to increase performance of photo-realistic rendering
 applications.")
     (license license:asl2.0)))
 
+(define-public openvdb
+  (package
+    (name "openvdb")
+    (version "8.0.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/AcademySoftwareFoundation/openvdb/")
+                    (commit (string-append "v" version))
+                    (recursive? #t)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0qzx6l5c183k6j9zki31gg9aixf5s1j46wdi7wr1h3bz7k53syg9"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       (list (string-append "-DCMAKE_EXE_LINKER_FLAGS=-Wl,-rpath="
+                            (assoc-ref %outputs "out") "/lib"))))
+    (inputs
+     `(("boost" ,boost)
+       ("c-blosc" ,c-blosc)
+       ("ilmbase" ,ilmbase)
+       ("tbb" ,tbb)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "https://www.openvdb.org/")
+    (synopsis "Sparse volume data structure and tools")
+    (description "OpenVDB is a C++ library comprising a hierarchical data
+structure and a large suite of tools for the efficient storage and
+manipulation of sparse volumetric data discretized on three-dimensional grids.
+It was developed by DreamWorks Animation for use in volumetric applications
+typically encountered in feature film production.")
+    (license license:mpl2.0)))
+
 (define-public blender
   (package
     (name "blender")
@@ -753,7 +790,7 @@ many more.")
 (define-public ilmbase
   (package
     (name "ilmbase")
-    (version "2.5.2")
+    (version "2.5.5")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -762,7 +799,7 @@ many more.")
               (file-name (git-file-name "ilmbase" version))
               (sha256
                (base32
-                "1vf8bqld2bpcdi99jbr043y6vp01cp3fvbiasrn66xn91mf6imbn"))
+                "0mjzb3fd8b9pcqmrgy5cdsmvqd70hmlvjnfypi66v59h3fhrmgd8"))
               (patches (search-patches "ilmbase-fix-tests.patch"))))
     (build-system cmake-build-system)
     (arguments
diff --git a/gnu/packages/graphviz.scm b/gnu/packages/graphviz.scm
index b5c4774d5c..eb3fd1d583 100644
--- a/gnu/packages/graphviz.scm
+++ b/gnu/packages/graphviz.scm
@@ -9,6 +9,7 @@
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 Pjotr Prins <pjotr.guix@thebird.nl>
+;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -48,7 +49,9 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages sphinx)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages tex)
@@ -242,6 +245,55 @@ structure and layout algorithms.")
 (define-public python2-pygraphviz
   (package-with-python2 python-pygraphviz))
 
+(define-public python-uqbar
+  (package
+    (name "python-uqbar")
+    (version "0.5.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/josiah-wolf-oberholtzer/uqbar")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0413nyhd8z8v3lvsgaghhafnyxg90fi1q80j1kbl21gpmpnc9a7n"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch
+           (lambda _
+             (substitute* "setup.py"
+               ;; Latest versions of sphink-rtd-theme require npm to build.
+               (("sphinx-rtd-theme >= 0.4.0") "sphinx-rtd-theme >= 0.2.4")
+               (("black == 19.10b0") "black >= 19.10b0"))
+             #t))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python" "-m" "pytest" "tests"))
+             #t)))))
+    (native-inputs
+     `(("graphviz" ,graphviz)
+       ("python-flake8" ,python-flake8)
+       ("python-isort" ,python-isort)
+       ("python-mypy" ,python-mypy)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-cov" ,python-pytest-cov)))
+    (propagated-inputs
+     `(("python-black" ,python-black)
+       ("python-sphinx" ,python-sphinx)
+       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
+       ("python-unidecode" ,python-unidecode)))
+    (home-page "https://github.com/josiah-wolf-oberholtzer/uqbar")
+    (synopsis "Tools for building documentation with Sphinx, Graphviz and LaTeX")
+    (description
+     "This package contains tools for building documentation with Sphinx,
+Graphviz and LaTeX.")
+    (license license:expat)))
+
 (define-public gts
   (package
     (name "gts")
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index 1c7ba98a86..6a4e14167d 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -384,7 +384,7 @@ http://www.tux.org/~ricdude/overview.html")
                 "if (error) return 77;"))
              #t)))))
     (native-inputs
-     `(("gtk-doc" ,gtk-doc)))
+     `(("gtk-doc" ,gtk-doc/stable)))
     (home-page "https://gstreamer.freedesktop.org/modules/orc.html")
     (synopsis "Oil runtime compiler")
     (description
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index 517264d88b..9f3aea4aca 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
-;;; Coypright © 2015, 2016, 2017, 2018, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Fabian Harfert <fhmgufs@web.de>
 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
@@ -48,6 +48,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module ((guix build utils) #:select (alist-replace))
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
@@ -2079,6 +2080,17 @@ with some extra work.")
       ;; Others.
       license:gpl2+))))
 
+;; This is a variant of the 'gtk-doc' package that is not updated often.  It
+;; is intended to be used as a native-input at build-time only.  This allows
+;; the main 'gtk-doc', 'dblatex' and 'imagemagick' packages to be freely
+;; updated on the 'master' branch without triggering an excessive number of
+;; rebuilds.
+(define-public gtk-doc/stable
+  (hidden-package
+   (package/inherit gtk-doc
+     (inputs (alist-replace "dblatex" `(,dblatex/stable)
+                            (package-inputs gtk-doc))))))
+
 (define-public gtk-engines
   (package
     (name "gtk-engines")
@@ -2485,7 +2497,7 @@ popovers.")
      `(("gettext" ,gettext-minimal)
        ("glib-bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)
        ("python" ,python)))
     (inputs
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index b1ae3143da..c881c855a1 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -28,7 +28,7 @@
 ;;; Copyright © 2020 Jack Hill <jackhill@jackhill.us>
 ;;; Copyright © 2020 Julien Lepiler <julien@lepiller.eu>
 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
-;;; Copyright © 2020 Masaya Tojo <masaya@tojo.tokyo>
+;;; Copyright © 2020, 2021 Masaya Tojo <masaya@tojo.tokyo>
 ;;; Copyright © 2020 Jesse Gibbons <jgibbons2357@gmail.com>
 ;;; Copyright © 2020 Mike Rosset <mike.rosset@gmail.com>
 ;;; Copyright © 2020 Leo Prikler <leo.prikler@student.tugraz.at>
@@ -91,6 +91,7 @@
   #:use-module (gnu packages networking)
   #:use-module (gnu packages noweb)
   #:use-module (gnu packages nss)
+  #:use-module (gnu packages package-management)
   #:use-module (gnu packages password-utils)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
@@ -1313,44 +1314,37 @@ Scheme by using Guile’s foreign function interface.")
   (deprecated-package "guile3.0-newt" guile-newt))
 
 (define-public guile-mastodon
-  (package
-    (name "guile-mastodon")
-    (version "0.0.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://framagit.org/prouby/guile-mastodon.git")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1vblf3d1bbwna3l09p2ap5y8ycvl549bz6whgk78imyfmn28ygry"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  ;; Allow builds with Guile 3.0.
-                  (substitute* "configure.ac"
-                    (("^PKG_CHECK.*") "")
-                    (("^GUILE_PKG.*")
-                     "GUILE_PKG([3.0 2.2])\n"))
-                  #t))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("emacs" ,emacs-minimal)
-       ("pkg-config" ,pkg-config)
-       ("texinfo" ,texinfo)))
-    (inputs
-     `(("guile" ,guile-3.0)
-       ("gnutls" ,gnutls)
-       ("guile-json" ,guile-json-4)))
-    (home-page "https://framagit.org/prouby/guile-mastodon")
-    (synopsis "Guile Mastodon REST API module")
-    (description "This package provides Guile modules to access the
+  (let ((commit "74b75bcf547df92acee1e0466ecd7ec07f775392")
+        (revision "1"))
+    (package
+      (name "guile-mastodon")
+      (version (git-version "0.0.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://framagit.org/prouby/guile-mastodon.git")
+                      (commit commit)))
+                (file-name (string-append name "-" version "-checkout"))
+                (sha256
+                 (base32
+                  "1wx5h6wa9c0na8mrnr2nv1nzjvq68zyrly8yyp11dsskhaw4y33h"))))
+      (build-system gnu-build-system)
+      (native-inputs
+       `(("autoconf" ,autoconf)
+         ("automake" ,automake)
+         ("emacs" ,emacs-minimal)
+         ("pkg-config" ,pkg-config)
+         ("texinfo" ,texinfo)))
+      (inputs
+       `(("guile" ,guile-3.0)
+         ("gnutls" ,gnutls)
+         ("guile-json" ,guile-json-4)))
+      (home-page "https://framagit.org/prouby/guile-mastodon")
+      (synopsis "Guile Mastodon REST API module")
+      (description "This package provides Guile modules to access the
 @uref{https://docs.joinmastodon.org/api/, REST API of Mastodon}, a federated
 microblogging service.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public guile-parted
   (package
@@ -1752,6 +1746,35 @@ The library is shipped with documentation in Info format and usage examples.")
 (define-public guile3.0-ics
   (deprecated-package "guile3.0-ics" guile-ics))
 
+(define-public guile-imanifest
+  (let ((commit "ccd5a2111b008d778106f5595a3a585954d95d0")
+        (revision "0"))
+    (package
+      (name "guile-imanifest")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://git.sr.ht/~brown121407/guile-imanifest")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0i5qllcrhdjhspyj7j9h4dc9y37d3cfbpackmybm3030qgfxqirf"))))
+      (build-system guile-build-system)
+      (native-inputs
+       `(("guile" ,guile-3.0)))
+      (propagated-inputs
+       `(("guile-readline" ,guile-readline)
+         ("guile-colorized" ,guile-colorized)
+         ("guix" ,guix)))
+      (home-page "https://sr.ht/~brown121407/guile-imanifest")
+      (synopsis "Interactive Guix manifests")
+      (description "This package provides functions to generate Guix manifests
+interactively.  It works by scanning an alist of package categories, to ask the
+user which package sets would they like to install from it.")
+      (license license:gpl3+))))
+
 (define-public guile-wisp
   (package
     (name "guile-wisp")
@@ -2362,22 +2385,14 @@ inspired by the SCSH regular expression system.")
 (define-public haunt
   (package
     (name "haunt")
-    (version "0.2.4")
+    (version "0.2.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://files.dthompson.us/haunt/haunt-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "056z4znikk83nr5mr0x2ac3iinqbywa2bvb37mhr566a1q50isfc"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  ;; Allow builds with Guile 3.0.
-                  (substitute* "configure"
-                    (("2\\.2 2\\.0")
-                     "3.0 2.2 2.0"))
-                  #t))))
+                "1gy45l6m91b3wpdbpd9bpisp00zl8610zs0a2nwmbjlpd2cbf90k"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((ice-9 match) (ice-9 ftw)
@@ -2626,8 +2641,8 @@ format is also supported.")
   (deprecated-package "guile3.0-mcron" mcron))
 
 (define-public guile-picture-language
-  (let ((commit "291a746a1d3b4784d38b05239bdd7b8e796ce761")
-        (revision "4"))
+  (let ((commit "a1322bf11945465241ca5b742a70893f24156d12")
+        (revision "5"))
     (package
       (name "guile-picture-language")
       (version (git-version "0.0.1" revision commit))
@@ -2639,7 +2654,7 @@ format is also supported.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0rnhf13ds92sbdicshy4sy4kl2kc431fy9vzm1divw974p7v57sd"))))
+                  "03i528z92ainccgm28shg4haxiav5x4cyhyi5dggq1rm027vbm99"))))
       (build-system gnu-build-system)
       (inputs
        `(("guile" ,guile-3.0)))
@@ -3496,7 +3511,7 @@ feature-set, fully programmable in Guile Scheme.")
                                         texlive-fonts-iwona)))
        ("pkg-config" ,pkg-config)))
     (propagated-inputs
-     `(("guile-lib" ,guile-lib)))
+     `(("guile-lib" ,guile2.2-lib)))
     (home-page "https://www.gnu.org/software/guile-cv/")
     (synopsis "Computer vision library for Guile")
     (description "Guile-CV is a Computer Vision functional programming library
@@ -4426,7 +4441,7 @@ tools.")
     (synopsis "Guile implementation of the Encoding for Robust Immutable Storage (ERIS)")
     (description
      "Guile-ERIS is the reference implementation of the Encoding for Robust
-Immutable Storage (ERIS).  ERIS allows arbirtary content to be encoded into
+Immutable Storage (ERIS).  ERIS allows arbitrary content to be encoded into
 uniformly sized, encrypted blocks that can be reassembled using a short
 read-capability.")
     (home-page "https://inqlab.net/git/eris.git")
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index f63322794d..fdda6cd733 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -770,16 +770,16 @@ type system, elevating types to first-class status.")
 (define-public guile-git
   (package
     (name "guile-git")
-    (version "0.4.0")
+    (version "0.5.0")
     (home-page "https://gitlab.com/guile-git/guile-git.git")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://gitlab.com/guile-git/guile-git/uploads/"
-                                  "2600bb0dfdfb00bfbe46811dccad51d8/guile-git-"
+                                  "30be542d90619ca844dd3a3ed2e13808/guile-git-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1kxyg9x2aa1pg69cl48wysq0pbxvwfahy1xpl5ab6p8babhf7kic"))))
+                "1j39c1cq9cbwir90mpnbdijpbwh7wkxampgl2r177bv8bfw6y203"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags '("GUILE_AUTO_COMPILE=0")))     ; to prevent guild warnings
diff --git a/gnu/packages/hardware.scm b/gnu/packages/hardware.scm
index 10672f52f3..d5941b6c0f 100644
--- a/gnu/packages/hardware.scm
+++ b/gnu/packages/hardware.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 Evgeny Pisemsky <evgeny@pisemsky.com>
@@ -61,14 +61,14 @@
 (define-public ddcutil
   (package
     (name "ddcutil")
-    (version "0.9.9")
+    (version "1.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.ddcutil.com/tarballs/"
                            "ddcutil-" version ".tar.gz"))
        (sha256
-        (base32 "0anyxy53k2613hq9glaad16llqlv6iim5p8gz0rs5pnpp8p00dg1"))))
+        (base32 "19kkwb9ijzn6ya3mvjanggh1c96fcc0lkbk7xnyi2qp6wsr4nhxp"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/haskell-apps.scm b/gnu/packages/haskell-apps.scm
index d7d5a0223a..8128c5425e 100644
--- a/gnu/packages/haskell-apps.scm
+++ b/gnu/packages/haskell-apps.scm
@@ -342,14 +342,14 @@ to @code{cabal repl}).")
 (define-public git-annex
   (package
     (name "git-annex")
-    (version "8.20210310")
+    (version "8.20210330")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://hackage.haskell.org/package/"
                            "git-annex/git-annex-" version ".tar.gz"))
        (sha256
-        (base32 "1a4pr9z2li3wns1xycz7735nzzsv3cs8milr0q74k5qcqk5f22nx"))))
+        (base32 "07dhxlmnj48drgndcplafc7xhby0w3rks68fz9wsppxan929240p"))))
     (build-system haskell-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/haskell-web.scm b/gnu/packages/haskell-web.scm
index 0be9890d23..a250bb4262 100644
--- a/gnu/packages/haskell-web.scm
+++ b/gnu/packages/haskell-web.scm
@@ -2266,7 +2266,7 @@ server no longer receives pings, it shuts down.")
        ("ghc-websockets" ,ghc-websockets)))
     (home-page "https://github.com/larskuhtz/wai-cors")
     (synopsis "Cross-Origin Resource Sharing (CORS) for WAI")
-    (description "This package provides an implemenation of Cross-Origin
+    (description "This package provides an implementation of Cross-Origin
 Resource Sharing (CORS) for the Web Application Framework (WAI) that
 aims to be compliant with @url{https://www.w3.org/TR/cors}.")
     (license license:expat)))
diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm
index 26f6faea8c..ed21b26812 100644
--- a/gnu/packages/image-processing.scm
+++ b/gnu/packages/image-processing.scm
@@ -1,10 +1,10 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2018 Lprndn <guix@lprndn.info>
 ;;; Copyright © 2019, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -14,6 +14,8 @@
 ;;; Copyright © 2020 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2021 Oleh Malyi <astroclubzp@gmail.com>
 ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021 Andy Tai <atai@atai.org>
+;;; Copyright © 2021 Ekaitz Zarraga <ekaitz@elenq.tech>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -246,7 +248,7 @@ many popular formats.")
 (define-public vtk
   (package
     (name "vtk")
-    (version "8.2.0")
+    (version "9.0.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://vtk.org/files/release/"
@@ -254,7 +256,7 @@ many popular formats.")
                                   "/VTK-" version ".tar.gz"))
               (sha256
                (base32
-                "1fspgp8k0myr6p2a6wkc21ldcswb4bvmb484m12mxgk1a9vxrhrl"))
+                "1ir2lq9i45ls374lcmjzw0nrm5l5hnm1w47lg8g8d0n2j7hsaf8v"))
               (patches
                (search-patches "vtk-fix-freetypetools-build-failure.patch"))
               (modules '((guix build utils)))
@@ -264,35 +266,47 @@ many popular formats.")
                     (lambda (dir)
                       (delete-file-recursively
                         (string-append "ThirdParty/" dir "/vtk" dir)))
-                    ;; ogg, pugixml depended upon unconditionally
+                    ;; pugixml depended upon unconditionally
                     '("doubleconversion" "eigen" "expat" "freetype" "gl2ps"
                       "glew" "hdf5" "jpeg" "jsoncpp" "libproj" "libxml2" "lz4"
-                      "netcdf" "png" "sqlite" "theora" "tiff" "zlib"))
+                      "netcdf" "ogg" "png" "sqlite" "theora" "tiff" "zlib"))
                   #t))))
+    (properties `((release-monitoring-url . "https://vtk.org/download/")))
     (build-system cmake-build-system)
     (arguments
      '(#:build-type "Release"           ;Build without '-g' to save space.
        #:configure-flags '(;"-DBUILD_TESTING:BOOL=TRUE"
-                           ;"-DVTK_MODULE_USE_EXTERNAL_vtkogg:BOOL=TRUE"    ; not honored
-                           "-DVTK_USE_SYSTEM_DOUBLECONVERSION:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_EIGEN:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_EXPAT:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_FREETYPE:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_GL2PS:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_GLEW:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_HDF5:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_JPEG:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_JSONCPP:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_LIBPROJ:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_LIBXML2:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_LZ4:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_NETCDF:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_PNG:BOOL=TRUE"
-                           ;"-DVTK_USE_SYSTEM_PUGIXML:BOOL=TRUE"    ; breaks IO/CityGML
-                           "-DVTK_USE_SYSTEM_SQLITE:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_THEORA:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_TIFF:BOOL=TRUE"
-                           "-DVTK_USE_SYSTEM_ZLIB:BOOL=TRUE")
+                           ;    ; not honored
+                           "-DVTK_USE_EXTERNAL=OFF" ;; default
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_doubleconversion=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_eigen=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_expat=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_freetype=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_gl2ps=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_glew=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_hdf5=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_jpeg=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_jsoncpp=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_libproj=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_libxml2=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_lz4=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_netcdf=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_ogg=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_png=ON"
+                           ;"-DVTK_MODULE_USE_EXTERNAL_VTK_pugixml=ON"    ; breaks IO/CityGML
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_sqlite=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_theora=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_tiff=ON"
+                           "-DVTK_MODULE_USE_EXTERNAL_VTK_zlib=ON"
+                           )
+       #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'patch-sources
+             (lambda _
+               (substitute* "Common/Core/vtkFloatingPointExceptions.cxx"
+                 (("<fenv.h>") "<cfenv>"))
+               (substitute* "Common/Core/CMakeLists.txt"
+                 (("fenv.h") "cfenv")))))
        #:tests? #f))        ;XXX: test data not included
     (inputs
      `(("double-conversion" ,double-conversion)
@@ -305,7 +319,6 @@ many popular formats.")
        ("hdf5" ,hdf5)
        ("jpeg" ,libjpeg-turbo)
        ("jsoncpp" ,jsoncpp)
-       ;("libogg" ,libogg)
        ("libtheora" ,libtheora)
        ("libX11" ,libx11)
        ("libxml2" ,libxml2)
@@ -320,6 +333,10 @@ many popular formats.")
        ("tiff" ,libtiff)
        ("xorgproto" ,xorgproto)
        ("zlib" ,zlib)))
+    (propagated-inputs
+     ;; VTK's 'VTK-vtk-module-find-packages.cmake' calls
+     ;; 'find_package(THEORA)', which in turns looks for libogg.
+     `(("libogg" ,libogg)))
     (home-page "https://vtk.org/")
     (synopsis "Libraries for 3D computer graphics")
     (description
@@ -333,6 +350,22 @@ a suite of 3D interaction widgets, supports parallel processing, and
 integrates with various databases on GUI toolkits such as Qt and Tk.")
     (license license:bsd-3)))
 
+;; freecad needs an old version of VTK, because VTK's API changed from 8 to 9
+(define-public vtk-8
+  (package (inherit vtk)
+    (version "8.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://vtk.org/files/release/"
+                                  (version-major+minor version)
+                                  "/VTK-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1fspgp8k0myr6p2a6wkc21ldcswb4bvmb484m12mxgk1a9vxrhrl"))))
+    (inputs
+     `(("jsoncpp" ,jsoncpp-for-tensorflow)
+       ,@(alist-delete "jsoncpp" (package-inputs vtk))))))
+
 ;; itksnap needs an older variant of VTK.
 (define-public vtk-6
   (package (inherit vtk)
@@ -556,7 +589,7 @@ vision algorithms.  It can be used to do things like:
 (define-public vips
   (package
     (name "vips")
-    (version "8.10.5")
+    (version "8.10.6")
     (source
      (origin
        (method url-fetch)
@@ -564,7 +597,7 @@ vision algorithms.  It can be used to do things like:
              "https://github.com/libvips/libvips/releases/download/v"
              version "/vips-" version ".tar.gz"))
        (sha256
-        (base32 "1n6gw7cw66rfn1wdb92ydpkv7gfmjiinsg6d6gqxpdja6gsz5vm4"))))
+        (base32 "0vjsh3i0861f6h9as3bch956cidz824zz499pvhjs3lfjn6hhs14"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("gobject-introspection" ,gobject-introspection)
@@ -606,14 +639,14 @@ due to its architecture which automatically parallelises the image workflows.")
 (define-public gmic
   (package
     (name "gmic")
-    (version "2.9.6")
+    (version "2.9.7")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://gmic.eu/files/source/gmic_"
                            version ".tar.gz"))
        (sha256
-        (base32 "06n1dcskky7aqg3a0cp7biwz8agc4xqvr8091l2wsvgib98yhbyj"))))
+        (base32 "05kzaplsl5qvxs7v6g73q0lq8dii8g6v77ap609188m7gr43f9cl"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ;there are no tests
diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm
index a3562f2e13..4f0ffcbcc6 100644
--- a/gnu/packages/imagemagick.scm
+++ b/gnu/packages/imagemagick.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2016, 2021 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
@@ -42,130 +42,125 @@
   #:use-module (gnu packages image)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages xml)
-  #:use-module (gnu packages xorg))
+  #:use-module (gnu packages xorg)
+  #:use-module (srfi srfi-1))
 
-(define-public imagemagick
-  (package
-    (name "imagemagick")
-    ;; The 7 release series has an incompatible API, while the 6 series is still
-    ;; maintained. Don't update to 7 until we've made sure that the ImageMagick
-    ;; users are ready for the 7-series API.
-    (version "6.9.11-48")
-    (replacement imagemagick/fixed)
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://imagemagick/ImageMagick-"
-                                 version ".tar.xz"))
-             (sha256
-              (base32
-               "0m8nkmywkqwyrr01q7aiakj6mi4rb2psjgzv8n0x82x3s1rpfyql"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:configure-flags '("--with-frozenpaths" "--without-gcc-arch"
+;; This is a variant of the 'imagemagick' package that is not updated often.
+;; It is intended to be used as a native-input at build-time only, e.g. by
+;; 'gtk-doc' (via 'dblatex') for generating package documentation.  This
+;; allows the main 'imagemagick' package to be freely updated on the 'master'
+;; branch without triggering an excessive number of rebuilds.
+;;
+;; Normally the grafts mechanism would be used, but there are often
+;; difficulties grafting imagemagick, e.g. because upstream changes the ABI
+;; between micro version updates.  Also, the overwhelming majority of
+;; dependencies on imagemagick are via 'gtk-doc' in 'native-inputs', where
+;; grafting is ineffective.  See:
+;; <https://lists.gnu.org/archive/html/guix-devel/2021-03/msg00381.html>.
+(define-public imagemagick/stable
+  (hidden-package
+   (package
+     (name "imagemagick")
+     ;; The 7 release series has an incompatible API, while the 6 series is still
+     ;; maintained. Don't update to 7 until we've made sure that the ImageMagick
+     ;; users are ready for the 7-series API.
+     (version "6.9.11-48")
+     (source (origin
+               (method url-fetch)
+               (uri (string-append "mirror://imagemagick/ImageMagick-"
+                                   version ".tar.xz"))
+               (sha256
+                (base32
+                 "0m8nkmywkqwyrr01q7aiakj6mi4rb2psjgzv8n0x82x3s1rpfyql"))))
+     (build-system gnu-build-system)
+     (arguments
+      `(#:configure-flags '("--with-frozenpaths" "--without-gcc-arch"
 
-                           ;; Do not embed the build date in binaries.
-                           "--enable-reproducible-build")
+                            ;; Do not embed the build date in binaries.
+                            "--enable-reproducible-build")
 
-       ;; FIXME: The test suite succeeded before version 6.9.6-2.
-       ;; Try enabling it again with newer releases.
-       #:tests? #f
-       #:phases (modify-phases %standard-phases
-                  (add-before
-                   'build 'pre-build
-                   (lambda* (#:key outputs #:allow-other-keys)
-                     (substitute* "Makefile"
-                       ;; Clear the `LIBRARY_PATH' setting, which otherwise
-                       ;; interferes with our own use.
-                       (("^LIBRARY_PATH[[:blank:]]*=.*$")
-                        "")
+        ;; FIXME: The test suite succeeded before version 6.9.6-2.
+        ;; Try enabling it again with newer releases.
+        #:tests? #f
+        #:phases (modify-phases %standard-phases
+                   (add-before
+                       'build 'pre-build
+                     (lambda* (#:key outputs #:allow-other-keys)
+                       (substitute* "Makefile"
+                         ;; Clear the `LIBRARY_PATH' setting, which otherwise
+                         ;; interferes with our own use.
+                         (("^LIBRARY_PATH[[:blank:]]*=.*$")
+                          "")
 
-                       ;; Since the Makefile overrides $docdir, modify it to
-                       ;; refer to what we want.
-                       (("^DOCUMENTATION_PATH[[:blank:]]*=.*$")
-                        (let ((doc (assoc-ref outputs "doc")))
-                          (string-append "DOCUMENTATION_PATH = "
-                                         doc "/share/doc/"
-                                         ,name "-"
-                                         ,(package-version this-package) "\n"))))
-                     #t))
-                  (add-before
-                   'configure 'strip-configure-xml
-                   (lambda _
-                     (substitute* "config/configure.xml.in"
-                       ;; Do not record 'configure' arguments in the
-                       ;; configure.xml file that gets installed: That would
-                       ;; include --docdir, and thus retain a reference to the
-                       ;; 'doc' output.
-                       (("@CONFIGURE_ARGS@")
-                        "not recorded"))
-                     #t)))))
-    ;; TODO: Add Jasper etc.
-    (inputs `(("fftw" ,fftw)
-              ("graphviz" ,graphviz)
-              ("ghostscript" ,ghostscript)
-              ("lcms" ,lcms)
-              ("libx11" ,libx11)
-              ("zlib" ,zlib)
-              ("libxml2" ,libxml2)
-              ("libtiff" ,libtiff)
-              ("libpng" ,libpng)
-              ("libjpeg" ,libjpeg-turbo)
-              ("pango" ,pango)
-              ("freetype" ,freetype)
-              ("bzip2" ,bzip2)
-              ("xz" ,xz)))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (outputs '("out"
-               "doc"))                          ; 26 MiB of HTML documentation
-    (home-page "https://www.imagemagick.org/")
-    (synopsis "Create, edit, compose, or convert bitmap images")
-    (description
-     "ImageMagick is a software suite to create, edit, compose, or convert
+                         ;; Since the Makefile overrides $docdir, modify it to
+                         ;; refer to what we want.
+                         (("^DOCUMENTATION_PATH[[:blank:]]*=.*$")
+                          (let ((doc (assoc-ref outputs "doc")))
+                            (string-append "DOCUMENTATION_PATH = "
+                                           doc "/share/doc/"
+                                           ,name "-"
+                                           ,(package-version this-package) "\n"))))
+                       #t))
+                   (add-before
+                       'configure 'strip-configure-xml
+                     (lambda _
+                       (substitute* "config/configure.xml.in"
+                         ;; Do not record 'configure' arguments in the
+                         ;; configure.xml file that gets installed: That would
+                         ;; include --docdir, and thus retain a reference to the
+                         ;; 'doc' output.
+                         (("@CONFIGURE_ARGS@")
+                          "not recorded"))
+                       #t)))))
+     ;; TODO: Add Jasper etc.
+     (inputs `(("fftw" ,fftw)
+               ("graphviz" ,graphviz)
+               ("ghostscript" ,ghostscript)
+               ("lcms" ,lcms)
+               ("libx11" ,libx11)
+               ("zlib" ,zlib)
+               ("libxml2" ,libxml2)
+               ("libtiff" ,libtiff)
+               ("libpng" ,libpng)
+               ("libjpeg" ,libjpeg-turbo)
+               ("pango" ,pango)
+               ("freetype" ,freetype)
+               ("bzip2" ,bzip2)
+               ("xz" ,xz)))
+     (native-inputs `(("pkg-config" ,pkg-config)))
+     (outputs '("out"
+                "doc"))                 ; 26 MiB of HTML documentation
+     (home-page "https://www.imagemagick.org/")
+     (synopsis "Create, edit, compose, or convert bitmap images")
+     (description
+      "ImageMagick is a software suite to create, edit, compose, or convert
 bitmap images.  It can read and write images in a variety of formats (over 100)
 including DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript, SVG,
 and TIFF.  Use ImageMagick to resize, flip, mirror, rotate, distort, shear and
 transform images, adjust image colors, apply various special effects, or draw
 text, lines, polygons, ellipses and Bézier curves.")
-    (license (license:fsf-free "http://www.imagemagick.org/script/license.php"))))
+     (license (license:fsf-free "http://www.imagemagick.org/script/license.php")))))
 
-(define-public imagemagick/fixed
+(define-public imagemagick
   (package
-    (inherit imagemagick)
-    (name "imagemagick")
-    ;; 'g' for 'guix', appended character to retain version length so grafting
-    ;; works properly.
-    (version "6.9.12-2g")
+    (inherit imagemagick/stable)
+    (properties (alist-delete 'hidden? (package-properties imagemagick/stable)))
+    ;; The 7 release series has an incompatible API, while the 6 series is still
+    ;; maintained. Don't update to 7 until we've made sure that the ImageMagick
+    ;; users are ready for the 7-series API.
+    (version "6.9.12-4")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://imagemagick/ImageMagick-"
-                                  ;; Hardcode the version here since we had to
-                                  ;; change it above.
-                                  "6.9.12-2.tar.xz"))
+                                  version ".tar.xz"))
               (sha256
                (base32
-                "17da5zihz58qm41y61sbvw626m5xfwr2nzszlikrvxyq1j1q7asa"))))
-    (arguments
-     (substitute-keyword-arguments (package-arguments imagemagick)
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'install 'fix-compat-cheat-rename-so
-             (lambda* (#:key outputs #:allow-other-keys)
-               (with-directory-excursion
-                   (string-append (assoc-ref outputs "out")
-                                  "/lib")
-                 (symlink "libMagick++-6.Q16.so.9.0.0"
-                          "libMagick++-6.Q16.so.8.0.0")
-                 (symlink "libMagick++-6.Q16.so.9"
-                          "libMagick++-6.Q16.so.8")
-                 (symlink "libMagickCore-6.Q16.so.7.0.0"
-                          "libMagickCore-6.Q16.so.6.0.0")
-                 (symlink "libMagickCore-6.Q16.so.7"
-                          "libMagickCore-6.Q16.so.6")
-                 (symlink "libMagickWand-6.Q16.so.7.0.0"
-                          "libMagickWand-6.Q16.so.6.0.0")
-                 (symlink "libMagickWand-6.Q16.so.7"
-                          "libMagickWand-6.Q16.so.6"))
-               #t))))))))
+                "1pkwij76yz7vd5grl6520pgpa912qb6kh34qamx4zfndwcx6cf6b"))
+              (patches
+               (search-patches "imagemagick-ReadDCMImage-fix.patch"
+                               "imagemagick-ReadDCMPixels-fix.patch"
+                               "imagemagick-WriteTHUMBNAILImage-fix.patch"
+                               "imagemagick-CVE-2020-27829.patch"))))))
 
 (define-public perl-image-magick
   (package
diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm
index a595b40594..3953c55a20 100644
--- a/gnu/packages/irc.scm
+++ b/gnu/packages/irc.scm
@@ -144,7 +144,7 @@ irssi, but graphical.")
 (define-public irssi
   (package
     (name "irssi")
-    (version "1.2.2")
+    (version "1.2.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/irssi/irssi/"
@@ -152,7 +152,7 @@ irssi, but graphical.")
                                   version ".tar.xz"))
               (sha256
                (base32
-                "0y3mhnyr7x8ir8dlj83vbnchpfld28vdfni9yhpvls45j460c9v7"))))
+                "17vninwcdfxw39xl2q55qircckckjk2xlvkvlwgj5lhlxppvyix6"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -282,14 +282,14 @@ for the IRCv3 protocol.")
 (define-public ircii
   (package
     (name "ircii")
-    (version "20151120")
+    (version "20210314")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://ircii.warped.com/"
                                  name "-" version ".tar.gz"))
              (sha256
               (base32
-               "178dc279f5j894qvp96dzz7c0jpryqlcqw5g0dc9yaxg9kgw1lqm"))))
+               "04jczayv1vdn21fcf5zkfaa98sy7d6ydrv2sns2i67gvya2z28j3"))))
     (build-system gnu-build-system)
     ;; TODO: We should package a small socks4/5 library/server to configure
     ;; ircii with socks client. `ghc-socks' pulls in lots of haskell, which
diff --git a/gnu/packages/jami.scm b/gnu/packages/jami.scm
index 3773c1ab0a..0adc3ed81e 100644
--- a/gnu/packages/jami.scm
+++ b/gnu/packages/jami.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2019, 2020 Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,20 +26,18 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
-  #:use-module (gnu packages boost)
-  #:use-module (gnu packages check)
-  #:use-module (gnu packages compression)
   #:use-module (gnu packages crypto)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages libcanberra)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages networking)
-  #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pulseaudio)
@@ -50,6 +48,7 @@
   #:use-module (gnu packages telephony)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages upnp)
+  #:use-module (gnu packages version-control)
   #:use-module (gnu packages video)
   #:use-module (gnu packages webkit)
   #:use-module (gnu packages xiph)
@@ -57,13 +56,13 @@
   #:use-module (gnu packages)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system qt)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix packages)
-  #:use-module (guix utils)
-  #:use-module (srfi srfi-1))
+  #:use-module (guix utils))
 
-(define %jami-version "20200710.1.6bd18d2")
+(define %jami-version "20210326.1.cfba013")
 
 (define* (jami-source #:key keep-contrib-patches?)
   "Return an origin object of the tarball release sources archive of Jami.
@@ -78,7 +77,7 @@ of Jami."
     (modules '((guix build utils)))
     (snippet
      `(begin
-        ;; Delete over 200 MiB of bundled tarballs.  The contrib directory
+        ;; Delete multiple MiBs of bundled tarballs.  The contrib directory
         ;; contains the custom patches for pjproject and other libraries used
         ;; by Savoir-faire Linux.
         (if ,keep-contrib-patches?
@@ -86,21 +85,21 @@ of Jami."
             (delete-file-recursively "daemon/contrib"))
         ;; Remove code from unused Jami clients.
         (for-each delete-file-recursively '("client-android"
+                                            "client-electron"
+                                            "client-ios"
                                             "client-macosx"
-                                            "client-uwp"
-                                            "client-windows"))
-        #t))
+                                            "client-uwp"))))
     (sha256
      (base32
-      "0lg61jv39x7kc9lq30by246xb6gcgp1rzj49ak7ff8nqpfzyfvva"))))
+      "1h0avma8bdzyznkz39crjyv2888bii4f49md15jg7970dyp5pdyz"))))
 
 (define %sfl-patches (jami-source #:keep-contrib-patches? #t))
 
 (define %jami-sources (jami-source))
 
-;; Savoir-faire Linux modifies many libraries to add features
-;; to Jami. This procedure makes applying patches to a given
-;; package easy.
+;; Savoir-faire Linux maintains a set of patches for some key dependencies
+;; (currently pjproject and ffmpeg) of Jami that haven't yet been integrated
+;; upstream.  This procedure simplifies the process of applying these patches.x
 (define jami-apply-dependency-patches
   '(lambda* (#:key inputs dep-name patches)
      (let ((patches-directory "sfl-patches"))
@@ -112,15 +111,30 @@ of Jami."
                               dep-name))
        (for-each
         (lambda (file)
-          (invoke "patch" "--force" "-p1" "-i"
+          (invoke "patch" "--force" "--ignore-whitespace" "-p1" "-i"
                   (string-append patches-directory "/"
                                  file ".patch")))
         patches))))
 
+;;; Jami maintains pjproject patches that add the ability to do ICE over TCP,
+;;; among other things.  The patches are currently based on pjproject 2.10.
 (define-public pjproject-jami
   (package
     (inherit pjproject)
     (name "pjproject-jami")
+    (version "2.10")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/pjsip/pjproject")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1aklicpgwc88578k03i5d5cm5h8mfm7hmx8vfprchbmaa2p8f4z0"))
+              (patches (search-patches
+                        "pjproject-correct-the-cflags-field.patch"
+                        "pjproject-fix-pkg-config-ldflags.patch"))))
     (native-inputs
      `(("sfl-patches" ,%sfl-patches)
        ,@(package-native-inputs pjproject)))
@@ -140,14 +154,19 @@ of Jami."
                   "0004-multiple_listeners"
                   "0005-fix_ebusy_turn"
                   "0006-ignore_ipv6_on_transport_check"
-                  "0007-pj_ice_sess"
+                  "0007-upnp-srflx-nat-assisted-cand"
                   "0008-fix_ioqueue_ipv6_sendto"
                   "0009-add-config-site"
-                  ;; Note: The base pjproject is already patched with
-                  ;; "0010-fix-pkgconfig".
+                  ;; Already taken care of via the origin patches.
+                  ;;"0010-fix-pkgconfig"
                   "0011-fix-tcp-death-detection"
-                  "0012-fix-turn-shutdown-crash"))
-               #t))))))))
+                  "0012-fix-turn-shutdown-crash"
+                  "0013-Assign-unique-local-preferences-for-candidates-with-"
+                  "0014-Add-new-compile-time-setting-PJ_ICE_ST_USE_TURN_PERM"
+                  "0015-update-local-preference-for-peer-reflexive-candidate"
+                  "0016-use-addrinfo-instead-CFHOST"
+                  "0017-CVE-2020-15260"
+                  "0018-CVE-2021-21375"))))))))))
 
 ;; The following variables are configure flags used by ffmpeg-jami.  They're
 ;; from the ring-project/daemon/contrib/src/ffmpeg/rules.mak file. We try to
@@ -383,21 +402,22 @@ of Jami."
          `(modify-phases ,phases
             (add-after 'unpack 'make-git-checkout-writable
               (lambda _
-                (for-each make-file-writable (find-files "."))
-                #t))
+                (for-each make-file-writable (find-files "."))))
             (add-after 'unpack 'apply-patches
               (lambda* (#:key inputs #:allow-other-keys)
                 (let ((jami-apply-dependency-patches
                        ,jami-apply-dependency-patches))
                   ;; These patches come from:
                   ;; "ring-project/daemon/contrib/src/ffmpeg/rules.mak".
-                  (jami-apply-dependency-patches #:inputs inputs
-                                                 #:dep-name "ffmpeg"
-                                                 #:patches
-                                                 '("remove-mjpeg-log"
-                                                   "change-RTCP-ratio"
-                                                   "rtp_ext_abs_send_time"))
-                  #t))))))))))
+                  (jami-apply-dependency-patches
+                   #:inputs inputs
+                   #:dep-name "ffmpeg"
+                   #:patches
+                   '("remove-mjpeg-log"
+                     "change-RTCP-ratio"
+                     "rtp_ext_abs_send_time"
+                     "libopusdec-enable-FEC"
+                     "libopusenc-enable-FEC"))))))))))))
 
 (define-public libring
   (package
@@ -405,150 +425,197 @@ of Jami."
     (version %jami-version)
     (source %jami-sources)
     (build-system gnu-build-system)
+    (outputs '("out" "debug"))
     (inputs
      `(("alsa-lib" ,alsa-lib)
-       ("boost" ,boost)
+       ("asio" ,asio)
        ("dbus-c++" ,dbus-c++)
        ("eudev" ,eudev)
        ("ffmpeg" ,ffmpeg-jami)
-       ("flac" ,flac)
-       ("gmp" ,gmp)
-       ("gsm" ,gsm)
        ("jack" ,jack-1)
        ("jsoncpp" ,jsoncpp)
        ("libarchive" ,libarchive)
+       ("libgit2" ,libgit2)
        ("libnatpmp" ,libnatpmp)
-       ("libogg" ,libogg)
-       ("libva" ,libva)
+       ("libsecp256k1" ,libsecp256k1)
+       ("libupnp" ,libupnp)
        ("opendht" ,opendht)
-       ("opus" ,opus)
-       ("pcre" ,pcre)
+       ("openssl" ,openssl)
+       ("pjproject" ,pjproject-jami)
        ("pulseaudio" ,pulseaudio)
-       ("libsamplerate" ,libsamplerate)
-       ("libsndfile" ,libsndfile)
        ("speex" ,speex)
        ("speexdsp" ,speexdsp)
-       ("libupnp" ,libupnp)
-       ("libvorbis" ,libvorbis)
-       ("libx264" ,libx264)
-       ("libvdpau" ,libvdpau)
-       ("yaml-cpp" ,yaml-cpp)
-       ("zlib" ,zlib)
-       ("openssl" ,openssl)
-       ("libsecp256k1" ,libsecp256k1)
-       ("python" ,python)
-       ("python-wrapper" ,python-wrapper)
-       ("restinio" ,restinio)
-       ("libx11" ,libx11)
-       ("asio" ,asio)
-       ;; TODO: Upstream seems to rely on a custom pjproject (a.k.a. pjsip) version.
-       ;; See https://git.jami.net/savoirfairelinux/ring-daemon/issues/24.
-       ("pjproject" ,pjproject-jami)))
+       ("webrtc-audio-processing" ,webrtc-audio-processing)
+       ("yaml-cpp" ,yaml-cpp)))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
+       ("gcc" ,gcc-8)                   ;charconv requires GCC 8.1+
        ("libtool" ,libtool)
+       ("perl" ,perl)                   ;to generate manpages with pod2man
        ("pkg-config" ,pkg-config)
-       ("which" ,which)
-       ("cppunit" ,cppunit)
-       ("perl" ,perl)))                 ; Needed for documentation.
+       ("which" ,which)))
     (arguments
      `(#:tests? #f         ; The tests fail to compile due to missing headers.
+       #:make-flags '("V=1")            ;build verbosely
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'change-directory
            (lambda _
-             (chdir "daemon")
-             #t))
+             (chdir "daemon")))
          (add-before 'build 'add-lib-dir
            (lambda _
-             (mkdir-p "src/lib")
-             #t)))))
-    (synopsis "Distributed multimedia communications platform")
-    (description "Jami (formerly GNU Ring) is a secure and distributed voice,
-video and chat communication platform that requires no centralized server and
-leaves the power of privacy in the hands of the user.  It supports the SIP and
-IAX protocols, as well as decentralized calling using P2P-DHT.
-
-This package provides a library and daemon implementing the Jami core
-functionality.")
+             (mkdir-p "src/lib"))))))
+    (synopsis "Jami core library and daemon")
+    (description "This package provides a library and daemon implementing the
+Jami core functionality.  Jami is a secure and distributed voice, video and
+chat communication platform that requires no centralized server and leaves the
+power of privacy in the hands of the user.  It supports the SIP and IAX
+protocols, as well as decentralized calling using P2P-DHT.")
     (home-page "https://jami.net/")
     (license license:gpl3+)))
 
 (define-public libringclient
   (package
-    (inherit libring)
     (name "libringclient")
+    (version %jami-version)
+    (source %jami-sources)
     (build-system cmake-build-system)
+    (outputs '("out" "debug"))
+    (inputs
+     `(("libring" ,libring)
+       ("network-manager" ,network-manager)))
     (propagated-inputs
-     `(("libring" ,libring)     ; For 'dring'.
-       ("qtbase" ,qtbase)       ; Qt is included in several installed headers.
-       ("qttools" ,qttools)))
+     `(("qtbase" ,qtbase)))     ; Qt is included in several installed headers.
     (arguments
      `(#:tests? #f                      ; There is no testsuite.
        #:configure-flags
-       (list (string-append "-DRING_BUILD_DIR="
-                            (assoc-ref %build-inputs "libring") "/include"))
+       (let ((libring (assoc-ref %build-inputs "libring")))
+         (list (string-append "-DRING_XML_INTERFACES_DIR="
+                              libring "/share/dbus-1/interfaces")
+               (string-append "-DRING_BUILD_DIR=" libring "/include")
+               ;; Use LIBWRAP, which removes the requirement on DBus.  Qt
+               ;; links with the dbus library in Guix, which expects to find
+               ;; its configuration under /etc rather than /usr/share/dbus-1,
+               ;; which is perhaps the reason the auto-launching of dring
+               ;; doesn't work on foreign distributions.
+
+               ;; FIXME: Disabled for now, as it causes a segfault when
+               ;; attempting video calls (see:
+               ;; https://git.jami.net/savoirfairelinux/ring-lrc/-/issues/466).
+               "-DENABLE_LIBWRAP=false"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'change-directory
            (lambda _
-             (chdir "lrc")
-             #t))
-         (add-before 'configure 'fix-dbus-interfaces-path
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "CMakeLists.txt"
-               (("\\$\\{CMAKE_INSTALL_PREFIX\\}(/share/dbus-1/interfaces)" _ dbus-interfaces-path-suffix)
-                (string-append (assoc-ref inputs "libring")
-                               dbus-interfaces-path-suffix))))))))
-    (synopsis "Distributed multimedia communications platform")
-    (description "Jami (formerly GNU Ring) is a secure and distributed voice,
-video and chat communication platform that requires no centralized server and
-leaves the power of privacy in the hands of the user.  It supports the SIP and
-IAX protocols, as well as decentralized calling using P2P-DHT.
-
-This package provides a library common to all Jami clients.")
+             (chdir "lrc"))))))
+    (synopsis "Jami client library")
+    (description "This package provides a library common to all Jami clients.
+Jami is a secure and distributed voice, video and chat communication platform
+that requires no centralized server and leaves the power of privacy in the
+hands of the user.  It supports the SIP and IAX protocols, as well as
+decentralized calling using P2P-DHT.")
     (home-page "https://jami.net")
     (license license:gpl3+)))
 
-(define-public jami
+(define-public jami-gnome
   (package
-    (inherit libring)
-    (name "jami")
+    (name "jami-gnome")
+    (version %jami-version)
+    (source %jami-sources)
     (build-system cmake-build-system)
+    (outputs '("out" "debug"))
     (inputs
-     `(("libringclient" ,libringclient)
-       ("gtk+" ,gtk+)
-       ("qrencode" ,qrencode)
-       ("libnotify" ,libnotify)
-       ("clutter" ,clutter)
+     `(("clutter" ,clutter)
        ("clutter-gtk" ,clutter-gtk)
+       ("gtk+" ,gtk+)
        ("libcanberra" ,libcanberra)
-       ("webkitgtk" ,webkitgtk)
-       ("sqlite" ,sqlite)))
+       ("libappindicator" ,libappindicator)
+       ("libnotify" ,libnotify)
+       ("libringclient" ,libringclient)
+       ("network-manager" ,network-manager)
+       ("qrencode" ,qrencode)
+       ("sqlite" ,sqlite)
+       ("webkitgtk" ,webkitgtk)))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("gettext" ,gettext-minimal)
-       ("glib:bin" ,glib "bin")
-       ("doxygen" ,doxygen)))
+       ("glib:bin" ,glib "bin")))       ;for glib-compile-resources
     (propagated-inputs
-     `(("libring" ,libring) ; Contains `dring', the daemon, which is automatically by d-bus.
-       ("adwaita-icon-theme" ,adwaita-icon-theme)
-       ("evolution-data-server" ,evolution-data-server)))
+     `(("libring" ,libring) ; Contains 'dring', the daemon, which is
+                            ; automatically started by DBus.
+       ("adwaita-icon-theme" ,adwaita-icon-theme)))
     (arguments
      `(#:tests? #f                      ; There is no testsuite.
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'change-directory
            (lambda _
-             (chdir "client-gnome")
-             #t)))))
-    (synopsis "Distributed, privacy-respecting communication program")
-    (description "Jami (formerly GNU Ring) is a secure and distributed voice,
-video and chat communication platform that requires no centralized server and
-leaves the power of privacy in the hands of the user.  It supports the SIP and
-IAX protocols, as well as decentralized calling using P2P-DHT.
+             (chdir "client-gnome"))))))
+    (synopsis "Jami client for GNOME")
+    (description "This package provides a Jami client for the GNOME desktop.
+Jami is a secure and distributed voice, video and chat communication platform
+that requires no centralized server and leaves the power of privacy in the
+hands of the user.  It supports the SIP and IAX protocols, as well as
+decentralized calling using P2P-DHT.")
+    (home-page "https://jami.net")
+    (license license:gpl3+)))
+
+;;; Keep this until the Qt client matures enough to become the
+;;; main 'jami' client.
+(define-public jami
+  (deprecated-package "jami" jami-gnome))
 
-This package provides the Jami client for the GNOME desktop.")
+(define-public jami-qt
+  (package
+    (name "jami-qt")                    ;to be renamed 'jami' at some point
+    (version %jami-version)
+    ;; The Qt client code is not yet part of the release tarball; fetch it
+    ;; from git for now.
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://git.jami.net/savoirfairelinux/jami-client-qt.git")
+                    (commit "ae21c17da5e8f730ae3895ccbc4da8047e3be1eb")))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1rf3lpk8c4qc12pi6pn4rdp7i8b83xv64yqr0q47rzv9s518qyjp"))))
+    (build-system qt-build-system)
+    (outputs '("out" "debug"))
+    (arguments
+     `(#:tests? #f                      ;no test suite
+       ;; TODO: Uncomment after switching back to the tarball source.
+       ;; #:phases
+       ;; (modify-phases %standard-phases
+       ;;     (add-after 'unpack 'change-directory
+       ;;       (lambda _
+       ;;         (chdir "client-qt"))))
+       ))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("qttools" ,qttools)
+       ("doxygen" ,doxygen)
+       ("graphviz" ,graphviz)))
+    (inputs
+     `(("libringclient" ,libringclient)
+       ("network-manager" ,network-manager)
+       ("qrencode" ,qrencode)
+       ("qtsvg" ,qtsvg)
+       ("qtwebengine" ,qtwebengine)
+       ("qtwebchannel" ,qtwebchannel)
+       ("qtmultimedia" ,qtmultimedia)
+       ("qtdeclarative" ,qtdeclarative)
+       ("qtgraphicaleffects" ,qtgraphicaleffects)
+       ("qtquickcontrols" ,qtquickcontrols)
+       ("qtquickcontrols2" ,qtquickcontrols2)))
+    (propagated-inputs
+     `(("libring" ,libring)))           ;for dring
     (home-page "https://jami.net")
+    (synopsis "Qt Jami client")
+    (description "This package provides the Jami Qt client.  Jami is a secure
+and distributed voice, video and chat communication platform that requires no
+centralized server and leaves the power of privacy in the hands of the user.
+It supports the SIP and IAX protocols, as well as decentralized calling using
+P2P-DHT.")
     (license license:gpl3+)))
diff --git a/gnu/packages/javascript.scm b/gnu/packages/javascript.scm
index 00e89612a5..bb3a8063e3 100644
--- a/gnu/packages/javascript.scm
+++ b/gnu/packages/javascript.scm
@@ -597,14 +597,14 @@ roots, or wrestle with obscure build systems.")
 (define-public quickjs
   (package
     (name "quickjs")
-    (version "2020-11-08")
+    (version "2021-03-27")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://bellard.org/quickjs/quickjs-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "0yqqcjxi3cqagw184mqrxpvqg486x7c233r3cp9mxachngd6779f"))))
+                "06pywwpmfwjz225h59wf90q96a2fd66qfcw5xa6m6y9k9k7glnx4"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 0d35cbde57..d79acf0b17 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2020, 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,8 +22,35 @@
   #:use-module (guix packages)
   #:use-module (guix git-download)
   #:use-module (guix build-system julia)
+  #:use-module (gnu packages gcc)
+  #:use-module (gnu packages maths)
   #:use-module (gnu packages tls))
 
+(define-public julia-abstractffts
+  (package
+    (name "julia-abstractffts")
+    (version "1.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaMath/AbstractFFTS.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0083pwdyxjb04i330ir9pc8kmp4bwk59lx1jgc9qi05y8j7xzbp0"))))
+    (build-system julia-build-system)
+    (inputs                             ;required for tests
+     `(("julia-unitful" ,julia-unitful)))
+    (home-page "https://github.com/JuliaGPU/Adapt.jl")
+    (synopsis "General framework for fast Fourier transforms (FFTs)")
+    (description "This package allows multiple FFT packages to co-exist with
+the same underlying @code{fft(x)} and @code{plan_fft(x)} interface.  It is
+mainly not intended to be used directly.  Instead, developers of packages that
+implement FFTs (such as @code{FFTW.jl} or @code{FastTransforms.jl}) extend the
+types/functions defined in AbstractFFTs.")
+    (license license:expat)))
+
 (define-public julia-adapt
   (package
     (name "julia-adapt")
@@ -95,6 +123,192 @@ operations.  It can wrap any @code{IO} type automatically making incremental
 reading and writing faster.")
     (license license:expat)))
 
+(define-public julia-calculus
+  (package
+    (name "julia-calculus")
+    (version "0.5.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaMath/Calculus.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0xh0ak2ycsjw2h86ja24ch3kn2d18zx3frrds78aimwdnqb1gdc2"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaMath/Calculus.jl")
+    (synopsis "Common utilities for automatic differentiation")
+    (description "This package provides tools for working with the basic
+calculus operations of differentiation and integration.  The @code{Calculus}
+package produces approximate derivatives by several forms of finite
+differencing or produces exact derivative using symbolic differentiation.  It
+can also be used to compute definite integrals by different numerical
+methods.")
+    (license license:expat)))
+
+(define-public julia-chainrules
+  (package
+    (name "julia-chainrules")
+    (version "0.7.54")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaDiff/ChainRules.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1x4w71v8cw0vpba47h8f5xq4gyjfxbcvayzf7m41yg8gf49s9pkf"))))
+    (build-system julia-build-system)
+    (inputs                             ;required for test
+     `(("julia-chainrulestestutils" ,julia-chainrulestestutils)
+       ("julia-finitedifferences" ,julia-finitedifferences)
+       ("julia-nanmath" ,julia-nanmath)
+       ("julia-specialfunctions" ,julia-specialfunctions)))
+    (propagated-inputs
+     `(("julia-chainrulescore" ,julia-chainrulescore)
+       ("julia-compat" ,julia-compat)
+       ("julia-reexport" ,julia-reexport)
+       ("julia-requires" ,julia-requires)))
+    (home-page "https://github.com/JuliaDiff/ChainRules.jl")
+    (synopsis "Common utilities for automatic differentiation")
+    (description "The is package provides a variety of common utilities that
+can be used by downstream automatic differentiation (AD) tools to define and
+execute forward-, reverse-, and mixed-mode primitives.")
+    (license license:expat)))
+
+(define-public julia-chainrulescore
+  (package
+    (name "julia-chainrulescore")
+    (version "0.9.29")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaDiff/ChainRulesCore.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1k0iayw39n1ikkkhvyi4498vsnzc94skqs41gnd15632gxjfvki4"))))
+    (build-system julia-build-system)
+    (inputs                             ;required for tests
+     `(("julia-benchmarktools" ,julia-benchmarktools)
+       ("julia-staticarrays" ,julia-staticarrays)))
+    (propagated-inputs
+     `(("julia-compat" ,julia-compat)))
+    (home-page "https://github.com/JuliaDiff/ChainRulesCore.jl")
+    (synopsis "Common utilities used by downstream automatic differentiation tools")
+    (description "The package provides a light-weight dependency for defining
+sensitivities for functions without the need to depend on ChainRules itself.")
+    (license license:expat)))
+
+(define-public julia-chainrulestestutils
+  (package
+    (name "julia-chainrulestestutils")
+    (version "0.6.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaDiff/ChainRulesTestUtils.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1pzs947adnb3cx1qd0cxp2fidk9szz0zsqbas90z1lhydykkvkil"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     `(("julia-chainrulescore" ,julia-chainrulescore)
+       ("julia-compat" ,julia-compat)
+       ("julia-finitedifference" ,julia-finitedifferences)))
+    (home-page "https://github.com/JuliaDiff/ChainRulesTestUtils.jl")
+    (synopsis "Common utilities used by downstream automatic differentiation tools")
+    (description "This package is designed to help in testing
+@code{ChainRulesCore.frule} and @code{ChainRulesCore.rrule} methods.  The main
+entry points are @code{ChainRulesTestUtils.frule_test},
+@code{ChainRulesTestUtils.rrule_test}, and
+@code{ChainRulesTestUtils.test_scalar}. Currently this is done via testing the
+rules against numerical differentiation (using @code{FiniteDifferences.jl}).
+
+@code{ChainRulesTestUtils.jl} is separated from @code{ChainRulesCore.jl} so that it
+can be a test-only dependency, allowing it to have potentially heavy
+dependencies, while keeping @code{ChainRulesCore.jl} as light-weight as possible.")
+    (license license:expat)))
+
+(define-public julia-colors
+  (package
+    (name "julia-colors")
+    (version "0.12.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaGraphics/Colors.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "156zsszgwh6bmznsan0zyha6yvcxw3c5mvc5vr2qfsgxbyh36ln6"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     `(("julia-colortypes" ,julia-colortypes)
+       ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
+       ("julia-reexport" ,julia-reexport)))
+    (home-page "https://github.com/JuliaGraphics/Colors.jl")
+    (synopsis "Tools for dealing with color")
+    (description "This package provides a wide array of functions for dealing
+with color.  This includes conversion between colorspaces, measuring distance
+between colors, simulating color blindness, parsing colors, and generating
+color scales for graphics.")
+    (license license:expat)))
+
+(define-public julia-colortypes
+  (package
+    (name "julia-colortypes")
+    (version "0.10.12")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaGraphics/ColorTypes.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "176hr3qbz7lncmykks2qaj3cqisnzim7wi5jwsca9ld26wwyvyqq"))))
+    (arguments
+     '(#:tests? #f))                    ;require Documenter, not packaged yet
+    (build-system julia-build-system)
+    (propagated-inputs
+     `(("julia-fixedpointnumbers" ,julia-fixedpointnumbers)))
+    (home-page "https://github.com/JuliaGraphics/ColorTypes.jl")
+    (synopsis "Basic color types and constructor")
+    (description "This minimalistic package serves as the foundation for
+working with colors in Julia.  It defines basic color types and their
+constructors, and sets up traits and show methods to make them easier to work
+with.")
+    (license license:expat)))
+
+(define-public julia-commonsubexpressions
+  (package
+    (name "julia-commonsubexpressions")
+    (version "0.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/rdeits/CommonSubexpressions.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0mgy90kk8ksv3l720kkk04gnhn4aqhh2dj4sp3x8yy3limngfjay"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     `(("julia-macrotools" ,julia-macrotools)))
+    (home-page "https://github.com/rdeits/CommonSubexpressions.jl")
+    (synopsis "@code{@@cse} macro for Julia")
+    (description "This package provides the @code{@@cse} macro, which performs
+common subexpression elimination.")
+    (license license:expat)))
+
 (define-public julia-compat
   (package
     (name "julia-compat")
@@ -117,6 +331,71 @@ provides a macro that lets you use the latest syntax in a backwards-compatible
 way.")
     (license license:expat)))
 
+;;; TODO: Remove this autogenerated source package
+;;; and build it from realse source using <https://github.com/JuliaPackaging/Yggdrasil/>
+(define-public julia-compilersupportlibraries-jll
+  (package
+    (name "julia-compilersupportlibraries-jll")
+    (version "0.4.0+1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaBinaryWrappers/CompilerSupportLibraries_jll.jl")
+             (commit (string-append "CompilerSupportLibraries-v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "03j6xdvps259mhdzpjqf41l65w2l9sahvxg4wrp34hcf69wkrzpy"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:tests? #f                      ; no runtests.jl
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'override-binary-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (map
+              (lambda (wrapper)
+                (substitute* wrapper
+                  (("generate_wrapper_header.*")
+                   (string-append
+                    "generate_wrapper_header(\"CompilerSupportLibraries\", \""
+                    (assoc-ref inputs "gfortran:lib") "\")\n"))))
+              ;; There's a Julia file for each platform, override them all
+              (find-files "src/wrappers/" "\\.jl$"))
+             #t)))))
+    (inputs                             ;required by artifacts
+     `(("gfortran:lib" ,gfortran "lib")))
+    (propagated-inputs
+     `(("julia-jllwrappers" ,julia-jllwrappers)))
+    (home-page "https://github.com/JuliaBinaryWrappers/CompilerSupportLibraries_jll.jl")
+    (synopsis "Internal wrappers")
+    (description "This package provides compiler support for libraries.  It is
+an autogenerated source package constructed using @code{BinaryBuilder.jl}. The
+originating @code{build_tarballs.jl} script can be found on the community
+build tree Yggdrasil.")
+    (license license:expat)))
+
+(define-public julia-constructionbase
+  (let ((commit "de77e2865b554f9b078fd8c35b593cce0554ae02"))
+    (package
+      (name "julia-constructionbase")
+      (version "1.1.0")                 ;tag not created upstream
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/JuliaObjects/ConstructionBase.jl")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1y79sfj0rds1skl9j16p9161hwa9khm0xc2m4hgjcbh5zzvyr57v"))))
+      (build-system julia-build-system)
+      (home-page "https://juliaobjects.github.io/ConstructionBase.jl/dev/")
+      (synopsis "Primitive functions for construction of objects")
+      (description "This very lightweight package provides primitive functions
+for construction of objects.")
+      (license license:expat))))
+
 (define-public julia-datastructures
   (package
     (name "julia-datastructures")
@@ -141,6 +420,143 @@ including, @code{CircularBuffer}, @code{Queue}, @code{Stack},
 @code{Accumulators}, @code{LinkedLists}, @code{SortedDicts} and many others.")
     (license license:expat)))
 
+(define-public julia-diffresults
+  (package
+    (name "julia-diffresults")
+    (version "1.0.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaDiff/DiffResults.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1w6p3yxajvclax5b9g7cr2jmbc7lvr5nk4gq0aljxdycdq1d2y3v"))))
+    (propagated-inputs
+     `(("julia-staticarrays" ,julia-staticarrays)))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaDiff/DiffResults.jl")
+    (synopsis "In-place differentiation methods of primal values at multi-order")
+    (description "This package provides the @code{DiffResult} type, which can
+be passed to in-place differentiation methods instead of an output buffer.")
+    (license license:expat)))
+
+(define-public julia-diffrules
+  (package
+    (name "julia-diffrules")
+    (version "1.0.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaDiff/DiffRules.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0cwjvj4gma7924fm3yas0nf0jlnwwx4v7fi79ii3s290lkdldzfl"))))
+    (propagated-inputs
+     `(("julia-nanmath" ,julia-nanmath)
+       ("julia-specialfunctions" ,julia-specialfunctions)))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaDiff/DiffRules.jl")
+    (synopsis "Primitive differentiation rules")
+    (description "This package provides primitive differentiation rules that
+can be composed via various formulations of the chain rule.  Using
+@code{DiffRules}, new differentiation rules can defined, query whether or not
+a given rule exists, and symbolically apply rules to simple Julia expressions.")
+    (license license:expat)))
+
+(define-public julia-difftests
+  (package
+    (name "julia-difftests")
+    (version "0.1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaDiff/DiffTests.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1rxpnd5zi3pxgdd38l5jm2sxc3q6p7g57fqgll2dsiin07y3my57"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaDiff/DiffTests.jl")
+    (synopsis "Common test functions for differentiation tools")
+    (description "This package contains a common suite of test functions for
+stressing the robustness of differentiation tools.")
+    (license license:expat)))
+
+(define-public julia-example
+  (let ((commit "f968c69dea24f851d0c7e686db23fa55826b5388"))
+    (package
+      (name "julia-example")
+      (version "0.5.4")                   ;tag not created upstream
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/JuliaLang/Example.jl")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1v3z0d6gh6wfbypffy9m9rhh36px6fm5wjzq0y6rbmc95r0qpqlx"))))
+      (build-system julia-build-system)
+      (home-page "https://github.com/JuliaLang/Example.jl")
+      (synopsis "Module providing examples")
+      (description "This package provides various examples.")
+      (license license:expat))))
+
+(define-public julia-fillarrays
+  (package
+    (name "julia-fillarrays")
+    (version "0.11.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaArrays/FillArrays.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1q1qn9pb5dmppddnmf8gggdqyvivqh3ffvbblhn37smcf9r5sy7d"))))
+    (build-system julia-build-system)
+    (inputs                             ;required by tests
+     `(("julia-staticarrays" ,julia-staticarrays)))
+    (home-page "https://github.com/JuliaArrays/FillArrays.jl")
+    (synopsis "Lazy matrix representation")
+    (description "This package allows to lazily represent matrices filled with
+a single entry, as well as identity matrices.  This package exports the
+following types: @code{Eye}, @code{Fill}, @code{Ones}, @code{Zeros},
+@code{Trues} and @code{Falses}.")
+    (license license:expat)))
+
+(define-public julia-finitedifferences
+  (package
+    (name "julia-finitedifferences")
+    (version "0.12.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaDiff/FiniteDifferences.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0dcx34026xdpfmbjls3mrknl8ww62kxxfr77kfihbazsfg2gp5b4"))))
+    (build-system julia-build-system)
+    (inputs
+     `(("julia-benchmarktools" ,julia-benchmarktools)))
+    (propagated-inputs
+     `(("julia-chainrulescore" ,julia-chainrulescore)
+       ("julia-richardson" ,julia-richardson)
+       ("julia-staticarrays" ,julia-staticarrays)))
+    (home-page "https://github.com/JuliaDiff/FiniteDifferences.jl")
+    (synopsis "Estimates derivatives with finite differences")
+    (description "This package calculates approximate derivatives numerically
+using finite difference.")
+    (license license:expat)))
+
 (define-public julia-fixedpointnumbers
   (package
     (name "julia-fixedpointnumbers")
@@ -176,6 +592,38 @@ 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-forwarddiff
+  (package
+    (name "julia-forwarddiff")
+    (version "0.10.17")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaDiff/ForwardDiff.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "17xaz4v0zr46p7w873w1fwf31phdnhr0vbdym9yr4flmpzi528jw"))))
+    (build-system julia-build-system)
+    (inputs                             ;required for tests
+     `(("julia-calculus" ,julia-calculus)
+       ("julia-difftests" ,julia-difftests)))
+    (propagated-inputs
+     `(("julia-commonsubexpressions" ,julia-commonsubexpressions)
+       ("julia-diffresults" ,julia-diffresults)
+       ("julia-diffrules" ,julia-diffrules)
+       ("julia-nanmath" ,julia-nanmath)
+       ("julia-specialfunctions" ,julia-specialfunctions)
+       ("julia-staticarrays" ,julia-staticarrays)))
+    (home-page "https://github.com/JuliaDiff/ForwardDiff.jl")
+    (synopsis "Methods to take multidimensional derivatives")
+    (description "This package implements methods to take derivatives,
+gradients, Jacobians, Hessians, and higher-order derivatives of native Julia
+functions (or any callable object, really) using forward mode automatic
+differentiation (AD).")
+    (license license:expat)))
+
 (define-public julia-http
   (package
     (name "julia-http")
@@ -254,6 +702,32 @@ implementing both a client and a server.")
 allows to interface with @file{.ini} files.")
     (license license:expat)))
 
+(define-public julia-irtools
+  (package
+    (name "julia-irtools")
+    (version "0.4.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/FluxML/IRTools.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0wwzy77jcdnffnd5fr6xan7162g4wydz67igrq82wflwnrhlcx5y"))))
+    (arguments
+     '(#:tests? #f))                    ;require Documenter, not packaged yet
+    (build-system julia-build-system)
+    (propagated-inputs
+     `(("julia-macrotools" ,julia-macrotools)))
+    (home-page "https://github.com/FluxML/IRTools.jl")
+    (synopsis "Simple and flexible IR format")
+    (description "This package provides a simple and flexible IR format,
+expressive enough to work with both lowered and typed Julia code, as well as
+external IRs.  It can be used with Julia metaprogramming tools such as
+Cassette.")
+    (license license:expat)))
+
 (define-public julia-jllwrappers
   (package
     (name "julia-jllwrappers")
@@ -322,6 +796,27 @@ used in autogenerated packages via @code{BinaryBuilder.jl}.")
 and printing JSON documents.")
     (license license:expat)))
 
+(define-public julia-macrotools
+  (package
+    (name "julia-macrotools")
+    (version "0.5.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/FluxML/MacroTools.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0k4z2hyasd9cwxf4l61zk3w4ajs44k69wx6z1ghdn8f5p8xy217f"))))
+    (build-system julia-build-system)
+    (home-page "https://fluxml.ai/MacroTools.jl")
+    (synopsis "Tools for working with Julia code and expressions")
+    (description "This library provides tools for working with Julia code and
+expressions.  This includes a template-matching system and code-walking tools
+that let you do deep transformations of code.")
+    (license license:expat)))
+
 (define-public julia-mbedtls
   (package
     (name "julia-mbedtls")
@@ -349,7 +844,7 @@ and printing JSON documents.")
     (home-page "https://github.com/JuliaLang/MbedTLS.jl")
     (synopsis "Apache's mbed TLS library wrapper")
     (description "@code{MbedTLS.jl} provides a wrapper around the @code{mbed
-TLS} and cryptography C libary for Julia.")
+TLS} and cryptography C library for Julia.")
     (license license:expat)))
 
 (define-public julia-mbedtls-jll
@@ -392,6 +887,26 @@ TLS} and cryptography C libary for Julia.")
 wrappers.")
     (license license:expat)))
 
+(define-public julia-nanmath
+  (package
+    (name "julia-nanmath")
+    (version "0.3.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/mlubin/NaNMath.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1hczhz00qj99w63vp627kwk02l2sr2qmzc2rkwwkdwvzy670p25q"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/mlubin/NaNMath.jl")
+    (synopsis "Implementations of basic math functions")
+    (description "Implementations of basic math functions which return
+@code{NaN} instead of throwing a @code{DomainError}.")
+    (license license:expat)))
+
 (define-public julia-orderedcollections
   (package
     (name "julia-orderedcollections")
@@ -439,6 +954,52 @@ have arbitrary indices, similar to those found in some other programming
 languages like Fortran.")
     (license license:expat)))
 
+;;; TODO: Remove this autogenerated source package
+;;; and build it from realse source using <https://github.com/JuliaPackaging/Yggdrasil/>
+(define-public julia-openspecfun-jll
+(let ((commit "6c505cce3bdcd9cd2b15b4f9362ec3a42c4da71c"))
+  (package
+    (name "julia-openspecfun-jll")
+    (version "0.5.3+4")                 ;tag not created upstream
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaBinaryWrappers/OpenSpecFun_jll.jl")
+             (commit commit)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0bl2gcgndsbiwhwy8fl070cjm1fyf9kxj6gkikgirmzgjl29iakn"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:tests? #f                      ; no runtests.jl
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'override-binary-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (map
+              (lambda (wrapper)
+                (substitute* wrapper
+                  (("generate_wrapper_header.*")
+                   (string-append
+                    "generate_wrapper_header(\"OpenSpecFun\", \""
+                    (assoc-ref inputs "openspecfun") "\")\n"))))
+              ;; There's a Julia file for each platform, override them all
+              (find-files "src/wrappers/" "\\.jl$"))
+             #t)))))
+    (inputs
+     `(("openspecfun" ,openspecfun)))
+    (propagated-inputs
+     `(("julia-jllwrappers" ,julia-jllwrappers)
+       ("julia-compilersupportlibraries-jll" ,julia-compilersupportlibraries-jll)))
+    (home-page "https://github.com/JuliaBinaryWrappers/OpenSpecFun_jll.jl")
+    (synopsis "Internal wrappers")
+    (description "This package provides a wrapper for OpenSpecFun.  It is an
+autogenerated source package constructed using @code{BinaryBuilder.jl}. The
+originating @code{build_tarballs.jl} script can be found on the community
+build tree Yggdrasil.")
+    (license license:expat))))
+
 (define-public julia-parsers
   (package
     (name "julia-parsers")
@@ -459,6 +1020,130 @@ languages like Fortran.")
 utilities for Julia.")
     (license license:expat)))
 
+(define-public julia-reexport
+  (package
+    (name "julia-reexport")
+    (version "1.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/simonster/Reexport.jl")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1yhhja1zz6dy5f4fd19bdwd6jwgj7q4w3avzgyg1hjhmdl8jrh0s"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/simonster/Reexport.jl")
+    (synopsis "Re-export modules and symbols")
+    (description "This package provides tools to re-export modules and symbols.")
+    (license license:expat)))
+
+(define-public julia-requires
+  (package
+    (name "julia-requires")
+    (version "1.1.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaPackaging/Requires.jl/")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "03hyfy7c0ma45b0y756j76awi3az2ii4bz4s8cxm3xw9yy1z7b01"))))
+    (build-system julia-build-system)
+    (inputs                             ;required for test
+     `(("julia-example" ,julia-example)))
+    (propagated-inputs
+     `(("julia-colors" ,julia-colors)))
+    (home-page "https://github.com/JuliaPackaging/Requires.jl/")
+    (synopsis "Faster package loader")
+    (description "This package make loading packages faster, maybe.  It
+supports specifying glue code in packages which will load automatically when
+another package is loaded, so that explicit dependencies (and long load times)
+can be avoided.")
+    (license license:expat)))
+
+(define-public julia-richardson
+  (package
+    (name "julia-richardson")
+    (version "1.4.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaMath/Richardson.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "06v9ii3d7hh41fsrfklaa8ap55z5s017f888mrd1c18y4fx9i4nx"))))
+    (build-system julia-build-system)
+    (home-page "https://juliapackages.com/p/richardson")
+    (synopsis "Extrapolate function using Richardson method")
+    (description "This package provides a function extrapolate that
+extrapolates a given function @code{f(x)} to @code{f(x0)}, evaluating @code{f}
+only at a geometric sequence of points @code{> x0} (or optionally @code{<
+x0}).  The key algorithm is Richardson extrapolation using a Neville–Aitken
+tableau, which adaptively increases the degree of an extrapolation polynomial
+until convergence is achieved to a desired tolerance (or convergence stalls
+due to e.g. floating-point errors).  This allows one to obtain @code{f(x0)} to
+high-order accuracy, assuming that @code{f(x0+h)} has a Taylor series or some
+other power series in @code{h}.")
+    (license license:expat)))
+
+(define-public julia-specialfunctions
+  (package
+    (name "julia-specialfunctions")
+    (version "1.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaMath/SpecialFunctions.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1rfhrrkzi3ils7fklbn35ki1yp5x88fi71qknfwqyw4pk8cf8p80"))))
+    (build-system julia-build-system)
+    (inputs
+     `(("julia-chainrulestestutils" ,julia-chainrulestestutils)))
+    (propagated-inputs
+     `(("julia-chainrulescore" ,julia-chainrulescore)
+       ("julia-openspecfun-jll" ,julia-openspecfun-jll)))
+    (home-page "https://github.com/JuliaMath/SpecialFunctions.jl")
+    (synopsis "Special mathematical functions")
+    (description "This package provides special mathematical functions,
+including Bessel, Hankel, Airy, error, Dawson, exponential (or sine and
+cosine) integrals, eta, zeta, digamma, inverse digamma, trigamma, and
+polygamma functions.")
+    (license license:expat)))
+
+(define-public julia-staticarrays
+  (package
+    (name "julia-staticarrays")
+    (version "1.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaArrays/StaticArrays.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "01z8bcqwpfkp8p1h1r36pr5cc3798y76zkas7g3206pcsdhvlkz1"))))
+    (build-system julia-build-system)
+    (inputs
+     `(("julia-benchmarktools" ,julia-benchmarktools)))
+    (home-page "https://github.com/JuliaArrays/StaticArrays.jl")
+    (synopsis "Statically sized arrays")
+    (description "This package provides a framework for implementing
+statically sized arrays in Julia, using the abstract type
+@code{StaticArray{Size,T,N} <: AbstractArray{T,N}}.  Subtypes of
+@code{StaticArray} will provide fast implementations of common array and
+linear algebra operations.")
+    (license license:expat)))
+
 (define-public julia-uris
   (package
     (name "julia-uris")
@@ -492,3 +1177,82 @@ utilities for Julia.")
 working with @acronym{URIs,Uniform Resource Identifiers}, as defined in RFC
 3986.")
     (license license:expat)))
+
+(define-public julia-unitful
+  (package
+    (name "julia-unitful")
+    (version "1.6.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/PainterQubits/Unitful.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0g5bhlvay9yk11c5dqwbzmb3q7lzj0cq5zchyk39d59fkvvmxvq3"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     `(("julia-constructionbase" ,julia-constructionbase)))
+    (home-page "https://painterqubits.github.io/Unitful.jl/stable/")
+    (synopsis "Physical units in Julia")
+    (description "This package supports SI units and also many other unit
+system.")
+    (license license:expat)))
+
+(define-public julia-zygoterules
+  (package
+    (name "julia-zygoterules")
+    (version "0.2.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/FluxML/ZygoteRules.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "07i2mf6rr5b8i6l82qgwl5arsb5pwyyzyfasgnszhdqllk9501bs"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     `(("julia-macrotools" ,julia-macrotools)))
+    (home-page "https://github.com/FluxML/ZygoteRules.jl")
+    (synopsis "Add minimal custom gradients to Zygote")
+    (description "Minimal package which enables to add custom gradients to
+Zygote, without depending on Zygote itself.")
+    (license license:expat)))
+
+(define-public julia-zygote
+  (package
+    (name "julia-zygote")
+    (version "0.6.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/FluxML/Zygote.jl")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1h2ph0lsisbkh8y4xgwzgw9p5zi243q8zzp5gfh3zw9pzkx6a1rf"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:tests? #f))                    ;require CUDA, not packaged yet
+    (propagated-inputs
+     `(("julia-abstractffs" ,julia-abstractffts)
+       ("julia-chainrules" ,julia-chainrules)
+       ("julia-diffrules" ,julia-diffrules)
+       ("julia-fillarrays" ,julia-fillarrays)
+       ("julia-forwarddiff" ,julia-forwarddiff)
+       ("julia-irtools" ,julia-irtools)
+       ("julia-macrotools" ,julia-macrotools)
+       ("julia-nanmath" ,julia-nanmath)
+       ("julia-requires" ,julia-requires)
+       ("julia-specialfunctions" ,julia-specialfunctions)
+       ("julia-zygote-rules" ,julia-zygoterules)))
+    (home-page "https://fluxml.ai/Zygote.jl")
+    (synopsis "Automatic differentiation in Julia")
+    (description "Zygote provides source-to-source automatic
+differentiation (AD) in Julia, and is the next-generation AD system for the
+Flux differentiable programming framework.")
+    (license license:expat)))
diff --git a/gnu/packages/jupyter.scm b/gnu/packages/jupyter.scm
index f826ebd171..52869dbeeb 100644
--- a/gnu/packages/jupyter.scm
+++ b/gnu/packages/jupyter.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,9 +30,12 @@
   #:use-module (gnu packages networking)
   #: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 time)
-  #:use-module (gnu packages tls))
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages xml))
 
 (define-public python-jupyter-protocol
   (package
@@ -184,3 +188,125 @@ Several Jupyter kernels are built upon @code{xeus}, such as @code{xeus-cling},
 a kernel for the C++ programming language, and @code{xeus-python}, an
 alternative Python kernel for Jupyter.")
     (license license:bsd-3)))
+
+(define-public python-jupyterlab-pygments
+  (package
+    (name "python-jupyterlab-pygments")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "jupyterlab_pygments" version))
+       (sha256
+        (base32
+         "0ij14mmnc39nmf84i0av6j9glazjic7wzv1qyhr0j5966s3s1kfg"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #false)) ; there are no tests
+    (propagated-inputs
+     `(("python-pygments" ,python-pygments)))
+    (home-page "https://jupyter.org")
+    (synopsis "Pygments theme using JupyterLab CSS variables")
+    (description
+     "This package contains a syntax coloring theme for pygments making use of
+the JupyterLab CSS variables.")
+    (license license:bsd-3)))
+
+(define-public python-jupyter-packaging
+  (package
+    (name "python-jupyter-packaging")
+    (version "0.9.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "jupyter_packaging" version))
+       (sha256
+        (base32
+         "0r015c0m713d19asmpimsw6bk2sqv2lpd2nccgjzjdj5h1crg0bg"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-deprecation" ,python-deprecation)
+       ("python-packaging" ,python-packaging)
+       ("python-setuptools" ,python-setuptools)
+       ("python-tomlkit" ,python-tomlkit)
+       ("python-wheel" ,python-wheel)))
+    (native-inputs
+     `(("python-pypa-build" ,python-pypa-build)
+       ("python-coverage" ,python-coverage)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-cov" ,python-pytest-cov)
+       ("python-pytest-mock" ,python-pytest-mock)))
+    (home-page "https://jupyter.org")
+    (synopsis "Jupyter packaging utilities")
+    (description "This package provides tools to help build and install
+Jupyter Python packages that require a pre-build step that may include
+JavaScript build steps.")
+    (license license:bsd-3)))
+
+(define-public python-jupyterlab-widgets
+  (package
+    (name "python-jupyterlab-widgets")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "jupyterlab_widgets" version))
+       (sha256
+        (base32
+         "0y7vhhas3qndiypcpcfnhrj9n92v2w4hdc86nn620s9h9nl2j6jw"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-jupyter-packaging" ,python-jupyter-packaging)
+       ("python-setuptools" ,python-setuptools)))
+    (home-page "https://github.com/jupyter-widgets/ipywidgets")
+    (synopsis "Interactive widgets for Jupyter Notebooks")
+    (description "ipywidgets, also known as jupyter-widgets or simply widgets,
+are interactive HTML widgets for Jupyter notebooks and the IPython kernel.")
+    (license license:bsd-3)))
+
+(define-public python-nbclient
+  (package
+    (name "python-nbclient")
+    (version "0.5.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "nbclient" version))
+       (sha256
+        (base32
+         "172q4r6mq0lg394di0pc6ipvniy14jg38wkdsj48r366609jf5yv"))))
+    (build-system python-build-system)
+    ;; Tests require a kernel via python-ipykernel, and also tools from
+    ;; nbconvert.
+    (arguments '(#:tests? #false))
+    (propagated-inputs
+     `(("python-async-generator" ,python-async-generator)
+       ("python-jupyter-client" ,python-jupyter-client)
+       ("python-nbformat" ,python-nbformat)
+       ("python-nest-asyncio" ,python-nest-asyncio)
+       ("python-traitlets" ,python-traitlets)))
+    (native-inputs
+     `(("python-black" ,python-black)
+       ("python-bumpversion" ,python-bumpversion)
+       ("python-check-manifest" ,python-check-manifest)
+       ("python-codecov" ,python-codecov)
+       ("python-coverage" ,python-coverage)
+       ("python-flake8" ,python-flake8)
+       ;; ("python-ipykernel" ,python-ipykernel)
+       ;; ("python-ipython" ,python-ipython)
+       ;; ("python-ipywidgets" ,python-ipywidgets)
+       ("python-mypy" ,python-mypy)
+       ("python-pip" ,python-pip)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-cov" ,python-pytest-cov)
+       ("python-setuptools" ,python-setuptools)
+       ("python-testpath" ,python-testpath)
+       ("python-tox" ,python-tox)
+       ("python-twine" ,python-twine)
+       ("python-wheel" ,python-wheel)
+       ("python-xmltodict" ,python-xmltodict)))
+    (home-page "https://jupyter.org")
+    (synopsis "Client library for executing notebooks")
+    (description
+     "This package provides a client library for executing notebooks. Formerly
+nbconvert's @code{ExecutePreprocessor.}")
+    (license license:bsd-3)))
diff --git a/gnu/packages/kde-pim.scm b/gnu/packages/kde-pim.scm
index d790e94c87..74e8bdb8fd 100644
--- a/gnu/packages/kde-pim.scm
+++ b/gnu/packages/kde-pim.scm
@@ -1112,7 +1112,7 @@ and retrieving certificates from LDAP servers.")
     (synopsis "Full featured graphical email client")
     (description "KMail supports multiple accounts, mail filtering and email
 encryption.  The program let you configure your workflow and it has good
-integration into KDE (Plasma Desktop) but is also useable with other Desktop
+integration into KDE (Plasma Desktop) but is also usable with other Desktop
 Environments.
 
 KMail is the email component of Kontact, the integrated personal information
diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm
index 213def42e3..4a989b32dd 100644
--- a/gnu/packages/kde.scm
+++ b/gnu/packages/kde.scm
@@ -13,6 +13,7 @@
 ;;; Copyright © 2020 Prafulla Giri <pratheblackdiamond@gmail.com>
 ;;; Copyright © 2020 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 Alexandros Theodotou <alex@zrythm.org>
+;;; Copyright © 2021 la snesne <lasnesne@lagunposprasihopre.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -458,7 +459,7 @@ illustrate project schedules.")
 (define-public krita
   (package
     (name "krita")
-    (version "4.4.2")
+    (version "4.4.3")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -466,7 +467,7 @@ illustrate project schedules.")
                     "/krita-" version ".tar.gz"))
               (sha256
                (base32
-                "14lprcv7xw6r19bmylcz4c1p1jfazmza2b4m48f3x7vmdv2sx5ln"))))
+                "0rwghzci2wn2jmisvnzs23yxc2z3d4dcx2qbbhcvjyi3q8ij61nl"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f
diff --git a/gnu/packages/language.scm b/gnu/packages/language.scm
index d4b9b8d4cb..55a1b72d74 100644
--- a/gnu/packages/language.scm
+++ b/gnu/packages/language.scm
@@ -170,7 +170,7 @@
        ("gobject-introspection" ,gobject-introspection)
        ("gtk+-2:bin" ,gtk+-2 "bin")
        ("gtk+:bin" ,gtk+ "bin")
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("intltool" ,intltool)
        ("libtool" ,libtool)
        ("perl" ,perl)
@@ -197,7 +197,7 @@
     (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, ...).")
+focuses especially on Korean input (Hangul, Hanja, ...).")
     (home-page "https://github.com/hamonikr/nimf/")
     (license license:lgpl3+)))
 
diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scm
index 147e25303b..098fd0b9ba 100644
--- a/gnu/packages/libevent.scm
+++ b/gnu/packages/libevent.scm
@@ -135,6 +135,22 @@ resolution, asynchronous file system operations, and threading primitives.")
     ;; details.  Documentation is CC-BY 4.0 as of 1.12.0; see 'LICENSE-docs'.
     (license (list expat cc-by4.0))))
 
+(define-public libuv-for-node
+  ;; When upgrading Node, also upgrade this. Get the version from
+  ;; https://github.com/nodejs/node/blob/master/deps/uv/include/uv/version.h
+  (package
+    (inherit libuv)
+    (name "libuv")
+    (version "1.40.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://dist.libuv.org/dist/v" version
+                                  "/libuv-v" version ".tar.gz"))
+              (sha256
+               (base32
+                "1551k3ab27vbg9517l9b4iqbramwxdkwgpf53knas05cbfwhvab1"))))
+    (properties '((hidden? . #t)))))
+
 (define-public perl-anyevent
   (package
     (name "perl-anyevent")
diff --git a/gnu/packages/libffi.scm b/gnu/packages/libffi.scm
index 72263696f9..b0a66c11c5 100644
--- a/gnu/packages/libffi.scm
+++ b/gnu/packages/libffi.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2015, 2019 Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>
 ;;; Copyright © 2016, 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
@@ -73,7 +73,8 @@ to call code written in another language.  The libffi library really only
 provides the lowest, machine dependent layer of a fully featured foreign
 function interface.  A layer must exist above libffi that handles type
 conversions for values passed between the two languages.")
-    (home-page "http://sources.redhat.com/libffi/")
+    (home-page "http://www.sourceware.org/libffi/")
+    (properties `((release-monitoring-url . ,home-page)))
 
     ;; See <https://github.com/atgreen/libffi/blob/master/LICENSE>.
     (license expat)))
diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index a8c2ac5c4b..39867a1994 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -714,14 +714,14 @@ text documents, vector drawings, presentations and spreadsheets.")
 (define-public libmwaw
   (package
     (name "libmwaw")
-    (version "0.3.17")
+    (version "0.3.18")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://sourceforge/libmwaw/libmwaw/libmwaw-"
                           version "/libmwaw-" version ".tar.xz"))
       (sha256
-       (base32 "074ipcq9w7jbd5x316dzclddgia2ydw098ph9d7p3d713pmkf5cf"))))
+       (base32 "03qyxp8hkcc7jcwyq0v0y2diqsvib060pg7y9zk0n07qh0b0apgw"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("doxygen" ,doxygen)
diff --git a/gnu/packages/linphone.scm b/gnu/packages/linphone.scm
index 382b3a912b..deda49a4bc 100644
--- a/gnu/packages/linphone.scm
+++ b/gnu/packages/linphone.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;;
-;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Raghav Gururajan <raghavgururajan@disroot.org>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -23,8 +23,12 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages audio)
+  #:use-module (gnu packages avahi)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages cpp)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages crypto)
+  #:use-module (gnu packages databases)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
@@ -36,7 +40,9 @@
   #:use-module (gnu packages image)
   #: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 pulseaudio)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
@@ -127,46 +133,107 @@ writing, administering, and running unit tests in C.")
 (define-public bctoolbox
   (package
     (name "bctoolbox")
-    (version "0.6.0")
+    (version "4.4.34")
     (source
      (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://www.linphone.org/releases/sources/" name
-                       "/" name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.linphone.org/BC/public/bctoolbox.git")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1a1i70pb4hhnykkwyhhc7fv67q556l8kprny8xzgfqpj1nby2ms6"))))
+        (base32 "0bfswwvvdshaahg4jd2j10f0sci8809s4khajd0m6b059zwc7y25"))))
     (build-system cmake-build-system)
+    (outputs '("out" "debug"))
     (arguments
-     '(#:tests? #f                      ; No test target
-       #:configure-flags
-       (list "-DENABLE_STATIC=OFF")))   ; Not required
+     `(#:configure-flags '("-DENABLE_STATIC=OFF")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-cmake
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Fix decaf dependency (see:
+             ;; https://gitlab.linphone.org/BC/public/bctoolbox/-/issues/3).
+             (let* ((decaf (assoc-ref inputs "decaf")))
+               (substitute* (find-files "." "CMakeLists.txt")
+                 (("find_package\\(Decaf CONFIG\\)")
+                  "set(DECAF_FOUND 1)")
+                 (("\\$\\{DECAF_INCLUDE_DIRS\\}")
+                  (string-append decaf "/include/decaf"))
+                 (("\\$\\{DECAF_TARGETNAME\\}")
+                  "decaf")))))
+         (add-after 'unpack 'skip-problematic-tests
+           (lambda _
+             ;; The following test relies on networking; disable it.
+             (substitute* "tester/port.c"
+               (("[ \t]*TEST_NO_TAG.*bctbx_addrinfo_sort_test\\)")
+                ""))))
+         (add-after 'unpack 'fix-installed-resource-directory-detection
+           (lambda _
+             ;; There's some broken logic in tester.c that checks if CWD, or
+             ;; if its parent exist, and if so, sets the prefix where the test
+             ;; resources are looked up to; disable it (see:
+             ;; https://gitlab.linphone.org/BC/public/bctoolbox/-/issues/4).
+             (substitute* "src/tester.c"
+               (("if \\(file_exists\\(\".\"\\)\\)")
+                "if (NULL)")
+               (("if \\(file_exists\\(\"..\"\\)\\)")
+                "if (NULL)"))))
+         (replace 'check
+           (lambda _
+             (with-directory-excursion "tester"
+               (invoke "./bctoolbox_tester")))))))
     (inputs
      `(("bcunit" ,bcunit)
+       ("decaf" ,libdecaf)
        ("mbedtls" ,mbedtls-apache)))
     (synopsis "Belledonne Communications Tool Box")
     (description "BcToolBox is an utilities library used by Belledonne
 Communications software like belle-sip, mediastreamer2 and linphone.")
     (home-page "https://gitlab.linphone.org/BC/public/bctoolbox")
-    (license license:gpl2+)))
+    (license license:gpl3+)))
 
 (define-public belr
   (package
     (name "belr")
-    (version "0.1.3")
+    (version "4.4.34")
     (source
      (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://www.linphone.org/releases/sources/" name
-                       "/" name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.linphone.org/BC/public/belr.git")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1fwv2cg3qy9vdc7dimcda7nqcqc1h2cdd7ikhk7ng7q4ys8m96c1"))))
+        (base32 "0w2canwwm0qb99whnangvaybvjzq8xg6vksqxykgr8fbx7clw03h"))))
     (build-system cmake-build-system)
+    (outputs '("out" "debug" "tester"))
     (arguments
-     `(#:tests? #f                      ; No test target
-       #:configure-flags
-       (list "-DENABLE_STATIC=OFF")))   ; Not required
+     `(#:configure-flags '("-DENABLE_STATIC=OFF")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'check)                ;moved after the install phase
+         (add-after 'install 'check
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((tester (assoc-ref outputs "tester"))
+                    (belr_tester (string-append tester "/bin/belr_tester"))
+                    (tester-share (string-append tester "/share/belr_tester")))
+               (invoke belr_tester))))
+         (add-after 'install 'move-tester
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (tester (assoc-ref outputs "tester")))
+               (for-each mkdir-p
+                         (list (string-append tester "/bin")
+                               (string-append tester "/share")))
+               (rename-file
+                (string-append out "/bin/belr_tester")
+                (string-append tester "/bin/belr_tester"))
+               (rename-file
+                (string-append out "/share/belr-tester")
+                ;; The detect_res_prefix procedure in bctoolbox's tester.c
+                ;; resolves the resource path based on the executable path and
+                ;; name, so have it match.
+                (string-append tester "/share/belr_tester"))))))))
     (inputs
      `(("bctoolbox" ,bctoolbox)))
     (synopsis "Belledonne Communications Language Recognition Library")
@@ -180,20 +247,51 @@ IETF.")
 (define-public belcard
   (package
     (name "belcard")
-    (version "1.0.2")
+    (version "4.4.34")
     (source
      (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://www.linphone.org/releases/sources/" name
-                       "/" name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.linphone.org/BC/public/belcard.git")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "0iiyrll1shnbb0561pkvdqcmx9b2cdr76xpsbaqdirc3s4xzcl0k"))))
+        (base32 "16x2xp8d0a115132zhy1kpxkyj86ia7vrsnpjdg78fnbvmvysc8m"))))
     (build-system cmake-build-system)
+    (outputs '("out" "debug" "tester"))
     (arguments
-     `(#:tests? #f                      ; No test target
-       #:configure-flags
-       (list "-DENABLE_STATIC=OFF")))   ; Not required
+     `(#:tests? #t
+       #:configure-flags '("-DENABLE_STATIC=OFF")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-vcard-grammar-location
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (vcard-grammar
+                     (string-append out "/share/belr/grammars/vcard_grammar")))
+               (substitute* "include/belcard/vcard_grammar.hpp"
+                 (("define VCARD_GRAMMAR \"vcard_grammar\"")
+                  (format #f "define VCARD_GRAMMAR ~s" vcard-grammar))))))
+         (add-after 'install 'install-tester
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (tester (assoc-ref outputs "tester"))
+                   (test-name (string-append ,name "_tester")))
+               (for-each mkdir-p
+                         (list (string-append tester "/bin")
+                               (string-append tester "/share")))
+               (rename-file (string-append out "/bin/" test-name)
+                            (string-append tester "/bin/" test-name))
+               (rename-file (string-append out "/share/" test-name)
+                            (string-append tester "/share/" test-name)))))
+         (delete 'check)
+         (add-after 'install-tester 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (let* ((tester (assoc-ref outputs "tester"))
+                      (belcard_tester (string-append tester
+                                                     "/bin/belcard_tester")))
+                 (invoke belcard_tester))))))))
     (inputs
      `(("bctoolbox" ,bctoolbox)
        ("belr" ,belr)))
@@ -209,31 +307,26 @@ format.")
     (version "0.23")
     (source
      (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://www.linphone.org/releases/sources/" name
-                       "/" name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.linphone.org/BC/public/bcmatroska2.git")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1a0vlk4fhh189pfzrwbc3xbc5vyx6cnxy642d1h40045jz9y4h15"))))
+        (base32 "1avl9w18kh4dxm3g8j0bkw39bksd7bz3nfxvyibqqnz63ds8vfi2"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:tests? #f                      ; No test target
-       #:configure-flags
-       (list
-        "-DENABLE_STATIC=NO")))         ; Not required
+     `(#:tests? #f                                     ; No test target
+       #:configure-flags (list "-DENABLE_STATIC=NO"))) ; Not required
     (synopsis "Belledonne Communications Media Container")
     (description "BcMatroska is a free and open standard multi-media container
 format.  It can hold an unlimited number of video, audio, picture, or subtitle
-tracks in one file. ")
+tracks in one file.  This project provides a convenient distribution of the
+Matroska multimedia container format.")
     (home-page "https://gitlab.linphone.org/BC/public/bcmatroska2")
-    (license
-     (list
-      ;; For Core C and LibEBML2.
-      ;; https://www.matroska.org/node/47
-      license:bsd-4
-      ;; For LibMatroska2.
-      ;; https://www.matroska.org/node/47
-      license:lgpl2.1+))))
+    (license (list license:gpl2+        ;for this package (build system files)
+                   license:bsd-4        ;for Core C and LibEBML2
+                   license:lgpl2.1+)))) ;for LibMatroska2
 
 (define-public bcg729
   (package
@@ -243,42 +336,111 @@ tracks in one file. ")
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "git://git.linphone.org/bcg729.git")
+             (url "git://git.linphone.org/bcg729")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
         (base32 "1hal6b3w6f8y5r1wa0xzj8sj2jjndypaxyw62q50p63garp2h739"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:tests? #f                      ; No test target
-       #:configure-flags
-       (list "-DENABLE_STATIC=NO")))    ; Not required
+     `(#:configure-flags (list "-DENABLE_STATIC=NO"
+                               "-DENABLE_TESTS=YES")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'copy-inputs
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((test-patterns (assoc-ref inputs "test-patterns"))
+                   (dest (string-append "test/bcg729-patterns.zip")))
+               (copy-recursively test-patterns dest))))
+         (replace 'check
+           (lambda _
+             (with-directory-excursion "test"
+               (invoke "unzip" "bcg729-patterns.zip")
+               (for-each
+                (lambda (test-name)
+                  (invoke "./testCampaign" "-s" test-name))
+                (list "fixedCodebookSearch"
+                      "postProcessing"
+                      "adaptativeCodebookSearch"
+                      "computeLP"
+                      "computeAdaptativeCodebookGain"
+                      "postFilter"
+                      "decoder"
+                      "LPSynthesisFilter"
+                      "decodeLSP"
+                      ;; "encoder"
+                      ;; "LSPQuantization"
+                      "preProcessing"
+                      "decodeFixedCodeVector"
+                      "CNGdecoder"
+                      ;; "LP2LSPConversion"
+                      "gainQuantization"
+                      "findOpenLoopPitchDelay"
+                      "decodeGains"
+                      "computeWeightedSpeech"
+                      "interpolateqLSPAndConvert2LP"
+                      "decodeAdaptativeCodeVector"))))))))
+    (native-inputs
+     `(("perl" ,perl)
+       ("test-patterns"
+        ,(origin
+           (method url-fetch)
+           (uri (string-append "http://www.belledonne-communications.com/"
+                               "bc-downloads/bcg729-patterns.zip"))
+           (sha256
+            (base32 "1kivarhh3izrl9sg0szs6x6pbq2ap0y6xsraw0gbgspi4gnfihrh"))))
+       ("unzip" ,unzip)))
     (synopsis "Belledonne Communications G729 Codec")
     (description "BcG729 is an implementation of both encoder and decoder of
 the ITU G729 speech codec.  The library written in C 99 is fully portable and
 can be executed on many platforms including both ARM and x86 processors.  It
 supports concurrent channels encoding and decoding for multi call application
 such as conferencing.")
-    (home-page "https://gitlab.linphone.org/BC/public/belcard")
-    (license license:gpl2+)))
+    (home-page "https://linphone.org/technical-corner/bcg729")
+    (license license:gpl3+)))
 
 (define-public ortp
   (package
     (name "ortp")
-    (version "1.0.2")
+    (version "4.4.34")
     (source
      (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://www.linphone.org/releases/sources/" name
-                       "/" name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.linphone.org/BC/public/ortp.git")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "016qg0lmdgmqh2kv19w9qhi4kkiyi5h1xp35g2s65b1j8ccm25d5"))))
+        (base32 "1r1kvjzyfvkf66in4p51wi87balzg3sw3aq6r4xr609mz86spi5m"))))
     (build-system cmake-build-system)
+    (outputs '("out""tester"
+               "doc"))                  ;1.5 MiB of HTML doc
     (arguments
-     `(#:tests? #f                      ; No test target
-       #:configure-flags
-       (list "-DENABLE_STATIC=NO")))    ; Not required
+     `(#:tests? #f                      ;requires networking
+       #:configure-flags (list "-DENABLE_STATIC=NO"
+                               "-DENABLE_TESTS=YES")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-version-strings
+           ;; See: https://gitlab.linphone.org/BC/public/ortp/-/issues/5.
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("VERSION [0-9]+\\.[0-9]+\\.[0-9]+")
+                (string-append "VERSION " ,version))
+               (("\\$\\{ORTP_DOC_VERSION\\}")
+                ,version))))
+         (add-after 'install 'separate-outputs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc"))
+                    (doc-src (string-append out "/share/doc/ortp-" ,version))
+                    (doc-dest (string-append doc "/share/doc/ortp-" ,version))
+                    (tester (assoc-ref outputs "tester")))
+               (for-each mkdir-p (list (string-append doc "/share/doc")
+                                       (string-append tester "/bin")))
+               (rename-file doc-src doc-dest)
+               (rename-file (string-append out "/bin")
+                            (string-append tester "/bin"))))))))
     (native-inputs
      `(("dot" ,graphviz)
        ("doxygen" ,doxygen)))
@@ -287,26 +449,28 @@ such as conferencing.")
     (synopsis "Belledonne Communications RTP Library")
     (description "oRTP is a C library implementing the RTP protocol.  It
 implements the RFC 3550 standard.")
-    (home-page "https://gitlab.linphone.org/BC/public/ortp")
-    (license license:gpl2+)))
+    (home-page "https://linphone.org/technical-corner/ortp")
+    (license license:gpl3+)))
 
 (define-public bzrtp
   (package
     (name "bzrtp")
-    (version "1.0.6")
+    (version "4.4.34")
     (source
      (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://www.linphone.org/releases/sources/" name
-                       "/" name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.linphone.org/BC/public/bzrtp")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "12y0kkh90pixaaxfyx26ca2brhy6nw57fsypp6vh8jk1illv0j5z"))))
+        (base32 "1yjmsbqmymzl4r7sba6w4a2yld8m6hzafr6jf7sj0syhwpnc3zv6"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:tests? #f                      ; No test target
-       #:configure-flags
-       (list "-DENABLE_STATIC=NO")))    ; Not required
+     `(#:configure-flags
+       (list
+        "-DENABLE_STATIC=NO"
+        "-DENABLE_TESTS=YES")))
     (inputs
      `(("bctoolbox" ,bctoolbox)
        ("sqlite3" ,sqlite)
@@ -316,100 +480,171 @@ implements the RFC 3550 standard.")
 written in C.  It is fully portable and can be executed on many platforms
 including both ARM and x86.")
     (home-page "https://gitlab.linphone.org/BC/public/bzrtp")
-    (license license:gpl2+)))
+    (license license:gpl3+)))
 
 (define-public belle-sip
   (package
     (name "belle-sip")
-    (version "1.6.3")
+    (version "4.4.34")
     (source
      (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://www.linphone.org/releases/sources/" name
-                       "/" name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.linphone.org/BC/public/belle-sip.git")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "0s55kggmgxap54dkw5856bgk4xg7yvbzialpxnjm0zhpic3hff1z"))))
+        (base32 "1kknnlczq7dpqaj1dwxvy092dzrqjy11ndkv90rqwmdryigkjk6z"))))
     (build-system cmake-build-system)
+    (outputs '("out" "tester"))
     (arguments
-     `(#:tests? #f                      ; Requires network access
-       #:configure-flags
-       (list "-DENABLE_STATIC=NO")      ; Not required
+     `(#:configure-flags (list "-DENABLE_STATIC=NO"
+                               "-DENABLE_MDNS=ON")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Fix mDNS dependency.
+             (let* ((avahi (assoc-ref inputs "avahi")))
+               (substitute* (find-files "." "CMakeLists.txt")
+                 (("find_package\\(DNSSD REQUIRED\\)")
+                  "set(DNSSD_FOUND 1)")
+                 (("\\$\\{DNSSD_INCLUDE_DIRS\\}")
+                  (string-append avahi "/include/avahi-compat-libdns_sd"))
+                 (("\\$\\{DNSSD_LIBRARIES\\}")
+                  "dns_sd")))
              (substitute* "src/CMakeLists.txt"
                ;; ANTLR would use multithreaded DFA generation otherwise,
                ;; which would not be reproducible.
-               (("-Xmultithreaded ") ""))
-             #t)))))
+               (("-Xmultithreaded ") ""))))
+         (delete 'check)                ;move after install
+         (add-after 'install 'separate-outputs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (tester (assoc-ref outputs "tester"))
+                    (tester-name "belle_sip_tester"))
+               (for-each mkdir-p (list (string-append tester "/bin")
+                                       (string-append tester "/share")))
+               (rename-file (string-append out "/bin")
+                            (string-append tester "/bin"))
+               (rename-file (string-append out "/share/" tester-name)
+                            (string-append tester "/share/" tester-name)))))
+         (add-after 'separate-outputs 'check
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((tester (string-append (assoc-ref outputs "tester")
+                                          "/bin/belle_sip_tester")))
+               (for-each (lambda (suite-name)
+                           (invoke tester "--suite" suite-name))
+                         (list "Object inheritance"
+                               "SIP URI"
+                               "FAST SIP URI"
+                               "FAST SIP URI 2"
+                               "Generic uri"
+                               "Headers"
+                               "Core"
+                               "SDP"
+                               ;;"Resolver"
+                               "Message"
+                               "Authentication helper"
+                               ;;"Register"
+                               ;;"Dialog"
+                               "Refresher"
+                               ;;"HTTP stack"
+                               "Object"))))))))
     (inputs
-     `(("antlr3" ,antlr3-3.3)
-       ("antlr3c" ,libantlr3c)
+     `(("avahi" ,avahi)
        ("bctoolbox" ,bctoolbox)
-       ("java" ,icedtea)
        ("zlib" ,zlib)))
     (synopsis "Belledonne Communications SIP Library")
     (description "Belle-sip is a modern library implementing SIP transport,
 transaction and dialog layers.  It is written in C, with an object-oriented
 API.  It also comprises a simple HTTP/HTTPS client implementation.")
-    (home-page "https://gitlab.linphone.org/BC/public/belle-sip")
-    (license license:gpl2+)))
+    (home-page "https://linphone.org/technical-corner/belle-sip")
+    (license license:gpl3+)))
 
 (define-public mediastreamer2
   (package
     (name "mediastreamer2")
-    (version "2.16.1")
+    (version "4.4.34")
     (source
      (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://www.linphone.org/releases/sources/"
-                       "mediastreamer/mediastreamer-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.linphone.org/BC/public/mediastreamer2.git")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "0whpqr69wz0pnzvragkpfblxhd0rds8k06c3mw5a0ag216a1yd9k"))
-       (patches (search-patches "mediastreamer2-srtp2.patch"))))
+        (base32 "0989h3d0h7qrx4kjx8gg09j8c5hvvi3h8qi1iq1dqbppwbaxbz8c"))))
     (outputs '("out" "doc" "tester"))
     (build-system cmake-build-system)
     (arguments
-     `(#:tests? #f                      ; No test target
-       #:configure-flags
-       (list "-DENABLE_STATIC=NO"      ; Not required
-             "-DENABLE_STRICT=NO"      ; Would otherwise treat warnings as err
-             "-DENABLE_BV16=NO"        ; Not available
-             "-DCMAKE_C_FLAGS=-DMS2_GIT_VERSION=\\\"unknown\\\""
-             "-DCMAKE_CXX_FLAGS=-DMS2_GIT_VERSION=\\\"unknown\\\"")
+     `(#:configure-flags (list "-DENABLE_STATIC=NO"
+                               "-DENABLE_PCAP=YES"
+                               ;; Do not fail on compile warnings.
+                               "-DENABLE_STRICT=NO"
+                               "-DENABLE_PORTAUDIO=YES"
+                               "-DENABLE_G729B_CNG=YES")
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'fix-version
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("VERSION [0-9]+\\.[0-9]+\\.[0-9]+")
+                (string-append "VERSION " ,version)))))
+         (add-after 'unpack 'patch-source
+           (lambda _
+             (substitute* "src/otherfilters/mspcapfileplayer.c"
+               (("O_BINARY") "L_INCR"))))
+         (add-before 'check 'pre-check
+           (lambda _
+             ;; Tests require a running X server.
+             (system "Xvfb :1 +extension GLX &")
+             (setenv "DISPLAY" ":1")
+             ;; Tests write to $HOME.
+             (setenv "HOME" (getenv "TEMP"))))
+         (delete 'check)                ;move after install
          (add-after 'install 'separate-outputs
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (doc (assoc-ref outputs "doc"))
                     (tester (assoc-ref outputs "tester"))
-                    (tester-name (string-append ,name "_tester")))
-               ;; Copy the tester executable.
-               (mkdir-p (string-append tester "/bin"))
+                    (tester-name (string-append ,name "_tester"))
+                    (doc (assoc-ref outputs "doc"))
+                    (doc-name (string-append ,name "-" ,version)))
+               (for-each mkdir-p
+                         (list (string-append tester "/bin")
+                               (string-append tester "/share")
+                               (string-append doc "/share/doc")))
+               ;; Move the tester executable.
                (rename-file (string-append out "/bin/" tester-name)
                             (string-append tester "/bin/" tester-name))
-               ;; Copy the tester data files.
-               (copy-recursively (string-append out "/share/" tester-name)
-                                 (string-append tester "/share/" tester-name))
-               (delete-file-recursively (string-append out "/share/"
-                                                       tester-name))
-               ;; Copy the HTML documentation.
-               (copy-recursively (string-append out "/share/doc/"
-                                                ,name "-" ,version "/html")
-                                 (string-append doc "/share/doc/"
-                                                ,name "-" ,version "/html"))
-               (delete-file-recursively (string-append out "/share/doc/"
-                                                       ,name "-" ,version
-                                                       "/html"))
-               #t))))))
+               ;; Move the tester data files.
+               (rename-file (string-append out "/share/" tester-name)
+                            (string-append tester "/share/" tester-name))
+               ;; Move the HTML documentation.
+               (rename-file (string-append out "/share/doc/" doc-name)
+                            (string-append doc "/share/doc/" doc-name)))))
+         (add-after 'separate-outputs 'check
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((tester (string-append  (assoc-ref outputs "tester")
+                                           "/bin/mediastreamer2_tester")))
+               (for-each (lambda (suite-name)
+                           (invoke tester "--suite" suite-name))
+                         ;; Some tests fail, due to requiring access to the
+                         ;; sound card or the network.
+                           (list "Basic Audio"
+                                 ;; "Sound Card"
+                                 ;; "AdaptiveAlgorithm"
+                                 ;; "AudioStream"
+                                 ;; "VideoStream"
+                                 "H26x Tools"
+                                 "Framework"
+                                 ;; "Player"
+                                 "TextStream"))))))))
     (native-inputs
      `(("dot" ,graphviz)
        ("doxygen" ,doxygen)
-       ("python" ,python)))
+       ("python" ,python-wrapper)
+       ("xorg-server" ,xorg-server-for-tests)))
     (inputs
      `(("alsa" ,alsa-lib)
        ("bcg729" ,bcg729)
@@ -442,101 +677,120 @@ API.  It also comprises a simple HTTP/HTTPS client implementation.")
 for telephony applications.  This media processing and streaming toolkit is
 responsible for receiving and sending all multimedia streams in Linphone,
 including media capture, encoding and decoding, and rendering.")
-    (home-page "https://gitlab.linphone.org/BC/public/mediastreamer2")
-    (license license:gpl2+)))
+    (home-page "https://linphone.org/technical-corner/mediastreamer2")
+    (license license:gpl3+)))
+
+(define-public lime
+  (package
+    (name "lime")
+    (version "4.4.34")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.linphone.org/BC/public/lime.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "14jg1zisjbzflw3scfqdbwy48wq3cp93l867vigb8l40lkc6n26z"))))
+    (build-system cmake-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:configure-flags (list "-DENABLE_STATIC=NO"
+                               "-DENABLE_C_INTERFACE=YES")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-source
+           (lambda _
+             ;; Disable tests that require networking.
+             (substitute* "tester/CMakeLists.txt"
+               (("add_test\\(?.*\"Hello World\"\\)") "")
+               (("add_test\\(?.*\"lime\"\\)") "")
+               (("add_test\\(?.*\"FFI\"\\)") ""))))
+         (add-after 'build 'build-doc
+           (lambda _
+             (invoke "make" "doc")))
+         (add-after 'install 'install-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((doc (assoc-ref outputs "doc"))
+                    (dir (string-append doc "/share/doc"))
+                    (dest (string-append dir "/" ,name "-" ,version)))
+               (mkdir-p dest)
+               (copy-recursively "doc" dest)))))))
+    (native-inputs
+     `(("dot" ,graphviz)
+       ("doxygen" ,doxygen)))
+    (inputs
+     `(("bctoolbox" ,bctoolbox)
+       ("belle-sip" ,belle-sip)
+       ("soci" ,soci)))
+    (synopsis "Belledonne Communications Encryption Library")
+    (description "LIME is an encryption library for one-to-one and group
+instant messaging, allowing users to exchange messages privately and
+asynchronously.  It supports multiple devices per user and multiple users per
+device.")
+    (home-page "https://linphone.org/technical-corner/lime")
+    (license license:gpl3+)))
 
 (define-public liblinphone
   (package
     (name "liblinphone")
-    (version "3.12.0")
+    (version "4.4.34")
     (source
      (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://www.linphone.org/releases/sources/linphone"
-                       "/linphone-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.linphone.org/BC/public/liblinphone.git")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "0phhkx55xdyg28d4wn8l8q4yvsmdgzmjiw584d4s190sq1azm91x"))))
-    (outputs '("out" "doc" "tester"))
+        (base32 "1lwabr93jw24y04pdqnw9dgg8jb3lzfplyx19f83jgp9dj8kmfq9"))))
+    (outputs '("out" "tester"))
     (build-system cmake-build-system)
     (arguments
-     `(#:tests? #f                      ; No test target
-       #:configure-flags
-       (list (string-append "-DGTK2_GDKCONFIG_INCLUDE_DIR="
-                            (string-append (assoc-ref %build-inputs "gtk2")
-                                           "/lib/gtk-2.0/include"))
-             (string-append "-DGTK2_GLIBCONFIG_INCLUDE_DIR="
-                            (string-append (assoc-ref %build-inputs "glib")
-                                           "/lib/glib-2.0/include"))
-             "-DENABLE_STATIC=NO"       ; Not required
-             "-DENABLE_STRICT=NO"
-             "-DENABLE_GTK_UI=YES")     ; for legacy UI
-       #:imported-modules (,@%cmake-build-system-modules
-                           (guix build glib-or-gtk-build-system))
-       #:modules ((guix build cmake-build-system)
-                  ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
-                  (guix build utils))
+     `(#:tests? #f                      ; Tests require networking
+       #:configure-flags (list "-DENABLE_STATIC=NO"
+                               "-DENABLE_DOC=NO" ;requires unpackaged javasphinx
+                               "-DENABLE_LDAP=YES")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch
-           (lambda _
-             (substitute* "gtk/main.c"
-               (("#include \"liblinphone_gitversion.h\"")
-                ""))
-             #t))
          (add-after 'install 'separate-outputs
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (doc (assoc-ref outputs "doc"))
                     (tester (assoc-ref outputs "tester"))
                     (tester-name (string-append ,name "_tester")))
-               ;; Copy the tester executable.
-               (mkdir-p (string-append tester "/bin"))
+               (for-each mkdir-p
+                         (list (string-append tester "/bin")
+                               (string-append tester "/share")))
                (rename-file (string-append out "/bin/" tester-name)
                             (string-append tester "/bin/" tester-name))
-               ;; Copy the tester data files.
-               (mkdir-p (string-append tester "/share/"))
+               (rename-file (string-append out "/bin/groupchat_benchmark")
+                            (string-append tester "/bin/groupchat_benchmark"))
                (rename-file (string-append out "/share/" tester-name)
-                            (string-append tester "/share/" tester-name))
-               ;; Copy the HTML and XML documentation.
-               (copy-recursively
-                (string-append out "/share/doc/linphone-" ,version)
-                (string-append doc "/share/doc/" ,name "-" ,version))
-               (delete-file-recursively
-                (string-append out "/share/doc/linphone-" ,version))
-               #t)))
-         (add-after 'install 'install-man-pages
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (man (string-append out "/share/man/man1")))
-               (for-each (lambda (file)
-                           (install-file file man))
-                         (find-files ".." ".*.1$"))
-               #t)))
-         (add-after 'separate-outputs '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)))))
+                            (string-append tester "/share/" tester-name))))))))
     (native-inputs
-     `(("gettext" ,gettext-minimal)
-       ("udev" ,eudev)                  ;for libudev.h
-       ;; For generating the C++ wrappers.
-       ("dot" ,graphviz)
+     `(("dot" ,graphviz)
        ("doxygen" ,doxygen)
-       ("python" ,python)
+       ("gettext" ,gettext-minimal)
+       ("perl" ,perl)
+       ("python" ,python-wrapper)
        ("pystache" ,python-pystache)
-       ("six" ,python-six)))
+       ("six" ,python-six)
+       ("udev" ,eudev)))
     (inputs
      `(("bctoolbox" ,bctoolbox)
        ("belcard" ,belcard)
        ("bellesip" ,belle-sip)
+       ("belr" ,belr)
        ("bzrtp" ,bzrtp)
        ("iconv" ,libiconv)
-       ("glib" ,glib)
-       ("gtk2" ,gtk+-2)
+       ("ldap" ,openldap)
+       ("libxsd" ,xsd)
+       ("lime" ,lime)
        ("mediastreamer2" ,mediastreamer2)
        ("notify" ,libnotify)
        ("ortp" ,ortp)
+       ("soci" ,soci)
        ("sqlite" ,sqlite)
        ("xml2" ,libxml2)
        ("zlib" ,zlib)))
@@ -546,58 +800,66 @@ all calling and instant messaging features into an unified
 easy-to-use API.  It is the cross-platform VoIP library on which the
 Linphone application is based on, and that anyone can use to add audio
 and video calls or instant messaging capabilities to an application.")
-    (home-page "https://gitlab.linphone.org/BC/public/liblinphone")
-    (license license:gpl2+)))
+    (home-page "https://linphone.org/technical-corner/liblinphone")
+    (license license:gpl3+)))
 
-(define-public linphoneqt
+(define-public linphone-desktop
   (package
-    (name "linphoneqt")
-    (version "4.1.1")
+    (name "linphone-desktop")
+    (version "4.2.5")
     (source
      (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://www.linphone.org/releases/sources/" name
-                       "/" name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://gitlab.linphone.org/BC/public/linphone-desktop")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1g2zrr9li0g1hgs6vys06vr98h5dx36z22hx7a6ry231536c002a"))
-       (patches (search-patches "linphoneqt-tabbutton.patch"))))
+        (base32 "1gq4l9p21rbrcksa7fbkzn9fzbbynqmn6ni6lhnvzk359sb1xvbz"))
+       (patches (search-patches "linphone-desktop-without-sdk.patch"))))
     (build-system qt-build-system)
+    (outputs '("out" "debug"))
     (arguments
      `(#:tests? #f                      ; No test target
+       #:configure-flags (list "-DENABLE_UPDATE_CHECK=NO"
+                               "-DENABLE_DAEMON=YES"
+                               "-DENABLE_CONSOLE_UI=YES")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'fix-cmake-error
-           (lambda _
-             ;; This is fixed in commit efed2fd8 of the master branch.
-             (substitute* "CMakeLists.txt"
-               (("js)\\$\"")
-                "js$\""))
-             #t))
-         (add-after 'unpack 'set-version-string
+         (add-after 'unpack 'pre-configure
            (lambda _
-             (substitute* "src/app/AppController.cpp"
-               (("LINPHONE_QT_GIT_VERSION")
-                (format #f "~s" ,version)))
-             #t))
-         (add-after 'install 'extend-shared-resources
-           ;; Not using the FHS exposes an issue where the client refers to
-           ;; its own "share" directory, which lacks sound files installed by
-           ;; liblinphone.
+             (make-file-writable "linphone-app/linphoneqt_version.cmake")
+             (substitute* "linphone-app/linphoneqt_version.cmake"
+               (("\\$\\{GUIX-SET-VERSION\\}") ,version))))
+         (add-after 'install 'post-install
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((liblinphone (assoc-ref inputs "linphone"))
-                    (out (assoc-ref outputs "out")))
+             (let* ((out (assoc-ref outputs "out"))
+                    (liblinphone (assoc-ref inputs "liblinphone"))
+                    (grammar-dest (string-append out "/share/belr/grammars")))
+               ;; Remove unnecessary Qt configuration file.
+               (delete-file (string-append out "/bin/qt.conf"))
+               ;; Not using the FHS exposes an issue where the client
+               ;; refers to its own directories, which lacks files
+               ;; installed by the dependencies.
+               (symlink (string-append liblinphone "/lib")
+                        (string-append out "/lib"))
                (symlink (string-append liblinphone "/share/sounds")
                         (string-append out "/share/sounds"))
-               #t))))))
+               (symlink (string-append liblinphone "/share/linphone/rootca.pem")
+                        (string-append out "/share/linphone/rootca.pem"))
+               (mkdir-p (dirname grammar-dest))
+               (symlink (string-append liblinphone "/share/belr/grammars")
+                        grammar-dest)))))))
     (native-inputs
-     `(("qttools" ,qttools)))
+     `(("pkg-config" ,pkg-config)
+       ("qttools" ,qttools)))
     (inputs
      `(("bctoolbox" ,bctoolbox)
        ("belcard" ,belcard)
-       ("bellesip" ,belle-sip)
-       ("linphone" ,liblinphone)
+       ("belr" ,belr)
+       ("liblinphone" ,liblinphone)
        ("mediastreamer2" ,mediastreamer2)
+       ("ortp" ,ortp)
        ("qtbase" ,qtbase)
        ("qtdeclarative" ,qtdeclarative)
        ("qtgraphicaleffects" ,qtgraphicaleffects)
@@ -622,128 +884,155 @@ and video calls or instant messaging capabilities to an application.")
 @item Audio codecs: opus, speex, g711, g729, gsm, iLBC, g722, SILK, etc.
 @item Video codecs: VP8, H.264 and H.265 with resolutions up to 1080P, MPEG4
 @end itemize")
-    (home-page "https://gitlab.linphone.org/BC/public/linphone-desktop")
-    (license license:gpl2+)))
+    (home-page "https://linphone.org/technical-corner/linphone")
+    (license license:gpl3+)))
+
+(define-public linphoneqt
+  (deprecated-package "linphoneqt" linphone-desktop))
 
 (define-public msopenh264
-  (package
-    (name "msopenh264")
-    (version "1.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://www.linphone.org/releases/sources/plugins/"
-                       name "/" name "-" version ".tar.gz"))
-       (sha256
-        (base32 "0rdxgazm52560g52pp6mp3mwx6j1z3h2zyizzfycp8y8zi92fqm8"))
-       (patches
-        (list
-         ;; For support for OpenH264 version >= 2.
-         (origin
-           (method url-fetch)
-           (uri
-            (string-append "https://gitlab.linphone.org/BC/public/msopenh264/"
-                           "commit/493d147d28c9a0f788ba4e50b47a1ce7b18bf326"
-                           ".diff"))
-           (file-name "msopenh264-openh264.patch")
-           (sha256
-            (base32
-             "0mmd7nz5n9ian4rcwn200nldmy5j0dpdrna7r32rqnaw82bx3kdb")))))))
-    (build-system cmake-build-system)
-    (arguments
-     `(#:tests? #f                      ; No test target
-       #:configure-flags
-       (list "-DENABLE_STATIC=NO")))    ; Not required
-    (inputs
-     `(("mediastreamer2" ,mediastreamer2)
-       ("openh264" ,openh264)
-       ("ortp" ,ortp)))
-    (synopsis "Media Streamer H.264 Codec")
-    (description "MsOpenH264 is an  H.264 encoder/decoder plugin for
-mediastreamer2 based on the openh264 library.")
-    (home-page "https://gitlab.linphone.org/BC/public/msopenh264")
-    (license license:gpl2+)))
+  (let ((commit "88697cc95140017760d6da408cb0efdc5e86e40a")
+        (revision "0"))
+    (package
+      (name "msopenh264")
+      (version (git-version "1.2.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.linphone.org/BC/public/msopenh264.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "10y3b6s934f2wbsf60b3p0g6hffizjqrj5in8l4sida2fjdxlwwy"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:tests? #f                    ; No test target
+         #:configure-flags
+         (list "-DENABLE_STATIC=NO")))  ; Not required
+      (inputs
+       `(("bctoolbox" ,bctoolbox)
+         ("mediastreamer2" ,mediastreamer2)
+         ("openh264" ,openh264)
+         ("ortp" ,ortp)))
+      (synopsis "Media Streamer H.264 Codec")
+      (description "MsOpenH264 is an  H.264 encoder/decoder plugin for
+ mediastreamer2 based on the openh264 library.")
+      (home-page "https://gitlab.linphone.org/BC/public/msopenh264")
+      (license license:gpl2+))))
 
 (define-public mssilk
-  (package
-    (name "mssilk")
-    (version "1.1.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://www.linphone.org/releases/sources/plugins/"
-                       name "/" name "-" version ".tar.gz"))
-       (sha256
-        (base32 "07ip0vd29d1n98lnqs5wpimcsmpm65yl7g5vk4hbqghcbsjw94lj"))))
-    (build-system cmake-build-system)
-    (arguments
-     `(#:tests? #f                      ; No test target
-       #:configure-flags
-       (list "-DENABLE_STATIC=NO")))    ; Not required
-    (inputs
-     `(("mediastreamer2" ,mediastreamer2)
-       ("ortp" ,ortp)))
-    (synopsis "Media Streamer SILK Codec")
-    (description "MSSILK is a plugin of MediaStreamer, adding support for AMR
+  (let ((commit "dd0f31ee795faa7ea89e601b072dae4cd1df7e3f")
+        (revision "0"))
+    (package
+      (name "mssilk")
+      (version (git-version "1.1.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.linphone.org/BC/public/mssilk.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1dann5fnzqp6wjlwc6bl2k9b6rvn6bznqb3qsi1kgv9dnq44cbr0"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:tests? #f                    ; No test target
+         #:configure-flags
+         (list "-DENABLE_STATIC=NO")))  ; Not required
+      (inputs
+       `(("bctoolbox" ,bctoolbox)
+         ("mediastreamer2" ,mediastreamer2)
+         ("ortp" ,ortp)))
+      (synopsis "Media Streamer SILK Codec")
+      (description "MSSILK is a plugin of MediaStreamer, adding support for AMR
 codec.  It is based on the Skype's SILK implementation.")
-    (home-page "https://gitlab.linphone.org/BC/public/mssilk")
-    (license license:gpl2+)))
+      (home-page "https://gitlab.linphone.org/BC/public/mssilk")
+      (license license:gpl2+))))
 
 (define-public mswebrtc
-  (package
-    (name "mswebrtc")
-    (version "1.1.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://www.linphone.org/releases/sources/plugins/"
-                       name "/" name "-" version ".tar.gz"))
-       (sha256
-        (base32 "1wj28hl9myhshqmn64xg0jf07aw75gmnilb5rff6rcbdxim87mqr"))))
-    (build-system cmake-build-system)
-    (arguments
-     `(#:tests? #f                      ; No test target
-       #:configure-flags
-       (list
-        "-DENABLE_STATIC=NO")))         ; Not required
-    (inputs
-     `(("bctoolbox" ,bctoolbox)
-       ("mediastreamer2" ,mediastreamer2)
-       ("ortp" ,ortp)))
-    (synopsis "Media Streamer WebRTC Codec")
-    (description "MSWebRTC is a plugin of MediaStreamer, adding support for
+  (let ((commit "946ca706733f36a6b4923f04e569531125462d1d")
+        (revision "0"))
+    (package
+      (name "mswebrtc")
+      (version (git-version "1.1.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.linphone.org/BC/public/mswebrtc")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1pfg9m6bpbv0f53nx72rdxhlyriax9pg4yj0gpwq8ha6lqnpwg1x"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:tests? #f                    ; No test target
+         #:configure-flags
+         (list
+          "-DENABLE_STATIC=NO")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'copy-inputs
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((webrtc-from (assoc-ref inputs "webrtc"))
+                      (webrtc-to (string-append (getcwd) "/webrtc")))
+                 (copy-recursively webrtc-from webrtc-to))
+               #t)))))
+      (native-inputs
+       `(("webrtc"
+          ,(origin
+             (method git-fetch)
+             (uri
+              (git-reference
+               (url "https://gitlab.linphone.org/BC/public/external/webrtc")
+               (commit "583acd27665cfadef8ab03eb85a768d308bd29dd")))
+             (file-name
+              (git-file-name "webrtc-for-mswebrtc" version))
+             (sha256
+              (base32
+               "1maqychrgwy0z4zypa03qp726l2finw64z6cymdzhd58ql3p1lvm"))))
+         ("python" ,python-wrapper)))
+      (inputs
+       `(("bctoolbox" ,bctoolbox)
+         ("mediastreamer2" ,mediastreamer2)
+         ("ortp" ,ortp)))
+      (synopsis "Media Streamer WebRTC Codec")
+      (description "MSWebRTC is a plugin of MediaStreamer, adding support for
 WebRTC codec.  It includes features from WebRTC, such as, iSAC and AECM.")
-    (home-page "https://gitlab.linphone.org/BC/public/mswebrtc")
-    (license license:gpl2+)))
+      (home-page "https://gitlab.linphone.org/BC/public/mswebrtc")
+      (license license:gpl2+))))
 
 (define-public msamr
-  (package
-    (name "msamr")
-    (version "1.1.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append "https://www.linphone.org/releases/sources/plugins/"
-                       name "/" name "-" version ".tar.gz"))
-       (sha256
-        (base32 "16c9f3z4wnj73k7y8gb0fgpr4axsm7b5zrbjvy8vsgz9gyg3agm5"))))
-    (build-system cmake-build-system)
-    (arguments
-     `(#:tests? #f                      ; No test target
-       #:configure-flags
-       (list "-DENABLE_STATIC=NO"       ; Not required
-             "-DENABLE_WIDEBAND=YES")))
-    (inputs
-     `(("mediastreamer2" ,mediastreamer2)
-       ("opencoreamr" ,opencore-amr)
-       ("ortp" ,ortp)
-       ("voamrwbenc" ,vo-amrwbenc)))
-    (synopsis "Media Streamer AMR Codec")
-    (description "MSAMR is a plugin of MediaStreamer, adding support for AMR
+  (let ((commit "5ab5c098299107048dfcbfc741f7392faef167bd")
+        (revision "0"))
+    (package
+      (name "msamr")
+      (version (git-version "1.1.3" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.linphone.org/BC/public/msamr")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1g79lw1qi1mlw3v1b0cixmqiwjql81gz9naakb15n8pvaag9aaqm"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:tests? #f                    ; No test target
+         #:configure-flags
+         (list "-DENABLE_STATIC=NO"     ; Not required
+               "-DENABLE_WIDEBAND=YES")))
+      (inputs
+       `(("bctoolbox" ,bctoolbox)
+         ("mediastreamer2" ,mediastreamer2)
+         ("opencoreamr" ,opencore-amr)
+         ("ortp" ,ortp)
+         ("voamrwbenc" ,vo-amrwbenc)))
+      (synopsis "Media Streamer AMR Codec")
+      (description "MSAMR is a plugin of MediaStreamer, adding support for AMR
 codec.  It is based on the opencore-amr implementation.")
-    (home-page "https://gitlab.linphone.org/BC/public/msamr")
-    (license license:gpl3+)))
+      (home-page "https://gitlab.linphone.org/BC/public/msamr")
+      (license license:gpl3+))))
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 3647c91101..4286c912b0 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -354,7 +354,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.11-version "5.11.8")
+(define-public linux-libre-5.11-version "5.11.14")
 (define deblob-scripts-5.11
   (linux-libre-deblob-scripts
    linux-libre-5.11-version
@@ -362,7 +362,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "0yvr80g200hdryz54gdnzj4fl38pf7g4qbgj475rhcfwixhp1j7n")))
 (define-public linux-libre-5.11-pristine-source
   (let ((version linux-libre-5.11-version)
-        (hash (base32 "17y8q0gy4b00rms6pgglzmzz4msvmn2frqvln9vac39m78k3kyci")))
+        (hash (base32 "1ia4wzh44lkvrbvnhdnnjcdyvqx2ihpbwkih7wqm1n5prhq38ql7")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.11)))
@@ -370,7 +370,7 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
 ;; The "longterm" kernels — the older releases with long-term upstream support.
 ;; Here are the support timelines:
 ;; <https://www.kernel.org/category/releases.html>
-(define-public linux-libre-5.10-version "5.10.25")
+(define-public linux-libre-5.10-version "5.10.30")
 (define deblob-scripts-5.10
   (linux-libre-deblob-scripts
    linux-libre-5.10-version
@@ -378,12 +378,12 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
    (base32 "0hh27ccqimagr3aij7ygwikxw66y63sqwd0xlf49bhpjd090r9a7")))
 (define-public linux-libre-5.10-pristine-source
   (let ((version linux-libre-5.10-version)
-        (hash (base32 "1p8s8vp5b6vjmvhj3plm0pr0d9qp5lrwm6l40a4bjr1vk9myf2lk")))
+        (hash (base32 "0h06lavcbbj9a4dfzca9sprghiq9z33q8i4gh3n2912wmjsnj0nl")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.10)))
 
-(define-public linux-libre-5.4-version "5.4.107")
+(define-public linux-libre-5.4-version "5.4.112")
 (define deblob-scripts-5.4
   (linux-libre-deblob-scripts
    linux-libre-5.4-version
@@ -391,12 +391,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 "0q3m4d96d0hhhzn71aarh314i4cx9h3qvhhi5hrmcsrnbxafyg0w")))
+        (hash (base32 "190cq97pm0r6s115ay66rjra7fnyn7m4rak89inwhm223931sdmq")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.4)))
 
-(define-public linux-libre-4.19-version "4.19.182")
+(define-public linux-libre-4.19-version "4.19.187")
 (define deblob-scripts-4.19
   (linux-libre-deblob-scripts
    linux-libre-4.19-version
@@ -404,12 +404,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 "0r93mgvjypmj0glg0912vfq9zbagi59w4d88ynz5gm8sl05pbnq5")))
+        (hash (base32 "1hx0jw11xmj57v9a8w34729vgrandaing2n9qkhx5dq4mhy04k50")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.19)))
 
-(define-public linux-libre-4.14-version "4.14.226")
+(define-public linux-libre-4.14-version "4.14.230")
 (define deblob-scripts-4.14
   (linux-libre-deblob-scripts
    linux-libre-4.14-version
@@ -417,12 +417,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 "09llp8jl5xgxxzj0f2sfx32annwyz82k1zmgd26zy90lz0d09p3s")))
+        (hash (base32 "1gn5cs1ss4bfsnnv0b2s4g5ibiigpzsx0i3qfswchdbxvdag75cw")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.14)))
 
-(define-public linux-libre-4.9-version "4.9.262")
+(define-public linux-libre-4.9-version "4.9.266")
 (define deblob-scripts-4.9
   (linux-libre-deblob-scripts
    linux-libre-4.9-version
@@ -430,12 +430,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 "1zq77x9zf1wbk8n17rnblm5lfwlkin1xnxb3sxirwb9njm07cbmj")))
+        (hash (base32 "0qzigcslfp714vaswwlw93xj0h2f8laikppw6krrhfnh5wwrp5dr")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.9)))
 
-(define-public linux-libre-4.4-version "4.4.262")
+(define-public linux-libre-4.4-version "4.4.266")
 (define deblob-scripts-4.4
   (linux-libre-deblob-scripts
    linux-libre-4.4-version
@@ -443,7 +443,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 "0yz9qi4i46ndshxmb99kvv7lk6cbb09y7bzagq7sgvqaj4lwaw6j")))
+        (hash (base32 "00x2dmjiiv9zpc0vih9xqmf78kynqzj9q9v1chc2q2hcjpqfj31c")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.4)))
@@ -1167,8 +1167,8 @@ and should be used with caution, especially on untested models.")
     (license license:gpl3+)))           ; see README.md (no licence headers)
 
 (define-public rtl8812au-aircrack-ng-linux-module
-  (let ((commit "62cb003043e4daeeba0b8805137fa604af450ed2")
-        (revision "3"))
+  (let ((commit "059e06a51be025fde5b2bec6565540b3d9981b0b")
+        (revision "4"))
     (package
       (name "rtl8812au-aircrack-ng-linux-module")
       (version (git-version "5.6.4.2" revision commit))
@@ -1180,7 +1180,7 @@ and should be used with caution, especially on untested models.")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
-          (base32 "1kragxkjprjy7nl9h2rd0mwcry1ygw07zb1p2qkj7cmz0r2035yz"))
+          (base32 "0h6l2r3yj7j9zf11dw0zcdyn50ajnjw8yvv86dzlfj80dn75n98f"))
          (modules '((guix build utils)))
          (snippet
           '(begin
@@ -3535,6 +3535,93 @@ subsystem.  @code{uinput} allows userspace programs to create and handle input
 devices that can inject events directly into the input subsystem.")
     (license license:bsd-3)))
 
+(define-public interception-tools
+  (package
+    (name "interception-tools")
+    (version "0.6.4")
+    (home-page "https://gitlab.com/interception/linux/tools")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "121jy40ynkbzlqnx7g0dqwvkb7dm2ahcy6vwrz6ylsyd0jmi6s5a"))))
+    (build-system cmake-build-system)
+    (inputs
+     `(("boost" ,boost)
+       ("libevdev" ,libevdev)
+       ("libudev" ,eudev)
+       ("yaml-cpp" ,yaml-cpp)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-libevdev-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((libevdev (assoc-ref inputs "libevdev")))
+               (substitute* "CMakeLists.txt"
+                 (("/usr/include/libevdev-1.0")
+                  (string-append libevdev "/include/libevdev-1.0")))
+               #t))))
+       ;; No tests are included.
+       #:tests? #f))
+    (synopsis "Utilities for operating on input events of evdev devices")
+    (description
+     "Interception Tools provides a composable infrastructure on top of
+@code{libudev} and @code{libevdev}.  The following utilities are provided:
+
+@itemize
+@item @command{udevmon} --- monitor input devices for launching tasks
+@item @command{intercept} --- redirect device input events to stdout
+@item @command{uinput} --- redirect device input events from stding to virtual device
+@item @command{mux} --- mux streams of input events
+@end itemize")
+    ;; Dual-licensed under GPLv3+ or "something else" on request, per
+    ;; 'README.md'.
+    (license license:gpl3+)))
+
+(define-public interception-dual-function-keys
+  (package
+    (name "interception-dual-function-keys")
+    (version "1.3.0")
+    (home-page "https://gitlab.com/interception/linux/plugins/dual-function-keys")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1gvhkmwzl5fyyc7k8rc4rf2b9mzh05wa8wcybf9hz2x1mqkc7lmz"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("libevdev" ,libevdev)
+       ("yaml-cpp" ,yaml-cpp)))
+    (arguments
+     `(#:make-flags (list "CC=gcc" "CXX=g++"
+                          (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-libevdev-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((libevdev (assoc-ref inputs "libevdev")))
+               (substitute* "config.mk"
+                 (("/usr/include/libevdev-1.0")
+                  (string-append libevdev "/include/libevdev-1.0")))
+               #t)))
+         ;; No configure script
+         (delete 'configure)
+         ;; No target 'check'
+         (delete 'check))))
+    (synopsis "Tap for one key, hold for another")
+    (description
+     "Dual Function Keys is a plugin for @code{interception-tools} that allows
+one to send arbitrary keycodes when a given key is tapped or held.")
+    (license license:expat)))
+
 (define-public lvm2
   (package
     (name "lvm2")
@@ -3823,7 +3910,7 @@ compliance.")
 (define-public wireless-regdb
   (package
     (name "wireless-regdb")
-    (version "2020.04.29")
+    (version "2020.11.20")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -3831,7 +3918,7 @@ compliance.")
                     "wireless-regdb-" version ".tar.xz"))
               (sha256
                (base32
-                "0yicda474ygahv8da18h1p4yf42s6x2f208mlwcw4xsrxld07zc9"))
+                "0liagyi6ppf5w474qk9j4jz5gbvvn8mc8al1dq4b1xrgv28485ml"))
 
               ;; We're building 'regulatory.bin' by ourselves.
               (snippet '(begin
@@ -3885,8 +3972,8 @@ compliance.")
      "https://wireless.wiki.kernel.org/en/developers/regulatory/wireless-regdb")
     (synopsis "Wireless regulatory database")
     (description
-     "This package contains the wireless regulatory database Central
-Regulatory Database Agent (CRDA) daemon.  The database contains information on
+     "This package contains the wireless regulatory database for the Central
+Regulatory Database Agent (CRDA).  The database contains information on
 country-specific regulations for the wireless spectrum.")
     (license license:isc)))
 
@@ -4974,7 +5061,7 @@ and copy/paste text in the console and in xterm.")
 (define-public btrfs-progs
   (package
     (name "btrfs-progs")
-    (version "5.11")
+    (version "5.11.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/linux/kernel/"
@@ -4982,7 +5069,7 @@ and copy/paste text in the console and in xterm.")
                                   "btrfs-progs-v" version ".tar.xz"))
               (sha256
                (base32
-                "0dq1ryji9hmq10zbyk083lp9r212524a3naai47whq11m6q626fl"))))
+                "1zpbpmq8qndwls40yg2c9xj9ca6mcxdziadj5i8fbi3ffp2crap3"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "static"))      ; static versions of the binaries in "out"
@@ -7042,7 +7129,7 @@ privileges.")
 (define-public psm2
   (package
     (name "psm2")
-    (version "11.2.86")
+    (version "11.2.185")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -7051,7 +7138,7 @@ privileges.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1hiqzcmc97lzhaqjva82vf8irgg038cciypsv2brw90ak09n6vwf"))))
+                "062hg4r6gz7pla9df70nqs5i2a3mp1wszmp4l0g771fykhhrxsjg"))))
     (build-system gnu-build-system)
     (arguments
      '(#:make-flags
@@ -7942,8 +8029,8 @@ kernel side implementation.")
        ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)))
     (home-page "https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git/")
-    (synopsis "User-space tools for EROFS filesystem")
+    (synopsis "User-space tools for EROFS file system")
     (description "EROFS (Enhanced Read-Only File System) is a compressed,
-read-only filesystem optimized for resource-scarce devices.  This package
-provides user-space tools for creating EROFS filesystems.")
+read-only file system optimized for resource-scarce devices.  This package
+provides user-space tools for creating EROFS file systems.")
     (license license:gpl2+)))
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index 5682daee3f..f340360dba 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -25,6 +25,7 @@
 ;;; Copyright © 2021 Matthew Kraai <kraai@ftbfs.org>
 ;;; Copyright © 2021 André A. Gomes <andremegafone@gmail.com>
 ;;; Copyright © 2021 Cage <cage-dev@twistfold.it>
+;;; Copyright © 2021 Cameron Chaparro <cameron@cameronchaparro.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -64,6 +65,7 @@
   #:use-module (gnu packages file)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages imagemagick)
@@ -120,10 +122,79 @@ portable between implementations.")
 (define-public ecl-alexandria
   (sbcl-package->ecl-package sbcl-alexandria))
 
-(define-public sbcl-golden-utils
-  (let ((commit "9424419d867d5c2f819196ee41667a818a5058e7")
+(define-public sbcl-bodge-utilities
+  (let ((commit "6304bac4abe06d53579e2c0fc4437d14ff077d9f")
         (revision "1"))
     (package
+     (name "sbcl-bodge-utilities")
+     (version (git-version "1.0.0" revision commit))
+     (source
+      (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/borodust/bodge-utilities")
+             (commit commit)))
+       (file-name (git-file-name "bodge-utilities" version))
+       (sha256
+        (base32 "1z1blj05q71vzh323qwyn9p3xs7v0mq2yhwfyzza5libp37wqm3c"))))
+     (build-system asdf-build-system/sbcl)
+     (inputs
+      `(("alexandria" ,sbcl-alexandria)
+        ("cffi" ,sbcl-cffi)
+        ("claw" ,sbcl-claw)
+        ("dissect" ,sbcl-dissect)
+        ("local-time" ,sbcl-local-time)
+        ("log4cl" ,sbcl-log4cl)
+        ("split-sequence" ,sbcl-split-sequence)
+        ("static-vectors" ,sbcl-static-vectors)
+        ("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+     (home-page "https://github.com/borodust/bodge-utilities")
+     (synopsis "Common Lisp utilities library for CL-BODGE")
+     (description
+      "This Common Lisp library provides utilities for the @emph{Bodge} library
+collection.")
+     (license license:expat))))
+
+(define-public ecl-bodge-utilities
+  (sbcl-package->ecl-package sbcl-bodge-utilities))
+
+(define-public cl-bodge-utilities
+  (sbcl-package->cl-source-package sbcl-bodge-utilities))
+
+(define-public sbcl-bodge-queue
+  (let ((commit "948c9a501dcd412689952d09eb7453ec2722336a")
+        (revision "0"))
+    (package
+      (name "sbcl-bodge-queue")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/borodust/bodge-queue")
+               (commit commit)))
+         (file-name (git-file-name "bodge-queue" version))
+         (sha256
+          (base32 "148hjikqk8v2m30mj15xh89zni6szf9z3prav580qk9dqr8djjdr"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("fiveam" ,sbcl-fiveam)))
+      (home-page "https://github.com/borodust/bodge-queue")
+      (synopsis "Simple queue for Common Lisp")
+      (description "This Common Lisp library provides a simple FIFO
+implementation with no external dependencies.")
+      (license license:expat))))
+
+(define-public cl-bodge-queue
+  (sbcl-package->cl-source-package sbcl-bodge-queue))
+
+(define-public ecl-bodge-queue
+  (sbcl-package->ecl-package sbcl-bodge-queue))
+
+(define-public sbcl-golden-utils
+  (let ((commit "62a5cb948a011eb26e7a89f56d5839a3334b4100")
+        (revision "2"))
+    (package
       (name "sbcl-golden-utils")
       (version (git-version "0.0.0" revision commit))
       (source
@@ -132,9 +203,9 @@ portable between implementations.")
          (uri (git-reference
                (url "https://git.mfiano.net/mfiano/golden-utils")
                (commit commit)))
-         (file-name (git-file-name name version))
+         (file-name (git-file-name "golden-utils" version))
          (sha256
-          (base32 "15x0phm6820yj3h37ibi06gjyh6z45sd2nz2n8lcbfflwm086q0h"))))
+          (base32 "13mvxqwd1nmpq8h5hb1s60wyqdj7ji4haxrqr0sy3csyqa8aq2j8"))))
       (build-system asdf-build-system/sbcl)
       (inputs
        `(("alexandria" ,sbcl-alexandria)))
@@ -2055,7 +2126,7 @@ also be supported.")
 (define-public sbcl-ironclad
   (package
     (name "sbcl-ironclad")
-    (version "0.54")
+    (version "0.55")
     (source
      (origin
        (method git-fetch)
@@ -2063,7 +2134,7 @@ also be supported.")
              (url "https://github.com/sharplispers/ironclad/")
              (commit (string-append "v" version))))
        (sha256
-        (base32 "07g0wpvfqq2yk23prs890d4qvbnr3xd6w8ssd88g89xdg483wpvk"))
+        (base32 "1w4slnc4143w1gcff1wxsivzb8kcji0bpd7y9rld3sabay0qprwl"))
        (file-name (git-file-name name version))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
@@ -2890,6 +2961,39 @@ from GLSL as data.")
 (define-public cl-glsl-spec
   (sbcl-package->cl-source-package sbcl-glsl-spec))
 
+(define-public sbcl-rtg-math
+  (let ((commit "29fc5b3d0028a4a11a82355ecc8cca62662c69e0")
+        (revision "1"))
+    (package
+      (name "sbcl-rtg-math")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/cbaggers/rtg-math")
+               (commit commit)))
+         (file-name (git-file-name "rtg-math" version))
+         (sha256
+          (base32 "0bhxxnv7ldkkb18zdxyz2rj2a3iawzq2kcp7cn5i91iby7n0082x"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("documentation-utils" ,sbcl-documentation-utils)
+         ("glsl-symbols" ,sbcl-glsl-spec)))
+      (home-page "https://github.com/cbaggers/rtg-math")
+      (synopsis "Common Lisp library of game-related math functions")
+      (description
+       "RTG-MATH provides a selection of the math routines most commonly needed
+for making realtime graphics in Lisp.")
+      (license license:bsd-2))))
+
+(define-public ecl-rtg-math
+  (sbcl-package->ecl-package sbcl-rtg-math))
+
+(define-public cl-rtg-math
+  (sbcl-package->cl-source-package sbcl-rtg-math))
+
 (define-public sbcl-varjo
   (let ((commit "9e77f30220053155d2ef8870ceba157f75e538d4")
         (revision "1"))
@@ -3345,10 +3449,10 @@ is a library for creating graphical user interfaces.")
   (sbcl-package->ecl-package sbcl-cl-cffi-gtk))
 
 (define-public sbcl-cl-webkit
-  (let ((commit "0bc05cc73257670ab241853b9cc9ccb68940fe44"))
+  (let ((commit "db855639d4a13f6ba296959cf11635b6b67421bf"))
     (package
       (name "sbcl-cl-webkit")
-      (version (git-version "2.4" "10" commit))
+      (version (git-version "2.4" "13" commit))
       (source
        (origin
          (method git-fetch)
@@ -3358,7 +3462,7 @@ is a library for creating graphical user interfaces.")
          (file-name (git-file-name "cl-webkit" version))
          (sha256
           (base32
-           "1kg6illspvb5647pm0x819ag2n7njnqvrm18jzgd28vk6nlkrcmq"))))
+           "01alj5bfsh2983pwpdy0zpa2rvl4kl0mqzs08ff46is3cb8fqs0g"))))
       (build-system asdf-build-system/sbcl)
       (inputs
        `(("cffi" ,sbcl-cffi)
@@ -7223,10 +7327,10 @@ of C+GObject libraries without the need of writing dedicated bindings.")
       (inputs
        `(("ppcre" ,sbcl-cl-ppcre)))
       (home-page "https://github.com/EuAndreh/cl-slug")
-      (synopsis "Multi-language slug formater")
+      (synopsis "Multi-language slug formatter")
       (description
        "This is a small Common Lisp library to make slugs, mainly for URIs,
-from english and beyond.")
+from English and beyond.")
       (license license:llgpl))))
 
 (define-public ecl-cl-slug
@@ -9949,7 +10053,7 @@ approach to templating.")
 (define-public sbcl-postmodern
   (package
     (name "sbcl-postmodern")
-    (version "1.32.8")
+    (version "1.32.9")
     (source
      (origin
        (method git-fetch)
@@ -9958,7 +10062,7 @@ approach to templating.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0vr5inbr8dldf6dsl0qj3h2yrnnsayzfwxfzwkn1pk7xbns2l78q"))))
+        (base32 "137jci4hn4vlxf48y39k0di27kc89kvxy3brmn3vl9xq56sy6mhz"))))
     (build-system asdf-build-system/sbcl)
     (native-inputs
      `(("fiveam" ,sbcl-fiveam)))
@@ -13242,7 +13346,7 @@ and lean bindings to C libraries.")
       (home-page "https://github.com/borodust/claw-utils")
       (synopsis "Utilities for easier autowrapping")
       (description
-       "This Common Lisp library contains various handy utilties to help
+       "This Common Lisp library contains various handy utilities to help
 autowrapping with @code{claw}.")
       (license license:expat))))
 
@@ -15262,6 +15366,35 @@ line tool @code{df} and get disk space information using @code{statvfs}.")
 (define-public cl-diskspace
   (sbcl-package->cl-source-package sbcl-cl-diskspace))
 
+(define-public sbcl-cl-cpus
+  (package
+    (name "sbcl-cl-cpus")
+    (version "0.0.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/muyinliu/cl-cpus")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name "cl-cpus" version))
+       (sha256
+        (base32 "0sdaff9hpsx7bpkkkqavmxmrrlc2d61gmqjjgn8xchncng4a0rf8"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs
+     `(("cffi" ,sbcl-cffi)))
+    (home-page "https://github.com/muyinliu/cl-cpus")
+    (synopsis "Common Lisp feature to get number of CPUs")
+    (description
+     "This package provides a Common Lisp system which has only one function to
+return the CPU count of the current system.")
+    (license license:isc)))
+
+(define-public ecl-cl-cpus
+  (sbcl-package->ecl-package sbcl-cl-cpus))
+
+(define-public cl-cpus
+  (sbcl-package->cl-source-package sbcl-cl-cpus))
+
 (define-public sbcl-fof
   (package
     (name "sbcl-fof")
@@ -15342,3 +15475,383 @@ numbers in Common Lisp.")
 
 (define-public cl-computable-reals
   (sbcl-package->cl-source-package sbcl-computable-reals))
+
+(define-public sbcl-html-template
+  (package
+    (name "sbcl-html-template")
+    (version "0.9.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/edicl/html-template")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0wz3czvjsn4x971dsiia9f9nvvcmbkablcl75zsvxndkimc93wxb"))))
+    (build-system asdf-build-system/sbcl)
+    (home-page "https://edicl.github.io/html-template/")
+    (synopsis "HTML templates from Common Lisp")
+    (description
+     "HTML-TEMPLATE is a Common Lisp library which can be used to fill
+templates with arbitrary (string) values at runtime.  The result does not have
+to be HTML.
+
+It is loosely modeled after the Perl module @code{HTML::Template} and
+partially compatible with a its syntax, though both libraries contain some
+extensions that the other does not support.
+
+HTML-TEMPLATE translates templates into efficient closures which can be
+re-used as often as needed.  It uses a cache mechanism so you can update
+templates while your program is running and have the changes take effect
+immediately.")
+    (license license:bsd-2)))
+
+(define-public ecl-html-template
+  (sbcl-package->ecl-package sbcl-html-template))
+
+(define-public cl-html-template
+  (sbcl-package->cl-source-package sbcl-html-template))
+
+(define-public sbcl-quickproject
+  (package
+    (name "sbcl-quickproject")
+    (version "1.4.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/xach/quickproject")
+             (commit (string-append "release-" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1szs8p2wr1yr9mjmj3h3557l6wxzzga0iszimb68z0hb1jj3lva6"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs
+     `(("cl-fad" ,sbcl-cl-fad)
+       ("html-template" ,sbcl-html-template)))
+    (arguments
+     '(#:asd-files '("quickproject.asd")))
+    (home-page "https://xach.com/lisp/quickproject/")
+    (synopsis "Create Common Lisp project skeletons")
+    (description
+     "Quickproject provides a quick way to make a Common Lisp project.  After
+creating a project, it extends the ASDF registry so the project may be
+immediately loaded.")
+    (license license:expat)))
+
+(define-public ecl-quickproject
+  (sbcl-package->ecl-package sbcl-quickproject))
+
+(define-public cl-quickproject
+  (sbcl-package->cl-source-package sbcl-quickproject))
+
+(define-public sbcl-bodge-math
+  (let ((commit "9159b7faf88d440024c07110dbef2abddb20b9af")
+        (revision "1"))
+    (package
+     (name "sbcl-bodge-math")
+     (version (git-version "1.0.0" revision commit))
+     (source
+      (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/borodust/bodge-math")
+             (commit commit)))
+       (file-name (git-file-name "bodge-math" version))
+       (sha256
+        (base32 "0r3vnl9lywn4ksy34apcv6j825qp7l1naddawr14v4lwacndb80v"))))
+     (build-system asdf-build-system/sbcl)
+     (inputs
+      `(("bodge-utilities" ,sbcl-bodge-utilities)
+        ("rtg-math" ,sbcl-rtg-math)))
+     (home-page "https://github.com/borodust/bodge-math")
+     (synopsis "Common Lisp core math utilities of BODGE library collection")
+     (description
+      "This Common Lisp package contains the core math utilities of the
+@emph{Bodge} library collection.")
+     (license license:expat))))
+
+(define-public ecl-bodge-math
+  (sbcl-package->ecl-package sbcl-bodge-math))
+
+(define-public cl-bodge-math
+  (sbcl-package->cl-source-package sbcl-bodge-math))
+
+(define-public sbcl-cl-conspack
+  (let ((commit "fc8473bc6f929696b03b43820596b7c976c4678e")
+        (revision "1"))
+    (package
+     (name "sbcl-cl-conspack")
+     (version (git-version "0.0.0" revision commit))
+     (source
+      (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/conspack/cl-conspack")
+             (commit commit)))
+       (file-name (git-file-name "cl-conspack" version))
+       (sha256
+        (base32 "0b7qzvsrpvnw12hqhjmz0b02sigj0kdjy55j4k7xzmj8684cs8bx"))))
+     (build-system asdf-build-system/sbcl)
+     ;; FIXME: (Sharlatan-20210331T220652+0100): Test are disabled because of:
+     ;;
+     ;; Error while trying to load definition for system cl-conspack-test
+     ;; from pathname .../cl-conspack/cl-conspack-test.asd:
+     ;; Error opening .../checkl/formalize-tmpGHU3ALSV.fasl": Permission denied
+     ;;
+     ;; It looks like the issues is in CheckL itself as other packages keep
+     ;; failing test where it's in use.
+     (arguments
+      '(#:tests? #f
+        #:asd-files '("cl-conspack.asd")))
+     (native-inputs
+      `(("checkl" ,sbcl-checkl)))
+     (inputs
+      `(("alexandria" ,sbcl-alexandria)
+        ("closer-mop" ,sbcl-closer-mop)
+        ("fast-io" ,sbcl-fast-io)
+        ("ieee-floats" ,sbcl-ieee-floats)
+        ("trivial-garbage" ,sbcl-trivial-garbage)
+        ("trivial-utf-8" ,sbcl-trivial-utf-8)))
+     (home-page "https://github.com/conspack/cl-conspack")
+     (synopsis "CONSPACK implementation for Common Lisp")
+     (description
+      "This package provides a CONSPACK implementation for Common Lisp.")
+     (license license:bsd-3))))
+
+(define-public ecl-cl-conspack
+  (sbcl-package->ecl-package sbcl-cl-conspack))
+
+(define-public cl-conspack
+  (sbcl-package->cl-source-package sbcl-cl-conspack))
+
+(define-public sbcl-cl-opengl
+  (let ((commit "e2d83e0977b7e7ac3f3d348d8ccc7ccd04e74d59")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-opengl")
+      (version (git-version "0.1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/3b/cl-opengl")
+               (commit commit)))
+         (file-name (git-file-name "cl-opengl" version))
+         (sha256
+          (base32 "0mhqmll09f079pnd6mgswz9nvr6h5n27d4q7zpmm2igf1v460id7"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:asd-systems '("cl-opengl" "cl-glu" "cl-glut")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'patch-lib-path
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "gl/library.lisp"
+                 (("libGL.so" all)
+                  (string-append (assoc-ref inputs "mesa") "/lib/" all)))
+               (substitute* "glu/library.lisp"
+                 (("libGLU.so" all)
+                  (string-append (assoc-ref inputs "glu") "/lib/" all)))
+               (substitute* "glut/library.lisp"
+                 (("libglut.so" all)
+                  (string-append (assoc-ref inputs "freeglut") "/lib/" all)))
+               #t)))))
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)
+         ("cffi" ,sbcl-cffi)
+         ("float-features" ,sbcl-float-features)
+         ("freeglut" ,freeglut)
+         ("glu" ,glu)
+         ("mesa" ,mesa)))
+      (home-page "https://github.com/3b/cl-opengl")
+      (synopsis "Common Lisp bindings to OpenGL, GLU and GLUT APIs")
+      (description
+       "This package provides a set of bindings and utilities for accessing the
+OpenGL (Mesa), GLU and GLUT (FreeGLUT) APIs using CFFI.")
+      (license license:bsd-3))))
+
+(define-public ecl-cl-opengl
+  (sbcl-package->ecl-package sbcl-cl-opengl))
+
+(define-public cl-opengl
+  (sbcl-package->cl-source-package sbcl-cl-opengl))
+
+(define-public sbcl-shadow
+  (let ((commit "b2031adbfba3579b48c9d39ad997e19b79b6852f")
+        (revision "1"))
+    (package
+      (name "sbcl-shadow")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://git.mfiano.net/mfiano/shadow")
+               (commit commit)))
+         (file-name (git-file-name "shadow" version))
+         (sha256
+          (base32 "0w1i734gkdkziin74ql2nhx7jdjxx02ylssaa6qdrvnj4br1124a"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("cffi" ,sbcl-cffi)
+         ("cl-opengl" ,sbcl-cl-opengl)
+         ("glsl-packing" ,sbcl-glsl-packing)
+         ("golden-utils" ,sbcl-golden-utils)
+         ("static-vectors" ,sbcl-static-vectors)
+         ("varjo" ,sbcl-varjo)))
+      (home-page "https://git.mfiano.net/mfiano/shadow")
+      (synopsis "Management system for OpenGL shader programs")
+      (description
+       "This package provides a Common Lisp library for defining OpenGL shader
+programs.  There are also functions for referencing shader programs by name,
+querying for basic information about them, modifying uniform variables
+throughout the lifecycle of an OpenGL application, and managing certain OpenGL
+buffer object types (UBO, SSBO currently).")
+      (license license:expat))))
+
+(define-public ecl-shadow
+  (sbcl-package->ecl-package sbcl-shadow))
+
+(define-public cl-shadow
+  (sbcl-package->cl-source-package sbcl-shadow))
+
+(define-public sbcl-umbra
+  (let ((commit "d6ef2f6cbfa26180929061129eaf325bf17f73d8")
+        (revision "1"))
+    (package
+      (name "sbcl-umbra")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://git.mfiano.net/mfiano/umbra")
+               (commit commit)))
+         (file-name (git-file-name "umbra" version))
+         (sha256
+          (base32 "04vyh2j00zdpb8ryxr8g81wjcmqlz9wrn55r3cypcj4qg970r5wi"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("golden-utils" ,sbcl-golden-utils)
+         ("shadow" ,sbcl-shadow)
+         ("varjo" ,sbcl-varjo)))
+      (home-page "https://git.mfiano.net/mfiano/umbra")
+      (synopsis "Common Lisp library of reusable GPU shader functions")
+      (description
+       "This is a Common Lisp library consisting of a collection of useful GPU
+shader functions, written with @code{Shadow}.")
+      (license license:expat))))
+
+(define-public ecl-umbra
+  (sbcl-package->ecl-package sbcl-umbra))
+
+(define-public cl-umbra
+  (sbcl-package->cl-source-package sbcl-umbra))
+
+(define-public sbcl-abstract-classes
+  (let ((commit "7fa74f1e057f9ba7c1ffecff14f049f979e45267")
+        (revision "1"))
+    (package
+      (name "sbcl-abstract-classes")
+      (version (git-version "1.7.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://bitbucket.org/eeeickythump/cl-abstract-classes")
+               (commit commit)))
+         (file-name (git-file-name "cl-abstract-classes" version))
+         (sha256
+          (base32 "06lby4i6xbbgs7kgb0f3fqybvyskyg6djhrf967lnysv7hn3zpg9"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("closer-mop" ,sbcl-closer-mop)))
+      (arguments
+       `(#:asd-systems '("abstract-classes" "singleton-classes")))
+      (home-page "https://bitbucket.org/eeeickythump/cl-abstract-classes")
+      (synopsis "Abstract, final, and singleton metaclasses for CLOS")
+      (description
+       "This package provides Common Lisp extension to the MOP to allow
+abstract, final and singleton classes.")
+      (license license:public-domain))))
+
+(define-public ecl-abstract-classes
+  (sbcl-package->ecl-package sbcl-abstract-classes))
+
+(define-public cl-abstract-classes
+  (sbcl-package->cl-source-package sbcl-abstract-classes))
+
+(define-public sbcl-coalton
+  (let ((commit "4a42ffb4222fde3abfd1b50d96e455ff2eef9fe8")
+        (revision "1"))
+    (package
+      (name "sbcl-coalton")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/stylewarning/coalton")
+               (commit commit)))
+         (file-name (git-file-name "coalton" version))
+         (sha256
+          (base32 "0aidwwam7cnhb3p9212zbv5w2dl6kr5iklzanypzr1a9lqaxwdlk"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("fiasco" ,sbcl-fiasco)))
+      (inputs
+       `(("abstract-classes" ,sbcl-abstract-classes)
+         ("alexandria" ,sbcl-alexandria)
+         ("global-vars" ,sbcl-global-vars)
+         ("optima" ,sbcl-optima)
+         ("trivial-garbage" ,sbcl-trivial-garbage)))
+      (home-page "https://github.com/stylewarning/coalton")
+      (synopsis "Dialect of ML in Common Lisp")
+      (description
+       "Coalton is a dialect of ML embedded in Common Lisp.  It emphasizes
+practicality and interoperability with Lisp, and is intended to be a DSL that
+allows one to gradually make their programs safer.")
+      (license license:expat))))
+
+(define-public ecl-coalton
+  (sbcl-package->ecl-package sbcl-coalton))
+
+(define-public cl-coalton
+  (sbcl-package->cl-source-package sbcl-coalton))
+
+(define-public sbcl-clip
+  (let ((commit "7afa68702fbb99c47ed115ea0faccd97a29d9b2e")
+        (revision "1"))
+    (package
+      (name "sbcl-clip")
+      (version (git-version "0.7.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/shinmera/clip")
+               (commit commit)))
+         (file-name (git-file-name "clip" version))
+         (sha256
+          (base32 "13kkajkva2shm19fvn4yashsw18l6imv2rmy3hmpcky7g5ay7bv3"))))
+      (build-system asdf-build-system/sbcl)
+      (inputs
+       `(("array-utils" ,sbcl-array-utils)
+         ("lquery" ,sbcl-lquery)))
+      (home-page "https://shinmera.github.io/clip/")
+      (synopsis "Common Lisp HTML templating engine")
+      (description
+       "Clip is an attempt at a templating library that allows you to write
+templates in a way that is both accessible to direct webdesign and
+flexible.  The main idea is to incorporate transformation commands into an HTML
+file through tags and attributes.  Clip is heavily dependant on Plump and
+lQuery.")
+      (license license:zlib))))
+
+(define-public ecl-clip
+  (sbcl-package->ecl-package sbcl-clip))
+
+(define-public cl-clip
+  (sbcl-package->cl-source-package sbcl-clip))
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index f7aecfb5ef..983e9fa1ec 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -14,7 +14,7 @@
 ;;; Copyright © 2018, 2019 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2019, 2020 Katherine Cox-Buday <cox.katherine.e@gmail.com>
 ;;; Copyright © 2019 Jesse Gildersleve <jessejohngildersleve@protonmail.com>
-;;; Copyright © 2019, 2020 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2019, 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Zhu Zihao <all_but_last@163.com>
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
@@ -400,14 +400,14 @@ an interpreter, a compiler, a debugger, and much more.")
 (define-public sbcl
   (package
     (name "sbcl")
-    (version "2.1.2")
+    (version "2.1.3")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/sbcl/sbcl/" version "/sbcl-"
                            version "-source.tar.bz2"))
        (sha256
-        (base32 "02scrqyp2izsd8xjm2k5j5lhn4pdhd202jlcb54ysmcqjd80awdp"))))
+        (base32 "1h6s3as8m72ik971zy7a8j1kqfyy5gzpv9ksy09ixv65a10ll3d9"))))
     (build-system gnu-build-system)
     (outputs '("out" "doc"))
     (native-inputs
@@ -843,7 +843,7 @@ enough to play the original mainframe Zork all the way through.")
 (define-public txr
   (package
     (name "txr")
-    (version "246")
+    (version "255")
     (source
      (origin
        (method git-fetch)
@@ -852,7 +852,7 @@ enough to play the original mainframe Zork all the way through.")
              (commit (string-append "txr-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1ynkz0ss7nn1ssiaxagpq80iabknf085nk0pra9hn8y9hx7av0db"))))
+        (base32 "0fjca44761x29xg5hh60yf4i3k7462z7ysnadbk2wzisp42yxk6j"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 6f8417b50b..b710318a69 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -790,17 +790,6 @@ of programming tools as well as libraries with equivalent functionality.")
         (base32
          "153vcvj8gvgwakzr4j0kndc0b7wn91c2g1vy2vg24s6spxcc23gn"))))))
 
-(define-public clang-runtime-3.6
-  (clang-runtime-from-llvm
-   llvm-3.6
-   "11qx8d3pbfqjaj2x207pvlvzihbs1z2xbw4crpz7aid6h1yz6bqg"
-     '("clang-runtime-asan-build-fixes.patch")))
-
-(define-public clang-3.6
-  (clang-from-llvm llvm-3.6 clang-runtime-3.6
-                   "1wwr8s6lzr324hv4s1k6na4j5zv6n9kdhi14s4kb9b13d93814df"
-                   #:patches '("clang-3.5-libc-search-path.patch")))
-
 (define-public llvm-3.5
   (package (inherit llvm-3.6)
     (version "3.5.2")
diff --git a/gnu/packages/logging.scm b/gnu/packages/logging.scm
index eafc23b2e6..6a4975e435 100644
--- a/gnu/packages/logging.scm
+++ b/gnu/packages/logging.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2019 Meiyo Peng <meiyo@riseup.net>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
@@ -190,7 +190,7 @@ output in multiple windows in a terminal.")
 (define-public spdlog
   (package
     (name "spdlog")
-    (version "1.8.2")
+    (version "1.8.5")
     (source
      (origin
        (method git-fetch)
@@ -199,8 +199,7 @@ output in multiple windows in a terminal.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "03vmwbi9v7r3v8kzd0lj10fchp54kxbxwzfx7dp6qzkxjrvmx2dx"))))
+        (base32 "179krvg5sad6dviqpcjwg6czzknnilqszrg1d0fgp12h6sy66vqg"))))
     (build-system cmake-build-system)
     ;; TODO run benchmark. Currently not possible, as adding
     ;; (gnu packages benchmark) forms a dependency cycle
@@ -215,19 +214,3 @@ library.")
     ;; spdlog is under Expat license, but the bundled fmt library in
     ;; "include/spdlog/fmt/bundled" is under BSD 2 clause license.
     (license (list license:expat license:bsd-2))))
-
-(define-public spdlog-1.7
-  (package
-    (inherit spdlog)
-    (name "spdlog")
-    (version "1.7.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/gabime/spdlog")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1ryaa22ppj60461hcdb8nk7jwj84arp4iw4lyw594py92g4vnx3j"))))))
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index c538d77aaf..35584c497a 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2015, 2016, 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2016 Al McElrath <hello@yrns.org>
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Leo Famulari <leo@famulari.name>
@@ -27,21 +27,22 @@
 ;;; Copyright © 2018, 2019, 2020, 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com>
-;;; Copyright © 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019, 2020 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 Justus Winter <justus@sequoia-pgp.org>
 ;;; Copyright © 2020 Eric Brown <ecbrown@ericcbrown.com>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020 Alexey Abramov <levenson@mmer.org>
+;;; Copyright © 2020, 2021 Alexey Abramov <levenson@mmer.org>
 ;;; Copyright © 2020 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
-;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@posteo.ro>
+;;; Copyright © 2020, 2021 Alexandru-Sergiu Marton <brown121407@posteo.ro>
 ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
 ;;; Copyright © 2020 divoplade <d@divoplade.fr>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
+;;; Copyright © 2021 Benoit Joly <benoit@benoitj.ca>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -89,6 +90,7 @@
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages glib)
+  #:use-module (gnu packages golang)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages groff)
@@ -156,7 +158,9 @@
   #:use-module (guix utils)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system glib-or-gtk)
+  #:use-module (guix build-system go)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system go)
   #:use-module (guix build-system guile)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
@@ -164,6 +168,51 @@
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match))
 
+(define-public abook
+  (package
+    (name "abook")
+    (version "0.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://abook.sourceforge.io/devel/abook-" version ".tar.gz"))
+       (sha256
+        (base32 "1yf0ifyjhq2r003pnpn92mn0924bn9yxjifxxj2ldcsgd7w0vagh"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; Fix "undefined reference to `field_id'" errors.
+         (add-after 'unpack 'fix-build-with-recent-gcc
+           (lambda _
+             (substitute* '("database.c" "database.h")
+               (("^inline int" all) (string-append "extern " all)))))
+         ;; Fix following error during bootstrap: "gettext infrastructure
+         ;; mismatch: using a Makefile.in.in from gettext version 0.18 but the
+         ;; autoconf macros are from gettext version 0.20".
+         (add-before 'bootstrap 'fix-gettext-macro-version
+           (lambda _
+             (substitute* "po/Makefile.in.in"
+               (("0.18") "0.20"))))
+         (replace 'bootstrap
+           (lambda _
+             (invoke "aclocal")
+             (invoke "automake" "--add-missing")
+             (invoke "autoconf"))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("gettext" ,gettext-minimal)))
+    (inputs
+     `(("ncurses" ,ncurses)
+       ("readline" ,readline)))
+    (home-page "https://abook.sourceforge.io/")
+    (synopsis "Text-based addressbook")
+    (description
+     "Abook is a text-based addressbook program designed to use with Mutt mail
+client.")
+    (license license:gpl2)))
+
 (define-public anubis
   (package
     (name "anubis")
@@ -318,6 +367,37 @@ software.")
      ;; Libraries are under LGPLv3+, and programs under GPLv3+.
      (list license:gpl3+ license:lgpl3+))))
 
+(define-public go-gitlab.com-shackra-goimapnotify
+  (let ((commit "832bc7112db9b28e28d69e90b91ea6c005244c9b")
+        (revision "0"))
+    (package
+      (name "go-gitlab.com-shackra-goimapnotify")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://gitlab.com/shackra/goimapnotify")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1h27kshx4vwl5k6vc2szsq3d701fzs4gczjypz907f8hj0lrnjmy"))))
+      (build-system go-build-system)
+      (arguments
+       `(#:import-path "gitlab.com/shackra/goimapnotify"))
+      (propagated-inputs
+       `(("go-github-com-emersion-go-imap" ,go-github-com-emersion-go-imap)
+         ("go-github-com-emersion-go-imap-idle" ,go-github-com-emersion-go-imap-idle)
+         ("go-github-com-emersion-go-sasl" ,go-github-com-emersion-go-sasl)
+         ("go-github-com-sirupsen-logrus" ,go-github-com-sirupsen-logrus)
+         ("go-golang-org-x-text" ,go-golang-org-x-text)))
+      (synopsis "Execute scripts on IMAP mailbox changes.")
+      (description
+       "Script to execute scripts on IMAP mailbox changes (new/deleted/updated
+messages) using IDLE.  Implemented in Go.")
+      (home-page "https://gitlab.com/shackra/goimapnotify")
+      (license license:gpl3+))))
+
 (define-public guile2.2-mailutils
   (package
     (inherit mailutils)
@@ -413,7 +493,7 @@ to run without any changes.")
 (define-public fetchmail
   (package
     (name "fetchmail")
-    (version "6.4.17")
+    (version "6.4.18")
     (source
      (origin
        (method url-fetch)
@@ -421,7 +501,7 @@ to run without any changes.")
                            (version-major+minor version) "/"
                            "fetchmail-" version ".tar.xz"))
        (sha256
-        (base32 "1ijh9l7pg2yk5s5h1yj3vpd1az31giqy9bjrna10daj13gqws6x4"))))
+        (base32 "17r5zfk9yh7jhgdb360dlzx5fx9lsbmalasx6zgxw9v9vjycjb9h"))))
     (build-system gnu-build-system)
     (inputs
      `(("openssl" ,openssl)))
@@ -495,7 +575,7 @@ operating systems.")
 (define-public neomutt
   (package
     (name "neomutt")
-    (version "20201127")
+    (version "20210205")
     (source
      (origin
        (method git-fetch)
@@ -504,7 +584,7 @@ operating systems.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1yhpz591jhcjpwllgppwf7vl7z2rnaqfphsvqd1sihd9k4lwch06"))))
+        (base32 "15kr9nvb4j8lx5rl2yapv231rbp4sbn709vv82pfhx5717x3yf00"))))
     (build-system gnu-build-system)
     (inputs
      `(("cyrus-sasl" ,cyrus-sasl)
@@ -2685,14 +2765,14 @@ easily (one at a time).")
 (define-public mpop
   (package
     (name "mpop")
-    (version "1.4.12")
+    (version "1.4.13")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://marlam.de/mpop/releases/"
                            "mpop-" version ".tar.xz"))
        (sha256
-        (base32 "02j8qfd44dfyq1sq7r9znj9y6wam39ncch1sc8chcdlw5nsmaqsz"))))
+        (base32 "1hbx69d6ivbvjajrcp54fdb3g1ms4ydj0ybf3bfhlravqrk88jdk"))))
     (build-system gnu-build-system)
     (inputs
      `(("gnutls" ,gnutls)))
@@ -3136,6 +3216,39 @@ writing OpenSMTPd filters.")
 messages with @acronym{DKIM, DomainKeys Identified Mail} (RFC 4871).")
     (license license:expat)))
 
+(define-public opensmtpd-filter-rspamd
+  (package
+    (name "opensmtpd-filter-rspamd")
+    (version "0.1.7")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/poolpOrg/filter-rspamd")
+                    (commit (string-append "v" version))))
+              (sha256
+               (base32 "1qhrw20q9y44ffgx5k14nvqc9dh47ihywgzza84g0zv9xgif7hd5"))
+              (file-name (git-file-name name version))))
+    (build-system go-build-system)
+    (arguments
+     `(#:import-path "github.com/poolpOrg/filter-rspamd"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'set-bootstrap-variables
+           (lambda* (#:key outputs inputs #:allow-other-keys)
+             ;; Tell the build system where to install binaries
+             (let* ((out (assoc-ref outputs "out"))
+                    (libexec (string-append out "/libexec/opensmtpd")))
+               (setenv "GOBIN" libexec)))))))
+    (native-inputs
+     `(("opensmtpd" ,opensmtpd)))
+    (home-page "https://github.com/poolpOrg/filter-rspamd")
+    (synopsis "OpenSMTPd filter to request an Rspamd analysis")
+    (description
+     "The @command{filter-rspamd} OpenSMTPd filter implements the
+Rspamd protocol and allows OpenSMTPd to request an Rspamd analysis of
+an SMTP transaction before a message is committed to queue.")
+    (license license:isc)))
+
 (define-public mailman
   (package
     (name "mailman")
@@ -3791,13 +3904,13 @@ servers.  The 4rev1 and 4 versions of IMAP are supported.")
 (define-public urlscan
   (package
     (name "urlscan")
-    (version "0.9.5")
+    (version "0.9.6")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "urlscan" version))
         (sha256
-         (base32 "07vcwirap0p4dkqrqblfn1q017slgd8m6qyijvbi3gxnr09pbyx2"))))
+         (base32 "09lxi7dhn49fpb3ij4cgrhj3qqqqs9rcxbjb7p9smw5wblrqpzga"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-urwid" ,python-urwid)))
@@ -3839,8 +3952,8 @@ It is a replacement for the @command{urlview} program.")
     (license license:gpl2+)))
 
 (define-public mumi
-  (let ((commit "8c82c8f104ff0013e2bfb3d6b4277280f32446a6")
-        (revision "3"))
+  (let ((commit "9f070bd90adc67064cd8aff4e40f303d5957ef4a")
+        (revision "5"))
     (package
       (name "mumi")
       (version (git-version "0.0.1" revision commit))
@@ -3852,7 +3965,7 @@ It is a replacement for the @command{urlview} program.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1gkwagy7qplzq2x2zqsbrwhlilxviqb0dqhrvnnhxd7z8wvyzcsi"))))
+                  "1ym1j3nzy8qhd1ydadccbgm0nckkmnq3vnz9qh9x8rasx7zg1ldp"))))
       (build-system gnu-build-system)
       (arguments
        `(#:modules ((guix build gnu-build-system)
diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm
index 95382bf92d..06a8093600 100644
--- a/gnu/packages/man.scm
+++ b/gnu/packages/man.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2014, 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2014, 2015, 2017, 2018, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 David Thompson <dthompson2@worcester.edu>
 ;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
@@ -32,6 +32,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system ruby)
   #:use-module (guix utils)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages dbm)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages gawk)
@@ -222,6 +223,50 @@ accessed using the man command.  It uses a Berkeley DB database in place of
 the traditional flat-text whatis databases.")
     (license license:gpl2+)))
 
+(define-public mandoc
+  (package
+    (name "mandoc")
+    (version "1.14.5")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://mandoc.bsd.lv/snapshots/mandoc-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1xyqllxpjj1kimlipx11pzyywf5c25i4wmv0lqm7ph3gnlnb86c2"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:test-target "regress"
+       #:phases (modify-phases %standard-phases
+                  (add-before 'configure 'set-prefix
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (substitute* "configure"
+                        (("^CC=.*")
+                         (string-append "CC=" ,(cc-for-target) "\n"))
+                        (("^DEFCFLAGS=\\\\\"")
+                         "DEFCFLAGS=\"-O2 ")
+                        (("^UTF8_LOCALE=.*")      ;used for tests
+                         "UTF8_LOCALE=en_US.UTF-8\n")
+                        (("^MANPATH_(BASE|DEFAULT)=.*" _ which)
+                         (string-append "MANPATH_" which "="
+                                        "/run/current-system/profile/share/man\n"))
+                        (("^PREFIX=.*")
+                         (string-append "PREFIX=" (assoc-ref outputs "out")
+                                        "\n"))))))))
+    (native-inputs `(("perl" ,perl)))             ;used to run tests
+    (inputs `(("zlib" ,zlib)))
+    (synopsis "Tools for BSD mdoc and man pages")
+    (description
+     "mandoc is a suite of tools compiling mdoc, the roff macro language of
+choice for BSD manual pages, and man, the predominant historical language for
+UNIX manuals.  It is small and quite fast.  The main component of the toolset
+is the @command{mandoc} utility program, based on the libmandoc validating
+compiler, to format output for UTF-8 and ASCII UNIX terminals, HTML 5,
+PostScript, and PDF.  Additional tools include the @command{man} viewer, and
+@command{apropos} and @command{whatis}.")
+    (home-page "https://mandoc.bsd.lv/")
+    (license license:isc)))
+
 (define-public man-pages
   (package
     (name "man-pages")
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 879af45dc7..1f96ed907e 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -12,7 +12,7 @@
 ;;; Copyright © 2015 Fabian Harfert <fhmgufs@web.de>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016, 2018, 2020 Kei Kebreau <kkebreau@posteo.net>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017, 2018, 2019, 2020 Paul Garlick <pgarlick@tourbillion-technology.com>
@@ -34,7 +34,7 @@
 ;;; Copyright © 2019 Steve Sprang <scs@stevesprang.com>
 ;;; Copyright © 2019 Robert Smith <robertsmith@posteo.net>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
-;;; Copyright © 2020 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2020, 2021 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2020 R Veera Kumar <vkor@vkten.in>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
@@ -43,6 +43,8 @@
 ;;; Copyright © 2020 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2020 Martin Becze <mjbecze@riseup.net>
 ;;; Copyright © 2021 Gerd Heber <gerd.heber@gmail.com>
+;;; Copyright © 2021 Franck Pérignon <franck.perignon@univ-grenoble-alpes.fr>
+;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -2292,7 +2294,8 @@ ASCII text files using Gmsh's own scripting language.")
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ;;("python-astropy" ,python-astropy) ;; FIXME: Package this.
-       ("qttools" ,qttools)))
+       ("qttools" ,qttools)
+       ("python-sip" ,python-sip-4)))
     (inputs
      `(("ghostscript" ,ghostscript) ;optional, for EPS/PS output
        ("python-dbus" ,python-dbus)
@@ -3249,6 +3252,63 @@ YACC = bison -pscotchyy -y -b y
     (synopsis
      "Programs and libraries for graph algorithms (32-bit integers)")))
 
+(define-public scotch-shared
+  (package (inherit scotch)
+    (name "scotch-shared")
+    (native-inputs
+     `(("gcc" ,gcc)
+       ("flex" ,flex)
+       ("bison" ,bison)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments scotch)
+       ((#:phases scotch-shared-phases)
+        `(modify-phases ,scotch-shared-phases
+           (replace
+            'configure
+           (lambda _
+             ;; Otherwise, the RUNPATH will lack the final path component.
+             (setenv "RPATHFLAGS" (string-append "-Wl,-rpath="
+                                              (assoc-ref %outputs "out") "/lib"))
+            (call-with-output-file "Makefile.inc"
+              (lambda (port)
+                (format port "
+EXE =
+LIB = .so
+OBJ = .o
+MAKE = make
+AR = gcc
+ARFLAGS = -shared -o
+CAT = cat
+CCS = gcc
+CCP = mpicc
+CCD = gcc
+CPPFLAGS =~{ -D~a~}
+CFLAGS = -O2 -g -fPIC $(CPPFLAGS) $(RPATHFLAGS)
+CLIBFLAGS = -shared -fPIC
+LDFLAGS = -lz -lm -lrt -lpthread -Xlinker --no-as-needed
+CP = cp
+LEX = flex -Pscotchyy -olex.yy.c
+LN = ln
+MKDIR = mkdir
+MV = mv
+RANLIB = echo
+YACC = bison -pscotchyy -y -b y
+"
+                        '("COMMON_FILE_COMPRESS_GZ"
+                          "COMMON_PTHREAD"
+                          "COMMON_RANDOM_FIXED_SEED"
+                          "INTSIZE64"             ;use 'int64_t'
+                          ;; Prevents symbolc clashes with libesmumps
+                          "SCOTCH_RENAME"
+                          ;; XXX: Causes invalid frees in superlu-dist tests
+                          ;; "SCOTCH_PTHREAD"
+                          ;; "SCOTCH_PTHREAD_NUMBER=2"
+                          "restrict=__restrict"
+                          ))))#t))
+           (delete 'check)))))
+     (synopsis
+      "Programs and libraries for graph algorithms (shared libraries version)")))
+
 (define-public pt-scotch
   (package (inherit scotch)
     (name "pt-scotch")
@@ -3296,6 +3356,28 @@ YACC = bison -pscotchyy -y -b y
     (synopsis
      "Programs and libraries for graph algorithms (with MPI and 32-bit integers)")))
 
+(define-public pt-scotch-shared
+  (package (inherit scotch-shared)
+    (name "pt-scotch-shared")
+    (propagated-inputs
+     `(("openmpi" ,openmpi)))           ;Headers include MPI headers
+    (arguments
+     (substitute-keyword-arguments (package-arguments scotch-shared)
+       ((#:phases scotch-shared-phases)
+        `(modify-phases ,scotch-shared-phases
+           (replace
+            'build
+            (lambda _
+              (invoke "make" (format #f "-j~a" (parallel-job-count))
+                      "ptscotch" "ptesmumps")
+
+              ;; Install the serial metis compatibility library
+              (invoke "make" "-C" "libscotchmetis" "install")))
+           (add-before 'check 'mpi-setup
+             ,%openmpi-setup)))))
+    (synopsis "Graph algorithms (shared libraries version, with MPI)")))
+
+
 (define-public metis
   (package
     (name "metis")
@@ -3308,6 +3390,9 @@ YACC = bison -pscotchyy -y -b y
        (sha256
         (base32
          "1cjxgh41r8k6j029yxs8msp3z6lcnpm16g5pvckk35kc7zhfpykn"))))
+    (properties
+     `((release-monitoring-url
+        . "http://glaros.dtc.umn.edu/gkhome/metis/metis/download")))
     (build-system cmake-build-system)
     (inputs
      `(("blas" ,openblas)))
@@ -3745,52 +3830,94 @@ parts of it.")
     (synopsis "Optimized BLAS library based on GotoBLAS (ILP64 version)")
     (license license:bsd-3)))
 
-(define* (make-blis implementation #:optional substitutable?)
-  "Return a BLIS package with the given IMPLEMENTATION (see config/ in the
-source tree for a list of implementations.)
-
-SUBSTITUTABLE? determines whether the package is made available as a
-substitute.
-
-Currently the specialization must be selected at configure-time, but work is
-underway to allow BLIS to select the right optimized kernels at run time:
-<https://github.com/flame/blis/issues/129>."
+(define-public blis
   (package
-    (name (if (string=? implementation "reference")
-              "blis"
-              (string-append "blis-" implementation)))
-    (version "0.2.2")
+    (name "blis")
+    (version "0.8.1")
     (home-page "https://github.com/flame/blis")
     (source (origin
               (method git-fetch)
               (uri (git-reference (url home-page) (commit version)))
               (sha256
                (base32
-                "1wr79a50nm4abhw8w3sn96nmwp5mrzifcigk7khw9qcgyyyqayfh"))
+                "05ifil6jj9424sr8kmircl8k4bmxnl3y12a79vwj1kxxva5gz50g"))
               (file-name (git-file-name "blis" version))))
+    (native-inputs
+     `(("python" ,python)
+       ("perl" ,perl)))
     (build-system gnu-build-system)
     (arguments
-     `(#:test-target "test"
-
-       #:substitutable? ,substitutable?
-
-       #:phases (modify-phases %standard-phases
-                  (replace 'configure
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      ;; This is a home-made 'configure' script.
-                      (let ((out (assoc-ref outputs "out")))
-                        (invoke "./configure" "-p" out
-                                "-d" "opt"
-                                "--disable-static"
-                                "--enable-shared"
-                                "--enable-threading=openmp"
-
-                                ,implementation))))
-                  (add-before 'check 'show-test-output
-                    (lambda _
-                      ;; By default "make check" is silent.  Make it verbose.
-                      (system "tail -F output.testsuite &")
-                      #t)))))
+     `(#:modules
+       ((guix build gnu-build-system)
+        (guix build utils)
+        (srfi srfi-1))
+        #:test-target "test"
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs
+                           target
+                           system
+                           (configure-flags '())
+                           #:allow-other-keys)
+             ;; This is a home-made 'configure' script.
+             (let* ((out (assoc-ref outputs "out"))
+                     ;; Guix-specific support for choosing the configuration
+                     ;; via #:configure-flags: see below for details.
+                    (config-flag-prefix "--blis-config=")
+                    (maybe-config-flag (find
+                                        (lambda (s)
+                                          (string-prefix? config-flag-prefix s))
+                                        configure-flags))
+                    (configure-flags (if maybe-config-flag
+                                         (delete maybe-config-flag
+                                                 configure-flags)
+                                         configure-flags))
+                    ;; Select the "configuration" to build.
+                    ;; The "generic" configuration is non-optimized but
+                    ;; portable (no assembly).
+                    ;; The "x86_64" configuration family includes
+                    ;; sub-configurations for all supported
+                    ;; x86_64 microarchitectures.
+                    ;; BLIS currently lacks runtime hardware detection
+                    ;; for other architectures: see
+                    ;; <https://github.com/flame/blis/commit/c534da6>.
+                    ;; Conservatively, we stick to "generic" on armhf,
+                    ;; aarch64, and ppc64le for now. (But perhaps
+                    ;; "power9", "cortexa9", and "cortexa57" might be
+                    ;; general enough to use?)
+                    ;; Another approach would be to use the "auto"
+                    ;; configuration and make this package
+                    ;; non-substitutable.
+                    ;; The build is fairly intensive, though.
+                    (blis-config
+                     (cond
+                      (maybe-config-flag
+                       (substring maybe-config-flag
+                                  (string-length config-flag-prefix)))
+                      ((string-prefix? "x86_64" (or target system))
+                       "x86_64")
+                      (else
+                       "generic")))
+                    (configure-args
+                     `("-p" ,out
+                       "-d" "opt"
+                       "--disable-static"
+                       "--enable-shared"
+                       "--enable-threading=openmp"
+                       "--enable-verbose-make"
+                       ,@configure-flags
+                       ,blis-config)))
+               (format #t "configure args: ~s~%" configure-args)
+               (apply invoke
+                      "./configure"
+                      configure-args)
+               #t)))
+         (add-before 'check 'show-test-output
+           (lambda _
+             ;; By default "make check" is silent.  Make it verbose.
+             (system "tail -F output.testsuite &")
+             #t)))))
     (synopsis "High-performance basic linear algebra (BLAS) routines")
     (description
      "BLIS is a portable software framework for instantiating high-performance
@@ -3802,35 +3929,12 @@ it also includes a BLAS compatibility layer which gives application developers
 access to BLIS implementations via traditional BLAS routine calls.")
     (license license:bsd-3)))
 
-(define-public blis
-  ;; This is the "reference" implementation, which is the non-optimized but
-  ;; portable variant (no assembly).
-  (make-blis "reference" #t))
+(define-public blis-sandybridge (deprecated-package "blis-sandybridge" blis))
+(define-public blis-haswell (deprecated-package "blis-haswell" blis))
+(define-public blis-knl (deprecated-package "blis-knl" blis))
 
 (define ignorance blis)
 
-(define-syntax-rule (blis/x86_64 processor)
-  "Expand to a package specialized for PROCESSOR."
-  (package
-    (inherit (make-blis processor))
-    (supported-systems '("x86_64-linux"))))
-
-(define-public blis-sandybridge
-  ;; BLIS specialized for Sandy Bridge processors (launched 2011):
-  ;; <http://ark.intel.com/products/codename/29900/Sandy-Bridge>.
-  (blis/x86_64 "sandybridge"))
-
-(define-public blis-haswell
-  ;; BLIS specialized for Haswell processors (launched 2013):
-  ;; <http://ark.intel.com/products/codename/42174/Haswell>.
-  (blis/x86_64 "haswell"))
-
-(define-public blis-knl
-  ;; BLIS specialized for Knights Landing processor (launched 2016):
-  ;; <http://ark.intel.com/products/series/92650/Intel-Xeon-Phi-x200-Product-Family>.
-  (blis/x86_64 "knl"))
-
-
 (define-public openlibm
   (package
     (name "openlibm")
@@ -3911,7 +4015,7 @@ Fresnel integrals, and similar related functions as well.")
 (define-public suitesparse
   (package
     (name "suitesparse")
-    (version "5.8.1")
+    (version "5.9.0")
     (source
      (origin
        (method git-fetch)
@@ -3921,7 +4025,7 @@ Fresnel integrals, and similar related functions as well.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0qjlyfxs8s48rs63c2fzspisgq1kk4bwkgnhmh125hgkdhrq2w1c"))
+         "1zhkix58afw92s7p291prljdm3yi0pjg1kbi3lczdb8rb14jkz5n"))
        (patches (search-patches "suitesparse-mongoose-cmake.patch"))
        (modules '((guix build utils)))
        (snippet
@@ -3931,9 +4035,9 @@ Fresnel integrals, and similar related functions as well.")
            #t))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f  ;no "check" target
+     `(#:tests? #f  ;no "check" target
        #:make-flags
-       (list "CC=gcc"
+       (list (string-append "CC=" ,(cc-for-target))
              "TBB=-ltbb"
              "MY_METIS_LIB=-lmetis"
              ;; Flags for cmake (required to build GraphBLAS and Mongoose)
diff --git a/gnu/packages/matrix.scm b/gnu/packages/matrix.scm
index 8a3a1283fa..5c2b194d07 100644
--- a/gnu/packages/matrix.scm
+++ b/gnu/packages/matrix.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2020 Alex ter Weele <alex.ter.weele@gmail.com>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
+;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,6 +32,30 @@
   #:use-module (guix download)
   #:use-module (guix packages))
 
+(define-public python-matrix-client
+  (package
+    (name "python-matrix-client")
+    (version "0.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "matrix-client" version))
+       (sha256
+        (base32
+         "1mgjd0ymf9mvqjkvgx3xjhxap7rzdmpa21wfy0cxbw2xcswcrqyw"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-requests" ,python-requests)))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-pytest-runner" ,python-pytest-runner)
+       ("python-responses" ,python-responses)))
+    (home-page
+     "https://github.com/matrix-org/matrix-python-sdk")
+    (synopsis "Client-Server SDK for Matrix")
+    (description "This package provides client-server SDK for Matrix.")
+    (license license:asl2.0)))
+
 (define-public python-matrix-synapse-ldap3
   (package
     (name "python-matrix-synapse-ldap3")
@@ -61,13 +86,13 @@ an LDAP server.")
 (define-public synapse
   (package
     (name "synapse")
-    (version "1.25.0")
+    (version "1.29.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "matrix-synapse" version))
               (sha256
                (base32
-                "0382qcsmgvg24p0xvb37kn3y1kd3bn363kblgwg58iy92df0pga4"))))
+                "0if2yhpz8psg0661401mvxznldbfhk2j9rhbs25jdaqm9jsv6907"))))
     (build-system python-build-system)
     ;; TODO Run tests with ‘PYTHONPATH=. trial3 tests’.
     (propagated-inputs
diff --git a/gnu/packages/mes.scm b/gnu/packages/mes.scm
index b4b7bcb6b5..750ec2e67a 100644
--- a/gnu/packages/mes.scm
+++ b/gnu/packages/mes.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2017, 2018, 2019, 2020, 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -98,14 +99,14 @@ extensive examples, including parsers for the Javascript and C99 languages.")
 (define-public nyacc
   (package
     (inherit nyacc-0.99)
-    (version "1.03.0")
+    (version "1.03.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://savannah/nyacc/nyacc-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1vdiqpm3p0ndmpmkzcpkpjvgklfsk4wxrhkixdxbczpafdfl635p"))
+                "1s7kli288l4pizjaarx8m6jg7g0mgfy8rpbs9lpzg8la7wr5rvp4"))
               (modules '((guix build utils)))
               (snippet
                '(begin
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index af8122f1a9..4cf15e5563 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2015, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
 ;;; Copyright © 2016, 2017, 2018, 2019 Clément Lassieur <clement@lassieur.org>
@@ -27,6 +27,7 @@
 ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
 ;;; Copyright © 2020, 2021 Robert Karszniewicz <avoidr@posteo.de>
+;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -89,6 +90,7 @@
   #:use-module (gnu packages lua)
   #:use-module (gnu packages man)
   #:use-module (gnu packages markup)
+  #:use-module (gnu packages matrix)
   #:use-module (gnu packages mono)
   #:use-module (gnu packages mpd)
   #:use-module (gnu packages ncurses)
@@ -101,6 +103,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
@@ -785,7 +788,7 @@ authentication.")
 (define-public pidgin
   (package
     (name "pidgin")
-    (version "2.14.1")
+    (version "2.14.3")
     (source
      (origin
        (method url-fetch)
@@ -793,11 +796,9 @@ authentication.")
         (string-append "mirror://sourceforge/pidgin/Pidgin/"
                        version "/pidgin-" version ".tar.gz"))
        (sha256
-        (base32 "1c4dzxg9c3d9zfqqa7jwijj9rv9fm6w95igmpljwy88lxq7v5w11"))
+        (base32 "0vdfnm96m1kh4gm6xn6i7s9c5zjh1p18jg4595k4p5bplvd6fmm8"))
        (patches
-        (search-patches
-         "pidgin-add-search-path.patch"
-         "pidgin-vv-gst.patch"))
+        (search-patches "pidgin-add-search-path.patch"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -874,7 +875,16 @@ authentication.")
                        "/lib")
         (string-append "--with-tkconfig="
                        (assoc-ref %build-inputs "tk")
-                       "/lib"))))
+                       "/lib"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'eat-leftovers
+           ;; XXX Remove when updating beyond 2.14.3.  Equivalent to
+           ;; <https://keep.imfreedom.org/pidgin/pidgin/rev/d4d72fde60c2>.
+           (lambda _
+             ;; Remove a lingering [broken] oscar reference.
+             (substitute* "libpurple/tests/check_libpurple.c"
+               ((".*oscar_util_suite.*") "")))))))
     (native-search-paths
      (list
       (search-path-specification
@@ -1616,99 +1626,6 @@ guidelines.  It provides an easy to use application that allows you to
 connect with friends and family without anyone else listening in.")
     (license license:gpl3+)))
 
-(define-public pybitmessage
-  (package
-    (name "pybitmessage")
-    (version "0.6.3.2")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/Bitmessage/PyBitmessage")
-             (commit version)))
-       (file-name (string-append name "-" version "-checkout"))
-       (sha256
-        (base32
-         "1lmhbpwsqh1v93krlqqhafw2pc3y0qp8zby186yllbph6s8kdp35"))))
-    (propagated-inputs
-     ;; TODO:
-     ;; Package "pyopencl", required in addition to numpy for OpenCL support.
-     ;; Package "gst123", required in addition to alsa-utils and
-     ;; mpg123 for sound support.
-     `(("python2-msgpack" ,python2-msgpack)
-       ("python2-pythondialog" ,python2-pythondialog)
-       ("python2-pyqt-4" ,python2-pyqt-4)
-       ("python2-sip" ,python2-sip)
-       ("python2-pysqlite" ,python2-pysqlite)
-       ("python2-pyopenssl" ,python2-pyopenssl)))
-    (native-inputs
-     `(("openssl" ,openssl)))
-    (build-system python-build-system)
-    (arguments
-     `(#:modules ((guix build python-build-system)
-                  (guix build utils))
-       #:tests? #f ;no test target
-       #:python ,python-2
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-unmatched-python-shebangs
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "src/bitmessagemain.py"
-               (("#!/usr/bin/env python2.7")
-                (string-append "#!" (which "python"))))
-             (substitute* "src/bitmessagecli.py"
-               (("#!/usr/bin/env python2.7.x")
-                (string-append "#!" (which "python"))))
-             #t))
-         (add-after 'unpack 'fix-depends
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "src/depends.py"
-               (("libcrypto.so")
-                (string-append (assoc-ref inputs "openssl")
-                               "/lib/libcrypto.so")))
-             #t))
-         (add-after 'unpack 'fix-local-files-in-paths
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "src/proofofwork.py"
-               (("bitmsghash.so")
-                (string-append (assoc-ref outputs "out")
-                               "/lib/bitmsghash.so")))
-             #t))
-         (add-after 'unpack 'fix-pyelliptic
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "src/pyelliptic/openssl.py"
-               (("libcrypto.so")
-                (string-append (assoc-ref inputs "openssl")
-                               "/lib/libcrypto.so"))
-               (("libssl.so")
-                (string-append (assoc-ref inputs "openssl")
-                               "/lib/libssl.so")))
-             #t))
-         (add-after 'unpack 'noninteractive-build
-           ;; This applies upstream commit 4c597d3f7cf9f83a763472aa165a1a4292019f20
-           (lambda _
-             (substitute* "setup.py"
-               (("except NameError")
-                "except EOFError, NameError"))
-             #t))
-         ;; XXX: python setup.py does not build and install bitmsghash,
-         ;; without it PyBitmessage tries to compile it at first run
-         ;; in the store, which due to obvious reasons fails. Do it
-         ;; and place it in /lib.
-         (add-after 'unpack 'build-and-install-bitmsghash
-           (lambda* (#:key outputs #:allow-other-keys)
-             (with-directory-excursion "src/bitmsghash"
-               (system* "make")
-               (install-file "bitmsghash.so"
-                             (string-append (assoc-ref outputs "out") "/lib")))
-             #t)))))
-    (license license:expat)
-    (description
-     "Distributed and trustless peer-to-peer communications protocol
-for sending encrypted messages to one person or many subscribers.")
-    (synopsis "Distributed peer-to-peer communication")
-    (home-page "https://bitmessage.org/")))
-
 (define-public ytalk
   (package
     (name "ytalk")
@@ -2511,7 +2428,13 @@ QMatrixClient project.")
            ;; Relax overly strict package version specifications.
            (lambda _
              (substitute* "setup.py"
-               (("==") ">="))
+               (("==") ">=")
+               ((",<.*'") "'"))
+             #t))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "pytest" "hangups"))
              #t)))))
     (propagated-inputs
      `(("python-aiohttp" ,python-aiohttp)
@@ -2952,4 +2875,102 @@ social and chat platform.")
 designed for experienced users.")
     (license license:gpl2+)))
 
+(define-public python-zulip
+  (package
+    (name "python-zulip")
+    (version "0.7.1")
+    (source
+     (origin
+       ;; There is no source on Pypi.
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/zulip/python-zulip-api")
+              (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0da1ki1v252avy27j6d7snnc0gyq0xa9fypm3qdmxhw2w79d6q36"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'cd-to-zulip-dir
+           (lambda _
+             (chdir "zulip")
+             #t))
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (let ((test-zulip "../tools/test-zulip"))
+               (when tests?
+                 (add-installed-pythonpath inputs outputs)
+                 (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
+                 (patch-shebang test-zulip)
+                 (invoke test-zulip))
+               #t))))))
+    (propagated-inputs
+     `(("python-matrix-client" ,python-matrix-client)
+       ("python-pyopenssl" ,python-pyopenssl)
+       ("python-requests" ,python-requests)
+       ("python-six" ,python-six)))
+    (native-inputs
+     `(("python-cython" ,python-cython)
+       ("python-distro" ,python-distro)
+       ("python-pytest" ,python-pytest)))
+    (home-page "https://github.com/zulip/python-zulip-api")
+    (synopsis "Zulip's API Python bindings")
+    (description
+     "This package provides Python bindings to Zulip's API.")
+    (license license:asl2.0)))
+
+(define-public zulip-term
+  (package
+    (name "zulip-term")
+    (version "0.5.2")
+    (source
+     (origin
+       ;; Pypi package doesn't ship tests.
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/zulip/zulip-terminal")
+              (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1xhhy3v4wck74a83avil0rnmsi2grrh03cww19n5mv80p2q1cjmf"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (substitute* "setup.py"
+             (("\\=\\=1\\.7") ">=1.7")  ; pytest-mock
+             (("\\=\\=2\\.5") ">=2.5")  ; pytest-cov
+             (("4\\.5\\.2") "4.4.2"))   ; lxml
+           #t))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; Delete failing tests.
+               (delete-file "tests/cli/test_run.py")
+               (invoke "pytest"))
+             #t)))))
+    (inputs
+     `(("python-beautifulsoup4" ,python-beautifulsoup4)
+       ("python-lxml" ,python-lxml)
+       ("python-mypy-extensions" ,python-mypy-extensions)
+       ("python-urwid" ,python-urwid)
+       ("python-urwid-readline" ,python-urwid-readline)
+       ("python-zulip" ,python-zulip)))
+    (native-inputs
+     `(("python-distro" ,python-distro)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-cov" ,python-pytest-cov)
+       ("python-pytest-mock" ,python-pytest-mock)))
+    (home-page "https://github.com/zulip/zulip-terminal")
+    (synopsis "Zulip's official terminal client")
+    (description "This package contains Zulip's official terminal client.")
+    (license license:asl2.0)))
+
 ;;; messaging.scm ends here
diff --git a/gnu/packages/monitoring.scm b/gnu/packages/monitoring.scm
index 46e1903704..22b02a561b 100644
--- a/gnu/packages/monitoring.scm
+++ b/gnu/packages/monitoring.scm
@@ -160,7 +160,7 @@ etc. via a Web interface.  Features include:
 (define-public zabbix-agentd
   (package
     (name "zabbix-agentd")
-    (version "5.2.5")
+    (version "5.2.6")
     (source
      (origin
        (method url-fetch)
@@ -168,7 +168,7 @@ etc. via a Web interface.  Features include:
              "https://cdn.zabbix.com/zabbix/sources/stable/"
              (version-major+minor version) "/zabbix-" version ".tar.gz"))
        (sha256
-        (base32 "1iaby7rablakx91hajnkmjcc4zkvrq7xsvlhss3lw5drm12rf3ff"))))
+        (base32 "100n1rv7r4pqagxxifzpcza5bhrr2fklzx7gndxwiyq4597p1jvn"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/mp3.scm b/gnu/packages/mp3.scm
index 675e18ed7e..ff67d9e9e5 100644
--- a/gnu/packages/mp3.scm
+++ b/gnu/packages/mp3.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2014, 2015, 2017, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2017, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
@@ -208,7 +208,7 @@ a highly stable and efficient implementation.")
 (define-public taglib
   (package
     (name "taglib")
-    (version "1.12-beta-1")
+    (version "1.12")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -217,7 +217,7 @@ a highly stable and efficient implementation.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1mp6w2ikniw8w6d5wr0h20j0ijg8jw7s9dli5a8k9znpznvxpym4"))))
+                "0q7dkn5rh9v6b0scmcp2qmjv3iransafmpn6jvgid0yq75m2nqd2"))))
     (build-system cmake-build-system)
     (arguments
       '(#:tests? #f ; Tests are not ran with BUILD_SHARED_LIBS on.
@@ -405,7 +405,8 @@ command-line tool as well as a C library, libmpg123.")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/mpg321/mpg321/"
-                                 version "/mpg321-" version ".tar.gz"))
+                                 version "/mpg321_" version ".orig.tar.gz"))
+             (file-name (string-append "mpg321-" version ".tar.gz"))
              (sha256
               (base32
                "0ki8mh76bbmdh77qsiw682dvi8y468yhbdabqwg05igmwc1wqvq5"))
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 042e4e7510..4288f8867d 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -34,6 +34,9 @@
 ;;; Copyright © 2019 Riku Viitanen <riku.viitanen0@gmail.com>
 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
 ;;; Copyright © 2021 Leo Prikler <leo.prikler@student.tugraz.at>
+;;; Copyright © 2021 Vinicius Monego <monego@posteo.net>
+;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
+;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -134,6 +137,7 @@
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages pulseaudio) ;libsndfile
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
@@ -141,6 +145,7 @@
   #:use-module (gnu packages readline)
   #:use-module (gnu packages rsync)
   #:use-module (gnu packages sdl)
+  #:use-module (gnu packages sphinx)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages stb)
   #:use-module (gnu packages tcl)
@@ -152,6 +157,7 @@
   #:use-module (gnu packages video)
   #:use-module (gnu packages vim)       ;for 'xxd'
   #:use-module (gnu packages web)
+  #:use-module (gnu packages webkit)
   #:use-module (gnu packages wxwidgets)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
@@ -447,7 +453,7 @@ playing your music.")
 (define-public strawberry
   (package
     (name "strawberry")
-    (version "0.8.5")
+    (version "0.9.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -456,7 +462,7 @@ playing your music.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0lfbbmhfzwlhnjhzfk5zn8h71cabx47pzfkcw2nylkbqkz83r57r"))
+                "0d9asg21j9ai23sb35cimws8bd8fsnpha777rgscraa7i09q0rx2"))
               (modules '((guix build utils)
                          (ice-9 regex)))
               (snippet
@@ -480,9 +486,6 @@ playing your music.")
     (build-system cmake-build-system)
     (arguments
      `(#:test-target "run_strawberry_tests"
-       #:configure-flags
-       (list "-DUSE_SYSTEM_TAGLIB=TRUE"
-             "-DBUILD_TESTS=TRUE")
        #:phases
        (modify-phases %standard-phases
          (add-after 'install 'wrap-program
@@ -716,7 +719,7 @@ settings (aliasing, linear interpolation and cubic interpolation).")
 (define-public hydrogen
   (package
     (name "hydrogen")
-    (version "1.0.1")
+    (version "1.0.2")
     (source
      (origin
        (method git-fetch)
@@ -725,7 +728,7 @@ settings (aliasing, linear interpolation and cubic interpolation).")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0snljpvbcgikhz610c325dgvayi0k512p3bglck9vvi90wsqx7l1"))))
+        (base32 "0nhn2njs8yyxcijxv5zgymf3211y6anzm0v9kn4vnd8kai7zwxxp"))))
     (build-system cmake-build-system)
     (arguments
      `(#:test-target "tests"
@@ -1490,6 +1493,57 @@ Guile.")
     ;; more than an hour of silence, so double the max silent time.
     (properties `((max-silent-time . 7200)))))
 
+(define-public python-abjad
+  (package
+    (name "python-abjad")
+    (version "3.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+         (url "https://github.com/Abjad/abjad")
+         (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1dzf5v7pawbzkb4qxp4s5z4r3gibkk705pag83yvgzkx6fd6jf2g"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-source
+           (lambda _
+             (substitute* "setup.py"
+               (("uqbar>=0.5.1, <0.5.0") "uqbar>=0.5.0"))
+             #t))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; See: https://stackoverflow.com/a/34140498
+               (invoke "python" "-m" "pytest" "tests")
+               #t))))))
+    (native-inputs
+     `(("lilypond" ,lilypond)
+       ("python-black" ,python-black)
+       ("python-flake8" ,python-flake8)
+       ("python-iniconfig" ,python-iniconfig)
+       ("python-isort" ,python-isort)
+       ("python-mypy" ,python-mypy)
+       ("python-ply" ,python-ply)
+       ("python-pytest" ,python-pytest-6)
+       ("python-pytest-cov" ,python-pytest-cov)
+       ("python-sphinx-autodoc-typehints" ,python-sphinx-autodoc-typehints)))
+    (propagated-inputs
+     `(("python-quicktions" ,python-quicktions)
+       ("python-roman" ,python-roman)
+       ("python-six" ,python-six)
+       ("python-uqbar" ,python-uqbar)))
+    (home-page "https://abjad.github.io")
+    (synopsis "Python API for building LilyPond files")
+    (description
+     "This package provides a Python API for building LilyPond files.")
+    (license license:expat)))
+
 (define-public non-sequencer
   ;; The latest tagged release is three years old and uses a custom build
   ;; system, so we take the last commit.
@@ -2630,18 +2684,17 @@ browser.")
 (define-public drumstick
   (package
     (name "drumstick")
-    (version "2.0.0")
+    (version "2.1.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/drumstick/"
                                   version "/drumstick-" version ".tar.bz2"))
               (sha256
                (base32
-                "088j0w3kr9i4lh78y0js0q8adlfzkr89xq2dxc8y3bafsgihax1x"))))
+                "06lz4kzpgg5lalcjb14pi35jxca5f4j6ckqf6mdxs1k42dfhjpjp"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ; no test target
-       #:configure-flags '("-DLIB_SUFFIX=")
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'fix-docbook
@@ -2664,7 +2717,7 @@ browser.")
        ("docbook-xsl" ,docbook-xsl)
        ("doxygen" ,doxygen)
        ("graphviz" ,graphviz))) ; for dot
-    (home-page "http://drumstick.sourceforge.net/")
+    (home-page "https://drumstick.sourceforge.io/")
     (synopsis "C++ MIDI library")
     (description
      "Drumstick is a set of MIDI libraries using C++/Qt5 idioms and style.  It
@@ -2678,14 +2731,14 @@ backends, including ALSA, OSS, Network and FluidSynth.")
 (define-public vmpk
   (package
     (name "vmpk")
-    (version "0.8.0")
+    (version "0.8.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/vmpk/vmpk/"
                                   version "/vmpk-" version ".tar.bz2"))
               (sha256
                (base32
-                "0wn45c4sbvan7schq93zmsgg5fcf144mbbawxn5kq699vrbc3473"))))
+                "1kv256j13adk4ib7r464gsl4vjhih820bq37ddhqfyfd07wh53a2"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f  ; no test target
@@ -4775,6 +4828,67 @@ list view, and a score editor.  MusE aims to be a complete multitrack virtual
 studio.")
     (license license:gpl2+)))
 
+(define-public gsequencer
+  (package
+    (name "gsequencer")
+    (version "3.7.48")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.savannah.gnu.org/git/gsequencer.git/")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0pqaj09x3lzcj0zbbkqpyaky9i1w462bhhvg1akh73nzwvyy46zd"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'prepare-x-for-test
+           (lambda _
+             (system "Xvfb &")
+             (setenv "DISPLAY" ":0")
+             #t)))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("cunit" ,cunit)
+       ("gettext" ,gettext-minimal)
+       ("gobject-introspection" ,gobject-introspection)
+       ("gtk-doc" ,gtk-doc)
+       ("libtool" ,libtool)
+       ("libxslt" ,libxslt)
+       ("pkg-config" ,pkg-config)
+       ("xorg-server" ,xorg-server-for-tests)))
+    (inputs
+     `(("alsa-lib" ,alsa-lib)
+       ("dssi" ,dssi)
+       ("fftw" ,fftw)
+       ("gst-plugins-base" ,gst-plugins-base)
+       ("gstreamer" ,gstreamer)
+       ("gtk+" ,gtk+)
+       ("jack" ,jack-1)
+       ("ladspa" ,ladspa)
+       ("libinstpatch" ,libinstpatch)
+       ("libsamplerate" ,libsamplerate)
+       ("libsndfile" ,libsndfile)
+       ("libsoup" ,libsoup)
+       ("libuuid" ,util-linux "lib")
+       ("libxml2" ,libxml2)
+       ("lv2" ,lv2)
+       ("pulseaudio" ,pulseaudio)
+       ("webkitgtk" ,webkitgtk)))
+    (home-page "https://nongnu.org/gsequencer/")
+    (synopsis "Advanced Gtk+ Sequencer")
+    (description
+     "GSequencer allows you to play, capture and create music.  There is a piano
+roll, automation and wave form editor.  It has machines for playing drum samples,
+Soundfont2 sound containers and synthesizers.  They usually can be connected to a
+MIDI input source (instrument).  It has support for various audio backends like
+ALSA, Pulseaudio, JACK, OSSv4 and CoreAudio.")
+    (license license:gpl3+)))
+
 (define-public dssi
   (package
     (name "dssi")
diff --git a/gnu/packages/nettle.scm b/gnu/packages/nettle.scm
index 838ead7251..7088e1da4a 100644
--- a/gnu/packages/nettle.scm
+++ b/gnu/packages/nettle.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -71,7 +72,7 @@ cryptographic toolkits for object-oriented languages or in applications
 themselves.")
     (license gpl2+)))
 
-(define-public nettle
+(define-public nettle-3.5
   ;; This version is not API-compatible with version 2.  In particular, lsh
   ;; cannot use it yet.  So keep it separate.
   (package (inherit nettle-2)
@@ -89,3 +90,17 @@ themselves.")
         ;; Build "fat" binaries where the right implementation is chosen
         ;; at run time based on CPU features (starting from 3.1.)
         `(cons "--enable-fat" ,flags))))))
+
+(define-public nettle-3.7
+  (package (inherit nettle-3.5)
+    (version "3.7.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/nettle/nettle-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0qpi1qp3bcvqdsaxy2pzg530db95x8qjahkynxgwvr6dy5760ald"))))))
+
+;;; Upgrading Nettle on master would cause 10000+ packages to be rebuilt.
+(define-public nettle nettle-3.5)
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index ca37b58ab0..08c74dbcb4 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -26,7 +26,7 @@
 ;;; Copyright © 2018, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018, 2020 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
-;;; Copyright © 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2019, 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Vasile Dumitrascu <va511e@yahoo.com>
 ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2019 Timotej Lazar <timotej.lazar@araneo.si>
@@ -42,6 +42,7 @@
 ;;; Copyright © 2020 Jesse Dowell <jessedowell@gmail.com>
 ;;; Copyright © 2020 Hamzeh Nasajpour <h.nasajpour@pantherx.org>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
+;;; Copyright © 2021 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -302,7 +303,7 @@ Android, and ChromeOS.")
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)))
     (inputs
      `(("gstreamer" ,gstreamer)
@@ -448,6 +449,8 @@ performance across unpredictable networks, such as the Internet.")
          (url "https://github.com/sctp/lksctp-tools")
          (commit (string-append "v" version))))
        (file-name (git-file-name name version))
+       (patches
+        (search-patches "lksctp-tools-1.0.18-fix-header-file-name.patch"))
        (sha256
         (base32 "1x4fwzrlzvfa3vcpja97m8w5g9ir2zrh4zs7zksminrnmdrs0dsr"))))
     (build-system gnu-build-system)
@@ -471,6 +474,38 @@ sockets, and also some helper utilities around SCTP.")
       ;; Others.
       license:gpl2+))))
 
+(define-public python-pysctp
+  (package
+    (name "python-pysctp")
+    (version "0.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pysctp" version))
+       (sha256
+        (base32 "14h2qlmfi24bizhvvqkfqfa78pzm3911ibrzy9k94i97xy1978dy"))))
+    (build-system python-build-system)
+    (inputs
+     `(("lksctp-tools" ,lksctp-tools)))
+    (arguments
+     `(#:tests? #f  ;; tests require network
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-setup.py
+           (lambda _
+             (substitute* "setup.py"
+               (("include_dirs\\s*=.*")
+                (string-append "include_dirs = ['.'] + '"
+                               (getenv "C_INCLUDE_PATH") "'.split(':'),"))
+               (("library_dirs\\s*=.*")
+                (string-append "library_dirs = '"
+                               (getenv "LIBRARY_PATH") "'.split(':'),"))))))))
+    (home-page "https://github.com/p1sec/pysctp")
+    (synopsis "Python module for the SCTP protocol stack and library")
+    (description "@code{pysctp} implements the SCTP socket API.  You need a
+SCTP-aware kernel (most are).")
+    (license license:lgpl2.1+)))
+
 (define-public knockd
   (package
     (name "knockd")
@@ -1895,7 +1930,7 @@ loop.")
 (define-public perl-data-validate-ip
   (package
     (name "perl-data-validate-ip")
-    (version "0.27")
+    (version "0.30")
     (source
      (origin
        (method url-fetch)
@@ -1903,7 +1938,7 @@ loop.")
              "mirror://cpan/authors/id/D/DR/DROLSKY/Data-Validate-IP-"
              version ".tar.gz"))
        (sha256
-        (base32 "1mmppyzsh1w2z2h86kvzqxy56wxgs62a3kf8nvcnz76bblir5ap1"))))
+        (base32 "074adrlvkiahj1fdc9nvb95dpfyjzm2jzhi90m8xaw4bw5ipcbzy"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-test-requires" ,perl-test-requires)))
@@ -1922,7 +1957,7 @@ private (reserved).")
 (define-public perl-net-dns
  (package
   (name "perl-net-dns")
-  (version "1.28")
+  (version "1.30")
   (source
     (origin
       (method url-fetch)
@@ -1933,7 +1968,7 @@ private (reserved).")
         (string-append "mirror://cpan/authors/id/N/NL/NLNETLABS/Net-DNS-"
                        version ".tar.gz")))
       (sha256
-       (base32 "0kh2qbhxv005pqb35mdk2bld7cg7xnxl12qvdwv30sgd91aqica7"))))
+       (base32 "1nm560xjg173wvv736ai3ib1gwssyy41gi0yv4j5fqamfav70ph5"))))
   (build-system perl-build-system)
   (inputs
     `(("perl-digest-hmac" ,perl-digest-hmac)))
@@ -2098,22 +2133,19 @@ It is intended primarily for use in testing.")
 (define-public perl-net-cidr-lite
  (package
   (name "perl-net-cidr-lite")
-  (version "0.21")
+  (version "0.22")
   (source
     (origin
       (method url-fetch)
       (uri (string-append
-             "mirror://cpan/authors/id/D/DO/DOUGW/Net-CIDR-Lite-"
+             "mirror://cpan/authors/id/S/ST/STIGTSP/Net-CIDR-Lite-"
              version
              ".tar.gz"))
       (sha256
-        (base32
-          "14shj73zbqmfjbp0qz1fs9j4p2dpvz5hfkm4qfdjbydflbl2b8fg"))))
+        (base32 "05w57db2lx4djb4vixzdr6qgrzyzkk047nl812g7nq8s6k5xh5s3"))))
   (build-system perl-build-system)
-  (home-page
-    "https://metacpan.org/release/Net-CIDR-Lite")
-  (synopsis
-    "Perl extension for merging IPv4 or IPv6 CIDR addresses")
+  (home-page "https://metacpan.org/release/Net-CIDR-Lite")
+  (synopsis "Perl extension for merging IPv4 or IPv6 CIDR addresses")
   (description "Net::CIDR::Lite merges IPv4 or IPv6 CIDR addresses.")
   (license license:gpl1+)))
 
@@ -2497,7 +2529,7 @@ networks.")
 (define-public speedtest-cli
   (package
     (name "speedtest-cli")
-    (version "2.1.2")
+    (version "2.1.3")
     (source
      (origin
        (method git-fetch)
@@ -2506,7 +2538,7 @@ networks.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1456yly6iym2c9bl6pi4sz8xbw34bm2dxm1vzpydsd6jazwpmy26"))))
+        (base32 "10fazl4kwf41mk7pnwpfms16n0ii0kg9pf8r3mz9xwnl9y04mv9x"))))
     (build-system python-build-system)
     (home-page "https://github.com/sivel/speedtest-cli")
     (synopsis "Internet bandwidth tester")
@@ -3027,7 +3059,8 @@ eight bytes) tools
     ;; Either BSD-3 or GPL-2 can be used.
     (license (list license:bsd-3 license:gpl2))))
 
-(define-public asio
+;;; This is an old version required by rested.
+(define-public asio-1.12
   (package
     (name "asio")
     (version "1.12.2")
@@ -3054,6 +3087,18 @@ low-level I/O programming that provides developers with a consistent
 asynchronous model using a modern C++ approach.")
     (license license:boost1.0)))
 
+(define-public asio
+  (package
+    (inherit asio-1.12)
+    (version "1.18.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/asio/asio/"
+                           version " (Stable)/asio-" version ".tar.bz2"))
+       (sha256
+        (base32 "04wi69d72l1p5c7d63z1dz06zn8pdqsbgx1if98dszs9ymfqgyaa"))))))
+
 (define-public shadowsocks
   ;; There are some security fixes after the last release.
   (let* ((commit "e332ec93e9c90f1cbee676b022bf2c5d5b7b1239")
@@ -3319,62 +3364,61 @@ never see any machines other than the one Dante is running on.")
     (license (license:non-copyleft "file://LICENSE"))))
 
 (define-public restbed
-  (let ((commit "6eb385fa9051203f28bf96cc1844bbb5a9a6481f"))
-    (package
-      (name "restbed")
-      (version (git-version "4.6" "1" commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/Corvusoft/restbed/")
-               (commit commit)))
-         (file-name (string-append name "-" version ".tar.gz"))
-         (sha256
-          (base32 "0k60i5drklqqrb4khb25fzkgz9y0sncxf1sp6lh2bm1m0gh0661n"))))
-      (build-system cmake-build-system)
-      (inputs
-       `(("asio" ,asio)
-         ("catch" ,catch-framework)
-         ("openssl" ,openssl)))
-      (arguments
-       `(#:tests? #f
-         #:configure-flags
-         '("-DBUILD_TESTS=NO"
-           "-DBUILD_EXAMPLES=NO"
-           "-DBUILD_SSL=NO"
-           "-DBUILD_SHARED=NO")
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'apply-patches-and-fix-paths
-             (lambda* (#:key inputs #:allow-other-keys)
-               (let ((asio (assoc-ref inputs "asio"))
-                     (catch (assoc-ref inputs "catch"))
-                     (openssl (assoc-ref inputs "openssl")))
-                 (substitute* "cmake/Findasio.cmake"
-                   (("(find_path\\( asio_INCLUDE asio\\.hpp HINTS ).*$" all begin)
-                    (string-append begin " \"" asio "/include\" )")))
-                 (substitute* "cmake/Findcatch.cmake"
-                   (("(find_path\\( catch_INCLUDE catch\\.hpp HINTS ).*$" all begin)
-                    (string-append begin " \"" catch "/include\" )")))
-                 (substitute* "cmake/Findopenssl.cmake"
-                   (("(find_library\\( ssl_LIBRARY ssl ssleay32 HINTS ).*$" all begin)
-                    (string-append begin " \"" openssl "/lib\" )"))
-                   (("(find_library\\( crypto_LIBRARY crypto libeay32 HINTS ).*$" all begin)
-                    (string-append begin " \"" openssl "/lib\" )"))
-                   (("(find_path\\( ssl_INCLUDE openssl/ssl\\.h HINTS ).*$" all begin)
-                    (string-append begin " \"" openssl "/include\" )")))))))))
-      (synopsis "Asynchronous RESTful functionality to C++11 applications")
-      (description "Restbed is a comprehensive and consistent programming
+  (package
+    (name "restbed")
+    (version "4.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Corvusoft/restbed/")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "055qicb773a599dsqbcz5xf0xj1wpk33mdrkyi0fsmyjmn8d2p9d"))))
+    (build-system cmake-build-system)
+    (inputs
+     `(("asio" ,asio-1.12)
+       ("catch" ,catch-framework)
+       ("openssl" ,openssl)))
+    (arguments
+     `(#:tests? #f
+       #:configure-flags
+       '("-DBUILD_TESTS=NO"
+         "-DBUILD_EXAMPLES=NO"
+         "-DBUILD_SSL=NO"
+         "-DBUILD_SHARED=NO")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'apply-patches-and-fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((asio (assoc-ref inputs "asio"))
+                   (catch (assoc-ref inputs "catch"))
+                   (openssl (assoc-ref inputs "openssl")))
+               (substitute* "cmake/Findasio.cmake"
+                 (("(find_path\\( asio_INCLUDE asio\\.hpp HINTS ).*$" all begin)
+                  (string-append begin " \"" asio "/include\" )")))
+               (substitute* "cmake/Findcatch.cmake"
+                 (("(find_path\\( catch_INCLUDE catch\\.hpp HINTS ).*$" all begin)
+                  (string-append begin " \"" catch "/include\" )")))
+               (substitute* "cmake/Findopenssl.cmake"
+                 (("(find_library\\( ssl_LIBRARY ssl ssleay32 HINTS ).*$" all begin)
+                  (string-append begin " \"" openssl "/lib\" )"))
+                 (("(find_library\\( crypto_LIBRARY crypto libeay32 HINTS ).*$" all begin)
+                  (string-append begin " \"" openssl "/lib\" )"))
+                 (("(find_path\\( ssl_INCLUDE openssl/ssl\\.h HINTS ).*$" all begin)
+                  (string-append begin " \"" openssl "/include\" )")))))))))
+    (synopsis "Asynchronous RESTful functionality to C++11 applications")
+    (description "Restbed is a comprehensive and consistent programming
 model for building applications that require seamless and secure
 communication over HTTP.")
-      (home-page "https://github.com/Corvusoft/restbed")
-      (license license:agpl3+))))
+    (home-page "https://github.com/Corvusoft/restbed")
+    (license license:agpl3+)))
 
 (define-public restinio
   (package
     (name "restinio")
-    (version "0.6.1.1")
+    (version "0.6.13")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3383,7 +3427,7 @@ communication over HTTP.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "141a96hx8zhcdv121g6cs91n46kb47y040v25pnvz5f54964z7f5"))))
+                "0gb0yc88hdzwm08zdiviay6s08q427za33kfbygib7bdzp2wr2dm"))))
     (build-system cmake-build-system)
     (inputs                             ; TODO: Need to force-keep references on some inputs, e.g. boost.
      `(("zlib" ,zlib)
@@ -3416,40 +3460,39 @@ and targeted primarily for asynchronous processing of HTTP-requests.")
 (define-public opendht
   (package
     (name "opendht")
-    (version "2.1.4")
+    (version "2.2.0rc4")                ;jami requires >= 2.2.0
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/savoirfairelinux/opendht")
                     (commit version)))
               (file-name (git-file-name name version))
-              (patches (search-patches "opendht-fix-jami.patch"))
               (sha256
                (base32
-                "1ax26ri1ifb6s8ppd28jmanka9yf8mw3np65q2h4djhhik0phhal"))))
+                "1wc0f6cnvnlmhxnx64nxqgsx93k4g7ljdaqjl40ml74jg3nqrzcl"))))
     ;; Since 2.0, the gnu-build-system does not seem to work anymore, upstream bug?
     (build-system cmake-build-system)
     (inputs
      `(("argon2" ,argon2)
-       ("nettle" ,nettle)
+       ("nettle" ,nettle-3.7)
        ("readline" ,readline)
        ("jsoncpp" ,jsoncpp)
        ("openssl" ,openssl)             ;required for the DHT proxy
        ("fmt" ,fmt)))
     (propagated-inputs
      `(("gnutls" ,gnutls)               ;included in opendht/crypto.h
-       ("msgpack" ,msgpack)))           ;included in several installed headers
+       ("msgpack" ,msgpack)             ;included in several installed headers
+       ("restinio" ,restinio)))         ;included in opendht/http.h
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
        ("pkg-config" ,pkg-config)
-       ("restinio" ,restinio)           ;headers only library
        ("libtool" ,libtool)
        ("cppunit" ,cppunit)))
     (arguments
      `(#:tests? #f                      ; Tests require network connection.
        #:configure-flags
-       '(;; "-DOPENDHT_TESTS=on"
+       '(;;"-DOPENDHT_TESTS=on"
          "-DOPENDHT_TOOLS=off"
          "-DOPENDHT_PYTHON=off"
          "-DOPENDHT_PROXY_SERVER=on"
@@ -3823,14 +3866,14 @@ thousands of connections is clearly realistic with today's hardware.")
 (define-public lldpd
   (package
     (name "lldpd")
-    (version "1.0.8")
+    (version "1.0.10")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://media.luffy.cx/files/lldpd/lldpd-"
                            version ".tar.gz"))
        (sha256
-        (base32 "1vrxr8lgkw7q6ixaaili6ac7i0j0326194s498n2dxihdvkh1llq"))
+        (base32 "08kppk49f9wmdf2gw29sm8pi027g54gzrqa07p8fpwvy0dv2sns4"))
        (modules '((guix build utils)))
        (snippet
         '(begin
diff --git a/gnu/packages/node-xyz.scm b/gnu/packages/node-xyz.scm
index b1d6d4ce59..f401380310 100644
--- a/gnu/packages/node-xyz.scm
+++ b/gnu/packages/node-xyz.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2021 Noisytoot <noisytoot@disroot.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -261,10 +262,39 @@ function with browser support.")
                 "06biknqb05r9xsmcflm3ygh50pjvdk84x6r79w43kmck4fn3qn5p"))))
     (build-system node-build-system)
     (arguments
-     `(#:tests? #f)) ;; FIXME: Tests depend on node-tap
+     '(#:tests? #f ; FIXME: Tests depend on node-tap
+       #:phases
+       (modify-phases %standard-phases
+         ;; The only dependency to check for is tap, which we don't have.
+         (delete 'configure))))
     (home-page "https://github.com/npm/node-semver")
     (synopsis "Parses semantic versions strings")
     (description
      "@code{node-semver} is a JavaScript implementation of the
 @uref{https://semver.org/, SemVer.org} specification.")
     (license license:isc)))
+
+(define-public node-wrappy
+  (package
+    (name "node-wrappy")
+    (version "1.0.2")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/npm/wrappy")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1ymlc61cja6v5438vwb04gq8wg2b784lj39zf0g4i36fvgcw9783"))))
+    (build-system node-build-system)
+    (arguments
+     '(#:tests? #f ; FIXME: Tests depend on node-tap
+       #:phases
+       (modify-phases %standard-phases
+         ;; The only dependency to check for is tap, which we don't have.
+         (delete 'configure))))
+    (home-page "https://github.com/npm/wrappy")
+    (synopsis "Callback wrapping utility")
+    (description "@code{wrappy} is a utility for Node.js to wrap callbacks.")
+    (license license:isc)))
diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm
index a0df3d2cad..4e80dd4d4e 100644
--- a/gnu/packages/node.scm
+++ b/gnu/packages/node.scm
@@ -26,13 +26,15 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages node)
-  #:use-module ((guix licenses) #:select (expat))
+  #:use-module ((guix licenses) #:prefix license:)
   #:use-module ((guix build utils) #:select (alist-replace))
   #:use-module (guix packages)
   #:use-module (guix derivations)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system node)
   #:use-module (gnu packages)
   #:use-module (gnu packages adns)
   #:use-module (gnu packages base)
@@ -41,6 +43,7 @@
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages node-xyz)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -207,10 +210,511 @@ event-driven, non-blocking I/O model that makes it lightweight and efficient,
 perfect for data-intensive real-time applications that run across distributed
 devices.")
     (home-page "https://nodejs.org/")
-    (license expat)
+    (license license:expat)
     (properties '((max-silent-time . 7200)     ;2h, needed on ARM
                   (timeout . 21600)))))        ;6h
 
+;; This should be the latest version of node that still builds without
+;; depending on llhttp.
+(define-public node-bootstrap
+  (hidden-package node))
+
+;; Duplicate of node-semver
+(define-public node-semver-bootstrap
+  (package
+    (name "node-semver")
+    (version "7.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/npm/node-semver")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "06biknqb05r9xsmcflm3ygh50pjvdk84x6r79w43kmck4fn3qn5p"))))
+    (build-system node-build-system)
+    (arguments
+     `(#:node ,node-bootstrap
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure))))
+    (home-page "https://github.com/npm/node-semver")
+    (properties '((hidden? . #t)))
+    (synopsis "Parses semantic versions strings")
+    (description
+     "@code{node-semver} is a JavaScript implementation of the
+@uref{https://semver.org/, SemVer.org} specification.")
+    (license license:isc)))
+
+(define-public node-ms-bootstrap
+  (package
+    (name "node-ms")
+    (version "2.1.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/vercel/ms.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1pjxzbi4j8pinlsc7yxvfrh0b47kb2dc4lfc2rjq4wx5bdwl33fj"))))
+    (build-system node-build-system)
+    (arguments
+     `(#:node ,node-bootstrap
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure))))
+    (home-page "https://github.com/zeit/ms#readme")
+    (properties '((hidden? . #t)))
+    (synopsis "Tiny millisecond conversion utility")
+    (description "Use this package to easily convert various time
+formats to milliseconds.")
+    (license license:expat)))
+
+(define-public node-binary-search-bootstrap
+  (package
+    (name "node-binary-search")
+    (version "1.3.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/darkskyapp/binary-search.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1xr2msdc143cd3xwgq7n3rhzy7j8wrnaidxl0r6l6b6g3mpbpjig"))))
+    (build-system node-build-system)
+    (arguments
+     `(#:node ,node-bootstrap
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure))))
+    (home-page "https://github.com/darkskyapp/binary-search#readme")
+    (properties '((hidden? . #t)))
+    (synopsis "Tiny binary search function with comparators")
+    (description "This package is a binary search function for Node.js.")
+    (license license:cc0)))
+
+(define-public node-debug-bootstrap
+  (package
+    (name "node-debug")
+    (version "4.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/visionmedia/debug.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "08g52r1d4yqcsfdfb7n5if33d4cghaq75gx5n9hj6m6fd8jfp2pi"))))
+    (build-system node-build-system)
+    (arguments
+     `(#:node ,node-bootstrap
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure))))
+    (inputs `(("node-ms" ,node-ms-bootstrap)))
+    (home-page "https://github.com/visionmedia/debug#readme")
+    (properties '((hidden? . #t)))
+    (synopsis "Small debugging utility")
+    (description "This package contains a tiny JavaScript debugging
+utility modelled after Node.js core's debugging technique.  It works in
+Node.js and web browsers.")
+    (license license:expat)))
+
+(define-public node-llparse-builder-bootstrap
+  (package
+    (name "node-llparse-builder")
+    (version "1.5.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/indutny/llparse-builder.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0r82iiwqsb73k2fxw7842rjjiixllxpyc6yl9cq4ma6ybkf6xmzm"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; FIXME: Unneeded runtime dependency.
+           ;; https://github.com/indutny/llparse-builder/pull/2
+           (substitute* "package.json"
+             (("\"@types/debug.*,") ""))
+           ;; Fix imports for esbuild.
+           ;; https://github.com/evanw/esbuild/issues/477
+           (substitute* '("src/node/invoke.ts"
+                          "src/node/base.ts"
+                          "src/node/consume.ts"
+                          "src/node/match.ts"
+                          "src/node/error.ts"
+                          "src/node/pause.ts"
+                          "src/edge.ts"
+                          "src/utils.ts"
+                          "src/loop-checker/index.ts"
+                          "src/loop-checker/lattice.ts"
+                          "src/code/field.ts"
+                          "src/span-allocator.ts")
+             (("\\* as assert") "assert")
+             (("\\* as debugAPI") "debugAPI"))
+           #t))))
+    (build-system node-build-system)
+    (arguments
+     `(#:node ,node-bootstrap
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'build
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((esbuild (string-append (assoc-ref inputs "esbuild")
+                                           "/bin/esbuild")))
+               (invoke esbuild
+                       "--platform=node"
+                       "--outfile=lib/builder.js"
+                       "--bundle"
+                       "src/builder.ts")))))))
+    (inputs
+     `(("node-binary-search" ,node-binary-search-bootstrap)
+       ("node-debug" ,node-debug-bootstrap)))
+    (native-inputs
+     `(("esbuild" ,esbuild)))
+    (home-page "https://github.com/indutny/llparse-builder#readme")
+    (properties '((hidden? . #t)))
+    (synopsis "Graph builder for consumption by llparse")
+    (description "This package builds graphs for consumption by llparse.")
+    (license license:expat)))
+
+(define-public node-llparse-frontend-bootstrap
+  (package
+    (name "node-llparse-frontend")
+    (version "3.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/indutny/llparse-frontend.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1rm9g4ifyip30svm5cgnf0gx7d45jgh4mpf2hkd092xhngmfvicc"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Fix imports for esbuild.
+           ;; https://github.com/evanw/esbuild/issues/477
+           (substitute* '("src/frontend.ts"
+                          "src/code/field-value.ts"
+                          "src/container/index.ts"
+                          "src/container/wrap.ts"
+                          "src/node/sequence.ts"
+                          "src/node/single.ts"
+                          "src/node/table-lookup.ts"
+                          "src/trie/index.ts")
+             (("\\* as assert") "assert")
+             (("\\* as debugAPI") "debugAPI"))
+           #t))))
+    (build-system node-build-system)
+    (arguments
+     `(#:node ,node-bootstrap
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'build
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((esbuild (string-append (assoc-ref inputs "esbuild")
+                                           "/bin/esbuild")))
+               (invoke esbuild
+                       "--platform=node"
+                       "--outfile=lib/frontend.js"
+                       "--bundle"
+                       "src/frontend.ts")))))))
+    (inputs
+     `(("node-debug" ,node-debug-bootstrap)
+       ("node-llparse-builder" ,node-llparse-builder-bootstrap)))
+    (native-inputs
+     `(("esbuild" ,esbuild)))
+    (home-page "https://github.com/indutny/llparse-frontend#readme")
+    (properties '((hidden? . #t)))
+    (synopsis "Frontend for the llparse compiler")
+    (description "This package is a frontend for the llparse compiler.")
+    (license license:expat)))
+
+(define-public node-llparse-bootstrap
+  (package
+    (name "node-llparse")
+    (version "7.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/indutny/llparse.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "10da273iy2if88hp79cwms6c8qpsl1fkgzll6gmqyx5yxv5mkyp6"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Fix imports for esbuild.
+           ;; https://github.com/evanw/esbuild/issues/477
+           (substitute* '("src/compiler/index.ts"
+                          "src/implementation/c/node/base.ts"
+                          "src/implementation/c/node/table-lookup.ts"
+                          "src/implementation/c/compilation.ts"
+                          "src/implementation/c/helpers/match-sequence.ts"
+                          "src/implementation/c/code/mul-add.ts")
+             (("\\* as assert") "assert")
+             (("\\* as debugAPI") "debugAPI"))
+           #t))))
+    (build-system node-build-system)
+    (arguments
+     `(#:node ,node-bootstrap
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'build
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((esbuild (string-append (assoc-ref inputs "esbuild")
+                                           "/bin/esbuild")))
+               (invoke esbuild
+                       "--platform=node"
+                       "--outfile=lib/api.js"
+                       "--bundle"
+                       "src/api.ts")))))))
+    (inputs
+     `(("node-debug" ,node-debug-bootstrap)
+       ("node-llparse-frontend" ,node-llparse-frontend-bootstrap)))
+    (native-inputs
+     `(("esbuild" ,esbuild)))
+    (home-page "https://github.com/nodejs/llparse#readme")
+    (properties '((hidden? . #t)))
+    (synopsis "Compile incremental parsers to C code")
+    (description "This package offers an API for compiling an incremental
+parser definition into a C output.")
+    (license license:expat)))
+
+(define-public llhttp-bootstrap
+  (package
+    (name "llhttp")
+    (version "2.1.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/nodejs/llhttp.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0pqj7kyyzr1zs4h9yzn5rdxnxspm3wqgsv00765dd42fszlmrmk8"))
+              (patches (search-patches "llhttp-bootstrap-CVE-2020-8287.patch"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Fix imports for esbuild.
+                  ;; https://github.com/evanw/esbuild/issues/477
+                  (substitute* "src/llhttp/http.ts"
+                    (("\\* as assert") "assert"))
+                  (substitute* "Makefile"
+                    (("npx ts-node bin/generate.ts")
+                     "node bin/generate.js"))
+                  #t))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ; no tests
+       #:make-flags (list (string-append "CLANG=" ,(cc-for-target))
+                          (string-append "DESTDIR=" (assoc-ref %outputs "out"))
+                          "PREFIX=")
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((esbuild (string-append (assoc-ref inputs "esbuild")
+                                           "/bin/esbuild")))
+               (invoke esbuild
+                       "--platform=node"
+                       "--outfile=bin/generate.js"
+                       "--bundle" "bin/generate.ts"))))
+         (add-before 'install 'create-install-directories
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (for-each (lambda (dir)
+                           (mkdir-p (string-append out dir)))
+                         (list "/lib" "/include" "/src"))
+               #t)))
+         (add-after 'install 'install-src
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (src-dir (string-append out "/src")))
+               (install-file "build/c/llhttp.c" src-dir)
+               (install-file "src/native/api.c" src-dir)
+               (install-file "src/native/http.c" src-dir)
+               #t))))))
+    (native-inputs
+     `(("esbuild" ,esbuild)
+       ("node" ,node-bootstrap)
+       ("node-semver" ,node-semver-bootstrap)
+       ("node-llparse-bootstrap" ,node-llparse-bootstrap)))
+    (home-page "https://github.com/nodejs/llhttp")
+    (properties '((hidden? . #t)))
+    (synopsis "Parser for HTTP messages")
+    (description "This is a rewrite of
+@url{https://github.com/nodejs/http-parser, http-parser} using
+@url{https://github.com/nodejs/llparse, llparse} to generate the C
+source files.")
+    (license license:expat)))
+
+(define-public node-lts
+  (package
+    (inherit node)
+    (version "14.16.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://nodejs.org/dist/v" version
+                                  "/node-v" version ".tar.xz"))
+              (sha256
+               (base32
+                "19nz2mhmn6ikahxqyna1dn25pb5v3z9vsz9zb2flb6zp2yk4hxjf"))
+              (modules '((guix build utils)))
+              (snippet
+               `(begin
+                  ;; Remove bundled software, where possible
+                  (for-each delete-file-recursively
+                            '("deps/cares"
+                              "deps/icu-small"
+                              "deps/nghttp2"
+                              "deps/openssl"
+                              "deps/zlib"))
+                  (substitute* "Makefile"
+                    ;; Remove references to bundled software.
+                    (("deps/uv/uv.gyp") "")
+                    (("deps/zlib/zlib.gyp") ""))
+                  #t))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments node)
+       ((#:configure-flags configure-flags)
+        ''("--shared-cares"
+           "--shared-libuv"
+           "--shared-nghttp2"
+           "--shared-openssl"
+           "--shared-zlib"
+           "--shared-brotli"
+           "--with-intl=system-icu"))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (replace 'configure
+             ;; Node's configure script is actually a python script, so we can't
+             ;; run it with bash.
+             (lambda* (#:key outputs (configure-flags '()) inputs
+                       #:allow-other-keys)
+               (let* ((prefix (assoc-ref outputs "out"))
+                      (flags (cons (string-append "--prefix=" prefix)
+                                   configure-flags)))
+                 (format #t "build directory: ~s~%" (getcwd))
+                 (format #t "configure flags: ~s~%" flags)
+                 ;; Node's configure script expects the CC environment variable to
+                 ;; be set.
+                 (setenv "CC" ,(cc-for-target))
+                 (apply invoke
+                        (string-append (assoc-ref inputs "python")
+                                       "/bin/python3")
+                        "configure" flags))))
+           (replace 'patch-files
+             (lambda* (#:key inputs #:allow-other-keys)
+               ;; Fix hardcoded /bin/sh references.
+               (substitute* '("lib/child_process.js"
+                              "lib/internal/v8_prof_polyfill.js"
+                              "test/parallel/test-child-process-spawnsync-shell.js"
+                              "test/parallel/test-fs-write-sigxfsz.js"
+                              "test/parallel/test-stdio-closed.js"
+                              "test/sequential/test-child-process-emfile.js")
+                 (("'/bin/sh'")
+                  (string-append "'" (which "sh") "'")))
+
+               ;; Fix hardcoded /usr/bin/env references.
+               (substitute* '("test/parallel/test-child-process-default-options.js"
+                              "test/parallel/test-child-process-env.js"
+                              "test/parallel/test-child-process-exec-env.js")
+                 (("'/usr/bin/env'")
+                  (string-append "'" (which "env") "'")))
+
+               ;; FIXME: These tests fail in the build container, but they don't
+               ;; seem to be indicative of real problems in practice.
+               (for-each delete-file
+                         '("test/parallel/test-cluster-master-error.js"
+                           "test/parallel/test-cluster-master-kill.js"))
+
+               ;; These require a DNS resolver.
+               (for-each delete-file
+                         '("test/parallel/test-dns.js"
+                           "test/parallel/test-dns-lookupService-promises.js"))
+
+               ;; FIXME: This test fails randomly:
+               ;; https://github.com/nodejs/node/issues/31213
+               (delete-file "test/parallel/test-net-listen-after-destroying-stdin.js")
+
+               ;; FIXME: These tests fail on armhf-linux:
+               ;; https://github.com/nodejs/node/issues/31970
+               ,@(if (target-arm32?)
+                     '((for-each delete-file
+                                 '("test/parallel/test-zlib.js"
+                                   "test/parallel/test-zlib-brotli.js"
+                                   "test/parallel/test-zlib-brotli-flush.js"
+                                   "test/parallel/test-zlib-brotli-from-brotli.js"
+                                   "test/parallel/test-zlib-brotli-from-string.js"
+                                   "test/parallel/test-zlib-convenience-methods.js"
+                                   "test/parallel/test-zlib-random-byte-pipes.js"
+                                   "test/parallel/test-zlib-write-after-flush.js")))
+                     '())
+
+               ;; These tests have an expiry date: they depend on the validity of
+               ;; TLS certificates that are bundled with the source.  We want this
+               ;; package to be reproducible forever, so remove those.
+               ;; TODO: Regenerate certs instead.
+               (for-each delete-file
+                         '("test/parallel/test-tls-passphrase.js"
+                           "test/parallel/test-tls-server-verify.js"))
+
+               ;; Replace pre-generated llhttp sources
+               (let ((llhttp (assoc-ref inputs "llhttp")))
+                 (copy-file (string-append llhttp "/src/llhttp.c")
+                            "deps/llhttp/src/llhttp.c")
+                 (copy-file (string-append llhttp "/src/api.c")
+                            "deps/llhttp/src/api.c")
+                 (copy-file (string-append llhttp "/src/http.c")
+                            "deps/llhttp/src/http.c")
+                 (copy-file (string-append llhttp "/include/llhttp.h")
+                            "deps/llhttp/include/llhttp.h"))
+               #t))))))
+    (inputs
+     `(("c-ares" ,c-ares)
+       ("icu4c" ,icu4c-67)
+       ("libuv" ,libuv-for-node)
+       ("llhttp" ,llhttp-bootstrap)
+       ("google-brotli" ,google-brotli)
+       ("nghttp2" ,nghttp2 "lib")
+       ("openssl" ,openssl)
+       ("zlib" ,zlib)))
+    (native-inputs
+     (alist-replace "python" (list python-3)
+                    (package-native-inputs node)))))
+
 (define-public libnode
   (package/inherit node
     (name "libnode")
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 086f3b048a..44ca0c67e2 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -19,6 +19,7 @@
 ;;; Copyright © 2020 divoplade <d@divoplade.fr>
 ;;; Copyright © 2020 pukkamustard <pukkamustard@posteo.net>
 ;;; Copyright © 2021 aecepoglu <aecepoglu@fastmail.fm>
+;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -158,7 +159,7 @@
       (properties
        `((max-silent-time . 14400))) ; 4 hours, expected even on x86_64
       (home-page "https://github.com/Ekdohibs/camlboot")
-      (synopsis "OCaml souce bootstrap")
+      (synopsis "OCaml source bootstrap")
       (description "OCaml is written in OCaml.  Its sources contain a pre-compiled
 bytecode version of @command{ocamlc} and @command{ocamllex} that are used to
 build the next version of the compiler.  Camlboot implements a bootstrap for
@@ -466,6 +467,71 @@ depend: $(STDLIB_MLIS) $(STDLIB_DEPS)"))
 for building OCaml library and programs.")
     (license license:lgpl2.1+)))
 
+(define-public camlidl
+  (package
+    (name "camlidl")
+    (version "1.09")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/xavierleroy/camlidl")
+             (commit "camlidl109")))
+       (sha256
+        (base32 "0zrkaq7fk23b2b9vg6jwdjx7l0hdqp4synbbrw1zcg8gjf6n3c80"))
+       (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ;; No test suite
+       #:make-flags
+       (list
+        (string-append
+         "BINDIR=" (assoc-ref %outputs "out") "/bin")
+        (string-append
+         "OCAMLLIB=" (assoc-ref %outputs "out") "/lib/ocaml/site-lib/camlidl"))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'build
+           (lambda _
+             (copy-file "config/Makefile.unix" "config/Makefile")
+             ;; Note: do not pass '-jN' as this appears to not be
+             ;; parallel-safe (race condition related to libcamlidl.a).
+             (invoke "make" "all")
+             #t))
+         (add-before 'install 'create-target-directories
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (string-append (assoc-ref outputs "out"))))
+               (mkdir-p
+                (string-append out "/bin"))
+               (mkdir-p
+                (string-append out "/lib/ocaml/site-lib/camlidl/stublibs"))
+               (mkdir-p
+                (string-append out "/lib/ocaml/site-lib/camlidl/caml")))
+             #t))
+         (add-after 'install 'install-meta
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (with-output-to-file
+                   (string-append out "/lib/ocaml/site-lib/camlidl/META")
+                 (lambda _
+                   (display
+                    (string-append
+                     "description = \"Stub code generator for OCaml/C interface\"
+version = \"" ,version "\"
+directory = \"^\"
+archive(byte) = \"com.cma\"
+archive(native) = \"com.cmxa\"")))))
+             #t)))))
+    (native-inputs
+     `(("ocaml" ,ocaml)))
+    (home-page "https://github.com/xavierleroy/camlidl")
+    (synopsis "Stub code generator for OCaml/C interface")
+    (description
+     "Camlidl is a stub code generator for Objective Caml.  It generates stub
+code for interfacing Caml with C from an IDL description of the C functions.")
+    (license license:lgpl2.1)))
+
 (define-public ocaml-extlib
   (package
     (name "ocaml-extlib")
diff --git a/gnu/packages/openstack.scm b/gnu/packages/openstack.scm
index 26b275e0fd..1e3ad1057a 100644
--- a/gnu/packages/openstack.scm
+++ b/gnu/packages/openstack.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016, 2017, 2019 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -307,8 +307,15 @@ to docs.openstack.org and developer.openstack.org.")
     (arguments
      ;; The tests are disabled to avoid a circular dependency with
      ;; python-stestr.
-     `(#:tests? #f))
-    (native-inputs
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'use-pbr-3
+           (lambda _
+             (substitute* '("setup.py"
+                            "requirements.txt")
+               (("pbr!=2.1.0,>=2.0.0") "pbr>=3.0.0")))))))
+    (propagated-inputs
      `(("python-pbr" ,python-pbr)))
     (home-page "https://github.com/dreamhost/stevedore")
     (synopsis "Manage dynamic plugins for Python applications")
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 888f54322d..08050e9747 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -132,8 +132,8 @@
   ;; Note: the 'update-guix-package.scm' script expects this definition to
   ;; start precisely like this.
   (let ((version "1.2.0")
-        (commit "ec7fb669945bfb47c5e1fdf7de3a5d07f7002ccf")
-        (revision 17))
+        (commit "4dff6ecde85eec473ab231cf75f51e98e8aca1e9")
+        (revision 21))
     (package
       (name "guix")
 
@@ -149,7 +149,7 @@
                       (commit commit)))
                 (sha256
                  (base32
-                  "1v9pwsqx8n4l6f7aj9vxv6m7vb4lyw8j5qg6mxf5zksia0qlcv2z"))
+                  "1n16j7rb4n4pjmp8ck5g206rphmzxii2mbyz1nk4qk70zc3mwszq"))
                 (file-name (string-append "guix-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
@@ -212,7 +212,7 @@ $(prefix)/etc/init.d\n")))
                         (substitute* "nix/local.mk"
                           (("^openrcservicedir = .*$")
                            (string-append "openrcservicedir = \
-$(prefix)/etc/init.d\n")))
+$(prefix)/etc/openrc\n")))
 
                         (invoke "sh" "bootstrap")))
                     (add-before 'build 'use-host-compressors
@@ -1049,8 +1049,8 @@ environments.")
     (license (list license:gpl3+ license:agpl3+ license:silofl1.1))))
 
 (define-public guix-build-coordinator
-  (let ((commit "1f79fc38a17ceda30f378efd4e7f80f252c99b4d")
-        (revision "20"))
+  (let ((commit "6fb5eafc33efa109b220efe71594cfcdb2efe133")
+        (revision "24"))
     (package
       (name "guix-build-coordinator")
       (version (git-version "0" revision commit))
@@ -1061,7 +1061,7 @@ environments.")
                       (commit commit)))
                 (sha256
                  (base32
-                  "0d5zr5mv07pi195vva2fhclfgyzrgbk9vlnwrmy7z1jcw2p1d2zp"))
+                  "1lf7jry18kwglvyakfkmi8bif8ppsdinl0xjgmkgkp4mvmymh2gj"))
                 (file-name (string-append name "-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
@@ -1088,14 +1088,18 @@ environments.")
                  (for-each
                   (lambda (file)
                     (simple-format (current-error-port) "wrapping: ~A\n" file)
-                    (let ((guile-inputs `("guile-json"
-                                          "guile-gcrypt"
-                                          "guix"
-                                          "guile-prometheus"
-                                          "guile-lib"
-                                          "guile-lzlib"
-                                          "guile-zlib"
-                                          "gnutls")))
+                    (let ((guile-inputs (list
+                                         "guile-json"
+                                         "guile-gcrypt"
+                                         "guix"
+                                         "guile-prometheus"
+                                         "guile-lib"
+                                         "guile-lzlib"
+                                         "guile-zlib"
+                                         "gnutls"
+                                         ,@(if (hurd-target?)
+                                               '()
+                                               '("guile-fibers")))))
                       (wrap-program file
                         `("PATH" ":" prefix
                           (,bin
diff --git a/gnu/packages/password-utils.scm b/gnu/packages/password-utils.scm
index 3969b23f1e..6b1b32b147 100644
--- a/gnu/packages/password-utils.scm
+++ b/gnu/packages/password-utils.scm
@@ -179,37 +179,6 @@ algorithms AES or Twofish.")
     ;; the combined work falls under the GPLv3.
     (license license:gpl3)))
 
-(define-public keepassx
-  (package
-    (name "keepassx")
-    (version "2.0.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://www.keepassx.org/releases/" version
-                           "/keepassx-" version ".tar.gz"))
-       (sha256
-        (base32
-         "1ia7cqx9ias38mnffsl7da7g1f66bcbjsi23k49sln0c6spb9zr3"))))
-    (build-system cmake-build-system)
-    (inputs
-     `(("libgcrypt" ,libgcrypt)
-       ("libxi" ,libxi)
-       ("libxtst" ,libxtst)
-       ("qt" ,qt-4)))
-    (native-inputs
-     `(("zlib" ,zlib)))
-    (home-page "https://www.keepassx.org")
-    (synopsis "Password manager")
-    (description "KeePassX is a password manager or safe which helps you to
-manage your passwords in a secure way.  You can put all your passwords in one
-database, which is locked with one master key or a key-file which can be stored
-on an external storage device.  The databases are encrypted using the
-algorithms AES or Twofish.")
-    ;; Non functional parts use various licences.
-    (license license:gpl3)
-    (properties `((superseded . ,keepassxc)))))
-
 (define-public pwsafe
   (package
     (name "pwsafe")
diff --git a/gnu/packages/patches/calibre-no-updates-dialog.patch b/gnu/packages/patches/calibre-no-updates-dialog.patch
index 1d8d79660e..66ac913cb5 100644
--- a/gnu/packages/patches/calibre-no-updates-dialog.patch
+++ b/gnu/packages/patches/calibre-no-updates-dialog.patch
@@ -1,11 +1,17 @@
-Taken from debian.
+From 19e8d7701c302b0eca4c638705a6db625352caa3 Mon Sep 17 00:00:00 2001
+From: Brendan Tildesley <mail@brendan.scot>
+Date: Thu, 25 Feb 2021 12:17:30 +1100
+Subject: [PATCH] Don't check for updates.
 
-# Description: Disable update check by default.
-Index: calibre/src/calibre/gui2/main.py
-===================================================================
---- calibre.orig/src/calibre/gui2/main.py	2014-02-02 10:41:28.470954623 +0100
-+++ calibre/src/calibre/gui2/main.py	2014-02-02 10:41:56.546954247 +0100
-@@ -37,8 +37,8 @@
+---
+ src/calibre/gui2/main.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py
+index 776f8bebfb..4302716d7e 100644
+--- a/src/calibre/gui2/main.py
++++ b/src/calibre/gui2/main.py
+@@ -59,8 +59,8 @@ def option_parser():
                        help=_('Start minimized to system tray.'))
      parser.add_option('-v', '--verbose', default=0, action='count',
                        help=_('Ignored, do not use. Present only for legacy reasons'))
@@ -16,3 +22,5 @@ Index: calibre/src/calibre/gui2/main.py
      parser.add_option('--ignore-plugins', default=False, action='store_true',
              help=_('Ignore custom plugins, useful if you installed a plugin'
                  ' that is preventing calibre from starting'))
+--
+2.30.1
diff --git a/gnu/packages/patches/calibre-remove-test-sqlite.patch b/gnu/packages/patches/calibre-remove-test-sqlite.patch
index 7bdd90874d..fc2b237ef2 100644
--- a/gnu/packages/patches/calibre-remove-test-sqlite.patch
+++ b/gnu/packages/patches/calibre-remove-test-sqlite.patch
@@ -1,20 +1,20 @@
-From a92e26359bd07743ab105819ed0b619e27e14017 Mon Sep 17 00:00:00 2001
+From d8225e83c3b73f0e0da73874910f50ca652f48cf Mon Sep 17 00:00:00 2001
 From: Brendan Tildesley <mail@brendan.scot>
-Date: Sat, 27 Apr 2019 03:30:53 +1000
-Subject: [PATCH] Disable test_sqlite.
+Date: Thu, 25 Feb 2021 00:48:00 +1100
+Subject: [PATCH] Remove test_sqlite
 
 ---
  src/calibre/test_build.py | 6 ------
  1 file changed, 6 deletions(-)
 
 diff --git a/src/calibre/test_build.py b/src/calibre/test_build.py
-index 07bdffd3e5..740588c95b 100644
+index 0ab7aa0646..87fdfabd9a 100644
 --- a/src/calibre/test_build.py
 +++ b/src/calibre/test_build.py
-@@ -162,12 +162,6 @@ class BuildTest(unittest.TestCase):
-             au(x, 'strftime')
-             self.assertEqual(unicode_type(time.strftime(fmt.replace('%e', '%#d'), t)), x)
- 
+@@ -273,12 +273,6 @@ def read_changes():
+         m.close()
+         self.assertEqual(winutil.parse_cmdline('"c:\\test exe.exe" "some arg" 2'), ('c:\\test exe.exe', 'some arg', '2'))
+
 -    def test_sqlite(self):
 -        import sqlite3
 -        conn = sqlite3.connect(':memory:')
@@ -24,6 +24,5 @@ index 07bdffd3e5..740588c95b 100644
      def test_apsw(self):
          import apsw
          conn = apsw.Connection(':memory:')
--- 
-2.21.0
-
+--
+2.30.1
diff --git a/gnu/packages/patches/calibre-remove-test-unrar.patch b/gnu/packages/patches/calibre-remove-test-unrar.patch
index 4e5572d1a6..961cc3eba7 100644
--- a/gnu/packages/patches/calibre-remove-test-unrar.patch
+++ b/gnu/packages/patches/calibre-remove-test-unrar.patch
@@ -1,28 +1,26 @@
-Unrar contains security vulnerabilities and has thus been removed from Guix.
-From a16f97b02bd8afd0ec05c471e156f631f2cc6eec Mon Sep 17 00:00:00 2001
+From 9edf67191cc3655480b6fd418247709ade930b1a Mon Sep 17 00:00:00 2001
 From: Brendan Tildesley <mail@brendan.scot>
-Date: Tue, 26 Mar 2019 22:17:03 +1100
-Subject: [PATCH] Remove test_unrar.
+Date: Thu, 25 Feb 2021 00:33:10 +1100
+Subject: [PATCH] Remove test_unrar
 
 ---
  src/calibre/test_build.py | 4 ----
  1 file changed, 4 deletions(-)
 
 diff --git a/src/calibre/test_build.py b/src/calibre/test_build.py
-index d67afd20a6..709132ef17 100644
+index b37fb1bcfb..0ab7aa0646 100644
 --- a/src/calibre/test_build.py
 +++ b/src/calibre/test_build.py
-@@ -220,10 +220,6 @@ class BuildTest(unittest.TestCase):
+@@ -369,10 +369,6 @@ def test_file_dialog_helper(self):
          from calibre.gui2.win_file_dialogs import test
          test()
- 
+
 -    def test_unrar(self):
 -        from calibre.utils.unrar import test_basic
 -        test_basic()
 -
-     @unittest.skipUnless(iswindows, 'WPD is windows only')
-     def test_wpd(self):
-         wpd = plugins['wpd'][0]
--- 
-2.21.0
-
+     def test_7z(self):
+         from calibre.utils.seven_zip import test_basic
+         test_basic()
+--
+2.30.1
diff --git a/gnu/packages/patches/chez-scheme-build-util-paths-backport.patch b/gnu/packages/patches/chez-scheme-build-util-paths-backport.patch
new file mode 100644
index 0000000000..aad2d99996
--- /dev/null
+++ b/gnu/packages/patches/chez-scheme-build-util-paths-backport.patch
@@ -0,0 +1,780 @@
+From 2447e047b750c3371778beb487f881641a582e66 Mon Sep 17 00:00:00 2001
+From: Philip McGrath <philip@philipmcgrath.com>
+Date: Thu, 11 Mar 2021 18:17:47 -0500
+Subject: [PATCH] avoid hard-coded paths for utilities in build scripts
+
+Backported from
+https://github.com/cisco/ChezScheme/commit/8f4633ce24ac6425b2ab13cc78026b1c9bb5361e
+
+Specific changes:
+  - `cc` -> `$(CC)`
+  - `/bin/rm` -> `rm`
+  - `/bin/ln` -> `ln`
+  - `/bin/cp` -> `cp`
+  - `/bin/echo` -> `echo`
+  - in `makefiles/installsh`, add a case to find `true`
+    at an unusual path or as a shell builtin
+
+Co-authored-by: Andy Keep <akeep@robotman.org>
+---
+ LOG                                 | 12 ++++++++++++
+ csug/gifs/Makefile                  |  8 ++++----
+ csug/math/Makefile                  |  4 ++--
+ examples/Makefile                   |  2 +-
+ makefiles/Makefile-csug.in          |  6 +++---
+ makefiles/Makefile-release_notes.in |  2 +-
+ makefiles/Mf-install.in             |  4 ++--
+ makefiles/installsh                 |  3 ++-
+ mats/6.ms                           |  2 +-
+ mats/Mf-a6fb                        |  4 ++--
+ mats/Mf-a6le                        |  4 ++--
+ mats/Mf-a6nb                        |  4 ++--
+ mats/Mf-a6ob                        |  4 ++--
+ mats/Mf-a6osx                       |  4 ++--
+ mats/Mf-arm32le                     |  4 ++--
+ mats/Mf-i3fb                        |  4 ++--
+ mats/Mf-i3le                        |  4 ++--
+ mats/Mf-i3nb                        |  4 ++--
+ mats/Mf-i3ob                        |  4 ++--
+ mats/Mf-i3osx                       |  4 ++--
+ mats/Mf-i3qnx                       |  4 ++--
+ mats/Mf-ppc32le                     |  4 ++--
+ mats/Mf-ta6fb                       |  4 ++--
+ mats/Mf-ta6le                       |  4 ++--
+ mats/Mf-ta6nb                       |  4 ++--
+ mats/Mf-ta6ob                       |  4 ++--
+ mats/Mf-ta6osx                      |  4 ++--
+ mats/Mf-ti3fb                       |  4 ++--
+ mats/Mf-ti3le                       |  4 ++--
+ mats/Mf-ti3nb                       |  4 ++--
+ mats/Mf-ti3ob                       |  4 ++--
+ mats/Mf-ti3osx                      |  4 ++--
+ mats/Mf-tppc32le                    |  4 ++--
+ mats/unix.ms                        |  4 ++--
+ newrelease                          | 22 +++++++++++-----------
+ pkg/Makefile                        |  2 +-
+ release_notes/gifs/Makefile         |  6 +++---
+ release_notes/math/Makefile         |  4 ++--
+ s/Mf-base                           |  2 +-
+ workarea                            | 10 +++++-----
+ 40 files changed, 101 insertions(+), 88 deletions(-)
+
+diff --git a/LOG b/LOG
+index e1631df..399104d 100644
+--- a/LOG
++++ b/LOG
+@@ -2119,3 +2119,15 @@
+     bintar/Makefile rpm/Makefile pkg/Makefile wininstall/Makefile
+     wininstall/a6nt.wxs wininstall/i3nt.wxs wininstall/ta6nt.wxs
+     wininstall/ti3nt.wxs
++9.5.5 changes:
++- avoid hard-coded paths for utilities in build scripts
++    checkin csug/gifs/Makefile csug/math/Makefile examples/Makefile
++    makefiles/Makefile-csug.in makefiles/Makefile-release_notes.in
++    makefiles/Mf-install.in makefiles/installsh mats/6.ms mats/Mf-a6fb
++    mats/Mf-a6le mats/Mf-a6nb mats/Mf-a6ob mats/Mf-a6osx mats/Mf-arm32le
++    mats/Mf-i3fb mats/Mf-i3le mats/Mf-i3nb mats/Mf-i3ob mats/Mf-i3osx
++    mats/Mf-i3qnx mats/Mf-ppc32le mats/Mf-ta6fb mats/Mf-ta6le mats/Mf-ta6nb
++    mats/Mf-ta6ob mats/Mf-ta6osx mats/Mf-ti3fb mats/Mf-ti3le mats/Mf-ti3nb
++    mats/Mf-ti3ob mats/Mf-ti3osx mats/Mf-tppc32le mats/unix.ms newrelease
++    pkg/Makefile release_notes/gifs/Makefile release_notes/math/Makefile
++    s/Mf-base workarea
+diff --git a/csug/gifs/Makefile b/csug/gifs/Makefile
+index 8676e4c..4253ffd 100644
+--- a/csug/gifs/Makefile
++++ b/csug/gifs/Makefile
+@@ -18,7 +18,7 @@ density=-r90x90
+           ${density} - |\
+           pnmcrop |\
+           ppmtogif -transparent white > $*.gif
+-	/bin/rm -f $*.dvi $*.log *.aux
++	rm -f $*.dvi $*.log *.aux
+ 	test -f $*.gif && chmod 644 $*.gif
+
+ # translate ps file to gif w/o transparent white background
+@@ -28,7 +28,7 @@ density=-r90x90
+           ${density} - |\
+           pnmcrop |\
+           ppmtogif > $*.gif
+-	/bin/rm -f $*.dvi $*.log *.aux
++	rm -f $*.dvi $*.log *.aux
+ 	test -f $*.gif && chmod 644 $*.gif
+
+ all: ${gifs}
+@@ -57,7 +57,7 @@ ghostRightarrow.gif: Rightarrow.tex
+           giftrans -g '#000000=#ffffff' |\
+           giftopnm |\
+           ppmtogif -transparent white > $*.gif
+-	/bin/rm -f Rightarrow.dvi Rightarrow.log Rightarrow.aux
++	rm -f Rightarrow.dvi Rightarrow.log Rightarrow.aux
+ 	test -f $*.gif && chmod 644 $*.gif
+
+-clean: ; /bin/rm -f *.gif Make.out
++clean: ; rm -f *.gif Make.out
+diff --git a/csug/math/Makefile b/csug/math/Makefile
+index 3385fdb..3392ea8 100644
+--- a/csug/math/Makefile
++++ b/csug/math/Makefile
+@@ -15,11 +15,11 @@ density=-r90x90
+           ${density} - |\
+           pnmcrop |\
+           ppmtogif -transparent white > $*.gif
+-	/bin/rm -f $*.dvi $*.log $*.aux
++	rm -f $*.dvi $*.log $*.aux
+ 	test -f $*.gif && chmod 644 $*.gif
+
+ all: ${gifs}
+
+ ${gifs}: mathmacros
+
+-clean: ; /bin/rm -f *.gif Make.out
++clean: ; rm -f *.gif Make.out
+diff --git a/examples/Makefile b/examples/Makefile
+index b1b4e1d..3edfdd0 100644
+--- a/examples/Makefile
++++ b/examples/Makefile
+@@ -25,4 +25,4 @@ needed:	${obj}
+
+ all: ; echo "(time (for-each compile-file (map symbol->string '(${src}))))" | ${Scheme}
+
+-clean: ; /bin/rm -f $(obj) expr.md
++clean: ; rm -f $(obj) expr.md
+diff --git a/makefiles/Makefile-csug.in b/makefiles/Makefile-csug.in
+index df24092..6f8a8d9 100644
+--- a/makefiles/Makefile-csug.in
++++ b/makefiles/Makefile-csug.in
+@@ -29,7 +29,7 @@ install: target
+ # thrice is not enough when starting from scratch
+ logcheck1: $(x).thirdrun
+ 	@if [ -n "`grep 'Warning: Label(s) may have changed' $(x).log`" ] ; then\
+-            /bin/rm -f $(x).thirdrun ;\
++            rm -f $(x).thirdrun ;\
+             $(MAKE) $(x).thirdrun;\
+          fi
+
+@@ -55,7 +55,7 @@ stexsrc = csug.stex title.stex copyright.stex contents.stex\
+ texsrc = ${stexsrc:%.stex=%.tex}
+
+ title.tex contents.tex bibliography.tex:
+-	/bin/rm -f $*.tex
++	rm -f $*.tex
+ 	echo "%%% DO NOT EDIT THIS FILE" > $*.tex
+ 	echo "%%% Edit the .stex version instead" >> $*.tex
+ 	echo "" >> $*.tex
+@@ -147,7 +147,7 @@ code: $(stexsrc)
+ 	echo '(load "code" pretty-print)' | $(Scheme) -q
+
+ $(x).clean:
+-	-/bin/rm -f $(x).rfm $(x).sfm $(x).prefirstrun $(x).presecondrun\
++	-rm -f $(x).rfm $(x).sfm $(x).prefirstrun $(x).presecondrun\
+                     $(x).prethirdrun $(x).ans\
+                     $(x).hprefirstrun $(x).hpresecondrun $(x).hprethirdrun\
+                     tspl.aux tspl.haux tspl.rfm tspl.idx in.hidx\
+diff --git a/makefiles/Makefile-release_notes.in b/makefiles/Makefile-release_notes.in
+index 4435b6f..64348a4 100644
+--- a/makefiles/Makefile-release_notes.in
++++ b/makefiles/Makefile-release_notes.in
+@@ -38,7 +38,7 @@ install: $x.pdf $x.html
+ 	$(INSTALL) -m 2755 -d $(installdir)/gifs
+ 	$(INSTALL) -m 0644 --ifdiff gifs/*.gif $(installdir)/gifs
+ 	$(INSTALL) -m 2755 -d $(installdir)/math
+-	-/bin/rm -rf $(installdir)/$(mathdir)
++	-rm -rf $(installdir)/$(mathdir)
+ 	$(INSTALL) -m 2755 -d $(installdir)/$(mathdir)
+ 	if [ -e $(mathdir)/0.gif ] ; then $(INSTALL) -m 0644 $(mathdir)/*.gif $(installdir)/$(mathdir) ; fi
+
+diff --git a/makefiles/Mf-install.in b/makefiles/Mf-install.in
+index a702c34..c09043d 100644
+--- a/makefiles/Mf-install.in
++++ b/makefiles/Mf-install.in
+@@ -114,12 +114,12 @@ bininstall: ${Bin}
+ libbininstall: ${LibBin}
+ 	$I -m 444 ${PetiteBoot} ${LibBin}/petite.boot
+ 	if [ "${InstallPetiteName}" != "petite" ]; then\
+-          /bin/rm -f ${LibBin}/${InstallPetiteName}.boot;\
++          rm -f ${LibBin}/${InstallPetiteName}.boot;\
+           ln -f ${LibBin}/petite.boot ${LibBin}/${InstallPetiteName}.boot;\
+         fi
+ 	$I -m 444 ${SchemeBoot} ${LibBin}/scheme.boot;\
+ 	if [ "${InstallSchemeName}" != "scheme" ]; then\
+-          /bin/rm -f ${LibBin}/${InstallSchemeName}.boot;\
++          rm -f ${LibBin}/${InstallSchemeName}.boot;\
+           ln -f ${LibBin}/scheme.boot ${LibBin}/${InstallSchemeName}.boot;\
+         fi
+ 	ln -f ${LibBin}/scheme.boot ${LibBin}/${InstallScriptName}.boot;
+diff --git a/makefiles/installsh b/makefiles/installsh
+index 48f1e46..95d85fb 100755
+--- a/makefiles/installsh
++++ b/makefiles/installsh
+@@ -1,7 +1,8 @@
+ #! /bin/sh
+ if [ -x /bin/true ]; then TRUE=/bin/true;
+ elif [ -x /usr/bin/true ]; then TRUE=/usr/bin/true;
+-else echo "Can't find /bin/true or /usr/bin/true" ; exit 1;
++elif command -v true &> /dev/null; then TRUE=true;
++else echo "Can't find /bin/true or /usr/bin/true and no true command" ; exit 1;
+ fi
+
+ while ${TRUE} ; do
+diff --git a/mats/6.ms b/mats/6.ms
+index 102f84b..e504230 100644
+--- a/mats/6.ms
++++ b/mats/6.ms
+@@ -2685,7 +2685,7 @@
+       (begin
+         (system "ln -s ../examples .")
+         (load "examples/fatfib.ss" compile)
+-        (system "/bin/rm examples")
++        (system "rm -f examples")
+         #t))
+   (or (windows?) (embedded?)
+       (equal?
+diff --git a/mats/Mf-a6fb b/mats/Mf-a6fb
+index b16d1b6..ff9e687 100644
+--- a/mats/Mf-a6fb
++++ b/mats/Mf-a6fb
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-a6le b/mats/Mf-a6le
+index d6fee09..a3bda76 100644
+--- a/mats/Mf-a6le
++++ b/mats/Mf-a6le
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m64 -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m64 -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-a6nb b/mats/Mf-a6nb
+index 48187ef..0f7ac17 100644
+--- a/mats/Mf-a6nb
++++ b/mats/Mf-a6nb
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-a6ob b/mats/Mf-a6ob
+index 12758f3..0ffcccc 100644
+--- a/mats/Mf-a6ob
++++ b/mats/Mf-a6ob
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-a6osx b/mats/Mf-a6osx
+index f1dbf85..57bac22 100644
+--- a/mats/Mf-a6osx
++++ b/mats/Mf-a6osx
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m64 -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m64 -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-arm32le b/mats/Mf-arm32le
+index f33a665..83896eb 100644
+--- a/mats/Mf-arm32le
++++ b/mats/Mf-arm32le
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -fPIC -fomit-frame-pointer -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -fPIC -fomit-frame-pointer -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-i3fb b/mats/Mf-i3fb
+index 150cedb..1e4e8fc 100644
+--- a/mats/Mf-i3fb
++++ b/mats/Mf-i3fb
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-i3le b/mats/Mf-i3le
+index 8f521c8..b248620 100644
+--- a/mats/Mf-i3le
++++ b/mats/Mf-i3le
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m32 -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m32 -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-i3nb b/mats/Mf-i3nb
+index e81f6ff..8afeb5c 100644
+--- a/mats/Mf-i3nb
++++ b/mats/Mf-i3nb
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-i3ob b/mats/Mf-i3ob
+index 4e3ee1b..fcd4dee 100644
+--- a/mats/Mf-i3ob
++++ b/mats/Mf-i3ob
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-i3osx b/mats/Mf-i3osx
+index 53c7d4a..a55f6ee 100644
+--- a/mats/Mf-i3osx
++++ b/mats/Mf-i3osx
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m32 -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m32 -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-i3qnx b/mats/Mf-i3qnx
+index 724f2db..3e1437a 100644
+--- a/mats/Mf-i3qnx
++++ b/mats/Mf-i3qnx
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m32 -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m32 -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ppc32le b/mats/Mf-ppc32le
+index 28151a8..547ca00 100644
+--- a/mats/Mf-ppc32le
++++ b/mats/Mf-ppc32le
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m32 -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m32 -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ta6fb b/mats/Mf-ta6fb
+index 921d609..5ed233e 100644
+--- a/mats/Mf-ta6fb
++++ b/mats/Mf-ta6fb
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ta6le b/mats/Mf-ta6le
+index cd014ec..21c686a 100644
+--- a/mats/Mf-ta6le
++++ b/mats/Mf-ta6le
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m64 -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m64 -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ta6nb b/mats/Mf-ta6nb
+index 6b1929d..9b9b898 100644
+--- a/mats/Mf-ta6nb
++++ b/mats/Mf-ta6nb
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ta6ob b/mats/Mf-ta6ob
+index a7aee91..8f25aed 100644
+--- a/mats/Mf-ta6ob
++++ b/mats/Mf-ta6ob
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ta6osx b/mats/Mf-ta6osx
+index 42da5d7..0dd386f 100644
+--- a/mats/Mf-ta6osx
++++ b/mats/Mf-ta6osx
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m64 -pthread -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m64 -pthread -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ti3fb b/mats/Mf-ti3fb
+index c891145..56bf7d3 100644
+--- a/mats/Mf-ti3fb
++++ b/mats/Mf-ti3fb
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ti3le b/mats/Mf-ti3le
+index 12e77b8..22b4148 100644
+--- a/mats/Mf-ti3le
++++ b/mats/Mf-ti3le
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m32 -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m32 -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ti3nb b/mats/Mf-ti3nb
+index 028c652..573946e 100644
+--- a/mats/Mf-ti3nb
++++ b/mats/Mf-ti3nb
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ti3ob b/mats/Mf-ti3ob
+index 8a4741c..4472b60 100644
+--- a/mats/Mf-ti3ob
++++ b/mats/Mf-ti3ob
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ti3osx b/mats/Mf-ti3osx
+index 6913c34..9273b44 100644
+--- a/mats/Mf-ti3osx
++++ b/mats/Mf-ti3osx
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m32 -pthread -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m32 -pthread -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-tppc32le b/mats/Mf-tppc32le
+index a12b515..8b9d9f0 100644
+--- a/mats/Mf-tppc32le
++++ b/mats/Mf-tppc32le
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m32 -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m32 -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/unix.ms b/mats/unix.ms
+index cfba3e7..db7f6f9 100644
+--- a/mats/unix.ms
++++ b/mats/unix.ms
+@@ -72,8 +72,8 @@
+   (mat system
+     (eqv? (with-output-to-file "testfile.ss" void '(replace)) (void))
+     (begin
+-      (system (format "~:[~;/pkg~]/bin/rm testfile.ss" (embedded?)))
+-      (system (format "~:[~;/pkg~]/bin/echo hello > testfile.ss" (embedded?)))
++      (system "rm -f testfile.ss")
++      (system "echo hello > testfile.ss")
+       (let ([p (open-input-file "testfile.ss")])
+         (and (eq? (read p) 'hello)
+              (begin (close-input-port p) #t))))
+diff --git a/newrelease b/newrelease
+index e903956..2d06740 100755
+--- a/newrelease
++++ b/newrelease
+@@ -75,13 +75,13 @@ if ($status != 0) exit 1
+
+ cd $W
+
+-/bin/rm -f BUILDING
++rm -f BUILDING
+ sed -e "s/Chez Scheme Version [^ ]*/Chez Scheme Version $R/" \
+     -e "s/Copyright 1984-.... /Copyright 1984-`date +%Y` /" \
+     ../BUILDING > BUILDING
+ set updatedfiles = ($updatedfiles BUILDING)
+
+-/bin/rm -f NOTICE
++rm -f NOTICE
+ sed -e "s/Chez Scheme Version [^ ]*/Chez Scheme Version $R/" \
+     -e "s/Copyright 1984-.... /Copyright 1984-`date +%Y` /" \
+     ../NOTICE > NOTICE
+@@ -92,19 +92,19 @@ sed -e "s/csv[0-9]\.[0-9]\(\.[0-9]\)*/csv$R/" ../makefiles/Mf-install.in > makef
+ sed -e "s/csug[0-9]\.[0-9]/csug$MR.$mR/" -e "s/csug[0-9]_[0-9]/csug$MR""_$mR/" ../makefiles/Makefile-csug.in > makefiles/Makefile-csug.in
+ set updatedfiles = ($updatedfiles makefiles/Mf-install.in makefiles/Makefile-csug.in)
+
+-/bin/rm scheme.1.in
++rm -f scheme.1.in
+ sed -e "s/Chez Scheme Version [0-9]\.[0-9]\(\.[0-9]\)* .* [0-9][0-9]*/Chez Scheme Version $R `date +'%B %Y'`/" \
+     -e "s/Copyright .* Cisco Systems, Inc./Copyright `date +%Y` Cisco Systems, Inc./" \
+   ../scheme.1.in > scheme.1.in
+ set updatedfiles = ($updatedfiles scheme.1.in)
+
+-/bin/rm -f c/Makefile.{,t}{i3,a6}nt
++rm -f c/Makefile.{,t}{i3,a6}nt
+ foreach fn (c/Makefile.{,t}{a6,i3}nt)
+   set updatedfiles = ($updatedfiles $fn)
+   sed -e "s/csv[0-9][0-9][0-9]*/csv$ZR/g" ../$fn > $fn
+ end
+
+-/bin/rm -f mats/Mf-{,t}{i3,a6}nt
++rm -f mats/Mf-{,t}{i3,a6}nt
+ foreach fn (mats/Mf-{,t}{a6,i3}nt)
+   set updatedfiles = ($updatedfiles $fn)
+   sed -e "s/csv[0-9][0-9][0-9]*/csv$ZR/g" ../$fn > $fn
+@@ -123,11 +123,11 @@ sed -e "s/FILEVERSION .*/FILEVERSION $RCVERSION/"\
+     -e "s/Copyright 1984-..../Copyright 1984-`date +%Y`/g" ../c/scheme.rc > c/scheme.rc
+ set updatedfiles = ($updatedfiles c/scheme.rc)
+
+-/bin/rm -f s/7.ss
++rm -f s/7.ss
+ sed -e "s/nCopyright 1984-..../nCopyright 1984-`date +%Y`/g" ../s/7.ss > s/7.ss
+ set updatedfiles = ($updatedfiles s/7.ss)
+
+-/bin/rm -f s/cmacros.ss
++rm -f s/cmacros.ss
+ set VNUM = `printf "%04x%02x%02x" $MR $mR $bR`
+ sed -e "s/scheme-version #x......../scheme-version #x$VNUM/" ../s/cmacros.ss > s/cmacros.ss
+ set updatedfiles = ($updatedfiles s/cmacros.ss)
+@@ -146,17 +146,17 @@ sed -e "s/Revised\(.*\)for Chez Scheme Version [^ ]*<br>/Revised\1for Chez Schem
+   ../csug/csug.stex > csug/csug.stex
+ set updatedfiles = ($updatedfiles csug/copyright.stex csug/csug.stex)
+
+-/bin/rm bintar/Makefile
++rm -f bintar/Makefile
+ sed -e "s/^version = .*/version = $R/" \
+     -e "s/csv[0-9][0-9][0-9]*/csv$ZR/g" \
+   ../bintar/Makefile > bintar/Makefile
+ set updatedfiles = ($updatedfiles bintar/Makefile)
+
+-/bin/rm rpm/Makefile
++rm -f rpm/Makefile
+ sed -e "s/^version = .*/version = $R/" ../rpm/Makefile > rpm/Makefile
+ set updatedfiles = ($updatedfiles rpm/Makefile)
+
+-/bin/rm pkg/Makefile
++rm -f pkg/Makefile
+ sed -e "s/^version = .*/version = $R/" \
+     -e "s/&copy; .* Cisco Systems/\&copy; `date +%Y` Cisco Systems/" \
+      ../pkg/Makefile > pkg/Makefile
+@@ -170,7 +170,7 @@ foreach fn (wininstall/{,t}{a6,i3}nt.wxs)
+   sed -e "s/csv[0-9][0-9][0-9]*/csv$ZR/" ../$fn > $fn
+ end
+
+-/bin/rm LOG
++rm -f LOG
+ cat ../LOG > LOG
+ echo "" >> LOG
+ echo "$R changes:" >> LOG
+diff --git a/pkg/Makefile b/pkg/Makefile
+index e0eef67..a3fe83f 100644
+--- a/pkg/Makefile
++++ b/pkg/Makefile
+@@ -39,7 +39,7 @@ $(PKG): $(BUILDROOT)/$(PKG)
+           --package-path $(BUILDROOT)\
+           $(PKG)
+ 	sudo chown $(DOTUSER):$(DOTGROUP) $(PKG)
+-	sudo /bin/rm -rf $(RELEASE) $(BUILDROOT)
++	sudo rm -rf $(RELEASE) $(BUILDROOT)
+
+ $(BUILDROOT)/$(PKG): $(PKGCONTENT)
+ 	sudo /usr/bin/pkgbuild\
+diff --git a/release_notes/gifs/Makefile b/release_notes/gifs/Makefile
+index 9572965..701d53a 100644
+--- a/release_notes/gifs/Makefile
++++ b/release_notes/gifs/Makefile
+@@ -15,7 +15,7 @@ density=-r90x90
+           ${density} - |\
+           pnmcrop |\
+           ppmtogif -transparent white > $*.gif
+-	/bin/rm -f $*.dvi $*.log *.aux
++	rm -f $*.dvi $*.log *.aux
+ 	test -f $*.gif && chmod 644 $*.gif
+
+ all: ${gifs}
+@@ -44,7 +44,7 @@ ghostRightarrow.gif: Rightarrow.tex
+           giftrans -g '#000000=#ffffff' |\
+           giftopnm |\
+           ppmtogif -transparent white > $*.gif
+-	/bin/rm -f Rightarrow.dvi Rightarrow.log Rightarrow.aux
++	rm -f Rightarrow.dvi Rightarrow.log Rightarrow.aux
+ 	test -f $*.gif && chmod 644 $*.gif
+
+-clean: ; /bin/rm -f *.gif Make.out
++clean: ; rm -f *.gif Make.out
+diff --git a/release_notes/math/Makefile b/release_notes/math/Makefile
+index b3ffae3..9eca430 100644
+--- a/release_notes/math/Makefile
++++ b/release_notes/math/Makefile
+@@ -16,11 +16,11 @@ density=-r90x90
+           ${density} - |\
+           pnmcrop |\
+           ppmtogif -transparent white > $*.gif
+-	/bin/rm -f $*.dvi $*.log $*.aux
++	rm -f $*.dvi $*.log $*.aux
+ 	test -f $*.gif && chmod 644 $*.gif
+
+ all: ${gifs}
+
+ ${gifs}: mathmacros
+
+-clean: ; /bin/rm -f *.gif Make.out
++clean: ; rm -f *.gif Make.out
+diff --git a/s/Mf-base b/s/Mf-base
+index c709608..40d816c 100644
+--- a/s/Mf-base
++++ b/s/Mf-base
+@@ -206,7 +206,7 @@ profiled:
+ 	$(MAKE) all loadspd=t bp=t PetiteBoot=../boot/$m/xpetite.boot SchemeBoot=../boot/$m/xscheme.boot
+ 	$(MAKE) prettyclean
+ 	$(MAKE) io.$m loadspd=t dumpbpd=t Scheme="../bin/$m/scheme -b ../boot/$m/xpetite.boot -b ../boot/$m/xscheme.boot"
+-	/bin/rm -f ../boot/$m/xpetite.boot ../boot/$m/xscheme.boot
++	rm -f ../boot/$m/xpetite.boot ../boot/$m/xscheme.boot
+ 	$(MAKE) prettyclean
+ 	$(MAKE) all loadspd=t loadbpd=t
+
+diff --git a/workarea b/workarea
+index bacc712..0461919 100755
+--- a/workarea
++++ b/workarea
+@@ -70,9 +70,9 @@ esac
+
+ if [ "$OS" = "Windows_NT" ]
+ then
+-    ln="/bin/cp -R"
++    ln="cp -R"
+ else
+-    ln="/bin/ln -s"
++    ln="ln -s"
+ fi
+
+ # This shell script creates a workarea for local modifications to the
+@@ -102,7 +102,7 @@ workln()
+ forceworkln()
+ {
+     if [ ! -e $2 ] ; then
+-        /bin/ln -s $1 $2 2> /dev/null
++        ln -s $1 $2 2> /dev/null
+     fi
+ }
+
+@@ -168,13 +168,13 @@ done
+ # deep copy submodules where builds occur so changes don't propagate through symlinks
+ for dir in `echo zlib` ; do
+   if [ ! -e $W/$dir ] ; then
+-    /bin/cp -R $dir $W/$dir
++    cp -R $dir $W/$dir
+   fi
+ done
+
+ for dir in `echo lz4` ; do
+   if [ ! -e $W/$dir ] ; then
+-    /bin/cp -R $dir $W/$dir
++    cp -R $dir $W/$dir
+   fi
+ done
+
+--
+2.21.1 (Apple Git-122.3)
+
diff --git a/gnu/packages/patches/containerd-test-with-go1.13.patch b/gnu/packages/patches/containerd-test-with-go1.13.patch
deleted file mode 100644
index 964adee9e6..0000000000
--- a/gnu/packages/patches/containerd-test-with-go1.13.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Compatibility fix for go 1.13, flag.Parse() shouldn't be called during
-package initialization.
-https://golang.org/doc/go1.13#testing
---- a/client_test.go	2020-02-12 14:50:28.991245371 -0500
-+++ b/client_test.go	2020-02-12 15:12:37.383523980 -0500
-@@ -49,7 +49,6 @@
- 	flag.StringVar(&address, "address", defaultAddress, "The address to the containerd socket for use in the tests")
- 	flag.BoolVar(&noDaemon, "no-daemon", false, "Do not start a dedicated daemon for the tests")
- 	flag.BoolVar(&noCriu, "no-criu", false, "Do not run the checkpoint tests")
--	flag.Parse()
- }
- 
- func testContext() (context.Context, context.CancelFunc) {
-@@ -59,6 +58,7 @@
- }
- 
- func TestMain(m *testing.M) {
-+	flag.Parse()
- 	if testing.Short() {
- 		os.Exit(m.Run())
- 	}
diff --git a/gnu/packages/patches/curl-7.76-use-ssl-cert-env.patch b/gnu/packages/patches/curl-7.76-use-ssl-cert-env.patch
new file mode 100644
index 0000000000..24be6e31d9
--- /dev/null
+++ b/gnu/packages/patches/curl-7.76-use-ssl-cert-env.patch
@@ -0,0 +1,64 @@
+Make libcurl respect the SSL_CERT_{DIR,FILE} variables by default. The variables
+are fetched during initialization to preserve thread-safety (curl_global_init(3)
+must be called when no other threads exist).
+
+This fixes network functionality in rust:cargo, and probably removes the need
+for other future workarounds.
+===================================================================
+--- curl-7.66.0.orig/lib/easy.c	2020-01-02 15:43:11.883921171 +0100
++++ curl-7.66.0/lib/easy.c	2020-01-02 16:18:54.691882797 +0100
+@@ -134,6 +134,9 @@
+ #  pragma warning(default:4232) /* MSVC extension, dllimport identity */
+ #endif
+ 
++char * Curl_ssl_cert_dir = NULL;
++char * Curl_ssl_cert_file = NULL;
++
+ /**
+  * curl_global_init() globally initializes curl given a bitwise set of the
+  * different features of what to initialize.
+@@ -155,6 +158,9 @@
+ #endif
+   }
+ 
++  Curl_ssl_cert_dir = curl_getenv("SSL_CERT_DIR");
++  Curl_ssl_cert_file = curl_getenv("SSL_CERT_FILE");
++
+   if(!Curl_ssl_init()) {
+     DEBUGF(fprintf(stderr, "Error: Curl_ssl_init failed\n"));
+     return CURLE_FAILED_INIT;
+@@ -260,6 +266,9 @@
+   Curl_ssl_cleanup();
+   Curl_resolver_global_cleanup();
+ 
++  free(Curl_ssl_cert_dir);
++  free(Curl_ssl_cert_file);
++
+ #ifdef WIN32
+   Curl_win32_cleanup(init_flags);
+ #endif
+diff -ur curl-7.66.0.orig/lib/url.c curl-7.66.0/lib/url.c
+--- curl-7.66.0.orig/lib/url.c	2020-01-02 15:43:11.883921171 +0100
++++ curl-7.66.0/lib/url.c	2020-01-02 16:21:11.563880346 +0100
+@@ -524,6 +524,21 @@
+     if(result)
+       return result;
+ #endif
++    extern char * Curl_ssl_cert_dir;
++    extern char * Curl_ssl_cert_file;
++    if(Curl_ssl_cert_dir) {
++        if(result = Curl_setstropt(&set->str[STRING_SSL_CAPATH], Curl_ssl_cert_dir))
++            return result;
++        if(result = Curl_setstropt(&set->str[STRING_SSL_CAPATH_PROXY], Curl_ssl_cert_dir))
++            return result;
++    }
++
++    if(Curl_ssl_cert_file) {
++        if(result = Curl_setstropt(&set->str[STRING_SSL_CAFILE], Curl_ssl_cert_file))
++            return result;
++        if(result = Curl_setstropt(&set->str[STRING_SSL_CAFILE_PROXY], Curl_ssl_cert_file))
++            return result;
++    }
+   }
+ 
+   set->wildcard_enabled = FALSE;
diff --git a/gnu/packages/patches/gimp-make-gegl-introspect-optional.patch b/gnu/packages/patches/gimp-make-gegl-introspect-optional.patch
new file mode 100644
index 0000000000..4dd1ab74a8
--- /dev/null
+++ b/gnu/packages/patches/gimp-make-gegl-introspect-optional.patch
@@ -0,0 +1,43 @@
+From 2cae9b9acf9da98c4c9990819ffbd5aabe23017e Mon Sep 17 00:00:00 2001
+From: Jehan <jehan@girinstud.io>
+Date: Mon, 14 Dec 2020 19:53:38 +0100
+Subject: [PATCH] app: make "gegl:introspect" an optional operation dependency.
+
+Check at runtime for the operation availability and set the "Show Image
+Graph" action active depending on this check.
+
+This goes with discussions to make this operation optional with a
+runtime check for the tool `dot`.
+See: https://gitlab.gnome.org/GNOME/gegl/-/merge_requests/84
+---
+ app/actions/debug-actions.c | 6 ++++++
+ app/sanity.c                | 1 -
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/app/actions/debug-actions.c b/app/actions/debug-actions.c
+index 6be4422b228..22ca38b15ea 100644
+--- a/app/actions/debug-actions.c
++++ b/app/actions/debug-actions.c
+@@ -103,4 +103,10 @@ void
+ debug_actions_update (GimpActionGroup *group,
+                       gpointer         data)
+ {
++#define SET_SENSITIVE(action,condition) \
++        gimp_action_group_set_action_sensitive (group, action, (condition) != 0)
++
++  SET_SENSITIVE ("debug-show-image-graph", gegl_has_operation ("gegl:introspect"));
++
++#undef SET_SENSITIVE
+ }
+diff --git a/app/sanity.c b/app/sanity.c
+index 015801a396e..6374ac1ad20 100644
+--- a/app/sanity.c
++++ b/app/sanity.c
+@@ -650,7 +650,6 @@ sanity_check_gegl_ops (void)
+     "gegl:hue-chroma",
+     "gegl:illusion",
+     "gegl:image-gradient",
+-    "gegl:introspect",
+     "gegl:invert-gamma",
+     "gegl:invert-linear",
+     "gegl:lens-blur",
diff --git a/gnu/packages/patches/imagemagick-CVE-2020-27829.patch b/gnu/packages/patches/imagemagick-CVE-2020-27829.patch
new file mode 100644
index 0000000000..b15c1d0879
--- /dev/null
+++ b/gnu/packages/patches/imagemagick-CVE-2020-27829.patch
@@ -0,0 +1,27 @@
+We omit the ChangeLog changes below, since they do not apply cleanly.
+
+
+From 6ee5059cd3ac8d82714a1ab1321399b88539abf0 Mon Sep 17 00:00:00 2001
+From: Cristy <urban-warrior@imagemagick.org>
+Date: Mon, 30 Nov 2020 16:26:59 +0000
+Subject: [PATCH] possible TIFF related-heap buffer overflow (alert & POC by
+ Hardik Shah)
+
+---
+ ChangeLog     | 6 ++++++
+ coders/tiff.c | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/coders/tiff.c b/coders/tiff.c
+index e98f927ab..1eecf17ae 100644
+--- a/coders/tiff.c
++++ b/coders/tiff.c
+@@ -1975,7 +1975,7 @@ static Image *ReadTIFFImage(const ImageInfo *image_info,
+         extent+=image->columns*sizeof(uint32);
+ #endif
+         strip_pixels=(unsigned char *) AcquireQuantumMemory(extent,
+-          sizeof(*strip_pixels));
++          2*sizeof(*strip_pixels));
+         if (strip_pixels == (unsigned char *) NULL)
+           ThrowTIFFException(ResourceLimitError,"MemoryAllocationFailed");
+         (void) memset(strip_pixels,0,extent*sizeof(*strip_pixels));
diff --git a/gnu/packages/patches/imagemagick-ReadDCMImage-fix.patch b/gnu/packages/patches/imagemagick-ReadDCMImage-fix.patch
new file mode 100644
index 0000000000..42ece43682
--- /dev/null
+++ b/gnu/packages/patches/imagemagick-ReadDCMImage-fix.patch
@@ -0,0 +1,26 @@
+From 512668dfd92b20d0d08b91d62b422d8262573281 Mon Sep 17 00:00:00 2001
+From: Dirk Lemstra <dirk@lemstra.org>
+Date: Wed, 24 Mar 2021 20:37:15 +0100
+Subject: [PATCH] Throw exception when no exception was raised but status was
+ false (#3432).
+
+---
+ coders/dcm.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/coders/dcm.c b/coders/dcm.c
+index 7a68ed6e8..ed17c9567 100644
+--- a/coders/dcm.c
++++ b/coders/dcm.c
+@@ -3989,6 +3989,8 @@ static Image *ReadDCMImage(const ImageInfo *image_info,ExceptionInfo *exception)
+         if (redmap != (int *) NULL)
+           redmap=(int *) RelinquishMagickMemory(redmap);
+         image=DestroyImageList(image);
++        if ((status == MagickFalse) && (exception->severity < ErrorException))
++          ThrowReaderException(CorruptImageError,"CorruptImage");
+         return(GetFirstImageInList(images));
+       }
+     if (info.depth != (1UL*MAGICKCORE_QUANTUM_DEPTH))
+-- 
+2.31.0
+
diff --git a/gnu/packages/patches/imagemagick-ReadDCMPixels-fix.patch b/gnu/packages/patches/imagemagick-ReadDCMPixels-fix.patch
new file mode 100644
index 0000000000..a91999186b
--- /dev/null
+++ b/gnu/packages/patches/imagemagick-ReadDCMPixels-fix.patch
@@ -0,0 +1,35 @@
+From c8f25953ad1dd38a8b2d92738f0f742ad7e0bce7 Mon Sep 17 00:00:00 2001
+From: Cristy <mikayla-grace@urban-warrior.org>
+Date: Sun, 21 Mar 2021 21:21:15 -0400
+Subject: [PATCH] https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=32322
+
+---
+ coders/dcm.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/coders/dcm.c b/coders/dcm.c
+index 29eed9618..7a68ed6e8 100644
+--- a/coders/dcm.c
++++ b/coders/dcm.c
+@@ -2984,12 +2984,12 @@ static MagickBooleanType ReadDCMPixels(Image *image,DCMInfo *info,
+         }
+       else
+         {
+-          SetPixelRed(q,(Quantum) (((ssize_t) pixel.red) |
+-            (((ssize_t) GetPixelRed(q)) << 8)));
+-          SetPixelGreen(q,(Quantum) (((ssize_t) pixel.green) |
+-            (((ssize_t) GetPixelGreen(q)) << 8)));
+-          SetPixelBlue(q,(Quantum) (((ssize_t) pixel.blue) |
+-            (((ssize_t) GetPixelBlue(q)) << 8)));
++          SetPixelRed(q,(Quantum) (((size_t) pixel.red) |
++            (((size_t) GetPixelRed(q)) << 8)));
++          SetPixelGreen(q,(Quantum) (((size_t) pixel.green) |
++            (((size_t) GetPixelGreen(q)) << 8)));
++          SetPixelBlue(q,(Quantum) (((size_t) pixel.blue) |
++            (((size_t) GetPixelBlue(q)) << 8)));
+         }
+       q++;
+     }
+-- 
+2.31.0
+
diff --git a/gnu/packages/patches/imagemagick-WriteTHUMBNAILImage-fix.patch b/gnu/packages/patches/imagemagick-WriteTHUMBNAILImage-fix.patch
new file mode 100644
index 0000000000..f38a45b800
--- /dev/null
+++ b/gnu/packages/patches/imagemagick-WriteTHUMBNAILImage-fix.patch
@@ -0,0 +1,25 @@
+From 6a5d3575487487f2703383338bd17c8c25068f19 Mon Sep 17 00:00:00 2001
+From: Cristy <mikayla-grace@urban-warrior.org>
+Date: Thu, 25 Mar 2021 08:58:18 -0400
+Subject: [PATCH] eliminate compiler warning
+
+---
+ coders/thumbnail.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/coders/thumbnail.c b/coders/thumbnail.c
+index 3833341b0..1e2bfe8c2 100644
+--- a/coders/thumbnail.c
++++ b/coders/thumbnail.c
+@@ -199,7 +199,7 @@ static MagickBooleanType WriteTHUMBNAILImage(const ImageInfo *image_info,
+     q++;
+   }
+   if ((q > (GetStringInfoDatum(profile)+GetStringInfoLength(profile))) ||
+-      (length > (GetStringInfoDatum(profile)+GetStringInfoLength(profile)-q)))
++      ((ssize_t) length > (GetStringInfoDatum(profile)+GetStringInfoLength(profile)-q)))
+     ThrowWriterException(CoderError,"ImageDoesNotHaveAThumbnail");
+   thumbnail_image=BlobToImage(image_info,q,length,&image->exception);
+   if (thumbnail_image == (Image *) NULL)
+-- 
+2.31.0
+
diff --git a/gnu/packages/patches/libvirt-add-install-prefix.patch b/gnu/packages/patches/libvirt-add-install-prefix.patch
new file mode 100644
index 0000000000..1331fa9b6f
--- /dev/null
+++ b/gnu/packages/patches/libvirt-add-install-prefix.patch
@@ -0,0 +1,329 @@
+Patch from NixOS: 
+https://raw.githubusercontent.com/NixOS/nixpkgs/b98031a49c66095dd1eb9185ecdaeeb5e3cd752d/pkgs/development/libraries/libvirt/0001-meson-patch-in-an-install-prefix-for-building-on-nix.patch
+
+From a896b0be849455edb83a9305dfec9b41447ef3e4 Mon Sep 17 00:00:00 2001
+From: Euan Kemp <euank@euank.com>
+Date: Thu, 14 Jan 2021 00:32:00 -0800
+Subject: [PATCH] meson: patch in an install prefix for building on nix
+
+Used in the nixpkgs version of libvirt so that we can install things in
+the nix store, but read them from the root filesystem.
+---
+ meson.build                       |  9 +++++++++
+ meson_options.txt                 |  2 ++
+ src/libxl/meson.build             |  6 +++---
+ src/locking/meson.build           |  8 ++++----
+ src/lxc/meson.build               |  6 +++---
+ src/meson.build                   | 18 +++++++++---------
+ src/network/meson.build           | 12 ++++++------
+ src/nwfilter/xml/meson.build      |  2 +-
+ src/qemu/meson.build              | 14 +++++++-------
+ src/remote/meson.build            |  6 +++---
+ src/security/apparmor/meson.build |  8 ++++----
+ tools/meson.build                 |  4 ++--
+ 12 files changed, 53 insertions(+), 42 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index b5164f6..33719f1 100644
+--- a/meson.build
++++ b/meson.build
+@@ -39,6 +39,8 @@ if host_machine.system() == 'windows'
+   conf.set('WINVER', '0x0600') # Win Vista / Server 2008
+ endif
+ 
++# patched in for nix
++install_prefix = get_option('install_prefix')
+ 
+ # set various paths
+ 
+@@ -57,6 +59,13 @@ else
+   sysconfdir = prefix / get_option('sysconfdir')
+ endif
+ 
++# nix: don't prefix the localstatedir; some things need to write to it, so it
++# can't be in the nix store, and that's what the prefix is.
++# We'll prefix things ourselves where needed
++localstatedir = get_option('localstatedir')
++# Same for sysconfidr
++sysconfdir = get_option('sysconfdir')
++
+ # if --prefix is /usr, don't use /usr/var for localstatedir or /usr/etc for
+ # sysconfdir as this makes a lot of things break in testing situations
+ if prefix == '/usr'
+diff --git a/meson_options.txt b/meson_options.txt
+index e5d79c2..081cd32 100644
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -1,3 +1,5 @@
++option('install_prefix', type: 'string', value: '', description: 'prefix for nix store installation')
++
+ option('no_git', type: 'boolean', value: false, description: 'Disable git submodule update')
+ option('packager', type: 'string', value: '', description: 'Extra packager name')
+ option('packager_version', type: 'string', value: '', description: 'Extra packager version')
+diff --git a/src/libxl/meson.build b/src/libxl/meson.build
+index 3bb6cc5..78d7be0 100644
+--- a/src/libxl/meson.build
++++ b/src/libxl/meson.build
+@@ -84,8 +84,8 @@ if conf.has('WITH_LIBXL')
+   }
+ 
+   virt_install_dirs += [
+-    localstatedir / 'lib' / 'libvirt' / 'libxl',
+-    runstatedir / 'libvirt' / 'libxl',
+-    localstatedir / 'log' / 'libvirt' / 'libxl',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'libxl',
++    install_prefix + runstatedir / 'libvirt' / 'libxl',
++    install_prefix + localstatedir / 'log' / 'libvirt' / 'libxl',
+   ]
+ endif
+diff --git a/src/locking/meson.build b/src/locking/meson.build
+index 8a28310..9da81cc 100644
+--- a/src/locking/meson.build
++++ b/src/locking/meson.build
+@@ -243,14 +243,14 @@ if conf.has('WITH_LIBVIRTD')
+   }
+ 
+   virt_install_dirs += [
+-    localstatedir / 'lib' / 'libvirt' / 'lockd',
+-    localstatedir / 'lib' / 'libvirt' / 'lockd' / 'files',
+-    runstatedir / 'libvirt' / 'lockd',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'lockd',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'lockd' / 'files',
++    install_prefix + runstatedir / 'libvirt' / 'lockd',
+   ]
+ 
+   if conf.has('WITH_SANLOCK')
+     virt_install_dirs += [
+-      localstatedir / 'lib' / 'libvirt' / 'sanlock',
++      install_prefix + localstatedir / 'lib' / 'libvirt' / 'sanlock',
+     ]
+   endif
+ endif
+diff --git a/src/lxc/meson.build b/src/lxc/meson.build
+index f8e2a88..96d6687 100644
+--- a/src/lxc/meson.build
++++ b/src/lxc/meson.build
+@@ -182,8 +182,8 @@ if conf.has('WITH_LXC')
+   }
+ 
+   virt_install_dirs += [
+-    localstatedir / 'lib' / 'libvirt' / 'lxc',
+-    runstatedir / 'libvirt' / 'lxc',
+-    localstatedir / 'log' / 'libvirt' / 'lxc',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'lxc',
++    install_prefix + runstatedir / 'libvirt' / 'lxc',
++    install_prefix + localstatedir / 'log' / 'libvirt' / 'lxc',
+   ]
+ endif
+diff --git a/src/meson.build b/src/meson.build
+index 7c47821..d33d16a 100644
+--- a/src/meson.build
++++ b/src/meson.build
+@@ -669,7 +669,7 @@ endforeach
+ 
+ virt_conf_files += 'libvirt.conf'
+ 
+-install_data(virt_conf_files, install_dir: confdir)
++install_data(virt_conf_files, install_dir: install_prefix + confdir)
+ install_data(virt_aug_files, install_dir: virt_aug_dir)
+ 
+ # augeas_test_data:
+@@ -729,7 +729,7 @@ foreach data : virt_daemon_confs
+     output: '@0@.conf'.format(data['name']),
+     configuration: daemon_conf,
+     install: true,
+-    install_dir: confdir,
++    install_dir: install_prefix + confdir,
+   )
+ 
+   if data.get('with_ip', false)
+@@ -853,14 +853,14 @@ if conf.has('WITH_LIBVIRTD')
+ 
+       install_data(
+         init_file,
+-        install_dir: sysconfdir / 'init.d',
++        install_dir: install_prefix + sysconfdir / 'init.d',
+         rename: [ init['name'] ],
+       )
+ 
+       if init.has_key('confd')
+         install_data(
+           init['confd'],
+-          install_dir: sysconfdir / 'conf.d',
++          install_dir: install_prefix + sysconfdir / 'conf.d',
+           rename: [ init['name'] ],
+         )
+       endif
+@@ -872,7 +872,7 @@ if init_script != 'none'
+   foreach sysconf : sysconf_files
+     install_data(
+       sysconf['file'],
+-      install_dir: sysconfdir / 'sysconfig',
++      install_dir: install_prefix + sysconfdir / 'sysconfig',
+       rename: [ sysconf['name'] ],
+     )
+   endforeach
+@@ -897,10 +897,10 @@ endif
+ # Install empty directories
+ 
+ virt_install_dirs += [
+-  localstatedir / 'cache' / 'libvirt',
+-  localstatedir / 'lib' / 'libvirt' / 'images',
+-  localstatedir / 'lib' / 'libvirt' / 'filesystems',
+-  localstatedir / 'lib' / 'libvirt' / 'boot',
++  install_prefix + localstatedir / 'cache' / 'libvirt',
++  install_prefix + localstatedir / 'lib' / 'libvirt' / 'images',
++  install_prefix + localstatedir / 'lib' / 'libvirt' / 'filesystems',
++  install_prefix + localstatedir / 'lib' / 'libvirt' / 'boot',
+ ]
+ 
+ meson.add_install_script(
+diff --git a/src/network/meson.build b/src/network/meson.build
+index 3ec598c..b02040b 100644
+--- a/src/network/meson.build
++++ b/src/network/meson.build
+@@ -79,9 +79,9 @@ if conf.has('WITH_NETWORK')
+   }
+ 
+   virt_install_dirs += [
+-    localstatedir / 'lib' / 'libvirt' / 'network',
+-    localstatedir / 'lib' / 'libvirt' / 'dnsmasq',
+-    runstatedir / 'libvirt' / 'network',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'network',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'dnsmasq',
++    install_prefix + runstatedir / 'libvirt' / 'network',
+   ]
+ 
+   configure_file(
+@@ -89,12 +89,12 @@ if conf.has('WITH_NETWORK')
+     output: '@BASENAME@',
+     copy: true,
+     install: true,
+-    install_dir: confdir / 'qemu' / 'networks',
++    install_dir: install_prefix + confdir / 'qemu' / 'networks',
+   )
+ 
+   meson.add_install_script(
+     meson_python_prog.path(), python3_prog.path(), meson_install_symlink_prog.path(),
+-    confdir / 'qemu' / 'networks' / 'autostart',
++    install_prefix + confdir / 'qemu' / 'networks' / 'autostart',
+     '../default.xml', 'default.xml',
+   )
+ 
+diff --git a/src/nwfilter/xml/meson.build b/src/nwfilter/xml/meson.build
+index 0d96c54..66c92a1 100644
+--- a/src/nwfilter/xml/meson.build
++++ b/src/nwfilter/xml/meson.build
+@@ -25,4 +25,4 @@ nwfilter_xml_files = [
+   'qemu-announce-self.xml',
+ ]
+ 
+-install_data(nwfilter_xml_files, install_dir: sysconfdir / 'libvirt' / 'nwfilter')
++install_data(nwfilter_xml_files, install_dir: install_prefix + sysconfdir / 'libvirt' / 'nwfilter')
+diff --git a/src/qemu/meson.build b/src/qemu/meson.build
+index 90640b0..8802cec 100644
+--- a/src/qemu/meson.build
++++ b/src/qemu/meson.build
+@@ -171,12 +171,12 @@ if conf.has('WITH_QEMU')
+   }
+ 
+   virt_install_dirs += [
+-    localstatedir / 'lib' / 'libvirt' / 'qemu',
+-    runstatedir / 'libvirt' / 'qemu',
+-    localstatedir / 'cache' / 'libvirt' / 'qemu',
+-    localstatedir / 'log' / 'libvirt' / 'qemu',
+-    localstatedir / 'lib' / 'libvirt' / 'swtpm',
+-    runstatedir / 'libvirt' / 'qemu' / 'swtpm',
+-    localstatedir / 'log' / 'swtpm' / 'libvirt' / 'qemu',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'qemu',
++    install_prefix + runstatedir / 'libvirt' / 'qemu',
++    install_prefix + localstatedir / 'cache' / 'libvirt' / 'qemu',
++    install_prefix + localstatedir / 'log' / 'libvirt' / 'qemu',
++    install_prefix + localstatedir / 'lib' / 'libvirt' / 'swtpm',
++    install_prefix + runstatedir / 'libvirt' / 'qemu' / 'swtpm',
++    install_prefix + localstatedir / 'log' / 'swtpm' / 'libvirt' / 'qemu',
+   ]
+ endif
+diff --git a/src/remote/meson.build b/src/remote/meson.build
+index 9ad2f6a..429a15b 100644
+--- a/src/remote/meson.build
++++ b/src/remote/meson.build
+@@ -245,7 +245,7 @@ if conf.has('WITH_REMOTE')
+     }
+ 
+     virt_install_dirs += [
+-      localstatedir / 'log' / 'libvirt',
++      install_prefix + localstatedir / 'log' / 'libvirt',
+     ]
+ 
+     logrotate_conf = configuration_data()
+@@ -259,7 +259,7 @@ if conf.has('WITH_REMOTE')
+       )
+       install_data(
+         log_file,
+-        install_dir: sysconfdir / 'logrotate.d',
++        install_dir: install_prefix + sysconfdir / 'logrotate.d',
+         rename: [ name ],
+       )
+     endforeach
+@@ -309,7 +309,7 @@ endif
+ if conf.has('WITH_SASL')
+   install_data(
+     'libvirtd.sasl',
+-    install_dir: sysconfdir / 'sasl2',
++    install_dir: install_prefix + sysconfdir / 'sasl2',
+     rename: [ 'libvirt.conf' ],
+   )
+ endif
+diff --git a/src/security/apparmor/meson.build b/src/security/apparmor/meson.build
+index af43780..e2d6c81 100644
+--- a/src/security/apparmor/meson.build
++++ b/src/security/apparmor/meson.build
+@@ -17,22 +17,22 @@ foreach name : apparmor_gen_profiles
+     output: name,
+     configuration: apparmor_gen_profiles_conf,
+     install: true,
+-    install_dir: apparmor_dir,
++    install_dir: install_prefix + apparmor_dir,
+   )
+ endforeach
+ 
+ install_data(
+   [ 'libvirt-qemu', 'libvirt-lxc' ],
+-  install_dir: apparmor_dir / 'abstractions',
++  install_dir: install_prefix + apparmor_dir / 'abstractions',
+ )
+ 
+ install_data(
+   [ 'TEMPLATE.qemu', 'TEMPLATE.lxc' ],
+-  install_dir: apparmor_dir / 'libvirt',
++  install_dir: install_prefix + apparmor_dir / 'libvirt',
+ )
+ 
+ install_data(
+   'usr.lib.libvirt.virt-aa-helper.local',
+-  install_dir: apparmor_dir / 'local',
++  install_dir: install_prefix + apparmor_dir / 'local',
+   rename: 'usr.lib.libvirt.virt-aa-helper',
+ )
+diff --git a/tools/meson.build b/tools/meson.build
+index b8c6802..dacd0ff 100644
+--- a/tools/meson.build
++++ b/tools/meson.build
+@@ -115,7 +115,7 @@ if conf.has('WITH_LOGIN_SHELL')
+     install_rpath: libvirt_rpath,
+   )
+ 
+-  install_data('virt-login-shell.conf', install_dir: sysconfdir / 'libvirt')
++  install_data('virt-login-shell.conf', install_dir: install_prefix + sysconfdir / 'libvirt')
+ endif
+ 
+ if host_machine.system() == 'windows'
+@@ -274,7 +274,7 @@ configure_file(
+ if init_script == 'systemd'
+   install_data(
+     'libvirt-guests.sysconf',
+-    install_dir: sysconfdir / 'sysconfig',
++    install_dir: install_prefix + sysconfdir / 'sysconfig',
+     rename: 'libvirt-guests',
+   )
diff --git a/gnu/packages/patches/linphone-desktop-without-sdk.patch b/gnu/packages/patches/linphone-desktop-without-sdk.patch
new file mode 100644
index 0000000000..63e9808bf4
--- /dev/null
+++ b/gnu/packages/patches/linphone-desktop-without-sdk.patch
@@ -0,0 +1,235 @@
+From cfdf6d1c2051d6a20d0cbb94d81fe398f70dea4d Mon Sep 17 00:00:00 2001
+From: Raghav Gururajan <rg@raghavgururajan.name>
+Date: Sun, 21 Mar 2021 21:13:53 -0400
+Subject: [PATCH] [PATCH]: Fix building from git.
+
+---
+ CMakeLists.txt                                | 73 +------------------
+ linphone-app/CMakeLists.txt                   | 12 +--
+ .../cmake_builder/additional_steps.cmake      |  2 +-
+ .../linphone_package/CMakeLists.txt           | 38 ----------
+ linphone-app/linphoneqt_version.cmake         |  1 +
+ linphone-app/src/config.h.cmake               |  1 +
+ 6 files changed, 6 insertions(+), 121 deletions(-)
+ create mode 100644 linphone-app/linphoneqt_version.cmake
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index f7eb05f2..3e853bdd 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -48,16 +48,6 @@ project(linphoneqt)
+ include(GNUInstallDirs)
+ include(CheckCXXCompilerFlag)
+ 
+-# Prepare gobal CMAKE configuration specific to the current project
+-set(SDK_BUILD_DIR "${CMAKE_BINARY_DIR}/WORK")       # SDK build in WORK. Keep all in it.
+-set(LINPHONE_OUTPUT_DIR "${CMAKE_BINARY_DIR}/linphone-sdk/desktop")
+-
+-set(APPLICATION_OUTPUT_DIR "${CMAKE_BINARY_DIR}/OUTPUT")
+-
+-set(CMAKE_PREFIX_PATH "${LINPHONE_OUTPUT_DIR};${APPLICATION_OUTPUT_DIR}${PREFIX_PATH}")
+-string(REPLACE ";" "|" PREFIX_PATH "${CMAKE_PREFIX_PATH}")
+-#set(PREFIX_PATH "${LINPHONE_OUTPUT_DIR}|${APPLICATION_OUTPUT_DIR}${PREFIX_PATH}")
+-
+ # Avoid cmake warning if CMP0071 is not set.
+ if (POLICY CMP0071)
+     cmake_policy(SET CMP0071 NEW)
+@@ -116,9 +106,6 @@ if(ENABLE_V4L)
+ endif()
+ list(APPEND APP_OPTIONS "-DENABLE_RELATIVE_PREFIX=${ENABLE_RELATIVE_PREFIX}")
+ 
+-list(APPEND APP_OPTIONS "-DLINPHONE_OUTPUT_DIR=${LINPHONE_OUTPUT_DIR}")
+-
+-include(ExternalProject)
+ set(PROJECT_BUILD_COMMAND "")
+ if(CMAKE_BUILD_PARALLEL_LEVEL)
+ 	list(APPEND APP_OPTIONS "-DCMAKE_BUILD_PARALLEL_LEVEL=${CMAKE_BUILD_PARALLEL_LEVEL}")
+@@ -133,32 +120,10 @@ if(CMAKE_VERBOSE_MAKEFILE)
+ 	endif()
+ endif()
+ if(UNIX AND NOT APPLE)
+-	set(CMAKE_INSTALL_RPATH "$ORIGIN:$ORIGIN/lib64:$ORIGIN/../lib64:$ORIGIN/lib:$ORIGIN/../lib:${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}")
+ 	list(APPEND APP_OPTIONS "-DCMAKE_INSTALL_RPATH=${CMAKE_INSTALL_RPATH}")
+ endif()
+-ExternalProject_Add(sdk PREFIX "${CMAKE_BINARY_DIR}/sdk"
+-    SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-sdk"
+-    INSTALL_DIR "${LINPHONE_OUTPUT_DIR}"
+-    STAMP_DIR "${SDK_BUILD_DIR}/stamp"
+-    BINARY_DIR "${SDK_BUILD_DIR}"
+-    STEP_TARGETS build
+-    BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}
+-    INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Install step is already done at build time."
+-    LIST_SEPARATOR | # Use the alternate list separator
+-    CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
+-    #BUILD_ALWAYS NO #${DO_BUILD}
+-)
+-ExternalProject_Add_Step(sdk force_build
+-	COMMENT "Forcing build for 'desktop'"
+-	DEPENDEES configure
+-	DEPENDERS build
+-	ALWAYS 1
+-)
+ include(FindPkgConfig)
+ 
+-set(APP_DEPENDS sdk)
+-
+-
+ find_package(Qt5 5.12 COMPONENTS Core REQUIRED)
+ 
+ if ( NOT Qt5_FOUND )
+@@ -173,39 +138,5 @@ find_package(Mediastreamer2 CONFIG QUIET)
+ find_package(ortp CONFIG QUIET)
+ 
+ 
+-if(NOT (LinphoneCxx_FOUND) OR NOT (Linphone_FOUND) OR NOT (bctoolbox_FOUND) OR NOT (belcard_FOUND) OR NOT (Mediastreamer2_FOUND) OR NOT (ortp_FOUND) OR FORCE_APP_EXTERNAL_PROJECTS)
+-	message("Projects are set as External projects. You can start building them by using for example : cmake --build . --target install")
+-	ExternalProject_Add(linphone-qt PREFIX "${CMAKE_BINARY_DIR}/linphone-app"
+-		SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-app"
+-		INSTALL_DIR "${APPLICATION_OUTPUT_DIR}"
+-		BINARY_DIR "${CMAKE_BINARY_DIR}/linphone-app"
+-		DEPENDS ${APP_DEPENDS}
+-		BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}
+-		INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Install step will not be done by external project"
+-		LIST_SEPARATOR | # Use the alternate list separator
+-		CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
+-	# ${APP_OPTIONS}
+-		BUILD_ALWAYS ON
+-	)
+-	install(CODE "message(STATUS Running install)")
+-	set(AUTO_REGENERATION auto_regeneration)
+-	add_custom_target(${AUTO_REGENERATION} ALL
+-		COMMAND ${CMAKE_COMMAND} ${CMAKE_CURRENT_SOURCE_DIR}
+-		DEPENDS linphone-qt)
+-else()
+-	message("Adding Linphone Desktop in an IDE-friendly state")
+-	set(CMAKE_INSTALL_PREFIX "${APPLICATION_OUTPUT_DIR}")
+-	add_subdirectory(${CMAKE_SOURCE_DIR}/linphone-app)
+-	add_dependencies(app-library ${APP_DEPENDS})
+-endif()
+-ExternalProject_Add(linphone-qt-only PREFIX "${CMAKE_BINARY_DIR}/linphone-app"
+-    SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-app"
+-    INSTALL_DIR "${APPLICATION_OUTPUT_DIR}"
+-    BINARY_DIR "${CMAKE_BINARY_DIR}/linphone-app"
+-    BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}
+-#    INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Install step is already done at build time."
+-    LIST_SEPARATOR | # Use the alternate list separator
+-    CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
+-    EXCLUDE_FROM_ALL ON
+-    BUILD_ALWAYS ON
+-)
++message("Adding Linphone Desktop in an IDE-friendly state")
++add_subdirectory(${CMAKE_SOURCE_DIR}/linphone-app)
+diff --git a/linphone-app/CMakeLists.txt b/linphone-app/CMakeLists.txt
+index 3bc9420a..5267cd4a 100644
+--- a/linphone-app/CMakeLists.txt
++++ b/linphone-app/CMakeLists.txt
+@@ -21,17 +21,8 @@
+ ################################################################################
+ cmake_minimum_required(VERSION 3.1)
+ 
++include(linphoneqt_version.cmake)
+ find_package(bctoolbox CONFIG)
+-set(FULL_VERSION )
+-bc_compute_full_version(FULL_VERSION)
+-set(version_major )
+-set(version_minor )
+-set(version_patch )
+-set(identifiers )
+-set(metadata )
+-bc_parse_full_version("${FULL_VERSION}" version_major version_minor version_patch identifiers metadata)
+-
+-project(linphoneqt VERSION "${version_major}.${version_minor}.${version_patch}")
+ 
+ if(ENABLE_BUILD_VERBOSE)
+ 	#message("CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH}")
+@@ -49,7 +40,6 @@ if(UNIX AND NOT APPLE)
+     set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+ endif()
+ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../cmake")
+-list(APPEND CMAKE_MODULE_PATH "${LINPHONE_OUTPUT_DIR}/cmake")
+ 
+ set(APP_LIBRARY app-library)
+ include(application_info.cmake)
+diff --git a/linphone-app/cmake_builder/additional_steps.cmake b/linphone-app/cmake_builder/additional_steps.cmake
+index 7f7fd573..48e3c716 100644
+--- a/linphone-app/cmake_builder/additional_steps.cmake
++++ b/linphone-app/cmake_builder/additional_steps.cmake
+@@ -61,7 +61,7 @@ if (ENABLE_PACKAGING)
+       SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/linphone_package"
+       DOWNLOAD_COMMAND ""
+       CMAKE_GENERATOR ${CMAKE_GENERATOR}
+-      CMAKE_ARGS ${LINPHONE_BUILDER_EP_ARGS} -DCMAKE_INSTALL_PREFIX=${LINPHONE_BUILDER_WORK_DIR}/PACKAGE -DTOOLS_DIR=${CMAKE_BINARY_DIR}/programs -DLINPHONE_OUTPUT_DIR=${CMAKE_INSTALL_PREFIX} -DLINPHONE_DESKTOP_DIR=${CMAKE_CURRENT_LIST_DIR}/.. -DLINPHONE_SOURCE_DIR=${EP_linphone_SOURCE_DIR} ${ENABLE_VARIABLES} -DLINPHONE_BUILDER_SIGNING_IDENTITY=${LINPHONE_BUILDER_SIGNING_IDENTITY}
++      CMAKE_ARGS ${LINPHONE_BUILDER_EP_ARGS} -DCMAKE_INSTALL_PREFIX=${LINPHONE_BUILDER_WORK_DIR}/PACKAGE -DTOOLS_DIR=${CMAKE_BINARY_DIR}/programs -DLINPHONE_DESKTOP_DIR=${CMAKE_CURRENT_LIST_DIR}/.. -DLINPHONE_SOURCE_DIR=${EP_linphone_SOURCE_DIR} ${ENABLE_VARIABLES} -DLINPHONE_BUILDER_SIGNING_IDENTITY=${LINPHONE_BUILDER_SIGNING_IDENTITY}
+     )
+   endif ()
+ endif ()
+diff --git a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt
+index baea03cf..d06dcb74 100644
+--- a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt
++++ b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt
+@@ -200,44 +200,6 @@ elseif (APPLE)
+   endif ()
+ #  install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${APPLICATION_NAME}.app" DESTINATION "." USE_SOURCE_PERMISSIONS)
+ else()# Not Windows and Apple
+-	foreach (LIBRARY ${SHARED_LIBRARIES})
+-		get_filename_component(LIBRARY_FILENAME ${LIBRARY} NAME)
+-		message("Changing RPATH of ${LIBRARY_FILENAME} from '${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}' to '$ORIGIN/../${CMAKE_INSTALL_LIBDIR}'")
+-		execute_process(COMMAND install_name_tool -rpath "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}" "$ORIGIN/../lib" "${LIBRARY}")
+-		execute_process(COMMAND install_name_tool -addrpath "$ORIGIN/../lib64" "${LIBRARY}")
+-	endforeach ()
+-	install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_BINDIR}/" DESTINATION "${CMAKE_INSTALL_BINDIR}" USE_SOURCE_PERMISSIONS)
+-#Just in case. This is useless because we have to use CMAKE_INSTALL_LIBDIR
+-	if( EXISTS "${LINPHONE_OUTPUT_DIR}/lib/")
+-		file(GLOB SHARED_LIBRARIES "${LINPHONE_OUTPUT_DIR}/lib/*.so*")
+-		if( ENABLE_OPENH264 )# Remove openH264 lib from the installation. this codec will be download by user
+-			foreach(item ${SHARED_LIBRARIES})
+-				get_filename_component(LIBRARY_FILENAME ${item} NAME)
+-				if("${LIBRARY_FILENAME}" MATCHES "^libopenh264.*$")
+-					list(REMOVE_ITEM SHARED_LIBRARIES ${item})
+-				endif()
+-			endforeach(item)
+-		endif()
+-		install(FILES ${SHARED_LIBRARIES} DESTINATION "lib")
+-	endif()
+-	if( EXISTS "${LINPHONE_OUTPUT_DIR}/lib64/")
+-		file(GLOB SHARED_LIBRARIES "${LINPHONE_OUTPUT_DIR}/lib64/*.so*")
+-		if( ENABLE_OPENH264 )# Remove openH264 lib from the installation. this codec will be download by user
+-			foreach(item ${SHARED_LIBRARIES})
+-				get_filename_component(LIBRARY_FILENAME ${item} NAME)
+-				if("${LIBRARY_FILENAME}" MATCHES "^libopenh264.*$")
+-					list(REMOVE_ITEM SHARED_LIBRARIES ${item})
+-				endif()
+-			endforeach(item)
+-		endif()
+-		install(FILES ${SHARED_LIBRARIES} DESTINATION "lib64")
+-	endif()
+-	install(DIRECTORY "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}" USE_SOURCE_PERMISSIONS)
+-	if(ENABLE_BUILD_VERBOSE)
+-		message("INSTALLATION : ${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_DATAROOTDIR}/" )
+-	endif()
+-	file(GLOB PLUGINS_FILES "${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}/mediastreamer/plugins/*")
+-	install(FILES ${PLUGINS_FILES} DESTINATION "plugins/mediastreamer/" )
+ # Install desktop/icon files.
+ 	configure_file("${CMAKE_CURRENT_SOURCE_DIR}/../../assets/linphone.desktop.cmake" "${CMAKE_CURRENT_BINARY_DIR}/../../${EXECUTABLE_NAME}.desktop" @ONLY)	
+ 	install(FILES "${CMAKE_CURRENT_BINARY_DIR}/../../${EXECUTABLE_NAME}.desktop" DESTINATION "${CMAKE_INSTALL_DATADIR}/applications")
+diff --git a/linphone-app/linphoneqt_version.cmake b/linphone-app/linphoneqt_version.cmake
+new file mode 100644
+index 00000000..a85d3455
+--- /dev/null
++++ b/linphone-app/linphoneqt_version.cmake
+@@ -0,0 +1 @@
++project(linphoneqt VERSION ${GUIX-SET-VERSION})
+\ No newline at end of file
+diff --git a/linphone-app/src/config.h.cmake b/linphone-app/src/config.h.cmake
+index 093539e0..5a238c70 100644
+--- a/linphone-app/src/config.h.cmake
++++ b/linphone-app/src/config.h.cmake
+@@ -28,3 +28,4 @@
+ #cmakedefine ENABLE_UPDATE_CHECK 1
+ #cmakedefine EXECUTABLE_NAME "${EXECUTABLE_NAME}"
+ #cmakedefine MSPLUGINS_DIR "${MSPLUGINS_DIR}"
++#define LINPHONE_QT_GIT_VERSION "${PROJECT_VERSION}"
+\ No newline at end of file
+-- 
+2.31.0
+
diff --git a/gnu/packages/patches/linphoneqt-tabbutton.patch b/gnu/packages/patches/linphoneqt-tabbutton.patch
deleted file mode 100644
index 6b3214026e..0000000000
--- a/gnu/packages/patches/linphoneqt-tabbutton.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-From ecaab0f73d0b74bbfbf150286305fa6e12970037 Mon Sep 17 00:00:00 2001
-From: Ronan Abhamon <ronan.abhamon@belledonne-communications.com>
-Date: Fri, 19 Jan 2018 14:42:01 +0100
-Subject: [PATCH] fix(SettingsWindow): rename icon property of TabButton to
- iconName (issue with Qt 5.10 and new icon property)
-
----
- ui/modules/Common/Form/Tab/TabButton.qml |  8 ++++----
- ui/views/App/Settings/SettingsWindow.qml | 14 +++++++-------
- 2 files changed, 11 insertions(+), 11 deletions(-)
-
-diff --git a/ui/modules/Common/Form/Tab/TabButton.qml b/ui/modules/Common/Form/Tab/TabButton.qml
-index ad220ab2..a47bb20b 100644
---- a/ui/modules/Common/Form/Tab/TabButton.qml
-+++ b/ui/modules/Common/Form/Tab/TabButton.qml
-@@ -12,8 +12,8 @@ Controls.TabButton {
- 
-   // ---------------------------------------------------------------------------
- 
--  property string icon
-   property int iconSize: TabButtonStyle.icon.size
-+  property string iconName
- 
-   readonly property bool _isSelected: parent.parent.currentItem === button
- 
-@@ -66,9 +66,9 @@ Controls.TabButton {
-       Layout.leftMargin: TabButtonStyle.text.leftPadding
- 
-       icon: {
--        var icon = button.icon
--        return icon.length
--          ? (icon + '_' + (button._isSelected ? 'selected' : 'normal'))
-+        var iconName = button.iconName
-+        return iconName.length
-+          ? (iconName + '_' + (button._isSelected ? 'selected' : 'normal'))
-           : ''
-       }
-       iconSize: button.iconSize
-diff --git a/ui/views/App/Settings/SettingsWindow.qml b/ui/views/App/Settings/SettingsWindow.qml
-index b8f5a80f..58909544 100644
---- a/ui/views/App/Settings/SettingsWindow.qml
-+++ b/ui/views/App/Settings/SettingsWindow.qml
-@@ -48,43 +48,43 @@ ApplicationWindow {
-         id: tabBar
- 
-         TabButton {
--          icon: 'settings_sip_accounts'
-+          iconName: 'settings_sip_accounts'
-           text: qsTr('sipAccountsTab')
-           width: implicitWidth
-         }
- 
-         TabButton {
--          icon: 'settings_audio'
-+          iconName: 'settings_audio'
-           text: qsTr('audioTab')
-           width: implicitWidth
-         }
- 
-         TabButton {
--          icon: 'settings_video'
-+          iconName: 'settings_video'
-           text: qsTr('videoTab')
-           width: implicitWidth
-         }
- 
-         TabButton {
--          icon: 'settings_call'
-+          iconName: 'settings_call'
-           text: qsTr('callsAndChatTab')
-           width: implicitWidth
-         }
- 
-         TabButton {
--          icon: 'settings_network'
-+          iconName: 'settings_network'
-           text: qsTr('networkTab')
-           width: implicitWidth
-         }
- 
-         TabButton {
--          icon: 'settings_advanced'
-+          iconName: 'settings_advanced'
-           text: qsTr('uiTab')
-           width: implicitWidth
-         }
- 
-         TabButton {
--          icon: 'settings_advanced'
-+          iconName: 'settings_advanced'
-           text: qsTr('uiAdvanced')
-           width: implicitWidth
-         }
--- 
-2.21.0
-
diff --git a/gnu/packages/patches/lksctp-tools-1.0.18-fix-header-file-name.patch b/gnu/packages/patches/lksctp-tools-1.0.18-fix-header-file-name.patch
new file mode 100644
index 0000000000..1ebe6c803d
--- /dev/null
+++ b/gnu/packages/patches/lksctp-tools-1.0.18-fix-header-file-name.patch
@@ -0,0 +1,32 @@
+From 378560050a8f93786c590cc99a55461666205b61 Mon Sep 17 00:00:00 2001
+From: Xin Long <lucien.xin@gmail.com>
+Date: Fri, 24 Aug 2018 01:13:32 +0800
+Subject: [PATCH] build: fix netinet/sctp.h not to be installed
+
+After libcnetinet_HEADERS was set to sctp.h.in, netinet/sctp.h can
+no longer be installed into ${includedir}.
+
+Since "AC_CONFIG_HEADERS([src/include/netinet/sctp.h])" is already
+added into configure.ac, there's no need to generate sctp.h by
+automake.
+
+So we simply set libcnetinet_HEADERS back to sctp.h.
+
+Fixes: 9607dd85e70a ("netinet/sctp.h: dynamically build based on system setup")
+Signed-off-by: Xin Long <lucien.xin@gmail.com>
+Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
+---
+ src/include/netinet/Makefile.am | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/src/include/netinet/Makefile.am b/src/include/netinet/Makefile.am
+index ca0aac2..965db8c 100644
+--- a/src/include/netinet/Makefile.am
++++ b/src/include/netinet/Makefile.am
+@@ -11,5 +11,4 @@ libcnetinetdir = $(includedir)/netinet
+ # API.
+ include_HEADERS =
+ 
+-libcnetinet_HEADERS = sctp.h.in
+-BUILT_SOURCES = sctp.h
++libcnetinet_HEADERS = sctp.h
diff --git a/gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch b/gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch
new file mode 100644
index 0000000000..215c920e53
--- /dev/null
+++ b/gnu/packages/patches/llhttp-bootstrap-CVE-2020-8287.patch
@@ -0,0 +1,100 @@
+This patch comes from upstream.  It corresponds to a patch applied to
+the generated C source code for llhttp included in Node.js 14.16.0
+(see commit 641f786bb1a1f6eb1ff8750782ed939780f2b31a).  That commit
+fixes CVE-2020-8287.  With this patch, the output of our
+llhttp-bootstrap package matches the files included in Node.js 14.16.0
+exactly.
+
+commit e9b36ea64709c35ca66094d5cf3787f444029601
+Author: Fedor Indutny <fedor@indutny.com>
+Date:   Sat Oct 10 19:56:01 2020 -0700
+
+    http: unset `F_CHUNKED` on new `Transfer-Encoding`
+    
+    Duplicate `Transfer-Encoding` header should be a treated as a single,
+    but with original header values concatenated with a comma separator. In
+    the light of this, even if the past `Transfer-Encoding` ended with
+    `chunked`, we should be not let the `F_CHUNKED` to leak into the next
+    header, because mere presence of another header indicates that `chunked`
+    is not the last transfer-encoding token.
+
+diff --git a/src/llhttp/http.ts b/src/llhttp/http.ts
+index f4f1a6e..0a0c365 100644
+--- a/src/llhttp/http.ts
++++ b/src/llhttp/http.ts
+@@ -460,11 +460,19 @@ export class HTTP {
+       .match([ ' ', '\t' ], n('header_value_discard_ws'))
+       .otherwise(checkContentLengthEmptiness);
+ 
++    // Multiple `Transfer-Encoding` headers should be treated as one, but with
++    // values separate by a comma.
++    //
++    // See: https://tools.ietf.org/html/rfc7230#section-3.2.2
++    const toTransferEncoding = this.unsetFlag(
++      FLAGS.CHUNKED,
++      'header_value_te_chunked');
++
+     n('header_value_start')
+       .otherwise(this.load('header_state', {
+         [HEADER_STATE.UPGRADE]: this.setFlag(FLAGS.UPGRADE, fallback),
+         [HEADER_STATE.TRANSFER_ENCODING]: this.setFlag(
+-          FLAGS.TRANSFER_ENCODING, 'header_value_te_chunked'),
++          FLAGS.TRANSFER_ENCODING, toTransferEncoding),
+         [HEADER_STATE.CONTENT_LENGTH]: n('header_value_content_length_once'),
+         [HEADER_STATE.CONNECTION]: n('header_value_connection'),
+       }, 'header_value'));
+@@ -847,6 +855,11 @@ export class HTTP {
+     return span.start(span.end(this.node(next)));
+   }
+ 
++  private unsetFlag(flag: FLAGS, next: string | Node): Node {
++    const p = this.llparse;
++    return p.invoke(p.code.and('flags', ~flag), this.node(next));
++  }
++
+   private setFlag(flag: FLAGS, next: string | Node): Node {
+     const p = this.llparse;
+     return p.invoke(p.code.or('flags', flag), this.node(next));
+diff --git a/test/request/transfer-encoding.md b/test/request/transfer-encoding.md
+index a7d1681..b0891d6 100644
+--- a/test/request/transfer-encoding.md
++++ b/test/request/transfer-encoding.md
+@@ -353,6 +353,38 @@ off=106 headers complete method=3 v=1/1 flags=200 content_length=0
+ off=106 error code=15 reason="Request has invalid `Transfer-Encoding`"
+ ```
+ 
++## POST with `chunked` and duplicate transfer-encoding
++
++<!-- meta={"type": "request", "noScan": true} -->
++```http
++POST /post_identity_body_world?q=search#hey HTTP/1.1
++Accept: */*
++Transfer-Encoding: chunked
++Transfer-Encoding: deflate
++
++World
++```
++
++```log
++off=0 message begin
++off=5 len=38 span[url]="/post_identity_body_world?q=search#hey"
++off=44 url complete
++off=54 len=6 span[header_field]="Accept"
++off=61 header_field complete
++off=62 len=3 span[header_value]="*/*"
++off=67 header_value complete
++off=67 len=17 span[header_field]="Transfer-Encoding"
++off=85 header_field complete
++off=86 len=7 span[header_value]="chunked"
++off=95 header_value complete
++off=95 len=17 span[header_field]="Transfer-Encoding"
++off=113 header_field complete
++off=114 len=7 span[header_value]="deflate"
++off=123 header_value complete
++off=125 headers complete method=3 v=1/1 flags=200 content_length=0
++off=125 error code=15 reason="Request has invalid `Transfer-Encoding`"
++```
++
+ ## POST with `chunked` before other transfer-coding (lenient)
+ 
+ TODO(indutny): should we allow it even in lenient mode? (Consider disabling
diff --git a/gnu/packages/patches/mariadb-CVE-2021-27928.patch b/gnu/packages/patches/mariadb-CVE-2021-27928.patch
new file mode 100644
index 0000000000..39a023c159
--- /dev/null
+++ b/gnu/packages/patches/mariadb-CVE-2021-27928.patch
@@ -0,0 +1,642 @@
+From 7580701e6279900fec40822952a3b874732289cf Mon Sep 17 00:00:00 2001
+From: Sergei Golubchik <serg@mariadb.org>
+Date: Thu, 18 Feb 2021 14:20:48 +0100
+Subject: [PATCH] make @@wsrep_provider and @@wsrep_notify_cmd read-only
+
+this should simplify run-time cluster management
+---
+ mysql-test/suite/galera/disabled.def          |  2 +
+ .../galera/include/galera_load_provider.inc   | 19 --------
+ .../galera/include/galera_unload_provider.inc |  3 +-
+ .../suite/galera/r/galera_ist_rsync.result    |  2 +-
+ .../galera/r/galera_sst_mysqldump.result      |  2 +-
+ .../suite/galera/r/mysql-wsrep#33.result      |  2 +-
+ .../suite/sys_vars/r/sysvars_wsrep.result     |  4 +-
+ .../sys_vars/r/wsrep_notify_cmd_basic.result  | 47 -------------------
+ .../sys_vars/r/wsrep_provider_basic.result    | 40 ----------------
+ .../r/wsrep_provider_options_basic.result     | 46 ------------------
+ .../sys_vars/t/wsrep_notify_cmd_basic.test    | 43 -----------------
+ .../sys_vars/t/wsrep_provider_basic.test      | 39 ---------------
+ .../t/wsrep_provider_options_basic.test       | 41 ----------------
+ mysql-test/suite/wsrep/disabled.def           |  2 +
+ mysql-test/suite/wsrep/r/variables.result     | 12 ++---
+ mysql-test/suite/wsrep/t/variables.test       | 32 +++----------
+ sql/sys_vars.cc                               |  8 ++--
+ 17 files changed, 25 insertions(+), 319 deletions(-)
+ delete mode 100644 mysql-test/suite/sys_vars/r/wsrep_notify_cmd_basic.result
+ delete mode 100644 mysql-test/suite/sys_vars/r/wsrep_provider_basic.result
+ delete mode 100644 mysql-test/suite/sys_vars/r/wsrep_provider_options_basic.result
+ delete mode 100644 mysql-test/suite/sys_vars/t/wsrep_notify_cmd_basic.test
+ delete mode 100644 mysql-test/suite/sys_vars/t/wsrep_provider_basic.test
+ delete mode 100644 mysql-test/suite/sys_vars/t/wsrep_provider_options_basic.test
+
+diff --git a/mysql-test/suite/galera/disabled.def b/mysql-test/suite/galera/disabled.def
+index d940c702d54..83f26e81636 100644
+--- a/mysql-test/suite/galera/disabled.def
++++ b/mysql-test/suite/galera/disabled.def
+@@ -49,3 +49,5 @@ partition : MDEV-19958 Galera test failure on galera.partition
+ query_cache: MDEV-15805 Test failure on galera.query_cache
+ sql_log_bin : MDEV-21491 galera.sql_log_bin
+ versioning_trx_id : MDEV-18590 galera.versioning_trx_id
++galera_wsrep_provider_unset_set: wsrep_provider is read-only for security reasons
++pxc-421: wsrep_provider is read-only for security reasons
+diff --git a/mysql-test/suite/galera/include/galera_load_provider.inc b/mysql-test/suite/galera/include/galera_load_provider.inc
+index 0f843597d9c..28010cc5b71 100644
+--- a/mysql-test/suite/galera/include/galera_load_provider.inc
++++ b/mysql-test/suite/galera/include/galera_load_provider.inc
+@@ -1,25 +1,6 @@
+ --echo Loading wsrep provider ...
+ 
+ --disable_query_log
+---eval SET GLOBAL wsrep_provider = '$wsrep_provider_orig';
+-
+-#
+-# count occurences of successful node starts in error log
+-#
+-perl;
+-  use strict;
+-   my $test_log=$ENV{'LOG_FILE'} or die "LOG_FILE not set";
+-   my $test_log_copy=$test_log . '.copy';
+-   if (-e $test_log_copy) {
+-      unlink $test_log_copy;
+-   }
+-
+-EOF
+---copy_file $LOG_FILE $LOG_FILE.copy
+-
+-#
+-#  now join to the cluster
+-#
+ --eval SET GLOBAL wsrep_cluster_address = '$wsrep_cluster_address_orig';
+ 
+ --enable_query_log
+diff --git a/mysql-test/suite/galera/include/galera_unload_provider.inc b/mysql-test/suite/galera/include/galera_unload_provider.inc
+index cd841f51fbc..ed7e9bc41f0 100644
+--- a/mysql-test/suite/galera/include/galera_unload_provider.inc
++++ b/mysql-test/suite/galera/include/galera_unload_provider.inc
+@@ -1,7 +1,6 @@
+ --echo Unloading wsrep provider ...
+ 
+ --let $wsrep_cluster_address_orig = `SELECT @@wsrep_cluster_address`
+---let $wsrep_provider_orig = `SELECT @@wsrep_provider`
+ --let $wsrep_provider_options_orig = `SELECT @@wsrep_provider_options`
+ --let $wsrep_error_log_orig = `SELECT @@log_error`
+ if(!$wsrep_log_error_orig)
+@@ -12,4 +11,4 @@ if(!$wsrep_log_error_orig)
+ }
+ --let LOG_FILE= $wsrep_log_error_orig
+ 
+-SET GLOBAL wsrep_provider = 'none';
++SET GLOBAL wsrep_cluster_address = '';
+diff --git a/mysql-test/suite/galera/r/galera_ist_rsync.result b/mysql-test/suite/galera/r/galera_ist_rsync.result
+index 13f7d898a59..70a87c73df7 100644
+--- a/mysql-test/suite/galera/r/galera_ist_rsync.result
++++ b/mysql-test/suite/galera/r/galera_ist_rsync.result
+@@ -23,7 +23,7 @@ INSERT INTO t1 VALUES ('node2_committed_before');
+ INSERT INTO t1 VALUES ('node2_committed_before');
+ COMMIT;
+ Unloading wsrep provider ...
+-SET GLOBAL wsrep_provider = 'none';
++SET GLOBAL wsrep_cluster_address = '';
+ connection node_1;
+ SET AUTOCOMMIT=OFF;
+ START TRANSACTION;
+diff --git a/mysql-test/suite/galera/r/galera_sst_mysqldump.result b/mysql-test/suite/galera/r/galera_sst_mysqldump.result
+index 4ed679ba477..145b3a94775 100644
+--- a/mysql-test/suite/galera/r/galera_sst_mysqldump.result
++++ b/mysql-test/suite/galera/r/galera_sst_mysqldump.result
+@@ -30,7 +30,7 @@ INSERT INTO t1 VALUES ('node2_committed_before');
+ INSERT INTO t1 VALUES ('node2_committed_before');
+ COMMIT;
+ Unloading wsrep provider ...
+-SET GLOBAL wsrep_provider = 'none';
++SET GLOBAL wsrep_cluster_address = '';
+ connection node_1;
+ SET AUTOCOMMIT=OFF;
+ START TRANSACTION;
+diff --git a/mysql-test/suite/galera/r/mysql-wsrep#33.result b/mysql-test/suite/galera/r/mysql-wsrep#33.result
+index fb0b593cc96..45c6a3f660a 100644
+--- a/mysql-test/suite/galera/r/mysql-wsrep#33.result
++++ b/mysql-test/suite/galera/r/mysql-wsrep#33.result
+@@ -32,7 +32,7 @@ INSERT INTO t1 VALUES ('node2_committed_before');
+ INSERT INTO t1 VALUES ('node2_committed_before');
+ COMMIT;
+ Unloading wsrep provider ...
+-SET GLOBAL wsrep_provider = 'none';
++SET GLOBAL wsrep_cluster_address = '';
+ connection node_1;
+ SET AUTOCOMMIT=OFF;
+ START TRANSACTION;
+diff --git a/mysql-test/suite/sys_vars/r/sysvars_wsrep.result b/mysql-test/suite/sys_vars/r/sysvars_wsrep.result
+index 4b6abf85434..f73bfbd13e7 100644
+--- a/mysql-test/suite/sys_vars/r/sysvars_wsrep.result
++++ b/mysql-test/suite/sys_vars/r/sysvars_wsrep.result
+@@ -403,7 +403,7 @@ NUMERIC_MIN_VALUE	NULL
+ NUMERIC_MAX_VALUE	NULL
+ NUMERIC_BLOCK_SIZE	NULL
+ ENUM_VALUE_LIST	NULL
+-READ_ONLY	NO
++READ_ONLY	YES
+ COMMAND_LINE_ARGUMENT	REQUIRED
+ GLOBAL_VALUE_PATH	NULL
+ VARIABLE_NAME	WSREP_ON
+@@ -463,7 +463,7 @@ NUMERIC_MIN_VALUE	NULL
+ NUMERIC_MAX_VALUE	NULL
+ NUMERIC_BLOCK_SIZE	NULL
+ ENUM_VALUE_LIST	NULL
+-READ_ONLY	NO
++READ_ONLY	YES
+ COMMAND_LINE_ARGUMENT	REQUIRED
+ GLOBAL_VALUE_PATH	NULL
+ VARIABLE_NAME	WSREP_PROVIDER_OPTIONS
+diff --git a/mysql-test/suite/sys_vars/r/wsrep_notify_cmd_basic.result b/mysql-test/suite/sys_vars/r/wsrep_notify_cmd_basic.result
+deleted file mode 100644
+index 056ff8c817b..00000000000
+--- a/mysql-test/suite/sys_vars/r/wsrep_notify_cmd_basic.result
++++ /dev/null
+@@ -1,47 +0,0 @@
+-#
+-# wsrep_notify_cmd
+-#
+-call mtr.add_suppression("WSREP: Failed to get provider options");
+-# save the initial value
+-SET @wsrep_notify_cmd_global_saved = @@global.wsrep_notify_cmd;
+-# default
+-SELECT @@global.wsrep_notify_cmd;
+-@@global.wsrep_notify_cmd
+-
+-
+-# scope
+-SELECT @@session.wsrep_notify_cmd;
+-ERROR HY000: Variable 'wsrep_notify_cmd' is a GLOBAL variable
+-SET @@global.wsrep_notify_cmd='notify_cmd';
+-SELECT @@global.wsrep_notify_cmd;
+-@@global.wsrep_notify_cmd
+-notify_cmd
+-
+-# valid values
+-SET @@global.wsrep_notify_cmd='command';
+-SELECT @@global.wsrep_notify_cmd;
+-@@global.wsrep_notify_cmd
+-command
+-SET @@global.wsrep_notify_cmd='hyphenated-command';
+-SELECT @@global.wsrep_notify_cmd;
+-@@global.wsrep_notify_cmd
+-hyphenated-command
+-SET @@global.wsrep_notify_cmd=default;
+-SELECT @@global.wsrep_notify_cmd;
+-@@global.wsrep_notify_cmd
+-
+-SET @@global.wsrep_notify_cmd=NULL;
+-SELECT @@global.wsrep_notify_cmd;
+-@@global.wsrep_notify_cmd
+-NULL
+-
+-# invalid values
+-SET @@global.wsrep_notify_cmd=1;
+-ERROR 42000: Incorrect argument type to variable 'wsrep_notify_cmd'
+-SELECT @@global.wsrep_notify_cmd;
+-@@global.wsrep_notify_cmd
+-NULL
+-
+-# restore the initial value
+-SET @@global.wsrep_notify_cmd = @wsrep_notify_cmd_global_saved;
+-# End of test
+diff --git a/mysql-test/suite/sys_vars/r/wsrep_provider_basic.result b/mysql-test/suite/sys_vars/r/wsrep_provider_basic.result
+deleted file mode 100644
+index 3e4ac8ca883..00000000000
+--- a/mysql-test/suite/sys_vars/r/wsrep_provider_basic.result
++++ /dev/null
+@@ -1,40 +0,0 @@
+-#
+-# wsrep_provider
+-#
+-# save the initial value
+-SET @wsrep_provider_global_saved = @@global.wsrep_provider;
+-# default
+-SELECT @@global.wsrep_provider;
+-@@global.wsrep_provider
+-none
+-
+-# scope
+-SELECT @@session.wsrep_provider;
+-ERROR HY000: Variable 'wsrep_provider' is a GLOBAL variable
+-SELECT @@global.wsrep_provider;
+-@@global.wsrep_provider
+-none
+-
+-# valid values
+-SET @@global.wsrep_provider=default;
+-SELECT @@global.wsrep_provider;
+-@@global.wsrep_provider
+-none
+-
+-# invalid values
+-SET @@global.wsrep_provider='/invalid/libgalera_smm.so';
+-ERROR 42000: Variable 'wsrep_provider' can't be set to the value of '/invalid/libgalera_smm.so'
+-SET @@global.wsrep_provider=NULL;
+-ERROR 42000: Variable 'wsrep_provider' can't be set to the value of 'NULL'
+-SELECT @@global.wsrep_provider;
+-@@global.wsrep_provider
+-none
+-SET @@global.wsrep_provider=1;
+-ERROR 42000: Incorrect argument type to variable 'wsrep_provider'
+-SELECT @@global.wsrep_provider;
+-@@global.wsrep_provider
+-none
+-
+-# restore the initial value
+-SET @@global.wsrep_provider = @wsrep_provider_global_saved;
+-# End of test
+diff --git a/mysql-test/suite/sys_vars/r/wsrep_provider_options_basic.result b/mysql-test/suite/sys_vars/r/wsrep_provider_options_basic.result
+deleted file mode 100644
+index 15949a14e39..00000000000
+--- a/mysql-test/suite/sys_vars/r/wsrep_provider_options_basic.result
++++ /dev/null
+@@ -1,46 +0,0 @@
+-#
+-# wsrep_provider_options
+-#
+-call mtr.add_suppression("WSREP: Failed to get provider options");
+-# default
+-SELECT @@global.wsrep_provider_options;
+-@@global.wsrep_provider_options
+-
+-
+-# scope
+-SELECT @@session.wsrep_provider_options;
+-ERROR HY000: Variable 'wsrep_provider_options' is a GLOBAL variable
+-SET @@global.wsrep_provider_options='option1';
+-SELECT @@global.wsrep_provider_options;
+-@@global.wsrep_provider_options
+-
+-
+-# valid values
+-SET @@global.wsrep_provider_options='name1=value1;name2=value2';
+-ERROR HY000: WSREP (galera) not started
+-SELECT @@global.wsrep_provider_options;
+-@@global.wsrep_provider_options
+-
+-SET @@global.wsrep_provider_options='hyphenated-name:value';
+-ERROR HY000: WSREP (galera) not started
+-SELECT @@global.wsrep_provider_options;
+-@@global.wsrep_provider_options
+-
+-SET @@global.wsrep_provider_options=default;
+-ERROR HY000: WSREP (galera) not started
+-SELECT @@global.wsrep_provider_options;
+-@@global.wsrep_provider_options
+-
+-
+-# invalid values
+-SET @@global.wsrep_provider_options=1;
+-ERROR 42000: Incorrect argument type to variable 'wsrep_provider_options'
+-SELECT @@global.wsrep_provider_options;
+-@@global.wsrep_provider_options
+-
+-SET @@global.wsrep_provider_options=NULL;
+-Got one of the listed errors
+-SELECT @@global.wsrep_provider_options;
+-@@global.wsrep_provider_options
+-
+-# End of test
+diff --git a/mysql-test/suite/sys_vars/t/wsrep_notify_cmd_basic.test b/mysql-test/suite/sys_vars/t/wsrep_notify_cmd_basic.test
+deleted file mode 100644
+index 6d1535ba148..00000000000
+--- a/mysql-test/suite/sys_vars/t/wsrep_notify_cmd_basic.test
++++ /dev/null
+@@ -1,43 +0,0 @@
+---source include/have_wsrep.inc
+-
+---echo #
+---echo # wsrep_notify_cmd
+---echo #
+-
+-call mtr.add_suppression("WSREP: Failed to get provider options");
+-
+---echo # save the initial value
+-SET @wsrep_notify_cmd_global_saved = @@global.wsrep_notify_cmd;
+-
+---echo # default
+-SELECT @@global.wsrep_notify_cmd;
+-
+---echo
+---echo # scope
+---error ER_INCORRECT_GLOBAL_LOCAL_VAR
+-SELECT @@session.wsrep_notify_cmd;
+-SET @@global.wsrep_notify_cmd='notify_cmd';
+-SELECT @@global.wsrep_notify_cmd;
+-
+---echo
+---echo # valid values
+-SET @@global.wsrep_notify_cmd='command';
+-SELECT @@global.wsrep_notify_cmd;
+-SET @@global.wsrep_notify_cmd='hyphenated-command';
+-SELECT @@global.wsrep_notify_cmd;
+-SET @@global.wsrep_notify_cmd=default;
+-SELECT @@global.wsrep_notify_cmd;
+-SET @@global.wsrep_notify_cmd=NULL;
+-SELECT @@global.wsrep_notify_cmd;
+-
+---echo
+---echo # invalid values
+---error ER_WRONG_TYPE_FOR_VAR
+-SET @@global.wsrep_notify_cmd=1;
+-SELECT @@global.wsrep_notify_cmd;
+-
+---echo
+---echo # restore the initial value
+-SET @@global.wsrep_notify_cmd = @wsrep_notify_cmd_global_saved;
+-
+---echo # End of test
+diff --git a/mysql-test/suite/sys_vars/t/wsrep_provider_basic.test b/mysql-test/suite/sys_vars/t/wsrep_provider_basic.test
+deleted file mode 100644
+index 1190ab41bb0..00000000000
+--- a/mysql-test/suite/sys_vars/t/wsrep_provider_basic.test
++++ /dev/null
+@@ -1,39 +0,0 @@
+---source include/have_wsrep.inc
+-
+---echo #
+---echo # wsrep_provider
+---echo #
+-
+---echo # save the initial value
+-SET @wsrep_provider_global_saved = @@global.wsrep_provider;
+-
+---echo # default
+-SELECT @@global.wsrep_provider;
+-
+---echo
+---echo # scope
+---error ER_INCORRECT_GLOBAL_LOCAL_VAR
+-SELECT @@session.wsrep_provider;
+-SELECT @@global.wsrep_provider;
+-
+---echo
+---echo # valid values
+-SET @@global.wsrep_provider=default;
+-SELECT @@global.wsrep_provider;
+-
+---echo
+---echo # invalid values
+---error ER_WRONG_VALUE_FOR_VAR
+-SET @@global.wsrep_provider='/invalid/libgalera_smm.so';
+---error ER_WRONG_VALUE_FOR_VAR
+-SET @@global.wsrep_provider=NULL;
+-SELECT @@global.wsrep_provider;
+---error ER_WRONG_TYPE_FOR_VAR
+-SET @@global.wsrep_provider=1;
+-SELECT @@global.wsrep_provider;
+-
+---echo
+---echo # restore the initial value
+-SET @@global.wsrep_provider = @wsrep_provider_global_saved;
+-
+---echo # End of test
+diff --git a/mysql-test/suite/sys_vars/t/wsrep_provider_options_basic.test b/mysql-test/suite/sys_vars/t/wsrep_provider_options_basic.test
+deleted file mode 100644
+index 6eb3a94b6a4..00000000000
+--- a/mysql-test/suite/sys_vars/t/wsrep_provider_options_basic.test
++++ /dev/null
+@@ -1,41 +0,0 @@
+---source include/have_wsrep.inc
+-
+---echo #
+---echo # wsrep_provider_options
+---echo #
+-
+-call mtr.add_suppression("WSREP: Failed to get provider options");
+-
+---echo # default
+-SELECT @@global.wsrep_provider_options;
+-
+---echo
+---echo # scope
+---error ER_INCORRECT_GLOBAL_LOCAL_VAR
+-SELECT @@session.wsrep_provider_options;
+---error 0,ER_WRONG_ARGUMENTS
+-SET @@global.wsrep_provider_options='option1';
+-SELECT @@global.wsrep_provider_options;
+-
+---echo
+---echo # valid values
+---error ER_WRONG_ARGUMENTS
+-SET @@global.wsrep_provider_options='name1=value1;name2=value2';
+-SELECT @@global.wsrep_provider_options;
+---error ER_WRONG_ARGUMENTS
+-SET @@global.wsrep_provider_options='hyphenated-name:value';
+-SELECT @@global.wsrep_provider_options;
+---error ER_WRONG_ARGUMENTS
+-SET @@global.wsrep_provider_options=default;
+-SELECT @@global.wsrep_provider_options;
+-
+---echo
+---echo # invalid values
+---error ER_WRONG_TYPE_FOR_VAR
+-SET @@global.wsrep_provider_options=1;
+-SELECT @@global.wsrep_provider_options;
+---error ER_WRONG_ARGUMENTS,ER_WRONG_ARGUMENTS
+-SET @@global.wsrep_provider_options=NULL;
+-SELECT @@global.wsrep_provider_options;
+-
+---echo # End of test
+diff --git a/mysql-test/suite/wsrep/disabled.def b/mysql-test/suite/wsrep/disabled.def
+index 11577bfe8b0..3d204db6945 100644
+--- a/mysql-test/suite/wsrep/disabled.def
++++ b/mysql-test/suite/wsrep/disabled.def
+@@ -10,3 +10,5 @@
+ #
+ ##############################################################################
+ 
++
++mdev_6832: wsrep_provider is read-only for security reasons
+diff --git a/mysql-test/suite/wsrep/r/variables.result b/mysql-test/suite/wsrep/r/variables.result
+index a9988fd1628..e57440125ee 100644
+--- a/mysql-test/suite/wsrep/r/variables.result
++++ b/mysql-test/suite/wsrep/r/variables.result
+@@ -14,7 +14,6 @@ SET SESSION wsrep_replicate_myisam= ON;
+ ERROR HY000: Variable 'wsrep_replicate_myisam' is a GLOBAL variable and should be set with SET GLOBAL
+ SET GLOBAL wsrep_replicate_myisam= ON;
+ SET GLOBAL wsrep_replicate_myisam= OFF;
+-SET GLOBAL wsrep_provider=none;
+ #
+ # MDEV#5790: SHOW GLOBAL STATUS LIKE does not show the correct list of
+ # variables when using "_"
+@@ -151,7 +150,6 @@ wsrep_local_state_comment	#
+ # Should show nothing.
+ SHOW STATUS LIKE 'x';
+ Variable_name	Value
+-SET GLOBAL wsrep_provider=none;
+ 
+ SHOW STATUS LIKE 'wsrep_local_state_uuid';
+ Variable_name	Value
+@@ -160,7 +158,6 @@ wsrep_local_state_uuid	#
+ SHOW STATUS LIKE 'wsrep_last_committed';
+ Variable_name	Value
+ wsrep_last_committed	#
+-SET GLOBAL wsrep_provider=none;
+ 
+ #
+ # MDEV#6206: wsrep_slave_threads subtracts from max_connections
+@@ -174,7 +171,7 @@ SELECT @@global.wsrep_slave_threads;
+ 1
+ SELECT @@global.wsrep_cluster_address;
+ @@global.wsrep_cluster_address
+-
++gcomm://
+ SELECT @@global.wsrep_on;
+ @@global.wsrep_on
+ 1
+@@ -183,14 +180,14 @@ Variable_name	Value
+ Threads_connected	1
+ SHOW STATUS LIKE 'wsrep_thread_count';
+ Variable_name	Value
+-wsrep_thread_count	0
++wsrep_thread_count	2
+ 
+ SELECT @@global.wsrep_provider;
+ @@global.wsrep_provider
+ libgalera_smm.so
+ SELECT @@global.wsrep_cluster_address;
+ @@global.wsrep_cluster_address
+-
++gcomm://
+ SELECT @@global.wsrep_on;
+ @@global.wsrep_on
+ 1
+@@ -199,11 +196,10 @@ Variable_name	Value
+ Threads_connected	1
+ SHOW STATUS LIKE 'wsrep_thread_count';
+ Variable_name	Value
+-wsrep_thread_count	0
++wsrep_thread_count	2
+ 
+ # Setting wsrep_cluster_address triggers the creation of
+ # applier/rollbacker threads.
+-SET GLOBAL wsrep_cluster_address= 'gcomm://';
+ # Wait for applier thread to get created 1.
+ # Wait for applier thread to get created 2.
+ SELECT VARIABLE_VALUE AS EXPECT_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_applier_thread_count';
+diff --git a/mysql-test/suite/wsrep/t/variables.test b/mysql-test/suite/wsrep/t/variables.test
+index f2c3a0a3b78..fd352b61a3a 100644
+--- a/mysql-test/suite/wsrep/t/variables.test
++++ b/mysql-test/suite/wsrep/t/variables.test
+@@ -23,7 +23,7 @@ SET GLOBAL wsrep_replicate_myisam= ON;
+ 
+ # Reset it back.
+ SET GLOBAL wsrep_replicate_myisam= OFF;
+-SET GLOBAL wsrep_provider=none;
++#SET GLOBAL wsrep_provider=none;
+ 
+ --echo #
+ --echo # MDEV#5790: SHOW GLOBAL STATUS LIKE does not show the correct list of
+@@ -32,9 +32,6 @@ SET GLOBAL wsrep_provider=none;
+ 
+ CALL mtr.add_suppression("WSREP: Could not open saved state file for reading.*");
+ 
+---disable_query_log
+-eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
+---enable_query_log
+ 
+ --replace_column 2 #
+ SHOW GLOBAL STATUS LIKE 'wsrep%';
+@@ -50,11 +47,9 @@ SHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment';
+ SHOW STATUS LIKE 'x';
+ 
+ # Reset it back.
+-SET GLOBAL wsrep_provider=none;
++#SET GLOBAL wsrep_provider=none;
+ 
+---disable_query_log
+-eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
+---enable_query_log
++#evalp SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
+ 
+ # The following 2 variables are used by mariabackup
+ # SST.
+@@ -66,7 +61,7 @@ SHOW STATUS LIKE 'wsrep_local_state_uuid';
+ SHOW STATUS LIKE 'wsrep_last_committed';
+ 
+ # Reset it back.
+-SET GLOBAL wsrep_provider=none;
++#SET GLOBAL wsrep_provider=none;
+ 
+ --echo
+ --echo #
+@@ -74,9 +69,7 @@ SET GLOBAL wsrep_provider=none;
+ --echo #
+ call mtr.add_suppression("WSREP: Failed to get provider options");
+ 
+---disable_query_log
+-eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
+---enable_query_log
++#evalp SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
+ 
+ --replace_regex /.*libgalera_smm.*/libgalera_smm.so/
+ SELECT @@global.wsrep_provider;
+@@ -87,9 +80,7 @@ SHOW STATUS LIKE 'threads_connected';
+ SHOW STATUS LIKE 'wsrep_thread_count';
+ --echo
+ 
+---disable_query_log
+-eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
+---enable_query_log
++#evalp SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
+ 
+ --replace_regex /.*libgalera_smm.*/libgalera_smm.so/
+ SELECT @@global.wsrep_provider;
+@@ -101,7 +92,7 @@ SHOW STATUS LIKE 'wsrep_thread_count';
+ 
+ --echo # Setting wsrep_cluster_address triggers the creation of
+ --echo # applier/rollbacker threads.
+-SET GLOBAL wsrep_cluster_address= 'gcomm://';
++#SET GLOBAL wsrep_cluster_address= 'gcomm://';
+ 
+ --echo # Wait for applier thread to get created 1.
+ --let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_applier_thread_count';
+@@ -162,15 +153,6 @@ SET @@global.wsrep_sst_auth= NULL;
+ SELECT @@global.wsrep_sst_auth;
+ SET @@global.wsrep_sst_auth= @wsrep_sst_auth_saved;
+ 
+-# Reset (for mtr internal checks)
+-
+---disable_query_log
+-SET GLOBAL wsrep_slave_threads= @wsrep_slave_threads_saved;
+-eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
+-SET GLOBAL wsrep_cluster_address= @wsrep_cluster_address_saved;
+-SET GLOBAL wsrep_provider_options= @wsrep_provider_options_saved;
+---enable_query_log
+-
+ --source include/galera_wait_ready.inc
+ 
+ --echo # End of test.
+diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc
+index 64040243df0..8c67a4d432a 100644
+--- a/sql/sys_vars.cc
++++ b/sql/sys_vars.cc
+@@ -5669,8 +5669,8 @@ static Sys_var_tz Sys_time_zone(
+ 
+ static Sys_var_charptr_fscs Sys_wsrep_provider(
+        "wsrep_provider", "Path to replication provider library",
+-       PREALLOCATED GLOBAL_VAR(wsrep_provider), CMD_LINE(REQUIRED_ARG),
+-       DEFAULT(WSREP_NONE),
++       PREALLOCATED READ_ONLY GLOBAL_VAR(wsrep_provider), CMD_LINE(REQUIRED_ARG),
++       DEFAULT(WSREP_NONE),
+        NO_MUTEX_GUARD, NOT_IN_BINLOG,
+        ON_CHECK(wsrep_provider_check), ON_UPDATE(wsrep_provider_update));
+ 
+@@ -5886,8 +5886,8 @@ static Sys_var_ulong Sys_wsrep_max_ws_rows (
+ 
+ static Sys_var_charptr Sys_wsrep_notify_cmd(
+        "wsrep_notify_cmd", "",
+-       GLOBAL_VAR(wsrep_notify_cmd),CMD_LINE(REQUIRED_ARG),
+-       DEFAULT(""));
++       READ_ONLY GLOBAL_VAR(wsrep_notify_cmd), CMD_LINE(REQUIRED_ARG),
++       DEFAULT(""));
+ 
+ static Sys_var_mybool Sys_wsrep_certify_nonPK(
+        "wsrep_certify_nonPK", "Certify tables with no primary key",
+-- 
+2.31.0
+
diff --git a/gnu/packages/patches/mediastreamer2-srtp2.patch b/gnu/packages/patches/mediastreamer2-srtp2.patch
deleted file mode 100644
index f6d494facb..0000000000
--- a/gnu/packages/patches/mediastreamer2-srtp2.patch
+++ /dev/null
@@ -1,155 +0,0 @@
-From 97903498364ae2596e790cb2c2ce9ac76c04d64a Mon Sep 17 00:00:00 2001
-From: Danmei Chen <danmei.chen@belledonne-communications.com>
-Date: Fri, 19 Jan 2018 10:04:07 +0100
-Subject: [PATCH] add compability with srtp2
-
----
- cmake/FindSRTP.cmake    | 24 ++++++++++++++++++++----
- src/CMakeLists.txt      |  1 +
- src/crypto/ms_srtp.c    | 10 ++--------
- src/utils/srtp_prefix.h | 41 +++++++++++++++++++++++++++++++++++++++++
- 4 files changed, 64 insertions(+), 12 deletions(-)
- create mode 100644 src/utils/srtp_prefix.h
-
-diff --git a/cmake/FindSRTP.cmake b/cmake/FindSRTP.cmake
-index 988b846a..f720ce7e 100644
---- a/cmake/FindSRTP.cmake
-+++ b/cmake/FindSRTP.cmake
-@@ -31,20 +31,36 @@ set(_SRTP_ROOT_PATHS
- )
- 
- find_path(SRTP_INCLUDE_DIRS
--	NAMES srtp/srtp.h
-+	NAMES srtp2/srtp.h
- 	HINTS _SRTP_ROOT_PATHS
- 	PATH_SUFFIXES include
- )
- 
- if(SRTP_INCLUDE_DIRS)
- 	set(HAVE_SRTP_SRTP_H 1)
--endif()
--
--find_library(SRTP_LIBRARIES
-+	set(SRTP_VERSION 2)
-+	find_library(SRTP_LIBRARIES
-+		NAMES srtp2
-+		HINTS ${_SRTP_ROOT_PATHS}
-+		PATH_SUFFIXES bin lib
-+	)
-+else()
-+	find_path(SRTP_INCLUDE_DIRS
-+		NAMES srtp/srtp.h
-+		HINTS _SRTP_ROOT_PATHS
-+		PATH_SUFFIXES include
-+	)
-+	if(SRTP_INCLUDE_DIRS)
-+		set(HAVE_SRTP_SRTP_H 1)
-+		set(SRTP_VERSION 1)
-+	endif()
-+	find_library(SRTP_LIBRARIES
- 	NAMES srtp
- 	HINTS ${_SRTP_ROOT_PATHS}
- 	PATH_SUFFIXES bin lib
- )
-+endif()
-+
- 
- include(FindPackageHandleStandardArgs)
- find_package_handle_standard_args(SRTP
-diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
-index da429764..c46faa62 100644
---- a/src/CMakeLists.txt
-+++ b/src/CMakeLists.txt
-@@ -183,6 +183,7 @@ set(VOIP_SOURCE_FILES_C
- 	utils/pcap_sender.c
- 	utils/pcap_sender.h
- 	utils/stream_regulator.c
-+	utils/srtp_prefix.h
- 	voip/audioconference.c
- 	voip/audiostream.c
- 	voip/bandwidthcontroller.c
-diff --git a/src/crypto/ms_srtp.c b/src/crypto/ms_srtp.c
-index 5a510c99..67810316 100644
---- a/src/crypto/ms_srtp.c
-+++ b/src/crypto/ms_srtp.c
-@@ -25,6 +25,7 @@
- #include "mediastreamer2/ms_srtp.h"
- #include "mediastreamer2/mediastream.h"
- 
-+
- #ifdef HAVE_SRTP
- 
- /*srtp defines all this stuff*/
-@@ -34,13 +35,7 @@
- #undef PACKAGE_TARNAME
- #undef PACKAGE_VERSION
- 
--#if defined(MS2_WINDOWS_PHONE)
--// Windows phone doesn't use make install
--#include <srtp.h>
--#else
--#include <srtp/srtp.h>
--#endif
--
-+#include "srtp_prefix.h"
- 
- #include "ortp/b64.h"
- 
-@@ -352,7 +347,6 @@ int ms_srtp_init(void)
- 			srtp_init_done++;
- 		}else{
- 			ms_fatal("Couldn't initialize SRTP library: %d.", st);
--			err_reporting_init("mediastreamer2");
- 		}
- 	}else srtp_init_done++;
- 	return (int)st;
-diff --git a/src/utils/srtp_prefix.h b/src/utils/srtp_prefix.h
-new file mode 100644
-index 00000000..68bde496
---- /dev/null
-+++ b/src/utils/srtp_prefix.h
-@@ -0,0 +1,41 @@
-+/*
-+  mediastreamer2 library - modular sound and video processing and streaming
-+  Copyright (C) 2006-2014 Belledonne Communications, Grenoble
-+
-+  This library is free software; you can redistribute it and/or
-+  modify it under the terms of the GNU Lesser General Public
-+  License as published by the Free Software Foundation; either
-+  version 2.1 of the License, or (at your option) any later version.
-+
-+  This library 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
-+  Lesser General Public License for more details.
-+
-+  You should have received a copy of the GNU Lesser General Public
-+  License along with this library; if not, write to the Free Software
-+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+*/
-+#ifndef __SRTP2_H__
-+#define __SRTP2_H__
-+
-+#if defined(MS2_WINDOWS_PHONE)
-+// Windows phone doesn't use make install
-+#include <srtp.h>
-+#elif SRTP_VERSION==1
-+#include <srtp/srtp.h>
-+#else
-+#include <srtp2/srtp.h>
-+#define err_status_t srtp_err_status_t
-+#define err_status_ok srtp_err_status_ok
-+#define crypto_policy_t srtp_crypto_policy_t
-+#define crypto_policy_set_aes_cm_256_hmac_sha1_80 srtp_crypto_policy_set_aes_cm_256_hmac_sha1_80
-+#define crypto_policy_set_aes_cm_128_hmac_sha1_32 srtp_crypto_policy_set_aes_cm_128_hmac_sha1_32
-+#define crypto_policy_set_aes_cm_128_null_auth srtp_crypto_policy_set_aes_cm_128_null_auth
-+#define crypto_policy_set_null_cipher_hmac_sha1_80 srtp_crypto_policy_set_null_cipher_hmac_sha1_80
-+#define crypto_policy_set_aes_cm_128_hmac_sha1_80 srtp_crypto_policy_set_aes_cm_128_hmac_sha1_80
-+#define crypto_policy_set_aes_cm_256_hmac_sha1_32 srtp_crypto_policy_set_aes_cm_256_hmac_sha1_32
-+#define ssrc_t srtp_ssrc_t
-+#endif
-+
-+#endif
--- 
-2.21.0
-
diff --git a/gnu/packages/patches/opendht-fix-jami.patch b/gnu/packages/patches/opendht-fix-jami.patch
deleted file mode 100644
index 9718a84a41..0000000000
--- a/gnu/packages/patches/opendht-fix-jami.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From e2b39dd3a0742853e00f9c3e8c46c911da20bed7 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
-Date: Tue, 30 Jun 2020 10:42:49 -0400
-Subject: [PATCH 1/4] http/request: make terminate public
-
----
- include/opendht/http.h | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-diff --git a/include/opendht/http.h b/include/opendht/http.h
-index cc8d5f9..46b722c 100644
---- a/include/opendht/http.h
-+++ b/include/opendht/http.h
-@@ -294,6 +294,7 @@ public:
-      * User action to cancel the Request and call the completion callbacks.
-      */
-     void cancel();
-+    void terminate(const asio::error_code& ec);
- 
- private:
-     using OnCompleteCb = std::function<void()>;
-@@ -320,8 +321,6 @@ private:
- 
-     void connect(std::vector<asio::ip::tcp::endpoint>&& endpoints, HandlerCb cb = {});
- 
--    void terminate(const asio::error_code& ec);
--
-     void post();
- 
-     void handle_request(const asio::error_code& ec);
--- 
-2.27.0
-
diff --git a/gnu/packages/patches/pidgin-vv-gst.patch b/gnu/packages/patches/pidgin-vv-gst.patch
deleted file mode 100644
index e0553dd119..0000000000
--- a/gnu/packages/patches/pidgin-vv-gst.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-Name: Gary Kramlich
-Date: 2020-07-12
-Source: https://keep.imfreedom.org/pidgin/pidgin/rev/39ac50435cfb
-
-diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c
---- a/libpurple/mediamanager.c
-+++ b/libpurple/mediamanager.c
-@@ -2231,6 +2231,7 @@
- purple_media_manager_unregister_gst_device(PurpleMediaManager *manager,
- 		GstDevice *device)
- {
-+#ifdef USE_VV
- 	GList *i;
- 	gchar *name;
- 	gchar *device_class;
-@@ -2277,6 +2278,7 @@
- 
- 	g_free(name);
- 	g_free(device_class);
-+#endif /* USE_VV */
- }
- 
- static gboolean
-@@ -2304,7 +2306,7 @@
- static void
- purple_media_manager_init_device_monitor(PurpleMediaManager *manager)
- {
--#if GST_CHECK_VERSION(1, 4, 0)
-+#if GST_CHECK_VERSION(1, 4, 0) && defined(USE_VV)
- 	GstBus *bus;
- 	GList *i;
- 
-@@ -2334,6 +2336,7 @@
- 		PurpleMediaElementType type)
- {
- 	GList *result = NULL;
-+#ifdef USE_VV
- 	GList *i;
- 
- 	for (i = manager->priv->elements; i; i = i->next) {
-@@ -2347,6 +2350,7 @@
- 			result = g_list_prepend(result, info);
- 		}
- 	}
-+#endif /* USE_VV */
- 
- 	return result;
- }
diff --git a/gnu/packages/patches/pyqt-public-sip.patch b/gnu/packages/patches/pyqt-public-sip.patch
deleted file mode 100644
index 44cdcb6371..0000000000
--- a/gnu/packages/patches/pyqt-public-sip.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-https://sources.debian.org/data/main/p/pyqt5/5.11.3+dfsg-1/debian/patches/public_sip.diff
-
-From: Dmitry Shachnev <mitya57@debian.org>
-Date: Tue, 3 Jul 2018 09:46:42 +0300
-Subject: Use the public version of sip module
-
-Per https://www.debian.org/doc/debian-policy/#convenience-copies-of-code.
----
- configure.py              | 2 +-
- designer/pluginloader.cpp | 2 +-
- qmlscene/pluginloader.cpp | 4 ++--
- 3 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/configure.py b/configure.py
-index 32d03a0..3c43a14 100644
---- a/configure.py
-+++ b/configure.py
-@@ -2440,7 +2440,7 @@ def get_sip_flags(target_config):
-     the target configuration.
-     """
- 
--    sip_flags = ['-n', 'PyQt5.sip']
-+    sip_flags = ['-n', 'sip']
- 
-     # If we don't check for signed interpreters, we exclude the 'VendorID'
-     # feature
-diff --git a/designer/pluginloader.cpp b/designer/pluginloader.cpp
-index f41d391..3ca8b11 100644
---- a/designer/pluginloader.cpp
-+++ b/designer/pluginloader.cpp
-@@ -167,7 +167,7 @@ bool PyCustomWidgets::importPlugins(const QString &dir, const QStringList &plugi
-     // Make sure we have sip.unwrapinstance.
-     if (!sip_unwrapinstance)
-     {
--        sip_unwrapinstance = getModuleAttr("PyQt5.sip", "unwrapinstance");
-+        sip_unwrapinstance = getModuleAttr("sip", "unwrapinstance");
- 
-         if (!sip_unwrapinstance)
-             return true;
-diff --git a/qmlscene/pluginloader.cpp b/qmlscene/pluginloader.cpp
-index e14b946..140e80c 100644
---- a/qmlscene/pluginloader.cpp
-+++ b/qmlscene/pluginloader.cpp
-@@ -412,9 +412,9 @@ PyObject *PyQt5QmlPlugin::getModuleAttr(const char *module, const char *attr)
- void PyQt5QmlPlugin::getSipAPI()
- {
- #if defined(SIP_USE_PYCAPSULE)
--    sip = (const sipAPIDef *)PyCapsule_Import("PyQt5.sip._C_API", 0);
-+    sip = (const sipAPIDef *)PyCapsule_Import("sip._C_API", 0);
- #else
--    PyObject *c_api = getModuleAttr("PyQt5.sip", "_C_API");
-+    PyObject *c_api = getModuleAttr("sip", "_C_API");
- 
-     if (c_api)
-     {
diff --git a/gnu/packages/patches/qemu-build-info-manual.patch b/gnu/packages/patches/qemu-build-info-manual.patch
index c837040d45..f2bee30ab0 100644
--- a/gnu/packages/patches/qemu-build-info-manual.patch
+++ b/gnu/packages/patches/qemu-build-info-manual.patch
@@ -90,7 +90,7 @@ index ebd85d59f9..1243839461 100644
 +      output: 'QEMU.info',
 +      install: true,
 +      install_dir: get_option('infodir'),
-+      command: [makeinfo, '@INPUT0@', '--output=@OUTPUT@'])
++      command: [makeinfo, '--no-split', '@INPUT0@', '--output=@OUTPUT@'])
 +    alias_target('texi', sphinxtexi)
 +    alias_target('info', sphinxinfo)
 +  endif
diff --git a/gnu/packages/patches/qemu-glibc-2.30.patch b/gnu/packages/patches/qemu-glibc-2.30.patch
new file mode 100644
index 0000000000..1b74dee4ac
--- /dev/null
+++ b/gnu/packages/patches/qemu-glibc-2.30.patch
@@ -0,0 +1,57 @@
+This patch was taken from NixOS
+https://raw.githubusercontent.com/Mindavi/nixpkgs/1a737743a829746e48f4869ac517ff29c23c9d09/pkgs/tools/security/afl/qemu-patches/syscall-glibc2_30.diff
+It is based on an unmerged patch against american-fuzzy-lop and was
+never merged upstream because the author was unable to sign Google's CLA.
+Based on https://github.com/google/AFL/commit/6c917e3d63a2a0685d58c3518524f9615b001893.patch
+
+--- qemu-2.10.0-clean/linux-user/syscall.c	2020-03-12 18:47:47.898592169 +0100
++++ qemu-2.10.0/linux-user/syscall.c	2020-03-13 09:13:42.461809699 +0100
+@@ -34,6 +34,7 @@
+ #include <sys/resource.h>
+ #include <sys/swap.h>
+ #include <linux/capability.h>
++#include <linux/sockios.h> // https://lkml.org/lkml/2019/6/3/988
+ #include <sched.h>
+ #include <sys/timex.h>
+ #ifdef __ia64__
+@@ -256,7 +257,9 @@ static type name (type1 arg1,type2 arg2,
+ #endif
+ 
+ #ifdef __NR_gettid
+-_syscall0(int, gettid)
++// taken from https://patchwork.kernel.org/patch/10862231/
++#define __NR_sys_gettid __NR_gettid
++_syscall0(int, sys_gettid)
+ #else
+ /* This is a replacement for the host gettid() and must return a host
+    errno. */
+@@ -6219,7 +6222,7 @@ static void *clone_func(void *arg)
+     cpu = ENV_GET_CPU(env);
+     thread_cpu = cpu;
+     ts = (TaskState *)cpu->opaque;
+-    info->tid = gettid();
++    info->tid = sys_gettid();
+     task_settid(ts);
+     if (info->child_tidptr)
+         put_user_u32(info->tid, info->child_tidptr);
+@@ -6363,9 +6366,9 @@ static int do_fork(CPUArchState *env, un
+                mapping.  We can't repeat the spinlock hack used above because
+                the child process gets its own copy of the lock.  */
+             if (flags & CLONE_CHILD_SETTID)
+-                put_user_u32(gettid(), child_tidptr);
++                put_user_u32(sys_gettid(), child_tidptr);
+             if (flags & CLONE_PARENT_SETTID)
+-                put_user_u32(gettid(), parent_tidptr);
++                put_user_u32(sys_gettid(), parent_tidptr);
+             ts = (TaskState *)cpu->opaque;
+             if (flags & CLONE_SETTLS)
+                 cpu_set_tls (env, newtls);
+@@ -11402,7 +11405,7 @@ abi_long do_syscall(void *cpu_env, int n
+         break;
+ #endif
+     case TARGET_NR_gettid:
+-        ret = get_errno(gettid());
++        ret = get_errno(sys_gettid());
+         break;
+ #ifdef TARGET_NR_readahead
+     case TARGET_NR_readahead:
diff --git a/gnu/packages/patches/racket-sh-via-rktio.patch b/gnu/packages/patches/racket-sh-via-rktio.patch
new file mode 100644
index 0000000000..b4fefd1514
--- /dev/null
+++ b/gnu/packages/patches/racket-sh-via-rktio.patch
@@ -0,0 +1,87 @@
+From 3574b567c486d264d680a37586436c3b5a8cb978 Mon Sep 17 00:00:00 2001
+From: Philip McGrath <philip@philipmcgrath.com>
+Date: Thu, 4 Mar 2021 04:11:50 -0500
+Subject: [PATCH] patch rktio_process for "/bin/sh" on Guix
+
+Racket provides the functions `system` and `process`,
+which execute shell commands using `sh` (or `cmd` on Windows).
+Racket assumes that `sh` can be found at "/bin/sh",
+which is not necessarily true on Guix.
+
+This patch adds a special case for "/bin/sh" to `rktio_process`,
+the C function that implements the core of `system`, `process`,
+and related Racket functions.
+
+Guix should enable the special case by defining the C preprocessor
+macro `GUIX_RKTIO_PATCH_BIN_SH` with the path to `sh` in the store.
+If:
+
+    1. The `GUIX_RKTIO_PATCH_BIN_SH` macro is defined; and
+
+    2. `rktio_process` is called with the exact path "/bin/sh"; and
+
+    3. The path specified by `GUIX_RKTIO_PATCH_BIN_SH` does exists;
+
+then `rktio_process` will execute the file specified
+by `GUIX_RKTIO_PATCH_BIN_SH` instead of "/bin/sh".
+
+Compared to previous attempts to patch the Racket sources,
+making this change at the C level is both:
+
+    - More comprehensive: it catches all attempts to execute "/bin/sh",
+      without having to track down the source of every occurance; and
+
+    - Less intrusive: by guarding the special case with a C preprocessor
+      conditional and a runtime check that the file in the store exists,
+      we make it much less likely that it will "leak" out of Guix.
+---
+ src/rktio/rktio_process.c | 21 ++++++++++++++++++++-
+ 1 file changed, 20 insertions(+), 1 deletion(-)
+
+diff --git a/src/rktio/rktio_process.c b/src/rktio/rktio_process.c
+index 89202436c0..465ebdd5c5 100644
+--- a/src/rktio/rktio_process.c
++++ b/src/rktio/rktio_process.c
+@@ -1224,12 +1224,14 @@ int rktio_process_allowed_flags(rktio_t *rktio)
+ /*========================================================================*/
+ 
+ rktio_process_result_t *rktio_process(rktio_t *rktio,
+-                                      const char *command, int argc, rktio_const_string_t *argv,
++                                      /* PATCHED for Guix (next line) */
++                                      const char *_guix_orig_command, int argc, rktio_const_string_t *argv,
+                                       rktio_fd_t *stdout_fd, rktio_fd_t *stdin_fd, rktio_fd_t *stderr_fd,
+                                       rktio_process_t *group_proc,
+                                       const char *current_directory, rktio_envvars_t *envvars,
+                                       int flags)
+ {
++  const char *command; /* PATCHED for Guix */
+   rktio_process_result_t *result;
+   intptr_t to_subprocess[2], from_subprocess[2], err_subprocess[2];
+   int pid;
+@@ -1255,6 +1257,23 @@ rktio_process_result_t *rktio_process(rktio_t *rktio,
+   int i;
+ #endif
+ 
++/* BEGIN PATCH for Guix */
++#if defined(GUIX_RKTIO_PATCH_BIN_SH)
++# define GUIX_AS_a_STR_HELPER(x) #x
++# define GUIX_AS_a_STR(x) GUIX_AS_a_STR_HELPER(x)
++  /* A level of indirection makes `#` work as needed: */
++  command =
++      ((0 == strcmp(_guix_orig_command, "/bin/sh"))
++       && rktio_file_exists(rktio, GUIX_AS_a_STR(GUIX_RKTIO_PATCH_BIN_SH)))
++      ? GUIX_AS_a_STR(GUIX_RKTIO_PATCH_BIN_SH)
++      : _guix_orig_command;
++# undef GUIX_AS_a_STR
++# undef GUIX_AS_a_STR_HELPER
++#else
++  command = _guix_orig_command;
++#endif
++/* END PATCH for Guix */
++
+   /* avoid compiler warnings: */
+   to_subprocess[0] = -1;
+   to_subprocess[1] = -1;
+-- 
+2.21.1 (Apple Git-122.3)
+
diff --git a/gnu/packages/patches/runc-CVE-2019-5736.patch b/gnu/packages/patches/runc-CVE-2019-5736.patch
deleted file mode 100644
index f629fcbfb4..0000000000
--- a/gnu/packages/patches/runc-CVE-2019-5736.patch
+++ /dev/null
@@ -1,343 +0,0 @@
-Fix CVE-2019-5736:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5736
-https://seclists.org/oss-sec/2019/q1/119
-
-Patch copied from upstream source repository:
-
-https://github.com/opencontainers/runc/commit/0a8e4117e7f715d5fbeef398405813ce8e88558b
-
-From 0a8e4117e7f715d5fbeef398405813ce8e88558b Mon Sep 17 00:00:00 2001
-From: Aleksa Sarai <asarai@suse.de>
-Date: Wed, 9 Jan 2019 13:40:01 +1100
-Subject: [PATCH] nsenter: clone /proc/self/exe to avoid exposing host binary
- to container
-
-There are quite a few circumstances where /proc/self/exe pointing to a
-pretty important container binary is a _bad_ thing, so to avoid this we
-have to make a copy (preferably doing self-clean-up and not being
-writeable).
-
-We require memfd_create(2) -- though there is an O_TMPFILE fallback --
-but we can always extend this to use a scratch MNT_DETACH overlayfs or
-tmpfs. The main downside to this approach is no page-cache sharing for
-the runc binary (which overlayfs would give us) but this is far less
-complicated.
-
-This is only done during nsenter so that it happens transparently to the
-Go code, and any libcontainer users benefit from it. This also makes
-ExtraFiles and --preserve-fds handling trivial (because we don't need to
-worry about it).
-
-Fixes: CVE-2019-5736
-Co-developed-by: Christian Brauner <christian.brauner@ubuntu.com>
-Signed-off-by: Aleksa Sarai <asarai@suse.de>
----
- libcontainer/nsenter/cloned_binary.c | 268 +++++++++++++++++++++++++++
- libcontainer/nsenter/nsexec.c        |  11 ++
- 2 files changed, 279 insertions(+)
- create mode 100644 libcontainer/nsenter/cloned_binary.c
-
-diff --git a/libcontainer/nsenter/cloned_binary.c b/libcontainer/nsenter/cloned_binary.c
-new file mode 100644
-index 000000000..c8a42c23f
---- /dev/null
-+++ b/libcontainer/nsenter/cloned_binary.c
-@@ -0,0 +1,268 @@
-+/*
-+ * Copyright (C) 2019 Aleksa Sarai <cyphar@cyphar.com>
-+ * Copyright (C) 2019 SUSE LLC
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ *     http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ */
-+
-+#define _GNU_SOURCE
-+#include <unistd.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <stdbool.h>
-+#include <string.h>
-+#include <limits.h>
-+#include <fcntl.h>
-+#include <errno.h>
-+
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <sys/vfs.h>
-+#include <sys/mman.h>
-+#include <sys/sendfile.h>
-+#include <sys/syscall.h>
-+
-+/* Use our own wrapper for memfd_create. */
-+#if !defined(SYS_memfd_create) && defined(__NR_memfd_create)
-+#  define SYS_memfd_create __NR_memfd_create
-+#endif
-+#ifdef SYS_memfd_create
-+#  define HAVE_MEMFD_CREATE
-+/* memfd_create(2) flags -- copied from <linux/memfd.h>. */
-+#  ifndef MFD_CLOEXEC
-+#    define MFD_CLOEXEC       0x0001U
-+#    define MFD_ALLOW_SEALING 0x0002U
-+#  endif
-+int memfd_create(const char *name, unsigned int flags)
-+{
-+	return syscall(SYS_memfd_create, name, flags);
-+}
-+#endif
-+
-+/* This comes directly from <linux/fcntl.h>. */
-+#ifndef F_LINUX_SPECIFIC_BASE
-+#  define F_LINUX_SPECIFIC_BASE 1024
-+#endif
-+#ifndef F_ADD_SEALS
-+#  define F_ADD_SEALS (F_LINUX_SPECIFIC_BASE + 9)
-+#  define F_GET_SEALS (F_LINUX_SPECIFIC_BASE + 10)
-+#endif
-+#ifndef F_SEAL_SEAL
-+#  define F_SEAL_SEAL   0x0001	/* prevent further seals from being set */
-+#  define F_SEAL_SHRINK 0x0002	/* prevent file from shrinking */
-+#  define F_SEAL_GROW   0x0004	/* prevent file from growing */
-+#  define F_SEAL_WRITE  0x0008	/* prevent writes */
-+#endif
-+
-+#define RUNC_SENDFILE_MAX 0x7FFFF000 /* sendfile(2) is limited to 2GB. */
-+#ifdef HAVE_MEMFD_CREATE
-+#  define RUNC_MEMFD_COMMENT "runc_cloned:/proc/self/exe"
-+#  define RUNC_MEMFD_SEALS \
-+	(F_SEAL_SEAL | F_SEAL_SHRINK | F_SEAL_GROW | F_SEAL_WRITE)
-+#endif
-+
-+static void *must_realloc(void *ptr, size_t size)
-+{
-+	void *old = ptr;
-+	do {
-+		ptr = realloc(old, size);
-+	} while(!ptr);
-+	return ptr;
-+}
-+
-+/*
-+ * Verify whether we are currently in a self-cloned program (namely, is
-+ * /proc/self/exe a memfd). F_GET_SEALS will only succeed for memfds (or rather
-+ * for shmem files), and we want to be sure it's actually sealed.
-+ */
-+static int is_self_cloned(void)
-+{
-+	int fd, ret, is_cloned = 0;
-+
-+	fd = open("/proc/self/exe", O_RDONLY|O_CLOEXEC);
-+	if (fd < 0)
-+		return -ENOTRECOVERABLE;
-+
-+#ifdef HAVE_MEMFD_CREATE
-+	ret = fcntl(fd, F_GET_SEALS);
-+	is_cloned = (ret == RUNC_MEMFD_SEALS);
-+#else
-+	struct stat statbuf = {0};
-+	ret = fstat(fd, &statbuf);
-+	if (ret >= 0)
-+		is_cloned = (statbuf.st_nlink == 0);
-+#endif
-+	close(fd);
-+	return is_cloned;
-+}
-+
-+/*
-+ * Basic wrapper around mmap(2) that gives you the file length so you can
-+ * safely treat it as an ordinary buffer. Only gives you read access.
-+ */
-+static char *read_file(char *path, size_t *length)
-+{
-+	int fd;
-+	char buf[4096], *copy = NULL;
-+
-+	if (!length)
-+		return NULL;
-+
-+	fd = open(path, O_RDONLY | O_CLOEXEC);
-+	if (fd < 0)
-+		return NULL;
-+
-+	*length = 0;
-+	for (;;) {
-+		int n;
-+
-+		n = read(fd, buf, sizeof(buf));
-+		if (n < 0)
-+			goto error;
-+		if (!n)
-+			break;
-+
-+		copy = must_realloc(copy, (*length + n) * sizeof(*copy));
-+		memcpy(copy + *length, buf, n);
-+		*length += n;
-+	}
-+	close(fd);
-+	return copy;
-+
-+error:
-+	close(fd);
-+	free(copy);
-+	return NULL;
-+}
-+
-+/*
-+ * A poor-man's version of "xargs -0". Basically parses a given block of
-+ * NUL-delimited data, within the given length and adds a pointer to each entry
-+ * to the array of pointers.
-+ */
-+static int parse_xargs(char *data, int data_length, char ***output)
-+{
-+	int num = 0;
-+	char *cur = data;
-+
-+	if (!data || *output != NULL)
-+		return -1;
-+
-+	while (cur < data + data_length) {
-+		num++;
-+		*output = must_realloc(*output, (num + 1) * sizeof(**output));
-+		(*output)[num - 1] = cur;
-+		cur += strlen(cur) + 1;
-+	}
-+	(*output)[num] = NULL;
-+	return num;
-+}
-+
-+/*
-+ * "Parse" out argv and envp from /proc/self/cmdline and /proc/self/environ.
-+ * This is necessary because we are running in a context where we don't have a
-+ * main() that we can just get the arguments from.
-+ */
-+static int fetchve(char ***argv, char ***envp)
-+{
-+	char *cmdline = NULL, *environ = NULL;
-+	size_t cmdline_size, environ_size;
-+
-+	cmdline = read_file("/proc/self/cmdline", &cmdline_size);
-+	if (!cmdline)
-+		goto error;
-+	environ = read_file("/proc/self/environ", &environ_size);
-+	if (!environ)
-+		goto error;
-+
-+	if (parse_xargs(cmdline, cmdline_size, argv) <= 0)
-+		goto error;
-+	if (parse_xargs(environ, environ_size, envp) <= 0)
-+		goto error;
-+
-+	return 0;
-+
-+error:
-+	free(environ);
-+	free(cmdline);
-+	return -EINVAL;
-+}
-+
-+static int clone_binary(void)
-+{
-+	int binfd, memfd;
-+	ssize_t sent = 0;
-+
-+#ifdef HAVE_MEMFD_CREATE
-+	memfd = memfd_create(RUNC_MEMFD_COMMENT, MFD_CLOEXEC | MFD_ALLOW_SEALING);
-+#else
-+	memfd = open("/tmp", O_TMPFILE | O_EXCL | O_RDWR | O_CLOEXEC, 0711);
-+#endif
-+	if (memfd < 0)
-+		return -ENOTRECOVERABLE;
-+
-+	binfd = open("/proc/self/exe", O_RDONLY | O_CLOEXEC);
-+	if (binfd < 0)
-+		goto error;
-+
-+	sent = sendfile(memfd, binfd, NULL, RUNC_SENDFILE_MAX);
-+	close(binfd);
-+	if (sent < 0)
-+		goto error;
-+
-+#ifdef HAVE_MEMFD_CREATE
-+	int err = fcntl(memfd, F_ADD_SEALS, RUNC_MEMFD_SEALS);
-+	if (err < 0)
-+		goto error;
-+#else
-+	/* Need to re-open "memfd" as read-only to avoid execve(2) giving -EXTBUSY. */
-+	int newfd;
-+	char *fdpath = NULL;
-+
-+	if (asprintf(&fdpath, "/proc/self/fd/%d", memfd) < 0)
-+		goto error;
-+	newfd = open(fdpath, O_RDONLY | O_CLOEXEC);
-+	free(fdpath);
-+	if (newfd < 0)
-+		goto error;
-+
-+	close(memfd);
-+	memfd = newfd;
-+#endif
-+	return memfd;
-+
-+error:
-+	close(memfd);
-+	return -EIO;
-+}
-+
-+int ensure_cloned_binary(void)
-+{
-+	int execfd;
-+	char **argv = NULL, **envp = NULL;
-+
-+	/* Check that we're not self-cloned, and if we are then bail. */
-+	int cloned = is_self_cloned();
-+	if (cloned > 0 || cloned == -ENOTRECOVERABLE)
-+		return cloned;
-+
-+	if (fetchve(&argv, &envp) < 0)
-+		return -EINVAL;
-+
-+	execfd = clone_binary();
-+	if (execfd < 0)
-+		return -EIO;
-+
-+	fexecve(execfd, argv, envp);
-+	return -ENOEXEC;
-+}
-diff --git a/libcontainer/nsenter/nsexec.c b/libcontainer/nsenter/nsexec.c
-index 28269dfc0..7750af35e 100644
---- a/libcontainer/nsenter/nsexec.c
-+++ b/libcontainer/nsenter/nsexec.c
-@@ -534,6 +534,9 @@ void join_namespaces(char *nslist)
- 	free(namespaces);
- }
- 
-+/* Defined in cloned_binary.c. */
-+extern int ensure_cloned_binary(void);
-+
- void nsexec(void)
- {
- 	int pipenum;
-@@ -549,6 +552,14 @@ void nsexec(void)
- 	if (pipenum == -1)
- 		return;
- 
-+	/*
-+	 * We need to re-exec if we are not in a cloned binary. This is necessary
-+	 * to ensure that containers won't be able to access the host binary
-+	 * through /proc/self/exe. See CVE-2019-5736.
-+	 */
-+	if (ensure_cloned_binary() < 0)
-+		bail("could not ensure we are a cloned binary");
-+
- 	/* Parse all of the netlink configuration. */
- 	nl_parse(pipenum, &config);
- 
diff --git a/gnu/packages/patches/upx-CVE-2021-20285.patch b/gnu/packages/patches/upx-CVE-2021-20285.patch
new file mode 100644
index 0000000000..1d47b2a8bb
--- /dev/null
+++ b/gnu/packages/patches/upx-CVE-2021-20285.patch
@@ -0,0 +1,76 @@
+From 3781df9da23840e596d5e9e8493f22666802fe6c Mon Sep 17 00:00:00 2001
+From: John Reiser <jreiser@BitWagon.com>
+Date: Fri, 11 Dec 2020 13:38:18 -0800
+Subject: [PATCH] Check DT_REL/DT_RELA, DT_RELSZ/DT_RELASZ
+
+https://github.com/upx/upx/issues/421
+	modified:   p_lx_elf.cpp
+---
+ src/p_lx_elf.cpp | 34 +++++++++++++++++++++++++++++-----
+ 1 file changed, 29 insertions(+), 5 deletions(-)
+
+diff --git a/src/p_lx_elf.cpp b/src/p_lx_elf.cpp
+index 182db192..3a4101cf 100644
+--- a/src/p_lx_elf.cpp
++++ b/src/p_lx_elf.cpp
+@@ -2222,8 +2222,20 @@ bool PackLinuxElf32::canPack()
+                         int z_rsz = dt_table[Elf32_Dyn::DT_RELSZ];
+                         if (z_rel && z_rsz) {
+                             unsigned rel_off = get_te32(&dynseg[-1+ z_rel].d_val);
++                            if ((unsigned)file_size <= rel_off) {
++                                char msg[70]; snprintf(msg, sizeof(msg),
++                                     "bad Elf32_Dynamic[DT_REL] %#x\n",
++                                     rel_off);
++                                throwCantPack(msg);
++                            }
+                             Elf32_Rel *rp = (Elf32_Rel *)&file_image[rel_off];
+                             unsigned relsz   = get_te32(&dynseg[-1+ z_rsz].d_val);
++                            if ((unsigned)file_size <= relsz) {
++                                char msg[70]; snprintf(msg, sizeof(msg),
++                                     "bad Elf32_Dynamic[DT_RELSZ] %#x\n",
++                                     relsz);
++                                throwCantPack(msg);
++                            }
+                             Elf32_Rel *last = (Elf32_Rel *)(relsz + (char *)rp);
+                             for (; rp < last; ++rp) {
+                                 unsigned r_va = get_te32(&rp->r_offset);
+@@ -2562,14 +2574,26 @@ PackLinuxElf64::canPack()
+                         int z_rel = dt_table[Elf64_Dyn::DT_RELA];
+                         int z_rsz = dt_table[Elf64_Dyn::DT_RELASZ];
+                         if (z_rel && z_rsz) {
+-                            unsigned rel_off = get_te64(&dynseg[-1+ z_rel].d_val);
++                            upx_uint64_t rel_off = get_te64(&dynseg[-1+ z_rel].d_val);
++                            if ((u64_t)file_size <= rel_off) {
++                                char msg[70]; snprintf(msg, sizeof(msg),
++                                     "bad Elf64_Dynamic[DT_RELA] %#llx\n",
++                                     rel_off);
++                                throwCantPack(msg);
++                            }
+                             Elf64_Rela *rp = (Elf64_Rela *)&file_image[rel_off];
+-                            unsigned relsz   = get_te64(&dynseg[-1+ z_rsz].d_val);
++                            upx_uint64_t relsz   = get_te64(&dynseg[-1+ z_rsz].d_val);
++                            if ((u64_t)file_size <= relsz) {
++                                char msg[70]; snprintf(msg, sizeof(msg),
++                                     "bad Elf64_Dynamic[DT_RELASZ] %#llx\n",
++                                     relsz);
++                                throwCantPack(msg);
++                            }
+                             Elf64_Rela *last = (Elf64_Rela *)(relsz + (char *)rp);
+                             for (; rp < last; ++rp) {
+-                                unsigned r_va = get_te64(&rp->r_offset);
++                                upx_uint64_t r_va = get_te64(&rp->r_offset);
+                                 if (r_va == user_init_ava) { // found the Elf64_Rela
+-                                    unsigned r_info = get_te64(&rp->r_info);
++                                    upx_uint64_t r_info = get_te64(&rp->r_info);
+                                     unsigned r_type = ELF64_R_TYPE(r_info);
+                                     if (Elf64_Ehdr::EM_AARCH64 == e_machine
+                                     &&  R_AARCH64_RELATIVE == r_type) {
+@@ -2581,7 +2605,7 @@ PackLinuxElf64::canPack()
+                                     }
+                                     else {
+                                         char msg[50]; snprintf(msg, sizeof(msg),
+-                                            "bad relocation %#x DT_INIT_ARRAY[0]",
++                                            "bad relocation %#llx DT_INIT_ARRAY[0]",
+                                             r_info);
+                                         throwCantPack(msg);
+                                     }
diff --git a/gnu/packages/patches/vtk-fix-freetypetools-build-failure.patch b/gnu/packages/patches/vtk-fix-freetypetools-build-failure.patch
index 6988e65872..23f651b5eb 100644
--- a/gnu/packages/patches/vtk-fix-freetypetools-build-failure.patch
+++ b/gnu/packages/patches/vtk-fix-freetypetools-build-failure.patch
@@ -17,20 +17,16 @@ diff --git a/Rendering/FreeType/vtkFreeTypeTools.cxx b/Rendering/FreeType/vtkFre
 index c54289dc60..03b899c4da 100644
 --- a/Rendering/FreeType/vtkFreeTypeTools.cxx
 +++ b/Rendering/FreeType/vtkFreeTypeTools.cxx
-@@ -387,11 +387,8 @@ FTC_CMapCache* vtkFreeTypeTools::GetCMapCache()
+@@ -378,8 +378,7 @@ FTC_CMapCache* vtkFreeTypeTools::GetCMapCache()
  }
- 
+
  //----------------------------------------------------------------------------
 -FT_CALLBACK_DEF(FT_Error)
--vtkFreeTypeToolsFaceRequester(FTC_FaceID face_id,
--                              FT_Library lib,
--                              FT_Pointer request_data,
--                              FT_Face* face)
+-vtkFreeTypeToolsFaceRequester(
 +static FT_Error vtkFreeTypeToolsFaceRequester(
-+  FTC_FaceID face_id, FT_Library lib, FT_Pointer request_data, FT_Face* face)
+   FTC_FaceID face_id, FT_Library lib, FT_Pointer request_data, FT_Face* face)
  {
  #if VTK_FTFC_DEBUG_CD
-   printf("vtkFreeTypeToolsFaceRequester()\n");
--- 
+--
 2.30.1
 
diff --git a/gnu/packages/patches/wpa-supplicant-CVE-2021-30004.patch b/gnu/packages/patches/wpa-supplicant-CVE-2021-30004.patch
new file mode 100644
index 0000000000..8c8ba93355
--- /dev/null
+++ b/gnu/packages/patches/wpa-supplicant-CVE-2021-30004.patch
@@ -0,0 +1,115 @@
+From a0541334a6394f8237a4393b7372693cd7e96f15 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Sat, 13 Mar 2021 18:19:31 +0200
+Subject: ASN.1: Validate DigestAlgorithmIdentifier parameters
+
+The supported hash algorithms do not use AlgorithmIdentifier parameters.
+However, there are implementations that include NULL parameters in
+addition to ones that omit the parameters. Previous implementation did
+not check the parameters value at all which supported both these cases,
+but did not reject any other unexpected information.
+
+Use strict validation of digest algorithm parameters and reject any
+unexpected value when validating a signature. This is needed to prevent
+potential forging attacks.
+
+Signed-off-by: Jouni Malinen <j@w1.fi>
+---
+ src/tls/pkcs1.c  | 21 +++++++++++++++++++++
+ src/tls/x509v3.c | 20 ++++++++++++++++++++
+ 2 files changed, 41 insertions(+)
+
+diff --git a/src/tls/pkcs1.c b/src/tls/pkcs1.c
+index bbdb0d7..5761dfe 100644
+--- a/src/tls/pkcs1.c
++++ b/src/tls/pkcs1.c
+@@ -244,6 +244,8 @@ int pkcs1_v15_sig_ver(struct crypto_public_key *pk,
+ 		os_free(decrypted);
+ 		return -1;
+ 	}
++	wpa_hexdump(MSG_MSGDUMP, "PKCS #1: DigestInfo",
++		    hdr.payload, hdr.length);
+ 
+ 	pos = hdr.payload;
+ 	end = pos + hdr.length;
+@@ -265,6 +267,8 @@ int pkcs1_v15_sig_ver(struct crypto_public_key *pk,
+ 		os_free(decrypted);
+ 		return -1;
+ 	}
++	wpa_hexdump(MSG_MSGDUMP, "PKCS #1: DigestAlgorithmIdentifier",
++		    hdr.payload, hdr.length);
+ 	da_end = hdr.payload + hdr.length;
+ 
+ 	if (asn1_get_oid(hdr.payload, hdr.length, &oid, &next)) {
+@@ -273,6 +277,23 @@ int pkcs1_v15_sig_ver(struct crypto_public_key *pk,
+ 		os_free(decrypted);
+ 		return -1;
+ 	}
++	wpa_hexdump(MSG_MSGDUMP, "PKCS #1: Digest algorithm parameters",
++		    next, da_end - next);
++
++	/*
++	 * RFC 5754: The correct encoding for the SHA2 algorithms would be to
++	 * omit the parameters, but there are implementation that encode these
++	 * as a NULL element. Allow these two cases and reject anything else.
++	 */
++	if (da_end > next &&
++	    (asn1_get_next(next, da_end - next, &hdr) < 0 ||
++	     !asn1_is_null(&hdr) ||
++	     hdr.payload + hdr.length != da_end)) {
++		wpa_printf(MSG_DEBUG,
++			   "PKCS #1: Unexpected digest algorithm parameters");
++		os_free(decrypted);
++		return -1;
++	}
+ 
+ 	if (!asn1_oid_equal(&oid, hash_alg)) {
+ 		char txt[100], txt2[100];
+diff --git a/src/tls/x509v3.c b/src/tls/x509v3.c
+index a8944dd..df337ec 100644
+--- a/src/tls/x509v3.c
++++ b/src/tls/x509v3.c
+@@ -1964,6 +1964,7 @@ int x509_check_signature(struct x509_certificate *issuer,
+ 		os_free(data);
+ 		return -1;
+ 	}
++	wpa_hexdump(MSG_MSGDUMP, "X509: DigestInfo", hdr.payload, hdr.length);
+ 
+ 	pos = hdr.payload;
+ 	end = pos + hdr.length;
+@@ -1985,6 +1986,8 @@ int x509_check_signature(struct x509_certificate *issuer,
+ 		os_free(data);
+ 		return -1;
+ 	}
++	wpa_hexdump(MSG_MSGDUMP, "X509: DigestAlgorithmIdentifier",
++		    hdr.payload, hdr.length);
+ 	da_end = hdr.payload + hdr.length;
+ 
+ 	if (asn1_get_oid(hdr.payload, hdr.length, &oid, &next)) {
+@@ -1992,6 +1995,23 @@ int x509_check_signature(struct x509_certificate *issuer,
+ 		os_free(data);
+ 		return -1;
+ 	}
++	wpa_hexdump(MSG_MSGDUMP, "X509: Digest algorithm parameters",
++		    next, da_end - next);
++
++	/*
++	 * RFC 5754: The correct encoding for the SHA2 algorithms would be to
++	 * omit the parameters, but there are implementation that encode these
++	 * as a NULL element. Allow these two cases and reject anything else.
++	 */
++	if (da_end > next &&
++	    (asn1_get_next(next, da_end - next, &hdr) < 0 ||
++	     !asn1_is_null(&hdr) ||
++	     hdr.payload + hdr.length != da_end)) {
++		wpa_printf(MSG_DEBUG,
++			   "X509: Unexpected digest algorithm parameters");
++		os_free(data);
++		return -1;
++	}
+ 
+ 	if (x509_sha1_oid(&oid)) {
+ 		if (signature->oid.oid[6] != 5 /* sha-1WithRSAEncryption */) {
+-- 
+cgit v0.12
+
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index 437000b7c0..689d03afc8 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -299,13 +299,6 @@ When present, Poppler is able to correctly render CJK and Cyrillic text.")
     (license (list license:bsd-3
                    license:gpl2))))
 
-(define-public poppler-qt4
-  (package/inherit poppler
-   (name "poppler-qt4")
-   (inputs `(("qt-4" ,qt-4)
-             ,@(package-inputs poppler)))
-   (synopsis "Qt4 frontend for the Poppler PDF rendering library")))
-
 (define-public poppler-qt5
   (package/inherit poppler
    (name "poppler-qt5")
@@ -316,14 +309,14 @@ When present, Poppler is able to correctly render CJK and Cyrillic text.")
 (define-public python-poppler-qt5
   (package
     (name "python-poppler-qt5")
-    (version "0.24.2")
+    (version "21.1.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "python-poppler-qt5" version))
         (sha256
          (base32
-          "0l69llw1fzwz8y90q0qp9q5pifbrqjjbwii7di54dwghw5fc6w1r"))))
+          "0b82gm4i75q5v19kfbq0h4y0b2vcwr2213zkhxh6l0h45kdndmxd"))))
     (build-system python-build-system)
     (arguments
      `(;; There are no tests.  The check phase just causes a rebuild.
@@ -346,7 +339,7 @@ When present, Poppler is able to correctly render CJK and Cyrillic text.")
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
-     `(("python-sip" ,python-sip)
+     `(("python-sip" ,python-sip-4)
        ("python-pyqt" ,python-pyqt)
        ("poppler-qt5" ,poppler-qt5)
        ("qtbase" ,qtbase)))
diff --git a/gnu/packages/perl-check.scm b/gnu/packages/perl-check.scm
index b841e574eb..c64b985c4c 100644
--- a/gnu/packages/perl-check.scm
+++ b/gnu/packages/perl-check.scm
@@ -1096,14 +1096,14 @@ classes in its inheritance tree in one single call.")
 (define-public perl-test-output
   (package
     (name "perl-test-output")
-    (version "1.031")
+    (version "1.033")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/B/BD/BDFOY/"
                                   "Test-Output-" version ".tar.gz"))
               (sha256
                (base32
-                "193y1xjvgc1p9pdgdwps2127knvpz9wc1xh6gmr74y3ihmqz7f7q"))))
+                "0vjm62c7g3xxs3h4lba55dnpr4pg71yrhkdg5b9glxdh80klia7n"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-capture-tiny" ,perl-capture-tiny)
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index 4f2507286c..ba2a2af4be 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -2212,7 +2212,7 @@ Password Generator\".")
 (define-public perl-crypt-rijndael
   (package
     (name "perl-crypt-rijndael")
-    (version "1.15")
+    (version "1.16")
     (source
      (origin
       (method url-fetch)
@@ -2220,7 +2220,7 @@ Password Generator\".")
             "mirror://cpan/authors/id/L/LE/LEONT/Crypt-Rijndael-"
             version ".tar.gz"))
       (sha256
-       (base32 "0qs1b6ma4sj0ip5d8544fzgc1bbankc4qlmznp8hay8dk5arp650"))))
+       (base32 "0h2dr1bd15y0sipxsdh1k4hx5bccywn15haj0xpjmf0471g0hh35"))))
     (build-system perl-build-system)
     (home-page "https://metacpan.org/release/Crypt-Rijndael")
     (synopsis "Crypt::CBC compliant Rijndael encryption module")
@@ -3770,15 +3770,14 @@ for CRC-CCITT, CRC-16 and CRC-32.")
 (define-public perl-digest-hmac
   (package
     (name "perl-digest-hmac")
-    (version "1.03")
+    (version "1.04")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "mirror://cpan/authors/id/G/GA/GAAS/"
+       (uri (string-append "mirror://cpan/authors/id/A/AR/ARODLAND/"
                            "Digest-HMAC-" version ".tar.gz"))
        (sha256
-        (base32
-         "0naavabbm1c9zgn325ndy66da4insdw9l3mrxwxdfi7i7xnjrirv"))))
+        (base32 "1m4fn0w3hb4vn7k5kja508a5hjmcrm28zhdpjkbl8p17m9b83g6n"))))
     (build-system perl-build-system)
     (home-page "https://metacpan.org/release/Digest-HMAC")
     (synopsis "Keyed-Hashing for Message Authentication")
@@ -6718,14 +6717,14 @@ Moose and is optimised for rapid startup.")
 (define-public perl-moose
   (package
     (name "perl-moose")
-    (version "2.2012")
+    (version "2.2015")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/E/ET/ETHER/"
                                   "Moose-" version ".tar.gz"))
               (sha256
                (base32
-                "0s9m2pskc8h1k94pbvx0lvf0xgv9xca349isbcsrqdqnkmxf9fs6"))))
+                "05gma3q3l15igqrqi8ax8v5cmmvy7s939q3xzs45l1rc7sfx6yd6"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-cpan-meta-check" ,perl-cpan-meta-check)
@@ -8153,16 +8152,16 @@ designed for the more complex job, such as @code{Params::Validate}")
 (define-public perl-params-util
   (package
     (name "perl-params-util")
-    (version "1.07")
+    (version "1.102")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "mirror://cpan/authors/id/A/AD/ADAMK/Params-Util-"
+             "mirror://cpan/authors/id/R/RE/REHSACK/Params-Util-"
              version ".tar.gz"))
        (sha256
         (base32
-         "0v67sx93yhn7xa0nh9mnbf8mixf54czk6wzrjsp6dzzr5hzyrw9h"))))
+         "00kl154zisf2zsl8yl6xa6yw54nhd9cja5d5fyigs96vhasb36s9"))))
     (build-system perl-build-system)
     (home-page "https://metacpan.org/release/Params-Util")
     (synopsis "Simple, compact and correct param-checking functions")
@@ -8303,14 +8302,14 @@ file names.")
 (define-public perl-path-tiny
   (package
     (name "perl-path-tiny")
-    (version "0.108")
+    (version "0.118")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/D/DA/DAGOLDEN/"
                                   "Path-Tiny-" version ".tar.gz"))
               (sha256
                (base32
-                "1x9zf8r3cynf4vqlycyyspsr70v4zw6bk9bkgvfpvsxkw8mlhj9w"))))
+                "1zdhc3azw6wn21db3yyygs57vlqkx72ipyd8sa21m72c1y6qs4rj"))))
     (build-system perl-build-system)
     (arguments
      `(#:tests? #f)) ; Tests require additional test modules to be packaged
@@ -8328,7 +8327,7 @@ with file paths.")
 (define-public perl-pdf-api2
   (package
     (name "perl-pdf-api2")
-    (version "2.038")
+    (version "2.039")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -8336,7 +8335,7 @@ with file paths.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "02dxz798sx0ncdphjrfvfl2a3c1lkplyriyk4psq99q2kdsc8ivl"))))
+                "08x1anlvmxwym081flkrz7wr9q89y9wbq8ajqk72xsbzhhc479rn"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-test-exception" ,perl-test-exception)
@@ -11197,14 +11196,14 @@ files, using JSON::PP and/or CPAN::Meta::YAML.")
 (define-public perl-scalar-list-utils
   (package
     (name "perl-scalar-list-utils")
-    (version "1.53")
+    (version "1.56")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://cpan/authors/id/P/PE/PEVANS/"
                            "Scalar-List-Utils-" version ".tar.gz"))
        (sha256
-        (base32 "16dfpnrcf5846j998rdd6gra16m9030rnz9fpsh1hfzvcsq8ch5x"))))
+        (base32 "0nxb29x7i2w6kjxq188n131b56bsqj1ykrxjcjp6sgpv81ym7f0m"))))
     (build-system perl-build-system)
     (home-page "https://metacpan.org/release/Scalar-List-Utils")
     (synopsis "Common Scalar and List utility subroutines")
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index 3dc3d7b3b6..210d69522f 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -240,14 +240,14 @@ data as produced by digital cameras.")
 (define-public libgphoto2
   (package
     (name "libgphoto2")
-    (version "2.5.26")
+    (version "2.5.27")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/gphoto/libgphoto/"
                                   version "/libgphoto2-" version ".tar.bz2"))
               (sha256
                (base32
-                "1m5wxap3x9z6x8s2gj3sw9lqwlmbgz00dv6z3h3qk15prfizwh3p"))))
+                "1ms06b3dj1p33aypcb16gg5pn7fylbylsk9cnnqa0j29qiw59f7q"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)))
     (inputs
@@ -271,14 +271,14 @@ from digital cameras.")
 (define-public gphoto2
   (package
     (name "gphoto2")
-    (version "2.5.26")
+    (version "2.5.27")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/gphoto/gphoto/" version
                                   "/gphoto2-" version ".tar.bz2"))
               (sha256
                (base32
-                "0bxbcn31xalsvjp8fra324hf2105y3ps7zlyfz11v71j0lxj2lvn"))))
+                "0f4d3q381jnnkcqkb2dj1k709skp65qihl5xm80zandvl69lw19h"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -355,15 +355,16 @@ and a wide variety of other metadata.")
 (define-public libpano13
   (package
     (name "libpano13")
-    (version "2.9.19")
+    (version "2.9.20_rc3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/panotools/libpano13/"
-                                  "libpano13-" version "/"
-                                  "libpano13-" version ".tar.gz"))
+                                  "libpano13-" (first
+                                                (string-split version #\_))
+                                  "/libpano13-" version ".tar.gz"))
               (sha256
                (base32
-                "1a4m3plmfcrrplqs9zfzhc5apibn10m5sajpizm1sd3q74w5fwq3"))))
+                "12cv4886l1czfjwy7k6ipgf3zjksgwhdjzr2s9fdg33vqcv2hlrv"))))
     (build-system cmake-build-system)
     (inputs
      `(("libjpeg" ,libjpeg-turbo)
diff --git a/gnu/packages/popt.scm b/gnu/packages/popt.scm
index 11d2b1827d..1c325e0c3d 100644
--- a/gnu/packages/popt.scm
+++ b/gnu/packages/popt.scm
@@ -91,7 +91,7 @@ similar to getopt(3), it contains a number of enhancements, including:
 
   - popt allows users to alias command line arguments;
 
-  - popt provides convience functions for parsing strings into argv[] style
+  - popt provides convenience functions for parsing strings into argv[] style
     arrays.")
     (license x11)))
 
diff --git a/gnu/packages/pretty-print.scm b/gnu/packages/pretty-print.scm
index af02fd91a9..4662a1e717 100644
--- a/gnu/packages/pretty-print.scm
+++ b/gnu/packages/pretty-print.scm
@@ -189,19 +189,6 @@ to @code{IOStreams}.")
     ;; The library is bsd-2, but documentation and tests include other licenses.
     (license (list bsd-2 bsd-3 psfl))))
 
-(define-public fmt-6
-  (package
-    (inherit fmt)
-    (name "fmt")
-    (version "6.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/fmtlib/fmt/releases/download/"
-                           version "/fmt-" version ".zip"))
-       (sha256
-        (base32 "06l8g59frbsbwj15kg6x2bbn6p8yidh6wzsigdhbdjncvm1agzll"))))))
-
 (define-public source-highlight
   (package
     (name "source-highlight")
diff --git a/gnu/packages/python-build.scm b/gnu/packages/python-build.scm
index 95d0b3653d..9a820ff29b 100644
--- a/gnu/packages/python-build.scm
+++ b/gnu/packages/python-build.scm
@@ -4,6 +4,8 @@
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2018, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -71,14 +73,13 @@ installed with a newer @code{pip} or with wheel's own command line utility.")
 (define-public python-toml
   (package
     (name "python-toml")
-    (version "0.10.1")
+    (version "0.10.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "toml" version))
        (sha256
-        (base32
-         "03wbqm5cn685cwx2664hjdpz370njl7lf0yal8s0dkp5w4mn2swj"))))
+        (base32 "13z6rff86bzdpl094x0vmfvls779931xj90dlbs9kpfm138s3gdk"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f))                     ;no tests suite in release
@@ -89,6 +90,23 @@ installed with a newer @code{pip} or with wheel's own command line utility.")
 Language (TOML) configuration files.")
     (license license:expat)))
 
+(define-public python-pytoml
+  (package
+    (name "python-pytoml")
+    (version "0.1.21")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pytoml" version))
+       (sha256
+        (base32
+         "1rv1byiw82k7mj6aprcrqi2vdabs801y97xhfnrz7kxds34ggv4f"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/avakar/pytoml")
+    (synopsis "Parser for TOML")
+    (description "This package provides a Python parser for TOML-0.4.0.")
+    (license license:expat)))
+
 (define-public python-pep517-bootstrap
   (hidden-package
    (package
diff --git a/gnu/packages/python-check.scm b/gnu/packages/python-check.scm
index f7342c6436..da6d088f25 100644
--- a/gnu/packages/python-check.scm
+++ b/gnu/packages/python-check.scm
@@ -10,6 +10,9 @@
 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
+;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -372,6 +375,39 @@ provides a shortcut to testing all code and documentation for a given
 sub-package.")
     (license license:bsd-3)))
 
+(define-public python-pytest-helpers-namespace
+  (package
+    (name "python-pytest-helpers-namespace")
+    (version "2021.3.24")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pytest-helpers-namespace" version))
+       (sha256
+        (base32
+         "0pyj2d45zagmzlajzqdnkw5yz8k49pkihbydsqkzm413qnkzb38q"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             ;; Make the installed plugin discoverable by Pytest.
+             (add-installed-pythonpath inputs outputs)
+             (invoke "pytest" "-vv"))))))
+    (native-inputs
+     `(("python-pytest" ,python-pytest-6)
+       ("python-setuptools" ,python-setuptools) ; needs setuptools >= 50.3.2
+       ("python-setuptools-scm" ,python-setuptools-scm)
+       ("python-setuptools-declarative-requirements"
+        ,python-setuptools-declarative-requirements)))
+    (home-page "https://github.com/saltstack/pytest-helpers-namespace")
+    (synopsis "Pytest Helpers Namespace Plugin")
+    (description "Pytest Helpers Namespace Plugin provides a helpers pytest
+namespace which can be used to register helper functions without requiring
+someone to import them in their actual tests to use them.")
+    (license license:asl2.0)))
+
 (define-public python-pytest-openfiles
   (package
     (name "python-pytest-openfiles")
@@ -627,14 +663,14 @@ friendly library for concurrency and async I/O in Python.")
 (define-public python-pytest-flake8
   (package
     (name "python-pytest-flake8")
-    (version "1.0.6")
+    (version "1.0.7")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-flake8" version))
        (sha256
         (base32
-         "09vhn7r77s1yiqnlwfvh5585f904zpyd6620a90dpccfr1cbp0hv"))))
+         "0syx68xk5ss3hgp3nr2y122w0fgkzr5936ghsqrkymh3m5hrf9gh"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-flake8" ,python-flake8)))
@@ -1235,6 +1271,28 @@ convenient wrapper above tools such as Pyflakes, pydocstyle, pycodestyle and
 McCabe, among others.")
     (license license:lgpl3+)))
 
+(define-public python-pyannotate
+  (package
+    (name "python-pyannotate")
+    (version "1.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pyannotate" version))
+       (sha256
+        (base32
+         "16bm0mf7wxvy0lgmcs1p8n1ji8pnvj1jvj8zk3am70dkp825iv84"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-mypy-extensions" ,python-mypy-extensions)
+       ("python-six" ,python-six)))
+    (home-page
+     "https://github.com/dropbox/pyannotate")
+    (synopsis "Auto-generate PEP-484 annotations")
+    (description "This package, PyAnnotate, is used to auto-generate PEP-484
+annotations.")
+    (license license:asl2.0)))
+
 (define-public python-eradicate
   (package
     (name "python-eradicate")
@@ -1339,3 +1397,26 @@ help in debugging failures and optimizing the scheduler to improve speed.")
     (description "A pytest plugin for Sanic.  It helps you to test your
 code asynchronously.")
     (license license:expat)))
+
+(define-public python-allpairspy
+  (package
+    (name "python-allpairspy")
+    (version "2.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "allpairspy" version))
+       (sha256
+        (base32 "1c987h13dly9919d15w3h747rgn50ilnv7dginhlprxbj564hn4k"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-pytest-runner" ,python-pytest-runner)))
+    (home-page "https://github.com/thombashi/allpairspy")
+    (synopsis "Pairwise test combinations generator")
+    (description
+     "This is a Python library for test combinations generator.  The generator
+allows one to create a set of tests using @emph{pairwise combinations} method,
+reducing a number of combinations of variables into a lesser set that covers
+most situations.")
+    (license license:expat)))
diff --git a/gnu/packages/python-compression.scm b/gnu/packages/python-compression.scm
index 2065e6e38f..30062f43c5 100644
--- a/gnu/packages/python-compression.scm
+++ b/gnu/packages/python-compression.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,14 +31,141 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
+  #:use-module (gnu packages libffi)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages check)
   #:use-module (gnu packages maths)
   #: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-crypto)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages sphinx))
 
+(define-public python-multivolumefile
+  (package
+    (name "python-multivolumefile")
+    (version "0.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "multivolumefile" version))
+       (sha256
+        (base32
+         "0j46wab4b09s3favjzp3zs1cn2sn8pr7qyngs5wn31hpqqxbbz76"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pep517" ,python-pep517)
+       ("python-setuptools" ,python-setuptools)
+       ("python-setuptools-scm" ,python-setuptools-scm/next)
+       ("python-coverage" ,python-coverage)
+       ("python-coveralls" ,python-coveralls)
+       ("python-pyannotate" ,python-pyannotate)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-cov" ,python-pytest-cov)))
+    (home-page "https://github.com/miurahr/multivolume")
+    (synopsis "Treat multiple files as one")
+    (description "MultiVolumefile is a Python library that provides a
+file-object abstraction, making it possible to use multiple files as if they
+were a single file.")
+    (license license:lgpl2.1+)))
+
+(define-public python-bcj-cffi
+  (package
+    (name "python-bcj-cffi")
+    (version "0.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "bcj-cffi" version))
+       (sha256
+        (base32
+         "1jcczrb8zgg6w7v76w1wpz3nw75fghk3xwxkn09ll7kck7sdf68d"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-cffi" ,python-cffi)
+       ("python-toml" ,python-toml)
+       ("python-setuptools-scm" ,python-setuptools-scm/next)))
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)
+       ("python-coverage" ,python-coverage)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-cov" ,python-pytest-cov)))
+    (home-page "https://github.com/miurahr/bcj-cffi")
+    (synopsis "Branch / Call /Jump CFFI library in Python")
+    (description "This package provides an implementation of the Branch / Call /
+Jump conversion filter by CFFI for Python.")
+    (license license:lgpl2.1+)))
+
+(define-public python-ppmd-cffi
+  (package
+    (name "python-ppmd-cffi")
+    (version "0.3.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "ppmd-cffi" version))
+       (sha256
+        (base32
+         "01wcd9l6pp6hivdmd275qh9dhcwficjqfl67hxix5n07vvq7jzz0"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-cffi" ,python-cffi)))
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)
+       ("python-setuptools-scm" ,python-setuptools-scm/next)
+       ("python-pep517" ,python-pep517)
+       ("python-coverage" ,python-coverage)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-cov" ,python-pytest-cov)))
+    (home-page "https://github.com/miurahr/ppmd")
+    (synopsis "Prediction by Partial Matching compression library")
+    (description "PPMd is a compression algorithm library using the Prediction
+by Partial Matching statistical technique.  It is used in RAR and 7-Zip as one of
+several possible methods.")
+    (license license:lgpl2.1+)))
+
+(define-public python-py7zr
+  (package
+    (name "python-py7zr")
+    (version "0.14.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "py7zr" version))
+       (sha256
+        (base32
+         "1zmgp7yax328fj8yj8pj4l7yh78hp727j6wk12vfi6nmi82wl32i"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-bcj-cffi" ,python-bcj-cffi)
+       ("python-multivolumefile" ,python-multivolumefile)
+       ("python-ppmd-cffi" ,python-ppmd-cffi)
+       ("python-pycryptodome" ,python-pycryptodome)
+       ("python-pyzstd" ,python-pyzstd)
+       ("python-texttable" ,python-texttable)
+       ("python-zstandard" ,python-zstandard)))
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)
+       ("python-setuptools-scm" ,python-setuptools-scm/next)
+       ("python-coverage" ,python-coverage)
+       ("python-coveralls" ,python-coveralls)
+       ("python-libarchive-c" ,python-libarchive-c)
+       ("python-py-cpuinfo" ,python-py-cpuinfo)
+       ("python-pyannotate" ,python-pyannotate)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-benchmark" ,python-pytest-benchmark)
+       ("python-pytest-cov" ,python-pytest-cov)
+       ("python-pytest-remotedata" ,python-pytest-remotedata)
+       ("python-pytest-timeout" ,python-pytest-timeout)))
+    (home-page "https://github.com/miurahr/py7zr")
+    (synopsis "7-zip in Python")
+    (description "This package provides py7zr, which implements 7-zip
+archive compression, decompression, encryption and decryption in
+Python.")
+    (license license:lgpl2.1+)))
+
 (define-public python-lzo
   (package
     (name "python-lzo")
@@ -288,13 +416,13 @@ wrapper.  It provides a backport of the @code{Path} object.")
 (define-public python-zstandard
   (package
     (name "python-zstandard")
-    (version "0.13.0")
+    (version "0.15.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "zstandard" version))
        (sha256
-        (base32 "0q9msi00s93iqm8vzd839r7yc51gz54z90h5bckqyjdxa6vxijz5"))))
+        (base32 "0by9z7nxnkzhmza075q6q91rs8lnpf91129k8ppv7kymbwshipjj"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-hypothesis" ,python-hypothesis)))
@@ -304,3 +432,21 @@ wrapper.  It provides a backport of the @code{Path} object.")
 the Zstandard compression library.  A C extension and CFFI interface are
 provided.")
     (license license:bsd-3)))
+
+(define-public python-pyzstd
+  (package
+    (name "python-pyzstd")
+    (version "0.14.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pyzstd" version))
+       (sha256
+        (base32
+         "1d3mngs45w2p490vrq5ymd2wz4lp15phmks1ilcx4k7amgibml3d"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/animalize/pyzstd")
+    (synopsis "Zstandard bindings for Python")
+    (description "This package provides Python bindings to the Zstandard (zstd)
+compression library.  The API is similar to Python's bz2/lzma/zlib module.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 4e06d5ed85..535aff427a 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2016, 2017 Danny Milosavljevic <dannym+a@scratchpost.org>
 ;;; Copyright © 2013, 2014, 2015, 2016, 2020 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016, 2017, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016, 2017, 2020 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
@@ -40,6 +40,7 @@
 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
 ;;; Copyright © 2020 Konrad Hinsen <konrad.hinsen@fastmail.net>
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2021 Ekaitz Zarraga <ekaitz@elenq.tech>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -778,29 +779,26 @@ object graph to and from JSON.")
 (define-public python-mechanicalsoup
   (package
     (name "python-mechanicalsoup")
-    (version "0.11.0")
+    (version "1.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "MechanicalSoup" version))
        (sha256
-        (base32 "0k59wwk75q7nz6i6gynvzhagy02ql0bv7py3qqcwgjw7607yq4i7"))))
+        (base32 "01sddjxy3rznh63hnl5lbv1hhk6xyiviwmkiw4x7v4ap35fb3lrp"))))
     (build-system python-build-system)
-    (arguments
-     ;; TODO: Enable tests when python-flake8@3.5 hits master.
-     `(#:tests? #f))
     (propagated-inputs
      `(("python-beautifulsoup4" ,python-beautifulsoup4)
        ("python-lxml" ,python-lxml)
        ("python-requests" ,python-requests)
        ("python-six" ,python-six)))
-    ;; (native-inputs
-    ;;  ;; For tests.
-    ;;  `(("python-pytest-flake8" ,python-pytest-flake8)
-    ;;    ("python-pytest-httpbin" ,python-pytest-httpbin)
-    ;;    ("python-pytest-mock" ,python-pytest-mock)
-    ;;    ("python-pytest-runner" ,python-pytest-runner)
-    ;;    ("python-requests-mock" ,python-requests-mock)))
+    (native-inputs
+     `(("python-pytest-cov" ,python-pytest-cov)
+       ("python-pytest-flake8" ,python-pytest-flake8)
+       ("python-pytest-httpbin" ,python-pytest-httpbin)
+       ("python-pytest-mock" ,python-pytest-mock)
+       ("python-pytest-runner" ,python-pytest-runner)
+       ("python-requests-mock" ,python-requests-mock)))
     (home-page "https://mechanicalsoup.readthedocs.io/")
     (synopsis "Python library for automating website interaction")
     (description
@@ -1085,7 +1083,9 @@ storage.")
     (build-system python-build-system)
     (propagated-inputs
      `(("python-six" ,python-six)
-       ("python-webencodings" ,python-webencodings)))
+       ("python-webencodings" ,python-webencodings)
+       ;; Required by Calibre 5.
+       ("python-chardet" ,python-chardet)))
     (arguments
      `(#:test-target "check"))
     (home-page
@@ -1668,14 +1668,14 @@ connection to each user.")
 (define-public python-tornado-6
   (package
     (name "python-tornado")
-    (version "6.0.4")
+    (version "6.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "tornado" version))
        (sha256
         (base32
-         "1p5n7sw4580pkybywg93p8ddqdj9lhhy72rzswfa801vlidx9qhg"))))
+         "14cpzdv6p6qvk6vn02krdh5rcfdi174ifdbr5s6lcnymgcfyiiik"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
@@ -1729,26 +1729,26 @@ web framework, either via the basic or digest authentication schemes.")
 (define-public python-terminado
   (package
     (name "python-terminado")
-    (version "0.8.1")
+    (version "0.9.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "terminado" version))
        (sha256
         (base32
-         "0yh69k6579g848rmjyllb5h75pkvgcy27r1l3yzgkf33wnnzkasm"))))
+         "1glqyw97rddyzvisz8rihsn3x2nrm5xbyq82nzp3123pqbxvqzcs"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-tornado" ,python-tornado)
+     `(("python-tornado" ,python-tornado-6)
        ("python-ptyprocess" ,python-ptyprocess)))
     (native-inputs
-     `(("python-nose" ,python-nose)))
+     `(("python-pytest" ,python-pytest)))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _ (invoke "nosetests") #t)))))
-    (home-page "https://github.com/takluyver/terminado")
+           (lambda _ (invoke "pytest" "-vv"))))))
+    (home-page "https://github.com/jupyter/terminado")
     (synopsis "Terminals served to term.js using Tornado websockets")
     (description "This package provides a Tornado websocket backend for the
 term.js Javascript terminal emulator library.")
@@ -2503,6 +2503,53 @@ than Python’s urllib2 library.")
 (define-public python2-requests
   (package-with-python2 python-requests))
 
+(define-public python-requests-unixsocket
+  (package
+    (name "python-requests-unixsocket")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "requests-unixsocket" version))
+       (sha256
+        (base32
+         "1sn12y4fw1qki5gxy9wg45gmdrxhrndwfndfjxhpiky3mwh1lp4y"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'relax-requirements
+           (lambda _
+             (substitute* "test-requirements.txt"
+               (("(.*)==(.*)" _ name) (string-append name "\n")))))
+         (replace 'check
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (add-installed-pythonpath inputs outputs)
+             (invoke "pytest" "-vv"))))))
+    (propagated-inputs
+     `(("python-pbr" ,python-pbr)
+       ("python-requests" ,python-requests)
+       ("python-urllib3" ,python-urllib3)))
+    (native-inputs
+     `(("python-apipkg" ,python-apipkg)
+       ("python-appdirs" ,python-appdirs)
+       ("python-execnet" ,python-execnet)
+       ("python-packaging" ,python-packaging)
+       ("python-pep8" ,python-pep8)
+       ("python-py" ,python-py)
+       ("python-pyparsing" ,python-pyparsing)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-cache" ,python-pytest-cache)
+       ("python-pytest-pep8" ,python-pytest-pep8)
+       ("python-six" ,python-six)
+       ("python-waitress" ,python-waitress)))
+    (home-page "https://github.com/msabramo/requests-unixsocket")
+    (synopsis "Talk HTTP via a UNIX domain socket")
+    (description
+     "This Python package lets you use the @code{requests} library to talk
+HTTP via a UNIX domain socket.")
+    (license license:asl2.0)))
+
 (define-public python-requests_ntlm
   (package
     (name "python-requests_ntlm")
@@ -4489,18 +4536,47 @@ library to create slugs from unicode strings while keeping it DRY.")
     (version "1.1.0")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "tinycss2" version))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Kozea/tinycss2")
+             (commit (string-append "v" version))
+             (recursive? #true)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "12p16k8x8ig51gpfcwz3k3kxpxrwwkn41a1avdgvh3nn8hqarp7v"))))
+        (base32 "0zyc48vbmczpqj7f3f0d7zb3bz29fyj50dg0m6bbwbr5i88kq3sq"))))
     (build-system python-build-system)
     (arguments
-     ;; Test data is missing from the PyPI archive, and the build system is
-     ;; based on Flit, which wants an unmaintained and unpackaged
-     ;; python-pytoml dependency.
-     `(#:tests? #f))
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'build
+           (lambda _
+             ;; A ZIP archive should be generated, but it fails with "ZIP does
+             ;; not support timestamps before 1980".  Luckily,
+             ;; SOURCE_DATE_EPOCH is respected, which we set to some time in
+             ;; 1980.
+             (setenv "SOURCE_DATE_EPOCH" "315532800")
+             (invoke "flit" "build")))
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (add-installed-pythonpath inputs outputs)
+             (let ((out (assoc-ref outputs "out")))
+               (for-each (lambda (wheel)
+                           (format #true wheel)
+                           (invoke "python" "-m" "pip" "install"
+                                   wheel (string-append "--prefix=" out)))
+                         (find-files "dist" "\\.whl$")))))
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (add-installed-pythonpath inputs outputs)
+             (invoke "pytest" "-vv"))))))
     (propagated-inputs
      `(("python-webencodings" ,python-webencodings)))
+    (native-inputs
+     `(("python-flit" ,python-flit)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-cov" ,python-pytest-cov)
+       ("python-pytest-flake8" ,python-pytest-flake8)
+       ("python-pytest-isort" ,python-pytest-isort)))
     (home-page "https://tinycss2.readthedocs.io/")
     (synopsis "Low-level CSS parser for Python")
     (description "@code{tinycss2} can parse strings, return Python objects
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 92ac335272..9da8e47755 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -39,11 +39,11 @@
 ;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au>
 ;;; Copyright © 2017, 2018, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.org>
-;;; Copyright © 2017, 2020 Roel Janssen <roel@gnu.org>
+;;; Copyright © 2017, 2020, 2021 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2017, 2018, 2019 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2017 Muriithi Frederick Muriuki <fredmanglis@gmail.com>
-;;; Copyright © 2017, 2019 Brendan Tildesley <mail@brendan.scot>
+;;; Copyright © 2017, 2019, 2021 Brendan Tildesley <mail@brendan.scot>
 ;;; Copyright © 2018 Ethan R. Jones <ethanrjones97@gmail.com
 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
 ;;; Copyright © 2018 Vijayalakshmi Vedantham <vijimay12@gmail.com>
@@ -60,7 +60,7 @@
 ;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2019 Sam <smbaines8@gmail.com>
 ;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
-;;; Copyright © 2019, 2020 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2019, 2020, 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2019, 2020 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2019 Jacob MacDonald <jaccarmac@gmail.com>
@@ -151,6 +151,7 @@
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages jupyter)
   #:use-module (gnu packages kerberos)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libffi)
@@ -1257,6 +1258,34 @@ Python 3 support.")
                    license:asl2.0       ; packaging is dual ASL2/BSD-2
                    license:bsd-2))))
 
+(define-public python-setuptools-declarative-requirements
+  (package
+    (name "python-setuptools-declarative-requirements")
+    (version "1.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri
+             "setuptools-declarative-requirements"
+             version))
+       (sha256
+        (base32
+         "1l8zmcnp9h8sp8hsw7b81djaa1a9yig0y7i4phh5pihqz1gdn7yi"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-setuptools-scm" ,python-setuptools-scm)))
+    (propagated-inputs
+     `(("python-toml" ,python-toml)
+       ("python-wheel" ,python-wheel)))
+    (home-page
+     "https://github.com/s0undt3ch/setuptools-declarative-requirements")
+    (synopsis "File support for setuptools declarative setup.cfg")
+    (description
+     "This package provides file support for setuptools declarative
+@code{setup.cfg}.")
+    (license license:asl2.0)))
+
 ;; The setuptools provided by Python 3.7.4 is too new for Tensorflow.
 (define-public python-setuptools-for-tensorflow
   (hidden-package
@@ -1965,12 +1994,34 @@ human-friendly syntax.")
     (build-system python-build-system)
     (home-page "https://github.com/scour-project/scour")
     (synopsis "Scour is an SVG optimizer/cleaner written in Python")
-    (description "The goal of Scour is to output a file that renderes
+    (description "The goal of Scour is to output a file that renders
 identically at a fraction of the size by removing a lot of redundant
 information created by most SVG editors.  Optimization options are typically
 lossless but can be tweaked for more aggressive cleaning.")
     (license license:asl2.0)))
 
+(define-public python-mappy
+  (package
+   (name "python-mappy")
+   (version "2.18")
+   (source (origin
+            (method url-fetch)
+            (uri (pypi-uri "mappy" version))
+            (sha256
+             (base32
+              "1a05p7rkmxa6qhm108na8flzj2v45jab06drk59kzk1ip2sgvzqq"))))
+   (build-system python-build-system)
+   (native-inputs
+    `(("python-cython" ,python-cython)))
+   (inputs
+    `(("zlib" ,zlib)))
+   (home-page "https://github.com/lh3/minimap2")
+   (synopsis "Python binding for minimap2")
+   (description "This package provides a convenient interface to minimap2,
+a fast and accurate C program to align genomic and transcribe nucleotide
+sequences.")
+   (license license:expat)))
+
 (define-public python-mechanize
   (package
     (name "python-mechanize")
@@ -2994,6 +3045,25 @@ cutting and pasting that code over and over.")
 (define-public python2-kitchen
   (package-with-python2 python-kitchen))
 
+(define-public python-roman
+  (package
+    (name "python-roman")
+    (version "3.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "roman" version))
+       (sha256
+        (base32
+         "0gyp2bmw47jgpm8j64gydzqq838bgxz5gh6cm57lxlr7p26sqiic"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/zopefoundation/roman")
+    (synopsis "Integer to Roman numerals converter")
+    (description
+     "This package provides a small helper library to convert Arabic Numbers
+to Roman Numerals.")
+    (license license:psfl)))
+
 (define-public python-unidecode
   (package
     (name "python-unidecode")
@@ -3694,6 +3764,25 @@ text styles of documentation.")
                  (base32
                   "1zmhnswy0wxfn0xprs9aqsvx2c3kmzfn2wx14q8cv3vpkxdamj4q")))))))
 
+(define-public python-pygments-github-lexers
+  (package
+    (name "python-pygments-github-lexers")
+    (version "0.0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pygments-github-lexers" version))
+       (sha256
+        (base32
+         "0cz14clcc9z4pn79ll8hp3xzgsrfjscak5zfsvlgrz6ngkkmgjma"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-pygments" ,python-pygments)))
+    (home-page "https://github.com/liluo/pygments-github-lexers")
+    (synopsis "Pygments Github custom lexers")
+    (description "This package installs Github custom lexers to Pygments.")
+    (license license:bsd-3)))
+
 (define-public python-bump2version
   (package
     (name "python-bump2version")
@@ -4448,14 +4537,13 @@ provides additional functionality on the produced Mallard documents.")
 (define-public python-cython
   (package
     (name "python-cython")
-    (version "0.29.21")
+    (version "0.29.22")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Cython" version))
        (sha256
-        (base32
-         "1bcwpra7c6k30yvic3sw2v3rq2dr40ypc4zqif6kr52mpn4wnyp5"))))
+        (base32 "01jl3544qwsi8lp6anbl55566xqkjd53x452i7m6gnfilv3q6syz"))))
     (build-system python-build-system)
     ;; we need the full python package and not just the python-wrapper
     ;; because we need libpython3.3m.so
@@ -5396,14 +5484,6 @@ toolkits.")
     (description (package-description python-matplotlib))
     (license (package-license python-matplotlib))))
 
-(define-public python2-matplotlib-documentation
-  (let ((parent (package-with-python2 python-matplotlib-documentation)))
-    (package
-      (inherit parent)
-      (native-inputs
-       (alist-delete "python-sphinx-copybutton"
-                     (package-native-inputs parent))))))
-
 (define-public python-matplotlib-venn
   (package
     (name "python-matplotlib-venn")
@@ -5559,14 +5639,14 @@ a simple netcat replacement with chaining support.")
 (define-public python-pycodestyle
   (package
     (name "python-pycodestyle")
-    (version "2.6.0")
+    (version "2.7.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pycodestyle" version))
        (sha256
         (base32
-         "0bhr6ia0hmgx3nhgibc9pmkzhlh1zcqk707i5fbxgs702ll7v2n5"))))
+         "1vqwmzmjdv331kmfq3q9j3as2x7r2r49lf83r9w4147pdg8c32f3"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -5808,13 +5888,13 @@ the OleFileIO module from PIL, the Python Image Library.")
 (define-public python-pikepdf
   (package
     (name "python-pikepdf")
-    (version "2.9.1")
+    (version "2.10.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pikepdf" version))
        (sha256
-        (base32 "1n53fhdgnq9yxvm2m039vl8l2kg3fkln3pm0wv4rzj0gvpq9rhcr"))))
+        (base32 "09wfj1hjvj3r9gv7ywrqd7h3d0bz64bvils8sm3ghj90jhalb03s"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #false))                ;require python-xmp-toolkit
@@ -7065,13 +7145,6 @@ CLI scripts:
 @end enumerate")
     (license license:bsd-3)))
 
-(define-public python2-ipyparallel
-  (let ((ipyparallel (package-with-python2 python-ipyparallel)))
-    (package/inherit ipyparallel
-      (propagated-inputs
-       `(("python2-futures" ,python2-futures)
-         ,@(package-propagated-inputs ipyparallel))))))
-
 (define-public python-ipython-cluster-helper
   (package
     (name "python-ipython-cluster-helper")
@@ -7164,14 +7237,14 @@ without using the configuration machinery.")
 (define-public python-jupyter-core
   (package
     (name "python-jupyter-core")
-    (version "4.4.0")
+    (version "4.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append (pypi-uri "jupyter_core" version)))
        (sha256
         (base32
-         "1dy083rarba8prn9f9srxq3c7n7vyql02ycrqq306c40lr57aw5s"))))
+         "1d12j5hkff0xiax87pnhmzbsph3jqqzhz16h8xld7z2y4armq0kr"))))
     (build-system python-build-system)
     ;; FIXME: not sure how to run the tests
     (arguments `(#:tests? #f))
@@ -7183,27 +7256,23 @@ without using the configuration machinery.")
      "Jupyter core is the base package on which Jupyter projects rely.")
     (license license:bsd-3)))
 
-(define-public python2-jupyter-core
-  (package-with-python2 python-jupyter-core))
-
 (define-public python-jupyter-client
   (package
     (name "python-jupyter-client")
-    (version "5.2.4")
+    (version "6.1.12")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "jupyter_client" version))
        (sha256
         (base32
-         "0l9mh7ccrpl3lppym3dnky8n1nk7xarzzdcxf4q2s7aw203cpydm"))))
+         "10p7fcgvv9hvz9zical9wk68ks5ssak2ykbzx65wm1k1hk8a3g64"))))
     (build-system python-build-system)
     ;; Tests fail because of missing native python kernel which I assume is
     ;; provided by the ipython package, which we cannot use because it would
     ;; cause a dependency cycle.
     (arguments
      `(#:tests? #f
-
        #:phases (modify-phases %standard-phases
                   (add-after 'unpack 'set-tool-file-names
                     (lambda* (#:key inputs #:allow-other-keys)
@@ -7215,9 +7284,13 @@ without using the configuration machinery.")
     (inputs
      `(("iproute" ,iproute)))
     (propagated-inputs
-     `(("python-pyzmq" ,python-pyzmq)
-       ("python-traitlets" ,python-traitlets)
-       ("python-jupyter-core" ,python-jupyter-core)))
+     `(("python-dateutil" ,python-dateutil)
+       ("python-jupyter-core" ,python-jupyter-core)
+       ("python-pyzmq" ,python-pyzmq)
+       ("python-tornado" ,python-tornado-6)
+       ("python-traitlets" ,python-traitlets)))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
     (home-page "https://jupyter.org/")
     (synopsis "Jupyter protocol implementation and client libraries")
     (description
@@ -7233,13 +7306,13 @@ installing @code{kernelspec}s for use with Jupyter frontends.")
 (define-public python-ipykernel
   (package
     (name "python-ipykernel")
-    (version "5.1.3")
+    (version "5.5.3")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "ipykernel" version))
       (sha256
-       (base32 "1a08y677lpn80qzvv7z0smgggmr5m5ayf0bs6vds47xpxl9sss5k"))))
+       (base32 "02f55cjkp5q64x7ikjxznbxwjpkdmfy237b9kg7dk1pxmzvy90m6"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -7271,38 +7344,6 @@ installing @code{kernelspec}s for use with Jupyter frontends.")
     (synopsis "IPython Kernel for Jupyter")
     (description
      "This package provides the IPython kernel for Jupyter.")
-    (properties `((python2-variant . ,(delay python2-ipykernel))))
-    (license license:bsd-3)))
-
-;; Version 5.x and above no longer support Python 2.
-(define-public python2-ipykernel
-  (package
-    (name "python2-ipykernel")
-    (version "4.10.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "ipykernel" version))
-       (sha256
-        (base32 "1yzmdiy1djsszqp54jzd8ym8h4hpl67zjq83j2kxbkp0rwmlpdzf"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:python ,python-2))
-    (propagated-inputs
-     `(("python2-ipython" ,python2-ipython)
-       ;; imported at runtime during connect
-       ("python2-jupyter-client" ,python2-jupyter-client)
-       ("python2-tornado" ,python2-tornado)
-       ("python2-traitlets" ,python2-traitlets)))
-    (native-inputs
-     `(("python2-mock" ,python2-mock)
-       ("python2-nose" ,python2-nose)
-       ("python2-pytest" ,python2-pytest)
-       ("python2-pytest-cov" ,python2-pytest-cov)))
-    (home-page "https://ipython.org")
-    (synopsis "IPython Kernel for Jupyter")
-    (description
-     "This package provides the IPython kernel for Jupyter.")
     (license license:bsd-3)))
 
 (define-public python-pari-jupyter
@@ -7333,14 +7374,14 @@ installing @code{kernelspec}s for use with Jupyter frontends.")
 (define-public python-backcall
   (package
     (name "python-backcall")
-    (version "0.1.0")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "backcall" version))
        (sha256
         (base32
-         "1r01dqch3f8fdj3n6fviw8hxqrs6w5v0qw4izmvqzry1w9dxiv1q"))))
+         "07jy4562lvnhkk6kfr3cphmizy88anlhmbwb8kdzlz2ypqkvzgaw"))))
     (build-system python-build-system)
     (home-page "https://github.com/takluyver/backcall/")
     (synopsis "Specifications for callback functions passed in to an API")
@@ -7584,24 +7625,69 @@ computing.")
 (define-public python-urwid
   (package
     (name "python-urwid")
-    (version "2.1.0")
+    (version "2.1.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "urwid" version))
        (sha256
         (base32
-         "11ndnhxd41m13darf5s0c6bafdpkzq1l6mfb04wbzdmyc1hg75h8"))))
+         "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
     (build-system python-build-system)
     (home-page "http://urwid.org")
     (synopsis "Console user interface library for Python")
     (description
      "Urwid is a curses-based UI/widget library for Python.  It includes many
 features useful for text console applications.")
+    (properties `((python2-variant . ,(delay python2-urwid))))
     (license license:lgpl2.1+)))
 
 (define-public python2-urwid
-  (package-with-python2 python-urwid))
+  (let ((base (package-with-python2
+               (strip-python2-variant python-urwid))))
+    (package/inherit base
+      (version "2.1.0")
+      (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "urwid" version))
+         (sha256
+          (base32
+           "11ndnhxd41m13darf5s0c6bafdpkzq1l6mfb04wbzdmyc1hg75h8")))))))
+
+(define-public python-urwid-readline
+  (package
+    (name "python-urwid-readline")
+    (version "0.12")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/rr-/urwid_readline")
+              (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0sq5qgxj7gcfww3ww7idr87isnmp0hi36n241b3q395x1zafdv22"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python" "-m" "pytest"))
+             #t)))))
+    (propagated-inputs
+     `(("python-urwid" ,python-urwid)))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (home-page "https://github.com/rr-/urwid_readline")
+    (synopsis "Text input widget for urwid that supports readline shortcuts")
+    (description
+     "This package provides a textbox edit widget for @code{python-urwid} that
+supports @code{readline} shortcuts.")
+    (license license:expat)))
 
 (define-public python-urwidtrees
   (package
@@ -7747,14 +7833,14 @@ the GObject Introspection bindings to libnotify for non-GTK applications.")
 (define-public python-beautifulsoup4
   (package
     (name "python-beautifulsoup4")
-    (version "4.9.1")
+    (version "4.9.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "beautifulsoup4" version))
        (sha256
         (base32
-         "1mvzlw3pzbhsvl3z8784s5h7iiflm2hggiy1fxyrrxwnbc8lvk3k"))))
+         "09gbd49mwz86k572r1231x2rdp82p42zlnw0bz9b9mfi58r9wwl4"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -7790,14 +7876,14 @@ converts incoming documents to Unicode and outgoing documents to UTF-8.")
 (define-public python-soupsieve
   (package
     (name "python-soupsieve")
-    (version "2.0.1")
+    (version "2.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "soupsieve" version))
        (sha256
         (base32
-         "0ch2rhvsbwfpvzm4kzy81rclbzr533yv83hzg1gx55byfa0w37d5"))))
+         "1k70gpn2d3vgdyxbdy536dgm4kchcraxz6lmgsfg3324iy2789q5"))))
     (build-system python-build-system)
     (arguments `(#:tests? #f))
     ;;XXX: 2 tests fail currently despite claming they were to be
@@ -8426,13 +8512,13 @@ applications.")
 (define-public python-pyzmq
   (package
     (name "python-pyzmq")
-    (version "17.1.2")
+    (version "22.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyzmq" version))
        (sha256
-        (base32 "1pyxxrz60f88ffm0y6vpbx3q8jcr9ybz8fcilihwzwhh36n84ax7"))))
+        (base32 "0bgrn65cxfz1c1sjrgyq5dy1mkhppxxbizd5wvrl03cq4zhkrxpp"))))
     (build-system python-build-system)
     (arguments
      `(#:configure-flags
@@ -8515,14 +8601,14 @@ PEP 8.")
 (define-public python-pyflakes
   (package
     (name "python-pyflakes")
-    (version "2.2.0")
+    (version "2.3.1")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "pyflakes" version))
         (sha256
-          (base32
-           "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim"))
+         (base32
+          "1ny10364ciqh4ripasj4zzv4145l21l3s85m3qlrvfq5pk58xg7m"))
         (patches (search-patches "python-pyflakes-fix-tests.patch"))))
     (build-system python-build-system)
     (home-page "https://github.com/PyCQA/pyflakes")
@@ -8562,13 +8648,13 @@ cyclomatic complexity of Python source code.")
 (define-public python-flake8
   (package
     (name "python-flake8")
-    (version "3.8.4")
+    (version "3.9.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "flake8" version))
               (sha256
                (base32
-                "0fvcrsbyzjpcli8ldbpsdbpmf238nkvwc1dy4hy82lf63rvfinma"))))
+                "1w65iyjnrwipv4dbcqxh725ri7mdx01d6pjyggd97c0j5cvkx1vq"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -8641,6 +8727,34 @@ design problems in your program.  It contains warnings that don't belong
 in pyflakes and pycodestyle.")
     (license license:expat)))
 
+(define-public python-flake8-continuation
+  (package
+    (name "python-flake8-continuation")
+    (version "1.0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "flake8-continuation" version))
+       (sha256
+        (base32
+         "0dzaw8jr7yhlabxhrblnrizxx17xa9ngjnbr1kidg5lapq6b9q1y"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-flake8" ,python-flake8)
+       ("python-pycodestyle" ,python-pycodestyle)
+       ("python-six" ,python-six)))
+    (home-page "https://github.com/planetlabs/flake8-continuation")
+    (synopsis "Flake8 Line Continuation Plugin")
+    (description "A Flake8 plugin that checks for the line continuation
+style to be in the preferred method according to PEP-8, specifically:
+@quotation
+The preferred way of wrapping long lines is by using Python's implied
+line continuation inside parentheses, brackets and braces.  Long lines
+can be broken over multiple lines by wrapping expressions in parentheses.
+These should be used in preference to using a backslash for line continuation.
+@end quotation")
+    (license license:asl2.0)))
+
 (define-public python-flake8-implicit-str-concat
   (package
     (name "python-flake8-implicit-str-concat")
@@ -8776,6 +8890,25 @@ first-class forward references that stub files use.")
 lints.")
     (license license:bsd-2)))
 
+(define-public python-flake8-quotes
+  (package
+    (name "python-flake8-quotes")
+    (version "3.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "flake8-quotes" version))
+       (sha256
+        (base32
+         "0ph5s6lxgpzz4an0ax6s5xjqypqmngwr5b1i0h9pqhzghplic49z"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-flake8" ,python-flake8)))
+    (home-page "https://github.com/zheller/flake8-quotes/")
+    (synopsis "Flake8 lint for quotes")
+    (description "This package provides a Flake8 lint for quotes.")
+    (license license:expat)))
+
 (define-public python-autoflake
   (package
     (name "python-autoflake")
@@ -8827,14 +8960,14 @@ Python.")
 (define-public python-markdown
   (package
     (name "python-markdown")
-    (version "3.2.1")
+    (version "3.3.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Markdown" version))
        (sha256
         (base32
-         "00k91gwhxnm8jdnm2v5xjz9irj6dbi7afywz2hpakqdbxs1ydzlh"))))
+         "0jbs73nincha8fkfxx267sfxac6pl0ckszjbqbb8gk4dhs8v9d9i"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-nose" ,python-nose)
@@ -9625,13 +9758,13 @@ implementations of ASN.1-based codecs and protocols.")
 (define-public python-ipaddress
   (package
     (name "python-ipaddress")
-    (version "1.0.22")
+    (version "1.0.23")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "ipaddress" version))
               (sha256
                (base32
-                "0b570bm6xqpjwqis15pvdy6lyvvzfndjvkynilcddjj5x98wfimi"))))
+                "1qp743h30s04m3cg3yk3fycad930jv17q7dsslj4mfw0jlvf1y5p"))))
     (build-system python-build-system)
     (home-page "https://github.com/phihag/ipaddress")
     (synopsis "IP address manipulation library")
@@ -10037,29 +10170,42 @@ Debian-related files, such as:
 (define-public python-nbformat
   (package
     (name "python-nbformat")
-    (version "4.4.0")
+    (version "5.1.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "nbformat" version))
        (sha256
         (base32
-         "00nlf08h8yc4q73nphfvfhxrcnilaqanb8z0mdy6nxk0vzq4wjgp"))))
+         "1j6idwsw59cslsssvlkg2bkfpvd6ri7kghbp14jwcw87sy57h5mm"))))
     (build-system python-build-system)
-    (arguments `(#:tests? #f)) ; no test target
     (propagated-inputs
      `(("python-ipython-genutils" ,python-ipython-genutils)
        ("python-jsonschema" ,python-jsonschema)
        ("python-jupyter-core" ,python-jupyter-core)
        ("python-traitlets" ,python-traitlets)))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
     (home-page "https://jupyter.org")
     (synopsis "Jupyter Notebook format")
     (description "This package provides the reference implementation of the
 Jupyter Notebook format and Python APIs for working with notebooks.")
+    (properties `((python2-variant . ,(delay python2-nbformat))))
     (license license:bsd-3)))
 
 (define-public python2-nbformat
-  (package-with-python2 python-nbformat))
+  (let ((parent (package-with-python2
+                 (strip-python2-variant python-nbformat))))
+    (package
+      (inherit parent)
+      (version "4.4.0")
+      (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "nbformat" version))
+         (sha256
+          (base32
+           "00nlf08h8yc4q73nphfvfhxrcnilaqanb8z0mdy6nxk0vzq4wjgp")))))))
 
 (define-public python-bleach
   (package
@@ -10210,36 +10356,57 @@ time.")
 (define-public python-nbconvert
   (package
     (name "python-nbconvert")
-    (version "5.0.0b1")
+    (version "6.0.7")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "nbconvert" version))
        (sha256
         (base32
-         "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
+         "00lhqaxn481qvk2w5568asqlsnvrw2fm61p1vssx3m7vdnl17g6b"))))
     (build-system python-build-system)
     (arguments
-     `(;; The "bdist_egg" target is disabled by default, causing the installation
-       ;; to fail.
-       #:configure-flags (list "bdist_egg")
-       ;; FIXME: 5 failures, 40 errors.
-       #:tests? #f))
-       ;; #:phases
-       ;; (modify-phases %standard-phases
-       ;;   (replace 'check
-       ;;     (lambda _
-       ;;       (zero? (system* "py.test" "-v")))))
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+
+               ;; This seems to require Chromium.
+               (delete-file "nbconvert/exporters/tests/test_webpdf.py")
+
+               ;; This depends on the python3 kernel, which is provided by a
+               ;; package that depends on nbconvert.
+               (delete-file "nbconvert/preprocessors/tests/test_execute.py")
+
+               ;; Most of these tests fail because nbconvert fails to execute
+               ;; itself.
+               (delete-file "nbconvert/tests/test_nbconvertapp.py")
+
+               ;; One test here fails with an unclear error.  It looks like
+               ;; "%%pylabprint" is supposed to be expanded to some other
+               ;; code, but isn't.
+               (delete-file "nbconvert/filters/tests/test_strings.py")
+               
+               ;; Some tests need HOME
+               (setenv "HOME" "/tmp")
+               (invoke "pytest")))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)))
     (propagated-inputs
      `(("python-bleach" ,python-bleach)
+       ("python-defusedxml" ,python-defusedxml)
        ("python-entrypoints" ,python-entrypoints)
        ("python-jinja2" ,python-jinja2)
        ("python-jupyter-core" ,python-jupyter-core)
        ("python-mistune" ,python-mistune)
+       ("python-nbclient" ,python-nbclient)
        ("python-nbformat" ,python-nbformat)
+       ("python-pandocfilters" ,python-pandocfilters)
        ("python-pygments" ,python-pygments)
+       ("python-jupyterlab-pygments" ,python-jupyterlab-pygments)
+       ("python-testpath" ,python-testpath)
        ("python-traitlets" ,python-traitlets)))
     (home-page "https://jupyter.org")
     (synopsis "Converting Jupyter Notebooks")
@@ -10256,48 +10423,88 @@ convert an @code{.ipynb} notebook file into various static formats including:
 @item ReStructured Text (rst)
 @item executable script
 @end enumerate\n")
-    (license license:bsd-3)))
+    (license license:bsd-3)
+    (properties `((python2-variant . ,(delay python2-nbconvert))))))
 
 (define-public python2-nbconvert
-  (package-with-python2 python-nbconvert))
+  (let ((parent
+         (package-with-python2
+          (strip-python2-variant python-nbconvert))))
+    (package
+      (inherit parent)
+      (version "5.0.0b1")
+      (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "nbconvert" version))
+         (sha256
+          (base32
+           "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
+      (arguments
+       `(;; The "bdist_egg" target is disabled by default, causing the installation
+         ;; to fail.
+         #:configure-flags (list "bdist_egg")
+         ;; FIXME: 5 failures, 40 errors.
+         #:tests? #f))
+      (propagated-inputs
+       `(("python-bleach" ,python-bleach)
+         ("python-entrypoints" ,python-entrypoints)
+         ("python-jinja2" ,python-jinja2)
+         ("python-jupyter-core" ,python-jupyter-core)
+         ("python-mistune" ,python-mistune)
+         ("python-nbformat" ,python-nbformat)
+         ("python-pygments" ,python-pygments)
+         ("python-traitlets" ,python-traitlets))))))
 
 (define-public python-notebook
   (package
     (name "python-notebook")
-    (version "5.7.4")
+    (version "6.3.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "notebook" version))
               (sha256
                (base32
-                "0jm7324mbxljmn9hgapj66q7swyz5ai92blmr0jpcy0h80x6f26r"))))
+                "0zfwr87ndjzmdp9adpc9lby1hdqdkjp2q7c9vff3wiw1dj6kkjfb"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
              ;; These tests require a browser
              (delete-file-recursively "notebook/tests/selenium")
-             ;; Some tests need HOME
-             (setenv "HOME" "/tmp")
-             ;; This file contains "warningfilters", which are not supported
-             ;; by this version of nose.
-             (delete-file "setup.cfg")
-             (with-directory-excursion "/tmp"
-               (invoke "nosetests" "-v"))
-             #t)))))
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               ;; Some tests need HOME
+               (setenv "HOME" "/tmp")
+               (with-directory-excursion "/tmp"
+                 (invoke "pytest" "-vv"
+                         ;; TODO: This tests fails because nbconvert does not
+                         ;; list "python" as a format.
+                         "-k" "not test_list_formats"))))))))
     (propagated-inputs
-     `(("python-jupyter-core" ,python-jupyter-core)
-       ("python-nbformat" ,python-nbformat)
+     `(("python-argon2-cffi" ,python-argon2-cffi)
+       ("python-ipykernel" ,python-ipykernel)
+       ("python-ipython-genutils" ,python-ipython-genutils)
+       ("python-jinja2" ,python-jinja2)
+       ("python-jupyter-client" ,python-jupyter-client)
+       ("python-jupyter-core" ,python-jupyter-core)
        ("python-nbconvert" ,python-nbconvert)
+       ("python-nbformat" ,python-nbformat)
        ("python-prometheus-client" ,python-prometheus-client)
+       ("python-pyzmq" ,python-pyzmq)
        ("python-send2trash" ,python-send2trash)
-       ("python-terminado" ,python-terminado)))
+       ("python-terminado" ,python-terminado)
+       ("python-tornado" ,python-tornado-6)
+       ("python-traitlets" ,python-traitlets)))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-sphinx" ,python-sphinx)
-       ("python-requests" ,python-requests)))
+     `(("python-coverage" ,python-coverage)
+       ("python-nbval" ,python-nbval)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-cov" ,python-pytest-cov)
+       ("python-requests" ,python-requests)
+       ("python-requests-unixsocket" ,python-requests-unixsocket)))
     (home-page "https://jupyter.org/")
     (synopsis "Web-based notebook environment for interactive computing")
     (description
@@ -10339,11 +10546,7 @@ interactive computing.")
          "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-ipykernel" ,python-ipykernel)
-       ("python-notebook" ,python-notebook)))
-    (native-inputs
-     `(("python-certifi" ,python-certifi)
-       ("python-nose" ,python-nose)))
+     `(("python-notebook" ,python-notebook)))
     (home-page "https://ipython.org")
     (synopsis "IPython HTML widgets for Jupyter")
     (description "This package provides interactive HTML widgets for Jupyter
@@ -10353,22 +10556,26 @@ notebooks.")
 (define-public python-ipywidgets
   (package
     (name "python-ipywidgets")
-    (version "7.5.1")
+    (version "7.6.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ipywidgets" version))
        (sha256
         (base32
-         "15sww2mvnkqlvx55gwa82v05062a8j1xpncnqna4k9sl53hgcig9"))))
+         "1w217j8i53x14l7b05fk300k222zs9vkcjaa1rbrw3sk43k466lz"))))
     (build-system python-build-system)
     (propagated-inputs
-     `(("python-ipython" ,python-ipython)
+     `(("python-ipykernel" ,python-ipykernel)
+       ("python-ipython" ,python-ipython)
+       ("python-jupyterlab-widgets" ,python-jupyterlab-widgets)
+       ("python-nbformat" ,python-nbformat)
        ("python-traitlets" ,python-traitlets)
        ("python-widgetsnbextension" ,python-widgetsnbextension)))
     (native-inputs
-     `(("python-nose" ,python-nose)
-       ("python-pytest" ,python-pytest)))
+     `(("python-mock" ,python-mock)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-cov" ,python-pytest-cov)))
     (home-page "https://ipython.org")
     (synopsis "IPython HTML widgets for Jupyter")
     (description "Ipywidgets are interactive HTML widgets for Jupyter
@@ -10401,36 +10608,6 @@ in the data.")
     (description "This package provides a terminal-based console frontend for
 Jupyter kernels.  It also allows for console-based interaction with non-Python
 Jupyter kernels such as IJulia and IRKernel.")
-    (properties `((python2-variant . ,(delay python2-jupyter-console))))
-    (license license:bsd-3)))
-
-(define-public python2-jupyter-console
-  (package
-    (name "python2-jupyter-console")
-    (version "5.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "jupyter_console" version))
-       (sha256
-        (base32
-         "1kam1qzgwr7srhm5r6aj90di5sws4bq0jmiw15452ddamb9yspal"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:python ,python-2
-       #:tests? #f))    ; Tests only run in a TTY.
-    (propagated-inputs
-     `(("python2-ipykernel" ,python2-ipykernel)
-       ("python2-jupyter-client" ,python2-jupyter-client)
-       ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
-       ("python2-pygments" ,python2-pygments)))
-    (native-inputs
-     `(("python2-nose" ,python2-nose)))
-    (home-page "https://jupyter.org")
-    (synopsis "Jupyter terminal console")
-    (description "This package provides a terminal-based console frontend for
-Jupyter kernels.  It also allows for console-based interaction with non-Python
-Jupyter kernels such as IJulia and IRKernel.")
     (license license:bsd-3)))
 
 ;; The python-ipython and python-jupyter-console require each other. To get
@@ -11003,13 +11180,13 @@ minimal and fast API targeting the following uses:
 (define-public python-icalendar
   (package
     (name "python-icalendar")
-    (version "4.0.5")
+    (version "4.0.7")
     (source (origin
              (method url-fetch)
              (uri (pypi-uri "icalendar" version))
              (sha256
               (base32
-               "14ynjj65kfmlcvpb7k097w789wvxncd3cr3xz5m1jz9yl9v6vv5q"))))
+               "19574j3jwssm2dkqykih4568xqfgjsa3hcd79yl5s2vfys3qvh8g"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-dateutil" ,python-dateutil)
@@ -11463,6 +11640,56 @@ Pytest but stripped of Pytest specific details.")
     (propagated-inputs
      `(("python-importlib-metadata" ,python2-importlib-metadata-bootstrap))))))
 
+(define-public python-plumbum
+  (package
+    (name "python-plumbum")
+    (version "1.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "plumbum" version))
+       (sha256
+        (base32 "1kidj821k79dw064rlxh84xamb9h79ychg3pgj81jlvm5hs48xri"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f))                    ;no tests
+    (native-inputs
+     ;; XXX: Not actually used since there are no tests but required for
+     ;; build.
+     `(("python-pytest" ,python-pytest)))
+    (home-page "https://plumbum.readthedocs.io")
+    (synopsis "Python shell combinators library")
+    (description
+     "Plumbum is a library of tools for replacing shell scripts with Python
+code.")
+    (license license:expat)))
+
+(define-public python-deprecation
+  (package
+    (name "python-deprecation")
+    (version "2.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "deprecation" version))
+       (sha256
+        (base32
+         "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-packaging" ,python-packaging)))
+    (native-inputs
+     `(("python-unittest2" ,python-unittest2)))
+    (home-page "https://deprecation.readthedocs.io/")
+    (synopsis "Python library to handle automated deprecations")
+    (description
+     "This is a library that enables automated deprecations.  It offers the
+@code{deprecated()} decorator to wrap functions, providing proper warnings
+both in documentation and via Python’s warnings system, as well as the
+@code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
+that deprecated code is eventually removed.")
+    (license license:asl2.0)))
+
 (define-public python-tox
   (package
     (name "python-tox")
@@ -13101,13 +13328,13 @@ graphviz.")
 (define-public python-fastimport
   (package
     (name "python-fastimport")
-    (version "0.9.8")
+    (version "0.9.9")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "fastimport" version))
         (sha256
-          (base32 "1fb3b7y3sw55f6wykxx478ybkirz0l52lgdqmbhmc0h0jzmyiwmj"))))
+          (base32 "06gk14qgm9dxx3pzjn0ckdbywc8ial2bjfzddqwlr4bn1nnqkbll"))))
     (build-system python-build-system)
     (home-page "https://github.com/jelmer/python-fastimport")
     (synopsis "VCS fastimport parser and generator in Python")
@@ -13204,13 +13431,13 @@ It uses LR parsing and does extensive error checking.")
 (define-public python-tabulate
   (package
     (name "python-tabulate")
-    (version "0.8.7")
+    (version "0.8.9")
     (source (origin
              (method url-fetch)
              (uri (pypi-uri "tabulate" version))
              (sha256
               (base32
-               "01shi7bmj09f0bcm5s0c9skys063lzp76p0n4a2xmg041ni269yv"))))
+               "19qkdz8xwk5jxa5xn53mnk76qnh4ysm81vzj664jw1b0azr167gb"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: The pypi release tarball is missing a 'test/common.py'
@@ -14172,14 +14399,14 @@ relays publish about themselves.")
 (define-public python-pyserial
   (package
     (name "python-pyserial")
-    (version "3.4")
+    (version "3.5")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "pyserial" version))
         (sha256
           (base32
-            "09y68bczw324a4jb9a1cfwrbjhq179vnfkkkrybbksp0vqgl0bbf"))))
+            "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw"))))
     (build-system python-build-system)
     (arguments
      '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
@@ -15431,7 +15658,7 @@ specified to apply on the key before comparison (e.g. @code{string.lower})).")
      ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
      '(#:tests? #f))
     (home-page "https://fdik.org/pyPEG/")
-    (synopsis "Parsering Expression Grammars in Python")
+    (synopsis "Parsing Expression Grammars in Python")
     (description "PyPEG is an intrinsic parser interpreter framework for
 Python.  It is based on Parsing Expression Grammars, PEG.  With pyPEG you can
 parse many formal languages.")
@@ -18217,13 +18444,13 @@ user's @file{~/Trash} directory.")
 (define-public python-yamllint
   (package
     (name "python-yamllint")
-    (version "1.26.0")
+    (version "1.26.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "yamllint" version))
        (sha256
-        (base32 "11qhs1jk9pwvyk5k3q5blh9sq42dh1ywdf1f3i2zixf7hncwir5h"))))
+        (base32 "090krlxj7az0d9yl8i20vjrqi66dfxx7y5xakjhxzsfp7qmldnc7"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-pathspec" ,python-pathspec)
@@ -20373,14 +20600,14 @@ of Python libraries for building Python applications.")
 (define-public python-astor
   (package
     (name "python-astor")
-    (version "0.7.1")
+    (version "0.8.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "astor" version))
        (sha256
         (base32
-         "13gv6f2xz9i564byp21gcpc0l3w4cs23k1wbcam8kky2ls3hvhwm"))))
+         "0ppscdzzvxpznclkmhhj53iz314x3pfv4yc7c6gwxqgljgdgyvka"))))
     (build-system python-build-system)
     ;; FIXME: There are two errors and two test failures.
     (arguments `(#:tests? #f))
@@ -20797,6 +21024,64 @@ by Igor Pavlov.")
 (define-public python2-pylzma
   (package-with-python2 python-pylzma))
 
+(define-public python-ifaddr
+  (package
+    (name "python-ifaddr")
+    (version "0.1.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "ifaddr" version))
+       (sha256
+        (base32
+         "150sxdlicwrphmhnv03ykxplyd2jdrxz0mikgnivavgilrn8m7hz"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _ (invoke "nosetests"))))))
+    (native-inputs
+     `(("python-nose" ,python-nose)))
+    (home-page "https://github.com/pydron/ifaddr")
+    (synopsis "Network interface and IP address enumeration library")
+    (description "This package provides a network interface and IP address
+enumeration library in Python.")
+    (license license:expat)))
+
+(define-public python-zeroconf
+  (package
+    (name "python-zeroconf")
+    (version "0.28.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "zeroconf" version))
+       (sha256
+        (base32
+         "0narq8haa3b375vfblbyil77n8bw0wxqnanl91pl0wwwm884mqjb"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-nose" ,python-nose)))
+    (propagated-inputs
+     `(("python-ifaddr" ,python-ifaddr)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _ ;; Networking isn't available for these tests.
+             (invoke "nosetests" "-v"
+                     "--exclude" "test_integration_with_listener_ipv6"
+                     "--exclude" "test_launch_and_close_v6_only"
+                     "--exclude" "test_launch_and_close_v4_v6"
+                     "--exclude" "test_launch_and_close"))))))
+    (home-page "https://github.com/jstasiak/python-zeroconf")
+    (synopsis "Pure Python mDNS service discovery")
+    (description
+     "Pure Python multicast DNS (mDNS) service discovery library (Bonjour/Avahi
+compatible).")
+    (license license:lgpl2.1+)))
+
 (define-public python2-zeroconf
   (package
     (name "python2-zeroconf")
@@ -21440,17 +21725,85 @@ the syntactic logic to configure and launch jobs in an execution environment.")
 (define-public python-flit
   (package
     (name "python-flit")
-    (version "3.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "flit" version))
-       (sha256
-        (base32
-         "14q8qa48bli2mniznc8b54qkwvhbik4kw99y01fi5gzzl620zzml"))))
+    (version "3.2.0")
+    ;; We fetch the sources via git because on pypi the package is split into
+    ;; two parts: flit and flit_core; flit_core cannot be built without flit.
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/takluyver/flit")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0fpqxpz5bv2xpv1akmc0c8yfss6sj09wdzxrlf3qw1lp1jhbzpyc"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f)) ; XXX: Check requires network access.
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'bootstrap
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((home (string-append (getcwd) "/home")))
+               (mkdir-p home)
+               (setenv "HOME" home))
+             (for-each make-file-writable (find-files "."))
+             (copy-recursively (assoc-ref inputs "python-testpath")
+                               (string-append (getcwd) "/testpath"))
+             (substitute* "pyproject.toml"
+               (("\"testpath\",") ""))
+             (invoke "python" "bootstrap_dev.py")))
+         (replace 'build
+           (lambda _
+             ;; A ZIP archive should be generated, but it fails with "ZIP does
+             ;; not support timestamps before 1980".  Luckily,
+             ;; SOURCE_DATE_EPOCH is respected, which we set to some time in
+             ;; 1980.
+             (setenv "SOURCE_DATE_EPOCH" "315532800")
+             (for-each (lambda (toml)
+                         (invoke "python3" "-m" "flit"
+                                 "--debug" "--ini-file" toml
+                                 "build"))
+                       '("testpath/pyproject.toml"
+                         "pyproject.toml"))
+             (with-directory-excursion "flit_core"
+               (invoke "python" "build_dists.py"))))
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (add-installed-pythonpath inputs outputs)
+             (let ((out (assoc-ref outputs "out")))
+               (delete-file-recursively "./home")
+               (for-each (lambda (wheel)
+                           (format #true wheel)
+                           (invoke "python" "-m" "pip" "install"
+                                   wheel (string-append "--prefix=" out)))
+                         (append
+                          (find-files "flit_core/dist" "\\.whl$")
+                          (find-files "dist" "\\.whl$")))))))
+       #:tests? #f)) ; XXX: Check requires network access.
+    (propagated-inputs
+     `(("python-pytoml" ,python-pytoml)
+       ("python-toml" ,python-toml)))
+    (native-inputs
+     `(("python-docutils" ,python-docutils)
+       ("python-responses" ,python-responses)
+       ("python-pygments-github-lexers" ,python-pygments-github-lexers)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-cov" ,python-pytest-cov)
+       ("python-sphinx" ,python-sphinx)
+       ("python-sphinxcontrib-github-alt" ,python-sphinxcontrib-github-alt)
+       ;; This package needs testpath, but testpath also needs flit...
+       ("python-testpath"
+        ,(let ((name "python-testpath")
+               (version "0.4.4"))
+           (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/jupyter/testpath")
+                   (commit version)))
+             (file-name (git-file-name name version))
+             (sha256
+              (base32
+               "1fwv4d3p54xx1x942s104irr35lszvv6jnr4nn1scsfvc0m1qmbk")))))))
     (home-page "https://flit.readthedocs.io/")
     (synopsis
      "Simple packaging tool for simple packages")
@@ -23331,12 +23684,12 @@ dates in almost any string formats commonly found on web pages.")
              ;; This invokation is taken from tox.ini.
              (invoke "nosetests" "-d" "-v" "tests/"))))))
     (home-page "https://github.com/akesterson/dpath-python")
-    (synopsis "Filesystem-like pathing and searching for dictionaries")
+    (synopsis "File-system-like pathing and searching for dictionaries")
     (description
      "@code{python-dpath} is a library for accessing and searching
 dictionaries via /slashed/paths ala xpath.
 
-Basically it lets you glob over a dictionary as if it were a filesystem.  It
+Basically it lets you glob over a dictionary as if it were a file system.  It
 allows you to specify globs (ala the bash eglob syntax, through some advanced
 fnmatch.fnmatch magic) to access dictionary elements, and provides some
 facility for filtering those results.")
@@ -23552,12 +23905,34 @@ cleanly print different types of messages.")
       "NestedText is a file format for holding data that is to be entered, edited, or
 viewed by people.  It allows data to be organized into a nested collection of
 dictionaries, lists, and strings.  In this way it is similar to JSON and YAML, but
-without the complexity and risk of YAML and without the syntatic clutter of JSON.
+without the complexity and risk of YAML and without the syntactic clutter of JSON.
 NestedText is both simple and natural.  Only a small number of concepts and rules must
 be kept in mind when creating it.  It is easily created, modified, or viewed with
 a text editor and easily understood and used by both programmers and non-programmers.")
     (license license:expat))) ; MIT license
 
+(define-public python-nest-asyncio
+  (package
+    (name "python-nest-asyncio")
+    (version "1.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "nest_asyncio" version))
+       (sha256
+        (base32
+         "1anha29fcijminn5bh2icnx8x7nk39lna9wkc72262i12p2s3idg"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/erdewit/nest_asyncio")
+    (synopsis "Patch asyncio to allow nested event loops")
+    (description
+     "By design @code{asyncio} does not allow its event loop to be nested.
+This presents a practical problem: when in an environment where the event loop
+is already running it's impossible to run tasks and wait for the result.  This
+module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
+@code{loop.run_until_complete}.")
+    (license license:bsd-3)))
+
 (define-public python-parallel
   (package
     (name "python-parallel")
@@ -24136,3 +24511,164 @@ number of words, syllables, and sentences.")
      "This package provides a Python library that can parse OPML, FOAF, and
 iGoogle subscription lists.")
     (license license:expat)))
+
+(define-public python-smartypants
+  (package
+    (name "python-smartypants")
+    (version "2.0.1")
+    (source
+     (origin
+       ;; There's no source tarball for 2.0.1 on PyPI.
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/leohemsted/smartypants.py")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "00p1gnb9pzb3svdq3c5b9b332gsp50wrqqa39gj00m133zadanjp"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           ;; Its `setup.py test` doesn't report failure with exit status, so
+           ;; we use `nose` instead.
+           (lambda _
+             (invoke "nosetests" "-v" "--exclude=^load_tests$"))))))
+    (native-inputs
+     ;; For tests.
+     `(("python-docutils" ,python-docutils)
+       ("python-nose" ,python-nose)
+       ("python-pygments" ,python-pygments)))
+    (home-page "https://github.com/leohemsted/smartypants.py")
+    (synopsis "Translate punctuation characters into smart quotes")
+    (description
+     "@command{smartpants} can perform the following transformations:
+@enumerate
+@item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
+@item Backticks-style quotes (``like this'') into \"curly\" quote HTML
+entities
+@item Dashes (-- and ---) into en- and em-dash entities
+@item Three consecutive dots (... or . . .) into an ellipsis entity
+@end enumerate")
+    (license license:bsd-3)))
+
+(define-public python-typogrify
+  (package
+    (name "python-typogrify")
+    (version "2.0.7")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "typogrify" version))
+              (sha256
+               (base32
+                "0f6b2gnnxjbx1fbmkcscc6qjr4hi78kwm1wx4b766ha3va66dr4b"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (invoke "nosetests" "-v"))))))
+    (propagated-inputs
+     `(("python-smartypants" ,python-smartypants)))
+    (native-inputs
+     ;; For tests.
+     `(("python-nose" ,python-nose)))
+    (home-page "https://github.com/mintchaos/typogrify")
+    (synopsis "Filters to transform text into typographically-improved HTML")
+    (description
+     "@code{typogrify} provides a set of custom filters that automatically
+apply various transformations to plain text in order to yield
+typographically-improved HTML.  While often used in conjunction with Jinja and
+Django template systems, the filters can be used in any environment.")
+    (license license:bsd-3)))
+
+(define-public python-ld
+  (package
+    (name "python-ld")
+    (version "0.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "ld" version))
+       (sha256
+        (base32
+         "1k4ydp5rgkv4985v459kcl06i1igjm1ywvh2vkbi9ck1zyyri1z5"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-six" ,python-six)))
+    (home-page "https://github.com/nir0s/ld")
+    (synopsis "OS platform information API")
+    (description
+     "The ld package provides information about the GNU/Linux distribution it
+runs on, such as a reliable machine-readable ID, or version information.")
+    (license license:asl2.0)))
+
+(define-public python-quicktions
+  (package
+    (name "python-quicktions")
+    (version "1.11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "quicktions" version))
+       (sha256
+        (base32
+         "1px21a6x527i1bsr2p6bbf3jziqpvd1vjkvvzh13gsy4iip0yvzn"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; This file is generated by Cython.
+           (delete-file "src/quicktions.c") #t))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'cythonize-sources
+           (lambda _
+             (with-directory-excursion "src"
+               (invoke "cython" "quicktions.pyx"))))
+         (replace 'check
+           (lambda* (#:key tests? inputs outputs #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "pytest"))
+             #t)))))
+    (native-inputs
+     `(("python-cython" ,python-cython)
+       ("python-pytest" ,python-pytest)))
+    (home-page "https://github.com/scoder/quicktions")
+    (synopsis "Fast fractions data type for rational numbers")
+    (description
+     "This package provides fast fractions data type for rational numbers.  It
+is the cythonized version of @code{fractions.Fraction}.")
+    (license license:psfl)))
+
+(define-public python-pathvalidate
+  (package
+    (name "python-pathvalidate")
+    (version "2.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pathvalidate" version))
+       (sha256
+        (base32 "0s14ycjgb44lxr2wg8lrq3b7kybmmrbf7yqz47xrqgn2gr6dk6rw"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:tests? #f))
+    ;; Tests disabled because of circular dependencies.
+    ;; pathvalidate tests depend on pytest-md-report, which
+    ;; depends on pathvalidate.
+    (native-inputs
+     `(("python-allpairspy" ,python-allpairspy)
+       ("python-click" ,python-click)
+       ("python-faker" ,python-faker)
+       ("python-pytest" ,python-pytest)))
+    (home-page "https://github.com/thombashi/pathvalidate")
+    (synopsis "Sanitize strings representing paths")
+    (description
+     "@code{pathvalidate} is a Python library to sanitize/validate strings
+representing paths or filenames.")
+    (license license:expat)))
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index d718b520bd..fb1a3b598e 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -20,6 +20,7 @@
 ;;; Copyright © 2020 Jonathan Brielmaier <jonathan.brielmaier@web.de>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -88,6 +89,7 @@
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages regex)
   #:use-module (gnu packages ruby)
@@ -277,210 +279,6 @@ other text such as code.  The syntax uses the syntax of the Django template
 system, and the core design of Django is reused in Grantlee.")
     (license license:lgpl2.1+)))
 
-(define-public qt-4
-  (package
-    (name "qt")
-    (version "4.8.7")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "http://download.qt-project.org/archive/qt/"
-                                 (string-copy version 0 (string-rindex version #\.))
-                                 "/" version
-                                 "/qt-everywhere-opensource-src-"
-                                 version ".tar.gz"))
-             (sha256
-              (base32
-               "183fca7n7439nlhxyg1z7aky0izgbyll3iwakw4gwivy16aj5272"))
-             (patches (search-patches "qt4-ldflags.patch"))
-             (modules '((guix build utils)))
-             (snippet
-              ;; Remove webkit module, which is not built.
-              '(begin (delete-file-recursively "src/3rdparty/webkit")
-                      #t))))
-    (build-system gnu-build-system)
-    (propagated-inputs
-     `(("mesa" ,mesa)))
-    (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("bluez" ,bluez)
-       ("cups" ,cups)
-       ("dbus" ,dbus)
-       ("double-conversion" ,double-conversion)
-       ("expat" ,expat)
-       ("fontconfig" ,fontconfig)
-       ("freetype" ,freetype)
-       ("glib" ,glib)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("icu4c" ,icu4c)
-       ("jasper" ,jasper)
-       ("libinput" ,libinput-minimal)
-       ("libmng" ,libmng)
-       ("libpci" ,pciutils)
-       ("libpng" ,libpng)
-       ("libtiff" ,libtiff)
-       ("libwebp" ,libwebp)
-       ("libx11" ,libx11)
-       ("libxcomposite" ,libxcomposite)
-       ("libxcursor" ,libxcursor)
-       ("libxext" ,libxext)
-       ("libxfixes" ,libxfixes)
-       ("libxi" ,libxi)
-       ("libxinerama" ,libxinerama)
-       ("libxkbcommon" ,libxkbcommon)
-       ("libxml2" ,libxml2)
-       ("libxrandr" ,libxrandr)
-       ("libxrender" ,libxrender)
-       ("libxslt" ,libxslt)
-       ("libxtst" ,libxtst)
-       ("mtdev" ,mtdev)
-       ("mariadb-dev" ,mariadb "dev")
-       ("nss" ,nss)
-       ("postgresql" ,postgresql)
-       ("pulseaudio" ,pulseaudio)
-       ("pcre2" ,pcre2)
-       ("sqlite" ,sqlite)
-       ("udev" ,eudev)
-       ("unixodbc" ,unixodbc)
-       ("wayland" ,wayland)
-       ("xcb-util" ,xcb-util)
-       ("xcb-util-image" ,xcb-util-image)
-       ("xcb-util-keysyms" ,xcb-util-keysyms)
-       ("xcb-util-renderutil" ,xcb-util-renderutil)
-       ("xcb-util-wm" ,xcb-util-wm)
-       ("zlib" ,zlib)
-       ("libjpeg" ,libjpeg-turbo)
-       ("libsm" ,libsm)
-       ("openssl" ,openssl-1.0)))
-    (native-inputs
-     `(;; XXX: The JavaScriptCore engine does not build with the C++11 standard.
-       ;; We could build it with -std=gnu++98, but then we'll get in trouble with
-       ;; ICU later.  Just keep using GCC 5 for now.
-       ("gcc@5" ,gcc-5)
-       ("bison" ,bison)
-       ("flex" ,flex)
-       ("gperf" ,gperf)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python-2)
-       ("ruby" ,ruby)
-       ("which" ,(@ (gnu packages base) which))))
-    ;; Note: there are 37 MiB of examples and a '-exampledir' configure flags,
-    ;; but we can't make them a separate output because "out" and "examples"
-    ;; would refer to each other.
-    (outputs '("out"                             ;112MiB core + 37MiB examples
-               "doc"))                           ;280MiB of HTML + code
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'set-paths 'hide-default-gcc
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((gcc (assoc-ref inputs "gcc")))
-               ;; Remove the default GCC from CPLUS_INCLUDE_PATH to prevent
-               ;; conflicts with the GCC 5 input.
-               (setenv "CPLUS_INCLUDE_PATH"
-                       (string-join
-                        (delete (string-append gcc "/include/c++")
-                                (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
-                        ":"))
-               #t)))
-         (replace
-          'configure
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out"))
-                  (doc (assoc-ref outputs "doc")))
-              (substitute* '("configure")
-                (("/bin/pwd") (which "pwd")))
-              (substitute* "src/corelib/global/global.pri"
-                (("/bin/ls") (which "ls")))
-
-              (invoke
-                "./configure"
-                "-verbose"
-                "-prefix" out
-                "-nomake" "examples demos"
-                ;; Note: Don't pass '-docdir' since 'qmake' and
-                ;; libQtCore would record its value, thereby defeating
-                ;; the whole point of having a separate output.
-                "-datadir" (string-append out "/share/qt-" ,version
-                                          "/data")
-                "-importdir" (string-append out "/lib/qt-4"
-                                            "/imports")
-                "-plugindir" (string-append out "/lib/qt-4"
-                                            "/plugins")
-                "-translationdir" (string-append out "/share/qt-" ,version
-                                                 "/translations")
-                "-demosdir"    (string-append out "/share/qt-" ,version
-                                              "/demos")
-                "-examplesdir" (string-append out "/share/qt-" ,version
-                                              "/examples")
-                "-opensource"
-                "-confirm-license"
-                ;; explicitly link with dbus instead of dlopening it
-                "-dbus-linked"
-                ;; Skip the webkit module; it fails to build on armhf
-                ;; and, apart from that, may pose security risks.
-                "-no-webkit"
-                ;; don't use the precompiled headers
-                "-no-pch"
-                ;; drop special machine instructions not supported
-                ;; on all instances of the target
-                ,@(if (string-prefix? "x86_64"
-                                      (or (%current-target-system)
-                                          (%current-system)))
-                      '()
-                      '("-no-mmx"
-                        "-no-3dnow"
-                        "-no-sse"
-                        "-no-sse2"))
-                "-no-sse3"
-                "-no-ssse3"
-                "-no-sse4.1"
-                "-no-sse4.2"
-                "-no-avx"))))
-         (add-after
-          'install 'move-doc
-          (lambda* (#:key outputs #:allow-other-keys)
-            ;; Because of qt4-documentation-path.patch, documentation ends up
-            ;; being installed in OUT.  Move it to the right place.
-            (let* ((out    (assoc-ref outputs "out"))
-                   (doc    (assoc-ref outputs "doc"))
-                   (olddoc (string-append out "/doc"))
-                   (docdir (string-append doc "/share/doc/qt-" ,version)))
-              (mkdir-p (dirname docdir))
-
-              ;; Note: We can't use 'rename-file' here because OUT and DOC are
-              ;; different "devices" due to bind-mounts.
-              (copy-recursively olddoc docdir)
-              (delete-file-recursively olddoc)
-              #t))))))
-    (native-search-paths
-     (list (search-path-specification
-            (variable "QMAKEPATH")
-            (files '("lib/qt5")))
-           (search-path-specification
-            (variable "QML2_IMPORT_PATH")
-            (files '("lib/qt5/qml")))
-           (search-path-specification
-            (variable "QT_PLUGIN_PATH")
-            (files '("lib/qt5/plugins")))
-           (search-path-specification
-            (variable "XDG_DATA_DIRS")
-            (files '("share")))
-           (search-path-specification
-            (variable "XDG_CONFIG_DIRS")
-            (files '("etc/xdg")))))
-    (home-page "https://www.qt.io/")
-    (synopsis "Cross-platform GUI library")
-    (description "Qt is a cross-platform application and UI framework for
-developers using C++ or QML, a CSS & JavaScript like language.")
-    (license (list license:lgpl2.1 license:lgpl3))
-
-    ;; Qt 4: 'QBasicAtomicPointer' leads to build failures on MIPS;
-    ;; see <http://hydra.gnu.org/build/112828>.
-    ;; Qt 5: assembler error; see <http://hydra.gnu.org/build/112526>.
-    (supported-systems (delete "mips64el-linux" %supported-systems))))
-
 (define (qt5-urls component version)
   "Return a list of URLs for VERSION of the Qt5 COMPONENT."
   ;; We can't use a mirror:// scheme because these URLs are not exact copies:
@@ -2011,6 +1809,42 @@ and binaries removed, and adds modular support for using system libraries.")
 (define-public python-sip
   (package
     (name "python-sip")
+    (version "5.5.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (list (pypi-uri "sip" version)
+                   (string-append "https://www.riverbankcomputing.com/static/"
+                                  "Downloads/sip/" version
+                                  "/sip-" version ".tar.gz")))
+        (sha256
+         (base32
+          "1idaivamp1jvbbai9yzv471c62xbqxhaawccvskaizihkd0lq0jx"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python" ,python-wrapper)))
+    (propagated-inputs
+     `(("python-toml" ,python-toml)
+       ("python-packaging" ,python-packaging)))
+    (home-page "https://www.riverbankcomputing.com/software/sip/intro")
+    (synopsis "Python binding creator for C and C++ libraries")
+    (description
+     "SIP is a tool to create Python bindings for C and C++ libraries.  It
+was originally developed to create PyQt, the Python bindings for the Qt
+toolkit, but can be used to create bindings for any C or C++ library.
+
+SIP comprises a code generator and a Python module.  The code generator
+processes a set of specification files and generates C or C++ code, which
+is then compiled to create the bindings extension module.  The SIP Python
+module provides support functions to the automatically generated code.")
+    ;; There is a choice between a python like license, gpl2 and gpl3.
+    ;; For compatibility with pyqt, we need gpl3.
+    (license license:gpl3)))
+
+(define-public python-sip-4
+  (package
+    (inherit python-sip)
+    (name "python-sip")
     (version "4.19.24")
     (source
       (origin
@@ -2025,6 +1859,7 @@ and binaries removed, and adds modular support for using system libraries.")
     (build-system gnu-build-system)
     (native-inputs
      `(("python" ,python-wrapper)))
+    (propagated-inputs `())
     (arguments
      `(#:tests? #f ; no check target
        #:imported-modules ((guix build python-build-system)
@@ -2047,27 +1882,8 @@ and binaries removed, and adds modular support for using system libraries.")
                        "--bindir" bin
                        "--destdir" lib
                        "--incdir" include)))))))
-    (home-page "https://www.riverbankcomputing.com/software/sip/intro")
-    (synopsis "Python binding creator for C and C++ libraries")
-    (description
-     "SIP is a tool to create Python bindings for C and C++ libraries.  It
-was originally developed to create PyQt, the Python bindings for the Qt
-toolkit, but can be used to create bindings for any C or C++ library.
-
-SIP comprises a code generator and a Python module.  The code generator
-processes a set of specification files and generates C or C++ code, which
-is then compiled to create the bindings extension module.  The SIP Python
-module provides support functions to the automatically generated code.")
-    ;; There is a choice between a python like license, gpl2 and gpl3.
-    ;; For compatibility with pyqt, we need gpl3.
     (license license:gpl3)))
 
-(define-public python2-sip
-  (package/inherit python-sip
-    (name "python2-sip")
-    (native-inputs
-     `(("python" ,python-2)))))
-
 (define-public python-pyqt
   (package
     (name "python-pyqt")
@@ -2081,17 +1897,17 @@ module provides support functions to the automatically generated code.")
                    (string-append "https://www.riverbankcomputing.com/static/"
                                   "Downloads/PyQt5/" version "/PyQt5-"
                                   version ".tar.gz")))
-        (file-name (string-append "PyQt5-"version ".tar.gz"))
+        (file-name (string-append "PyQt5-" version ".tar.gz"))
         (sha256
          (base32
           "1z74295i69cha52llsqffzhb5zz7qnbjc64h8qg21l91jgf0harp"))
-       (patches (search-patches "pyqt-configure.patch"
-                                "pyqt-public-sip.patch"))))
+        (patches (search-patches "pyqt-configure.patch"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("qtbase" ,qtbase))) ; for qmake
     (propagated-inputs
-     `(("python-sip" ,python-sip)))
+     `(("python-sip" ,python-sip)
+       ("python-pyqt5-sip" ,python-pyqt5-sip)))
     (inputs
      `(("python" ,python-wrapper)
        ("qtbase" ,qtbase)
@@ -2160,6 +1976,25 @@ framework.  The bindings are implemented as a set of Python modules and
 contain over 620 classes.")
     (license license:gpl3)))
 
+(define-public python-pyqt5-sip
+  (package
+    (name "python-pyqt5-sip")
+    (version "12.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "PyQt5_sip" version))
+       (sha256
+        (base32
+         "1gg032ys4pccwkdzmdryadc9a4lq85nr05pag9swrsdykbdl9s9h"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f)) ;; No test code.
+    (home-page "https://www.riverbankcomputing.com/software/sip/")
+    (synopsis "Sip module support for PyQt5")
+    (description "Sip module support for PyQt5")
+    (license license:lgpl2.1+)))
+
 (define-public python-pyqtwebengine
   (package
     (name "python-pyqtwebengine")
@@ -2253,85 +2088,28 @@ itself.")
     (inputs
      (alist-delete "qtwebkit" (package-inputs python-pyqt)))))
 
-(define-public python2-pyqt
-  (package/inherit python-pyqt
-    (name "python2-pyqt")
-    (propagated-inputs
-     `(("python-enum34" ,python2-enum34)
-       ("python-sip" ,python2-sip)))
-    (native-inputs
-     `(("python-sip" ,python2-sip)
-       ("qtbase" ,qtbase)))
-    (inputs
-     `(("python" ,python-2)
-       ("python2-enum34" ,python2-enum34)
-       ,@(alist-delete "python" (package-inputs python-pyqt))))))
-
-(define-public python2-pyqtwebengine
-  (package/inherit
-   python-pyqtwebengine
-   (name "python2-pyqtwebengine")
-   (native-inputs
-    `(("python" ,python-2)
-      ("python-sip" ,python2-sip)
-      ;; qtbase is required for qmake
-      ("qtbase" ,qtbase)))
+(define-public python-pyqt-builder
+  (package
+   (name "python-pyqt-builder")
+   (version "1.9.0")
+   (source
+    (origin
+     (method url-fetch)
+     (uri (pypi-uri "PyQt-builder" version))
+     (sha256
+      (base32
+       "0nh0054c54ji3sm6d268fccf0y5f613spswwgwqd3rnn816hnljl"))))
+   (build-system python-build-system)
    (inputs
-    `(("python" ,python-2)
-      ("python-sip" ,python2-sip)
-      ("python-pyqt" ,python2-pyqt)
-      ("qtbase" ,qtbase)
-      ("qtsvg" ,qtsvg)
-      ("qtdeclarative" ,qtdeclarative)
-      ("qtwebchannel" ,qtwebchannel)
-      ("qtwebengine" ,qtwebengine)))))
-
-(define-public python2-pyqt-4
-  (package (inherit python-pyqt)
-    (name "python2-pyqt")
-    (version "4.12.3")
-    (source
-      (origin
-        (method url-fetch)
-        (uri
-          (string-append "mirror://sourceforge/pyqt/PyQt4/"
-                         "PyQt-" version "/PyQt4_gpl_x11-"
-                         version ".tar.gz"))
-        (sha256
-         (base32
-          "0wnlasg62rm5d39nq1yw4namcx2ivxgzl93r5f2vb9s0yaz5l3x0"))))
-    (native-inputs
-     `(("qt" ,qt-4)))
-    (inputs `(("python" ,python-2)))
-    (propagated-inputs
-     `(("python-sip" ,python2-sip)))
-    (arguments
-     `(#:tests? #f ; no check target
-       #:modules ((srfi srfi-1)
-                  ,@%gnu-build-system-modules)
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin"))
-                    (sip (string-append out "/share/sip"))
-                    (python (assoc-ref inputs "python"))
-                    (python-version
-                      (last (string-split python #\-)))
-                    (python-major+minor
-                      (string-join
-                        (take (string-split python-version #\.) 2)
-                        "."))
-                    (lib (string-append out "/lib/python"
-                                        python-major+minor
-                                        "/site-packages")))
-               (invoke "python" "configure.py"
-                       "--confirm-license"
-                       "--bindir" bin
-                       "--destdir" lib
-                       "--sipdir" sip)))))))
-    (license (list license:gpl2 license:gpl3)))) ; choice of either license
+    `(("python-sip" ,python-sip)))
+   (home-page "https://www.riverbankcomputing.com/static/Docs/PyQt-builder/")
+   (synopsis "PEP 517 compliant PyQt build system")
+   (description "PyQt-builder is a tool for generating Python bindings for C++
+libraries that use the Qt application framework.  The bindings are built on
+top of the PyQt bindings for Qt.  PyQt-builder is used to build PyQt itself.")
+   ;; Either version 2 or 3, but no other version. See the file
+   ;; 'pyqtbuild/builder.py' in the source distribution for more information.
+   (license (list license:gpl2 license:gpl3))))
 
 (define-public python-qtpy
   (package
diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm
index ff694cecd8..36472fe966 100644
--- a/gnu/packages/radio.scm
+++ b/gnu/packages/radio.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2020 Charlie Ritter <chewzerita@posteo.net>
 ;;; Copyright © 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 João Pedro Simas <jpsimas@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,6 +29,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
@@ -35,6 +37,7 @@
   #:use-module (gnu packages bash)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages documentation)
@@ -48,14 +51,17 @@
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages golang)
+  #:use-module (gnu packages gps)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages javascript)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages logging)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages mp3)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages networking)
@@ -67,6 +73,7 @@
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages sdl)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages swig)
   #:use-module (gnu packages tcl)
@@ -165,6 +172,53 @@ To install the rtl-sdr udev rules, you must extend 'udev-service-type' with
 this package.  E.g.: @code{(udev-rules-service 'rtl-sdr rtl-sdr)}")
     (license license:gpl2+)))
 
+(define-public airspyhf
+  (package
+    (name "airspyhf")
+    (version "1.6.8")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/airspy/airspyhf")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0n699i5a9fzzhf80fcjlqq6p2a013rzlwmwv4nmwfafy6c8cr924"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("libusb" ,libusb)))
+    (arguments
+     '(#:configure-flags '("-DINSTALL_UDEV_RULES=ON")
+       #:tests? #f ; No tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "tools/CMakeLists.txt"
+               (("DESTINATION \"/etc/udev/")
+                (string-append "DESTINATION \""
+                               (assoc-ref outputs "out")
+                               "/lib/udev/")))))
+         (add-after 'fix-paths 'fix-udev-rules
+           (lambda _
+             (substitute* "tools/52-airspyhf.rules"
+               ;; The plugdev group does not exist; use dialout as in
+               ;; the hackrf package.
+               (("GROUP=\"plugdev\"")
+                "GROUP=\"dialout\"")))))))
+    (home-page "https://github.com/airspy/airspyhf")
+    (synopsis "Software defined radio driver for Airspy HF+")
+    (description
+     "This package provides the driver and utilities for controlling the Airspy
+HF+ Software Defined Radio (SDR) over USB.
+
+To install the airspyhf udev rules, you must extend @code{udev-service-type}
+with this package.  E.g.: @code{(udev-rules-service 'airspyhf airspyhf)}")
+    (license license:bsd-3)))
+
 (define-public chirp
   (package
     (name "chirp")
@@ -286,36 +340,31 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
 (define-public gnuradio
   (package
     (name "gnuradio")
-    (version "3.8.0.0")
+    (version "3.9.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.gnuradio.org/releases/gnuradio/"
                            "gnuradio-" version ".tar.xz"))
        (sha256
-        (base32 "0aw55gf5549b0fz2qdi7vplcmaf92bj34h40s34b2ycnqasv900r"))
-       (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; Delete bundled volk to use the shared one.
-           (delete-file-recursively "volk")
-           #t))))
+        (base32 "1jvm9xd0l2pz1fww4zii6hl7ccnvy256nrf70ljb594n7j9j49ha"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("doxygen" ,doxygen)
        ("ghostscript" ,ghostscript)
+       ("js-mathjax" ,js-mathjax)
        ("orc" ,orc)
        ("pkg-config" ,pkg-config)
+       ("pybind11" ,pybind11)
        ("python-cheetah" ,python-cheetah)
        ("python-mako" ,python-mako)
        ("python-pyzmq" ,python-pyzmq)
        ("python-scipy" ,python-scipy)
        ("python-sphinx" ,python-sphinx)
-       ("swig" ,swig)
        ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
-                                        texlive-latex-amsmath
-                                        ;; TODO: Add newunicodechar.
-                                        texlive-latex-graphics)))
+                                             texlive-latex-amsmath
+                                             ;; TODO: Add newunicodechar.
+                                             texlive-latex-graphics)))
        ("xorg-server" ,xorg-server-for-tests)))
     (inputs
      `(("alsa-lib" ,alsa-lib)
@@ -329,6 +378,7 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
        ("gsm" ,gsm)
        ("gtk+" ,gtk+)
        ("jack" ,jack-1)
+       ("libsndfile" ,libsndfile)
        ("log4cpp" ,log4cpp)
        ("pango" ,pango)
        ("portaudio" ,portaudio)
@@ -343,6 +393,7 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
        ("python-pyyaml" ,python-pyyaml)
        ("qtbase" ,qtbase)
        ("qwt" ,qwt)
+       ("sdl" ,sdl)
        ("volk" ,volk)
        ("zeromq" ,zeromq)))
     (arguments
@@ -355,7 +406,9 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
                            (guix build glib-or-gtk-build-system)
                            (guix build python-build-system))
        #:configure-flags
-       '("-DENABLE_INTERNAL_VOLK=OFF")
+       (list (string-append "-DMATHJAX2_ROOT="
+                            (assoc-ref %build-inputs "js-mathjax")
+                            "/share/javascript/mathjax"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-paths
@@ -371,8 +424,7 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
              (substitute* "cmake/Modules/GrPython.cmake"
                (("dist-packages")
                 "site-packages"))
-             (substitute* '("gr-vocoder/swig/vocoder_swig.i"
-                            "gr-vocoder/include/gnuradio/vocoder/codec2.h"
+             (substitute* '("gr-vocoder/include/gnuradio/vocoder/codec2.h"
                             "gr-vocoder/include/gnuradio/vocoder/freedv_api.h")
                (("<codec2/")
                 "<"))
@@ -384,6 +436,19 @@ used by RDS Spy, and audio files containing @dfn{multiplex} signals (MPX).")
                                     "/bin/Xvfb :1 &"))
              (setenv "DISPLAY" ":1")
              #t))
+         (replace 'check
+           (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
+             (invoke "ctest" "-j" (if parallel-tests?
+                                      (number->string (parallel-job-count))
+                                      "1")
+                     "--output-on-failure"
+                     ;;disable broken tests
+                     "-E" (string-join
+                           '(;; https://github.com/gnuradio/gnuradio/issues/3871
+                             "qa_header_payload_demux"
+                             ;; https://github.com/gnuradio/gnuradio/issues/4348
+                             "qa_packet_headerparser_b")
+                           "|"))))
          (add-after 'install 'wrap-python
            (assoc-ref python:%standard-phases 'wrap))
          (add-after 'wrap-python 'wrap-glib-or-gtk
@@ -424,40 +489,45 @@ environment.")
     (license license:gpl3+)))
 
 (define-public gnuradio-osmosdr
-  (package
-    (name "gnuradio-osmosdr")
-    (version "0.2.2")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://git.osmocom.org/gr-osmosdr")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "1aqj5cylipmmjh1x1kb2j8262hxq6mi86dgb2zphj94wvsab2ghx"))))
-    (build-system cmake-build-system)
-    (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("python-mako" ,python-mako)
-       ("python-six" ,python-six)
-       ("swig" ,swig)))
-    (inputs
-     `(("boost" ,boost)
-       ("fftwf" ,fftwf)
-       ("gmp" ,gmp)
-       ("gnuradio" ,gnuradio)
-       ("hackrf" ,hackrf)
-       ("log4cpp" ,log4cpp)
-       ("rtl-sdr" ,rtl-sdr)
-       ("volk" ,volk)))
-    (synopsis "GNU Radio block for interfacing with various radio hardware")
-    (description "This is a block for GNU Radio allowing to use a common API
+  ;; No tag for version supporting Gnuradio 3.9; use commit.
+  (let ((commit "a100eb024c0210b95e4738b6efd836d48225bd03")
+        (revision "0"))
+    (package
+      (name "gnuradio-osmosdr")
+      (version (git-version "0.2.3" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://git.osmocom.org/gr-osmosdr")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1pk5gnyznfyy510lbqzg9ijcb1fnhmn547n24aiqyrxd6i6vv1ki"))))
+      (build-system cmake-build-system)
+      (native-inputs
+       `(("doxygen" ,doxygen)
+         ("pkg-config" ,pkg-config)
+         ("pybind11" ,pybind11)
+         ("python" ,python)
+         ("python-mako" ,python-mako)
+         ("python-six" ,python-six)))
+      (inputs
+       `(("airspyhf" ,airspyhf)
+         ("boost" ,boost)
+         ("fftwf" ,fftwf)
+         ("gmp" ,gmp)
+         ("gnuradio" ,gnuradio)
+         ("hackrf" ,hackrf)
+         ("libsndfile" ,libsndfile)
+         ("log4cpp" ,log4cpp)
+         ("rtl-sdr" ,rtl-sdr)
+         ("volk" ,volk)))
+      (synopsis "GNU Radio block for interfacing with various radio hardware")
+      (description "This is a block for GNU Radio allowing to use a common API
 to access different radio hardware.")
-    (home-page "https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR")
-    (license license:gpl3+)))
+      (home-page "https://osmocom.org/projects/gr-osmosdr/wiki/GrOsmoSDR")
+      (license license:gpl3+))))
 
 (define-public libosmo-dsp
   (package
@@ -504,36 +574,39 @@ primitives for SDR (Software Defined Radio).")
     (license license:gpl2+)))
 
 (define-public gnuradio-iqbalance
-  (package
-    (name "gnuradio-iqbalance")
-    (version "0.38.1")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://git.osmocom.org/gr-iqbal")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0ksagwz05p3b0702q7ljq7013xmp0ijp30my9z6s3p7ja8dj42s3"))))
-    (build-system cmake-build-system)
-    (native-inputs
-     `(("doxygen" ,doxygen)
-       ("pkg-config" ,pkg-config)
-       ("python" ,python)
-       ("python-numpy" ,python-numpy)
-       ("python-six" ,python-six)
-       ("swig" ,swig)))
-    (inputs
-     `(("boost" ,boost)
-       ("fftwf" ,fftwf)
-       ("gmp" ,gmp)
-       ("gnuradio" ,gnuradio)
-       ("libosmo-dsp" ,libosmo-dsp)
-       ("log4cpp" ,log4cpp)
-       ("volk" ,volk)))
-    (synopsis "GNU Radio block to correct IQ imbalance")
-    (description
+  ;; No tag for version supporting Gnuradio 3.9; use commit.
+  (let ((commit "fbee239a6fb36dd2fb564f6e6a0d393c4bc844db")
+        (revision "0"))
+    (package
+      (name "gnuradio-iqbalance")
+      (version (git-version "0.38.2" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://git.osmocom.org/gr-iqbal")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "12p193ngcs65nd3lynry119nhv40mikamqkw37wdln7lawx3nw7p"))))
+      (build-system cmake-build-system)
+      (native-inputs
+       `(("doxygen" ,doxygen)
+         ("pkg-config" ,pkg-config)
+         ("pybind11" ,pybind11)
+         ("python" ,python)
+         ("python-numpy" ,python-numpy)
+         ("python-six" ,python-six)))
+      (inputs
+       `(("boost" ,boost)
+         ("fftwf" ,fftwf)
+         ("gmp" ,gmp)
+         ("gnuradio" ,gnuradio)
+         ("libosmo-dsp" ,libosmo-dsp)
+         ("log4cpp" ,log4cpp)
+         ("volk" ,volk)))
+      (synopsis "GNU Radio block to correct IQ imbalance")
+      (description
      "This is a GNU Radio block to correct IQ imbalance in quadrature
 receivers.  It's composed of two main block:
 @itemize
@@ -541,8 +614,8 @@ receivers.  It's composed of two main block:
 @item Optimize: Attempts to auto-detect the phase and amplitude error to feed
 to the fix block above.
 @end itemize")
-    (home-page "https://git.osmocom.org/gr-iqbal/")
-    (license license:gpl3+)))
+      (home-page "https://git.osmocom.org/gr-iqbal/")
+      (license license:gpl3+))))
 
 (define-public gqrx
   (package
@@ -569,6 +642,7 @@ to the fix block above.
        ("gnuradio-iqbalance" ,gnuradio-iqbalance)
        ("gnuradio-osmosdr" ,gnuradio-osmosdr)
        ("jack" ,jack-1)
+       ("libsndfile" ,libsndfile)
        ("log4cpp" ,log4cpp)
        ("portaudio" ,portaudio)
        ("pulseaudio" ,pulseaudio)
@@ -822,7 +896,7 @@ users.")
   (package
     (inherit hamlib)
     (name "wsjtx-hamlib")
-    (version "2.3.0")
+    (version "2.3.1")
     (source
      (origin
        (method git-fetch)
@@ -831,7 +905,7 @@ users.")
              (commit (string-append "wsjtx-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0ampwqs7p0g8pdnwpdrbvwyqag065n96amgb3v4z332nw0nxvm10"))))
+        (base32 "0m4yzjcqs7a1w4lghyyckpkiy96jxdjijddxarqr3a37cl2rz23j"))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -843,20 +917,12 @@ users.")
                            "--with-lua-binding"
                            "--with-python-binding"
                            "--with-tcl-binding"
-                           "--with-xml-support")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-tests
-           (lambda _
-             (substitute* "tests/testloc.c"
-               (("dmmm2dec\\(deg, mmm, nesw\\);")
-                "dmmm2dec(deg, mmm, 0, nesw);"))
-             #t)))))))
+                           "--with-xml-support")))))
 
 (define-public wsjtx
   (package
     (name "wsjtx")
-    (version "2.3.0")
+    (version "2.3.1")
     (source
      (origin
        (method git-fetch)
@@ -865,7 +931,7 @@ users.")
              (commit (string-append "wsjtx-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1qf8r88ssara3pddvd3jpv5phzxwnanvdj00dxgmzq0c2jqcy2a8"))))
+        (base32 "0mdr4l7zii08615yn7z91spnvnqm5i9390bra9lz3aqyxrsiim91"))))
     (build-system qt-build-system)
     (native-inputs
      `(("asciidoc" ,asciidoc)
@@ -1400,3 +1466,112 @@ Compatible hardware/software:
 @item Icom IC-9700
 @end itemize\n")
     (license license:expat)))
+
+(define-public dream
+  (package
+    (name "dream")
+    (version "2.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/drm/dream/" version
+                           "/dream-" version "-svn808.tar.gz"))
+       (sha256
+        (base32 "01dv6gvljz64zrjbr08mybr9aicvpq2c6qskww46lngdjyhk8xs1"))))
+    (build-system qt-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("faad2" ,faad2)
+       ("fftw" ,fftw)
+       ("libsndfile" ,libsndfile)
+       ("libpcap" ,libpcap)
+       ("opus" ,opus)
+       ("pulseaudio" ,pulseaudio)
+       ("qtbase" ,qtbase)
+       ("qtsvg" ,qtsvg)
+       ("qtwebkit" ,qtwebkit)
+       ("qwt" ,qwt)
+       ("speexdsp" ,speexdsp)
+       ("zlib" ,zlib)))
+    (arguments
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (substitute* "dream.pro"
+               (("target\\.path = /usr/bin")
+                (string-append "target.path = "
+                               (assoc-ref outputs "out") "/bin"))
+               (("documentation\\.path = /usr/share/man/man1")
+                (string-append "documentation.path = "
+                               (assoc-ref outputs "out")
+                               "/share/man/man1"))
+               (("/usr/include/pulse/")
+                (string-append (assoc-ref inputs "pulseaudio")
+                               "/include/pulse/"))
+               (("/usr/include/sndfile\\.h")
+                (string-append (assoc-ref inputs "libsndfile")
+                               "/include/sndfile.h"))
+               (("/usr/include/opus/")
+                (string-append (assoc-ref inputs "opus")
+                               "/include/opus/"))
+               (("/usr/include/speex/")
+                (string-append (assoc-ref inputs "speexdsp")
+                               "/include/speex/"))
+               (("/usr/include/qwt/")
+                (string-append (assoc-ref inputs "qwt")
+                               "/include/qwt/"))
+               (("\\$\\$OUT_PWD/include/neaacdec\\.h")
+                (string-append (assoc-ref inputs "faad2")
+                               "/include/neaacdec.h")))))
+         (replace 'configure
+           (lambda _
+             (invoke "qmake"))))))
+    (home-page "https://sourceforge.net/projects/drm/")
+    (synopsis "Digital Radio Mondiale receiver")
+    (description
+     "Dream is a software implementation of a Digital Radio Mondiale (DRM)
+receiver.")
+    (license license:gpl2+)))
+
+(define-public welle-io
+  (package
+    (name "welle-io")
+    (version "2.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/albrechtl/welle.io")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "04fpm6sc431dl9i5h53xpd6k85j22sv8aawl7b6wv2fzpfsd9fwa"))))
+    (build-system qt-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("alsa-lib" ,alsa-lib)
+       ("faad2" ,faad2)
+       ("fftwf" ,fftwf)
+       ("lame" ,lame)
+       ("libusb" ,libusb)
+       ("mpg123" ,mpg123)
+       ("rtl-sdr" ,rtl-sdr)
+       ("qtbase" ,qtbase)
+       ("qtcharts" ,qtcharts)
+       ("qtdeclarative" ,qtdeclarative)
+       ("qtgraphicaleffects" ,qtgraphicaleffects)
+       ("qtmultimedia" ,qtmultimedia)
+       ("qtquickcontrols2" ,qtquickcontrols2)))
+    (arguments
+     `(#:configure-flags '("-DRTLSDR=ON")
+       #:tests? #f))
+    (home-page "https://www.welle.io/")
+    (synopsis "DAB and DAB+ software radio")
+    (description
+     "@code{welle.io} is a Digital Audio Broadcasting (DAB and DAB+) software
+defined radio with support for rtl-sdr.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/rdf.scm b/gnu/packages/rdf.scm
index 0841c1fd8d..0baed8fc17 100644
--- a/gnu/packages/rdf.scm
+++ b/gnu/packages/rdf.scm
@@ -61,7 +61,7 @@
     (version "2.0.15")
     (source (origin
              (method url-fetch)
-             (uri (string-append "http://download.librdf.org/source/" name
+             (uri (string-append "https://download.librdf.org/source/" name
                                  "-" version ".tar.gz"))
              (patches
               (search-patches "raptor2-heap-overflow.patch"))
@@ -76,7 +76,7 @@
        ("zlib" ,zlib)))
     (arguments
      `(#:parallel-tests? #f))
-    (home-page "http://librdf.org/raptor/")
+    (home-page "https://librdf.org/raptor/")
     (synopsis "RDF syntax library")
     (description "Raptor is a C library providing a set of parsers and
 serialisers that generate Resource Description Framework (RDF) triples
diff --git a/gnu/packages/rsync.scm b/gnu/packages/rsync.scm
index f90feaf57f..37b15663b9 100644
--- a/gnu/packages/rsync.scm
+++ b/gnu/packages/rsync.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2012, 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;;
@@ -71,7 +71,7 @@ files in the destination.")
 (define-public librsync
   (package
     (name "librsync")
-    (version "2.3.1")
+    (version "2.3.2")
        (source (origin
             (method git-fetch)
             (uri (git-reference
@@ -80,7 +80,7 @@ files in the destination.")
             (file-name (git-file-name name version))
             (sha256
              (base32
-              "131cd4asmpm4nskidzgiy8xibbnpibvvbq857a0pcky77min5g4z"))))
+              "0bn29npmbw26akc6y54661irpdh6qcivcs6q48cgp3llklhhxp0q"))))
    (build-system cmake-build-system)
    (inputs
     `(("popt" ,popt)))
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 7452745b37..fe76cc260a 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -7117,7 +7117,7 @@ by RuboCop to deal with Ruby's Abstract Syntax Tree (AST), in particular:
 (define-public ruby-rexml
   (package
     (name "ruby-rexml")
-    (version "3.2.4")
+    (version "3.2.5")
     (source
      (origin
        (method git-fetch)               ;no tests in distributed gem
@@ -7126,8 +7126,7 @@ by RuboCop to deal with Ruby's Abstract Syntax Tree (AST), in particular:
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0rhjjbkaq2f2cs8hyr2i4yjqpcyl8m0wmr2cypa401m3fvz4221i"))))
+        (base32 "13n6vaa80drqic2wri4q6k22qzvsn683vp5s8c9dllil6x04kn0x"))))
     (build-system ruby-build-system)
     (synopsis "XML toolkit for Ruby")
     (description "Inspired by Electric XML library for Java, REXML aims to be
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index d7bf149d89..162371026c 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -852,3 +852,7 @@ safety and thread safety guarantees.")
 (define-public rust-1.50
   (rust-bootstrapped-package rust "1.50.0"
     "0pjs7j62maiyvkmhp9zrxl528g2n0fphp4rq6ap7aqdv0a6qz5wm"))
+
+(define-public rust-1.51
+  (rust-bootstrapped-package rust-1.50 "1.51.0"
+    "0ixqkqglv3isxbvl4ldr4byrkx692wghsz3fasy1pn5kr2prnsvs"))
diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm
index 48099ac10e..d9b0b4d03a 100644
--- a/gnu/packages/scheme.scm
+++ b/gnu/packages/scheme.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2020 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com>
+;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -43,6 +44,7 @@
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bdw-gc)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages libevent)
@@ -407,94 +409,26 @@ implementation techniques and as an expository tool.")
                (base32
                 "047wpjblfzmf1msz7snrp2c2h0zxyzlmbsqr9bwsyvz3frcg0888"))
               (patches (search-patches
+                        "racket-sh-via-rktio.patch"
+                        ;; TODO: If we're no longer patching Racket source
+                        ;; files with store paths, we may also fix the
+                        ;; issue that necessitated the following patch:
                         "racket-store-checksum-override.patch"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags
-       '("--enable-libz"
+     `(#:configure-flags
+       `(,(string-append "CPPFLAGS=-DGUIX_RKTIO_PATCH_BIN_SH="
+                         (assoc-ref %build-inputs "sh")
+                         "/bin/sh")
+         "--enable-libz"
          "--enable-liblz4")
+       #:modules
+       ((guix build gnu-build-system)
+        (guix build utils)
+        (srfi srfi-1))
        #:phases
        (modify-phases %standard-phases
-         (add-before 'configure 'pre-configure-minimal
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; Patch dynamically loaded libraries with their absolute paths.
-             (let* ((library-path (search-path-as-string->list
-                                   (getenv "LIBRARY_PATH")))
-                    (find-so (lambda (soname)
-                               (search-path
-                                library-path
-                                (format #f "~a.so" soname)))))
-               (substitute* "collects/db/private/sqlite3/ffi.rkt"
-                 (("ffi-lib sqlite-so")
-                  (format #f "ffi-lib \"~a\"" (find-so "libsqlite3"))))
-               (substitute* "collects/openssl/libssl.rkt"
-                 (("ffi-lib libssl-so")
-                  (format #f "ffi-lib \"~a\"" (find-so "libssl"))))
-               (substitute* "collects/openssl/libcrypto.rkt"
-                 (("ffi-lib libcrypto-so")
-                  (format #f "ffi-lib \"~a\"" (find-so "libcrypto")))))
-             (chdir "src")
-             #t))
-         (add-before 'pre-configure-minimal 'pre-configure
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; Patch dynamically loaded libraries with their absolute paths.
-             (let* ((library-path (search-path-as-string->list
-                                   (getenv "LIBRARY_PATH")))
-                    (find-so (lambda (soname)
-                               (search-path
-                                library-path
-                                (format #f "~a.so" soname))))
-                    (patch-ffi-libs (lambda (file libs)
-                                      (for-each
-                                       (lambda (lib)
-                                         (substitute* file
-                                           (((format #f "\"~a\"" lib))
-                                            (format #f "\"~a\"" (find-so lib)))))
-                                       libs))))
-               (substitute* "share/pkgs/math-lib/math/private/bigfloat/gmp.rkt"
-                 (("ffi-lib libgmp-so")
-                  (format #f "ffi-lib \"~a\"" (find-so "libgmp"))))
-               (substitute* "share/pkgs/math-lib/math/private/bigfloat/mpfr.rkt"
-                 (("ffi-lib libmpfr-so")
-                  (format #f "ffi-lib \"~a\"" (find-so "libmpfr"))))
-               (substitute* "share/pkgs/readline-lib/readline/rktrl.rkt"
-                 (("\\(getenv \"PLT_READLINE_LIB\"\\)")
-                  (format #f "\"~a\"" (find-so "libedit"))))
-               (for-each
-                (lambda (x) (apply patch-ffi-libs x))
-                '(("share/pkgs/draw-lib/racket/draw/unsafe/cairo-lib.rkt"
-                   ("libfontconfig" "libcairo"))
-                  ("share/pkgs/draw-lib/racket/draw/unsafe/glib.rkt"
-                   ("libglib-2.0" "libgmodule-2.0" "libgobject-2.0"))
-                  ("share/pkgs/draw-lib/racket/draw/unsafe/jpeg.rkt"
-                   ("libjpeg"))
-                  ("share/pkgs/draw-lib/racket/draw/unsafe/pango.rkt"
-                   ("libpango-1.0" "libpangocairo-1.0"))
-                  ("share/pkgs/draw-lib/racket/draw/unsafe/png.rkt"
-                   ("libpng"))
-                  ("share/pkgs/db-lib/db/private/odbc/ffi.rkt"
-                   ("libodbc"))
-                  ("share/pkgs/gui-lib/mred/private/wx/gtk/x11.rkt"
-                   ("libX11"))
-                  ("share/pkgs/gui-lib/mred/private/wx/gtk/gsettings.rkt"
-                   ("libgio-2.0"))
-                  ("share/pkgs/gui-lib/mred/private/wx/gtk/gtk3.rkt"
-                   ("libgdk-3" "libgtk-3"))
-                  ("share/pkgs/gui-lib/mred/private/wx/gtk/unique.rkt"
-                   ("libunique-1.0"))
-                  ("share/pkgs/gui-lib/mred/private/wx/gtk/utils.rkt"
-                   ("libgdk-x11-2.0" "libgdk_pixbuf-2.0" "libgtk-x11-2.0"))
-                  ("share/pkgs/gui-lib/mred/private/wx/gtk/gl-context.rkt"
-                   ("libGL"))
-                  ("share/pkgs/sgl/gl.rkt"
-                   ("libGL" "libGLU")))))
-             #t))
-         (add-after 'unpack 'patch-/bin/sh
-           (lambda _
-             (substitute* "collects/racket/system.rkt"
-               (("/bin/sh") (which "sh")))
-             #t))
-         (add-after 'patch-/bin/sh 'patch-chez-configure
+         (add-after 'unpack 'patch-chez-configure
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (substitute* "src/cs/c/Makefile.in"
                (("/bin/sh") (which "sh")))
@@ -522,12 +456,69 @@ implementation techniques and as an expository tool.")
                  (("/bin/cp") (which "cp"))
                  (("/bin/echo") (which "echo")))
                (substitute* "makefiles/installsh"
-                 (("/bin/true") (which "true")))))))
+                 (("/bin/true") (which "true"))))
+             #t))
+         (add-before 'configure 'pre-configure-minimal
+           (lambda* (#:key inputs #:allow-other-keys)
+             (chdir "src")
+             #t))
+         (add-after 'build 'patch-config.rktd-lib-search-dirs
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             ;; We do this between the `build` and `install` phases
+             ;; so that we have racket to read and write the hash table,
+             ;; but it comes before `raco setup`, when foreign libraries
+             ;; are needed to build the documentation.
+             (define out (assoc-ref outputs "out"))
+             (apply invoke
+                    "./cs/c/racketcs"
+                    "-e"
+                    ,(format #f
+                             "~s"
+                             '(let* ((args
+                                      (vector->list
+                                       (current-command-line-arguments)))
+                                     (file (car args))
+                                     (extra-lib-search-dirs (cdr args)))
+                                (write-to-file
+                                 (hash-update
+                                  (file->value file)
+                                  'lib-search-dirs
+                                  (lambda (dirs)
+                                    (append dirs extra-lib-search-dirs))
+                                  null)
+                                 #:exists 'truncate/replace
+                                 file)))
+                    "--"
+                    "../etc/config.rktd"
+                    (filter-map (lambda (lib)
+                                  (cond
+                                   ((assoc-ref inputs lib)
+                                    => (lambda (pth)
+                                         (string-append pth "/lib")))
+                                   (else
+                                    #f)))
+                                '("cairo"
+                                  "fontconfig"
+                                  "glib"
+                                  "glu"
+                                  "gmp"
+                                  "gtk+"
+                                  "libjpeg"
+                                  "libpng"
+                                  "libx11"
+                                  "mesa"
+                                  "mpfr"
+                                  "openssl"
+                                  "pango"
+                                  "sqlite"
+                                  "unixodbc"
+                                  "libedit")))
+             #t)))
        ;; XXX: how to run them?
        #:tests? #f))
     (inputs
-     `(;; Hardcode dynamically loaded libraries for better functionality.
-       ;; sqlite and libraries for `racket/draw' are needed to build the doc.
+     `(;; sqlite and libraries for `racket/draw' are needed to build the doc.
+       ("sh" ,bash-minimal)
        ("zlib" ,zlib)
        ("zlib:static" ,zlib "static")
        ("lz4" ,lz4)
@@ -567,29 +558,21 @@ of languages such as Typed Racket, R5RS and R6RS Scheme, and Datalog.")
     (inherit racket)
     (name "racket-minimal")
     (version (package-version racket))
-    (source (origin
-              (method url-fetch)
-              (uri (list (string-append "https://mirror.racket-lang.org/installers/"
-                                        version "/racket-minimal-src.tgz")
-                         ;; this mirror seems to have broken HTTPS:
-                         (string-append
-                          "http://mirror.informatik.uni-tuebingen.de/mirror/racket/"
-                          version "/racket-minimal-src.tgz")))
-              (sha256
-               (base32
-                "0mwyffw4gcci8wmzxa3j28h03h0gsz55aard8qrk3lri8r2xyg21"))
-              (patches (search-patches
-                        "racket-store-checksum-override.patch"))))
+    (source
+     (origin
+       (inherit (package-source racket))
+       (uri (list (string-append "https://mirror.racket-lang.org/installers/"
+                                 version "/racket-minimal-src.tgz")
+                  ;; this mirror seems to have broken HTTPS:
+                  (string-append
+                   "http://mirror.informatik.uni-tuebingen.de/mirror/racket/"
+                   version "/racket-minimal-src.tgz")))
+       (sha256 "0mwyffw4gcci8wmzxa3j28h03h0gsz55aard8qrk3lri8r2xyg21")))
     (synopsis "Racket without bundled packages such as Dr. Racket")
-    (arguments
-     (substitute-keyword-arguments (package-arguments racket)
-       ((#:phases phases)
-        `(modify-phases ,phases
-           ;; Delete fix that applies to files not included in the minimal package.
-           (delete 'pre-configure)))))
     (inputs
      `(("openssl" ,openssl)
        ("sqlite" ,sqlite)
+       ("sh" ,bash-minimal)
        ("zlib" ,zlib)
        ("zlib:static" ,zlib "static")
        ("lz4" ,lz4)
diff --git a/gnu/packages/scsi.scm b/gnu/packages/scsi.scm
index 803f49931e..4c3bfd7e33 100644
--- a/gnu/packages/scsi.scm
+++ b/gnu/packages/scsi.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
-;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,14 +27,14 @@
 (define-public sg3-utils
   (package
     (name "sg3-utils")
-    (version "1.45")
+    (version "1.46")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://sg.danny.cz/sg/p/sg3_utils-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "1vmjb17y33a73sv7jg8fzs6bhr7yh2k9sba81sjiyf1pvi3vbnn7"))))
+                "185rlxppnsmi6q7garfhglmw31gji2ff24xg2yjk3klk1fqnihjr"))))
     (build-system gnu-build-system)
     (home-page "http://sg.danny.cz/sg/sg3_utils.html")
     (synopsis "SCSI device utilities")
diff --git a/gnu/packages/search.scm b/gnu/packages/search.scm
index d458747872..0d603ad360 100644
--- a/gnu/packages/search.scm
+++ b/gnu/packages/search.scm
@@ -420,14 +420,14 @@ bibliographic data and simple document and bibtex retrieval.")
 (define-public ugrep
   (package
     (name "ugrep")
-    (version "3.1.4")
+    (version "3.1.11")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/Genivia/ugrep")
                     (commit (string-append "v" version))))
               (sha256
-               (base32 "1ydnpdhn1mp2pnbqzvwabrp573626k89kbv97fax6y1bz2pamrg4"))
+               (base32 "1g3sxnrcaz1jxwa8nwrxpr63g4y0ha5zcf10053ciy9wjh6wqs1w"))
               (file-name (string-append name "-" version "-checkout"))
               (modules '((guix build utils)))
               (snippet
@@ -446,13 +446,13 @@ bibliographic data and simple document and bibtex retrieval.")
        ("pcre2" ,pcre2)
        ("zlib" ,zlib)))
     (arguments
-     `(#:tests? #f ;; No script for re-building the binary test input-files
+     `(#:tests? #f                  ; no way to rebuild the binary input files
        #:test-target "test"
        #:phases
        (modify-phases %standard-phases
          (add-before 'check 'check-setup
            (lambda _
-             ;; unpatch shepengs in tests
+             ;; Unpatch shebangs in tests.
              (substitute* '("tests/Hello.bat"
                             "tests/Hello.sh")
                (("#!/gnu/store/.*/bin/sh") "#!/bin/sh")))))))
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index 6cd2f861b5..44ffbfc589 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -836,14 +836,14 @@ Shell (pdksh).")
 (define-public oil
   (package
     (name "oil")
-    (version "0.8.8")
+    (version "0.8.9")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.oilshell.org/download/oil-"
                            version ".tar.gz"))
        (sha256
-        (base32 "1g3xk160x9k5smfc9k8nnxcj7w1nacmnhnpmm72am9rjp1vpv9h1"))))
+        (base32 "080lsx7hyjhny3jzscwr152vr0g9s3c2iqg3vrpgsbk8vv7vw5l7"))))
     (build-system gnu-build-system)
     (arguments
      `(#:strip-binaries? #f             ; strip breaks the binary
@@ -864,7 +864,8 @@ Shell (pdksh).")
            (lambda _
              (let* ((oil "_bin/oil.ovm"))
                (invoke/quiet oil "osh" "-c" "echo hi")
-               (invoke/quiet oil "osh" "-n" "configure")))))))
+               (invoke/quiet oil "osh" "-n" "configure")
+               #t))))))
     (inputs
      `(("readline" ,readline)))
     (home-page "https://www.oilshell.org")
@@ -951,7 +952,7 @@ files and text.")
 (define-public nushell
   (package
     (name "nushell")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method git-fetch)
@@ -960,7 +961,7 @@ files and text.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0kbynyk4c0r2qi78mdchx6d0d0c7phz2sxj5cqwsz4gjziibhr7j"))))
+        (base32 "0x7r8ipvypf6py2h03pdqr8pal6vyp6mskvss1rr8f0bcy3gr725"))))
     (build-system cargo-build-system)
     (arguments
      `(#:rust ,rust-1.47
@@ -972,38 +973,39 @@ files and text.")
         ("rust-futures" ,rust-futures-0.3)
         ("rust-itertools" ,rust-itertools-0.10)
         ("rust-log" ,rust-log-0.4)
-        ("rust-nu-cli" ,rust-nu-cli-0.28)
-        ("rust-nu-command" ,rust-nu-command-0.28)
-        ("rust-nu-data" ,rust-nu-data-0.28)
-        ("rust-nu-engine" ,rust-nu-engine-0.28)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-parser" ,rust-nu-parser-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.28)
-        ("rust-nu-plugin-binaryview" ,rust-nu-plugin-binaryview-0.28)
-        ("rust-nu-plugin-chart" ,rust-nu-plugin-chart-0.28)
-        ("rust-nu-plugin-fetch" ,rust-nu-plugin-fetch-0.28)
-        ("rust-nu-plugin-from-bson" ,rust-nu-plugin-from-bson-0.28)
-        ("rust-nu-plugin-from-sqlite" ,rust-nu-plugin-from-sqlite-0.28)
-        ("rust-nu-plugin-inc" ,rust-nu-plugin-inc-0.28)
-        ("rust-nu-plugin-match" ,rust-nu-plugin-match-0.28)
-        ("rust-nu-plugin-post" ,rust-nu-plugin-post-0.28)
-        ("rust-nu-plugin-ps" ,rust-nu-plugin-ps-0.28)
-        ("rust-nu-plugin-s3" ,rust-nu-plugin-s3-0.28)
-        ("rust-nu-plugin-selector" ,rust-nu-plugin-selector-0.28)
-        ("rust-nu-plugin-start" ,rust-nu-plugin-start-0.28)
-        ("rust-nu-plugin-sys" ,rust-nu-plugin-sys-0.28)
-        ("rust-nu-plugin-textview" ,rust-nu-plugin-textview-0.28)
-        ("rust-nu-plugin-to-bson" ,rust-nu-plugin-to-bson-0.28)
-        ("rust-nu-plugin-to-sqlite" ,rust-nu-plugin-to-sqlite-0.28)
-        ("rust-nu-plugin-tree" ,rust-nu-plugin-tree-0.28)
-        ("rust-nu-plugin-xpath" ,rust-nu-plugin-xpath-0.28)
+        ("rust-nu-cli" ,rust-nu-cli-0.29)
+        ("rust-nu-command" ,rust-nu-command-0.29)
+        ("rust-nu-data" ,rust-nu-data-0.29)
+        ("rust-nu-engine" ,rust-nu-engine-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-parser" ,rust-nu-parser-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
+        ("rust-nu-plugin-binaryview" ,rust-nu-plugin-binaryview-0.29)
+        ("rust-nu-plugin-chart" ,rust-nu-plugin-chart-0.29)
+        ("rust-nu-plugin-fetch" ,rust-nu-plugin-fetch-0.29)
+        ("rust-nu-plugin-from-bson" ,rust-nu-plugin-from-bson-0.29)
+        ("rust-nu-plugin-from-sqlite" ,rust-nu-plugin-from-sqlite-0.29)
+        ("rust-nu-plugin-inc" ,rust-nu-plugin-inc-0.29)
+        ("rust-nu-plugin-match" ,rust-nu-plugin-match-0.29)
+        ("rust-nu-plugin-post" ,rust-nu-plugin-post-0.29)
+        ("rust-nu-plugin-ps" ,rust-nu-plugin-ps-0.29)
+        ("rust-nu-plugin-s3" ,rust-nu-plugin-s3-0.29)
+        ("rust-nu-plugin-selector" ,rust-nu-plugin-selector-0.29)
+        ("rust-nu-plugin-start" ,rust-nu-plugin-start-0.29)
+        ("rust-nu-plugin-sys" ,rust-nu-plugin-sys-0.29)
+        ("rust-nu-plugin-textview" ,rust-nu-plugin-textview-0.29)
+        ("rust-nu-plugin-to-bson" ,rust-nu-plugin-to-bson-0.29)
+        ("rust-nu-plugin-to-sqlite" ,rust-nu-plugin-to-sqlite-0.29)
+        ("rust-nu-plugin-tree" ,rust-nu-plugin-tree-0.29)
+        ("rust-nu-plugin-xpath" ,rust-nu-plugin-xpath-0.29)
         ("rust-pretty-env-logger" ,rust-pretty-env-logger-0.4))
        #:cargo-development-inputs
        (("rust-dunce" ,rust-dunce-1)
-        ("rust-nu-test-support" ,rust-nu-test-support-0.28)
+        ("rust-hamcrest2" ,rust-hamcrest2-0.3)
+        ("rust-nu-test-support" ,rust-nu-test-support-0.29)
         ("rust-serial-test" ,rust-serial-test-0.5))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -1027,17 +1029,17 @@ directory.  These values can be piped through a series of steps, in a series
 of commands called a ``pipeline''.")
     (license license:expat)))
 
-(define-public rust-nu-ansi-term-0.28
+(define-public rust-nu-ansi-term-0.29
   (package
     (name "rust-nu-ansi-term")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-ansi-term" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0j4ybp1bmlj9lakrp21i180c26x0i9ird08xshsr6607g8nvc73f"))))
+        (base32 "0zlcma4kg6rsfp5sgfp3yy717bdrn9nq32rdi2nabpwg3qa9mmkb"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -1051,23 +1053,24 @@ of commands called a ``pipeline''.")
 underline).")
     (license license:expat)))
 
-(define-public rust-nu-cli-0.28
+(define-public rust-nu-cli-0.29
   (package
     (name "rust-nu-cli")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-cli" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0wz3n4b7sz5zynwhs2gn11w1b9cji231f613r23j64a8y26hdzhn"))))
+        (base32 "0ya95r54k59h0gyz2wgj8y2lhddnk3aw7ww1npzcbfsy1xi1zvi5"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-arboard" ,rust-arboard-1)
-        ("rust-async-recursion" ,rust-async-recursion-0.3)
+        ("rust-async-recursion"
+         ,rust-async-recursion-0.3)
         ("rust-async-trait" ,rust-async-trait-0.1)
         ("rust-base64" ,rust-base64-0.13)
         ("rust-bigdecimal" ,rust-bigdecimal-0.2)
@@ -1077,11 +1080,13 @@ underline).")
         ("rust-chrono" ,rust-chrono-0.4)
         ("rust-chrono-tz" ,rust-chrono-tz-0.5)
         ("rust-clap" ,rust-clap-2)
-        ("rust-codespan-reporting" ,rust-codespan-reporting-0.11)
+        ("rust-codespan-reporting"
+         ,rust-codespan-reporting-0.11)
         ("rust-csv" ,rust-csv-1)
         ("rust-ctrlc" ,rust-ctrlc-3)
         ("rust-derive-new" ,rust-derive-new-0.5)
-        ("rust-directories-next" ,rust-directories-next-2)
+        ("rust-directories-next"
+         ,rust-directories-next-2)
         ("rust-dirs-next" ,rust-dirs-next-2)
         ("rust-dtparse" ,rust-dtparse-1)
         ("rust-dunce" ,rust-dunce-1)
@@ -1103,20 +1108,21 @@ underline).")
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-log" ,rust-log-0.4)
         ("rust-meval" ,rust-meval-0.2)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.28)
-        ("rust-nu-command" ,rust-nu-command-0.28)
-        ("rust-nu-data" ,rust-nu-data-0.28)
-        ("rust-nu-engine" ,rust-nu-engine-0.28)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-json" ,rust-nu-json-0.28)
-        ("rust-nu-parser" ,rust-nu-parser-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
-        ("rust-nu-stream" ,rust-nu-stream-0.28)
-        ("rust-nu-table" ,rust-nu-table-0.28)
-        ("rust-nu-test-support" ,rust-nu-test-support-0.28)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.28)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
+        ("rust-nu-command" ,rust-nu-command-0.29)
+        ("rust-nu-data" ,rust-nu-data-0.29)
+        ("rust-nu-engine" ,rust-nu-engine-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-json" ,rust-nu-json-0.29)
+        ("rust-nu-parser" ,rust-nu-parser-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-stream" ,rust-nu-stream-0.29)
+        ("rust-nu-table" ,rust-nu-table-0.29)
+        ("rust-nu-test-support"
+         ,rust-nu-test-support-0.29)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-num-format" ,rust-num-format-0.4)
         ("rust-num-traits" ,rust-num-traits-0.2)
@@ -1124,28 +1130,31 @@ underline).")
         ("rust-pin-utils" ,rust-pin-utils-0.1)
         ("rust-pretty-hex" ,rust-pretty-hex-0.2)
         ("rust-ptree" ,rust-ptree-0.3)
-        ("rust-query-interface" ,rust-query-interface-0.3)
-        ("rust-quick-xml" ,rust-quick-xml-0.21)
+        ("rust-query-interface"
+         ,rust-query-interface-0.3)
         ("rust-quickcheck" ,rust-quickcheck-1)
         ("rust-quickcheck-macros" ,rust-quickcheck-macros-1)
+        ("rust-quick-xml" ,rust-quick-xml-0.21)
         ("rust-rand" ,rust-rand-0.8)
         ("rust-rayon" ,rust-rayon-1)
         ("rust-regex" ,rust-regex-1)
         ("rust-roxmltree" ,rust-roxmltree-0.14)
         ("rust-rusqlite" ,rust-rusqlite-0.24)
         ("rust-rust-embed" ,rust-rust-embed-5)
-        ("rust-rustyline" ,rust-rustyline-6)
+        ("rust-rustyline" ,rust-rustyline-8)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-bytes" ,rust-serde-bytes-0.11)
         ("rust-serde-ini" ,rust-serde-ini-0.2)
         ("rust-serde-json" ,rust-serde-json-1)
-        ("rust-serde-urlencoded" ,rust-serde-urlencoded-0.7)
+        ("rust-serde-urlencoded"
+         ,rust-serde-urlencoded-0.7)
         ("rust-serde-yaml" ,rust-serde-yaml-0.8)
         ("rust-sha2" ,rust-sha2-0.9)
         ("rust-shadow-rs" ,rust-shadow-rs-0.5)
         ("rust-shadow-rs" ,rust-shadow-rs-0.5)
         ("rust-shellexpand" ,rust-shellexpand-2)
-        ("rust-strip-ansi-escapes" ,rust-strip-ansi-escapes-0.1)
+        ("rust-strip-ansi-escapes"
+         ,rust-strip-ansi-escapes-0.1)
         ("rust-sxd-document" ,rust-sxd-document-0.3)
         ("rust-sxd-xpath" ,rust-sxd-xpath-0.4)
         ("rust-tempfile" ,rust-tempfile-3)
@@ -1156,7 +1165,8 @@ underline).")
         ("rust-toml" ,rust-toml-0.5)
         ("rust-trash" ,rust-trash-1)
         ("rust-umask" ,rust-umask-1)
-        ("rust-unicode-segmentation" ,rust-unicode-segmentation-1)
+        ("rust-unicode-segmentation"
+         ,rust-unicode-segmentation-1)
         ("rust-url" ,rust-url-2)
         ("rust-users" ,rust-users-0.11)
         ("rust-uuid" ,rust-uuid-0.8)
@@ -1167,23 +1177,24 @@ underline).")
     (description "CLI for nushell")
     (license license:expat)))
 
-(define-public rust-nu-command-0.28
+(define-public rust-nu-command-0.29
   (package
     (name "rust-nu-command")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-command" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0n6967w99m4zi52lfb57ycckammcc4im92yl5v2a2r6avnxrby1d"))))
+        (base32 "0nydc7vyrhfw99bimjs6061zgcqqi8hjjx20sq3qn2njgk1p730l"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-arboard" ,rust-arboard-1)
-        ("rust-async-recursion" ,rust-async-recursion-0.3)
+        ("rust-async-recursion"
+         ,rust-async-recursion-0.3)
         ("rust-async-trait" ,rust-async-trait-0.1)
         ("rust-base64" ,rust-base64-0.13)
         ("rust-bigdecimal" ,rust-bigdecimal-0.2)
@@ -1193,12 +1204,14 @@ underline).")
         ("rust-chrono" ,rust-chrono-0.4)
         ("rust-chrono-tz" ,rust-chrono-tz-0.5)
         ("rust-clap" ,rust-clap-2)
-        ("rust-codespan-reporting" ,rust-codespan-reporting-0.11)
+        ("rust-codespan-reporting"
+         ,rust-codespan-reporting-0.11)
         ("rust-crossterm" ,rust-crossterm-0.19)
         ("rust-csv" ,rust-csv-1)
         ("rust-ctrlc" ,rust-ctrlc-3)
         ("rust-derive-new" ,rust-derive-new-0.5)
-        ("rust-directories-next" ,rust-directories-next-2)
+        ("rust-directories-next"
+         ,rust-directories-next-2)
         ("rust-dirs-next" ,rust-dirs-next-2)
         ("rust-dtparse" ,rust-dtparse-1)
         ("rust-dunce" ,rust-dunce-1)
@@ -1219,21 +1232,23 @@ underline).")
         ("rust-itertools" ,rust-itertools-0.10)
         ("rust-lazy-static" ,rust-lazy-static-1)
         ("rust-log" ,rust-log-0.4)
+        ("rust-md5" ,rust-md5-0.7)
         ("rust-meval" ,rust-meval-0.2)
         ("rust-minus" ,rust-minus-3)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.28)
-        ("rust-nu-data" ,rust-nu-data-0.28)
-        ("rust-nu-engine" ,rust-nu-engine-0.28)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-json" ,rust-nu-json-0.28)
-        ("rust-nu-parser" ,rust-nu-parser-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
-        ("rust-nu-stream" ,rust-nu-stream-0.28)
-        ("rust-nu-table" ,rust-nu-table-0.28)
-        ("rust-nu-test-support" ,rust-nu-test-support-0.28)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.28)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
+        ("rust-nu-data" ,rust-nu-data-0.29)
+        ("rust-nu-engine" ,rust-nu-engine-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-json" ,rust-nu-json-0.29)
+        ("rust-nu-parser" ,rust-nu-parser-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-stream" ,rust-nu-stream-0.29)
+        ("rust-nu-table" ,rust-nu-table-0.29)
+        ("rust-nu-test-support"
+         ,rust-nu-test-support-0.29)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-num-format" ,rust-num-format-0.4)
         ("rust-num-traits" ,rust-num-traits-0.2)
@@ -1241,7 +1256,8 @@ underline).")
         ("rust-pin-utils" ,rust-pin-utils-0.1)
         ("rust-pretty-hex" ,rust-pretty-hex-0.2)
         ("rust-ptree" ,rust-ptree-0.3)
-        ("rust-query-interface" ,rust-query-interface-0.3)
+        ("rust-query-interface"
+         ,rust-query-interface-0.3)
         ("rust-quick-xml" ,rust-quick-xml-0.21)
         ("rust-rand" ,rust-rand-0.7)
         ("rust-rayon" ,rust-rayon-1)
@@ -1249,17 +1265,19 @@ underline).")
         ("rust-roxmltree" ,rust-roxmltree-0.14)
         ("rust-rusqlite" ,rust-rusqlite-0.24)
         ("rust-rust-embed" ,rust-rust-embed-5)
-        ("rust-rustyline" ,rust-rustyline-7)
+        ("rust-rustyline" ,rust-rustyline-8)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-bytes" ,rust-serde-bytes-0.11)
         ("rust-serde-ini" ,rust-serde-ini-0.2)
         ("rust-serde-json" ,rust-serde-json-1)
-        ("rust-serde-urlencoded" ,rust-serde-urlencoded-0.7)
+        ("rust-serde-urlencoded"
+         ,rust-serde-urlencoded-0.7)
         ("rust-serde-yaml" ,rust-serde-yaml-0.8)
         ("rust-sha2" ,rust-sha2-0.9)
         ("rust-shadow-rs" ,rust-shadow-rs-0.5)
         ("rust-shellexpand" ,rust-shellexpand-2)
-        ("rust-strip-ansi-escapes" ,rust-strip-ansi-escapes-0.1)
+        ("rust-strip-ansi-escapes"
+         ,rust-strip-ansi-escapes-0.1)
         ("rust-sxd-document" ,rust-sxd-document-0.3)
         ("rust-sxd-xpath" ,rust-sxd-xpath-0.4)
         ("rust-tempfile" ,rust-tempfile-3)
@@ -1270,7 +1288,8 @@ underline).")
         ("rust-toml" ,rust-toml-0.5)
         ("rust-trash" ,rust-trash-1)
         ("rust-umask" ,rust-umask-1)
-        ("rust-unicode-segmentation" ,rust-unicode-segmentation-1)
+        ("rust-unicode-segmentation"
+         ,rust-unicode-segmentation-1)
         ("rust-url" ,rust-url-2)
         ("rust-users" ,rust-users-0.11)
         ("rust-uuid" ,rust-uuid-0.8)
@@ -1281,17 +1300,17 @@ underline).")
     (description "CLI for nushell")
     (license license:expat)))
 
-(define-public rust-nu-data-0.28
+(define-public rust-nu-data-0.29
   (package
     (name "rust-nu-data")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-data" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1gq0izbpaw4lp92ia3d3i14x649r1s6jscabm6xdi2qcxfb420kz"))))
+        (base32 "1niljv9vm42py1hmf8na03xbxb4vvypmrxk765ih9m2jg2zq9386"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -1300,22 +1319,25 @@ underline).")
         ("rust-byte-unit" ,rust-byte-unit-4)
         ("rust-chrono" ,rust-chrono-0.4)
         ("rust-derive-new" ,rust-derive-new-0.5)
-        ("rust-directories-next" ,rust-directories-next-2)
+        ("rust-directories-next"
+         ,rust-directories-next-2)
         ("rust-dirs-next" ,rust-dirs-next-2)
         ("rust-getset" ,rust-getset-0.1)
         ("rust-indexmap" ,rust-indexmap-1)
         ("rust-log" ,rust-log-0.4)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.28)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
-        ("rust-nu-table" ,rust-nu-table-0.28)
-        ("rust-nu-test-support" ,rust-nu-test-support-0.28)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.28)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-table" ,rust-nu-table-0.29)
+        ("rust-nu-test-support"
+         ,rust-nu-test-support-0.29)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-num-format" ,rust-num-format-0.4)
         ("rust-num-traits" ,rust-num-traits-0.2)
-        ("rust-query-interface" ,rust-query-interface-0.3)
+        ("rust-query-interface"
+         ,rust-query-interface-0.3)
         ("rust-serde" ,rust-serde-1)
         ("rust-toml" ,rust-toml-0.5)
         ("rust-users" ,rust-users-0.11))))
@@ -1324,24 +1346,27 @@ underline).")
     (description "CLI for nushell")
     (license license:expat)))
 
-(define-public rust-nu-engine-0.28
+(define-public rust-nu-engine-0.29
   (package
     (name "rust-nu-engine")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-engine" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "135bwcqvb8vhg417yzz90bj396f9hwpbqrdi9kw8fvmfz573z32s"))))
+        (base32 "1wz033zamlakpca5k2bgal2ykd5ia76g5fw3r5xzb6jb63q7xqhf"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-async-recursion" ,rust-async-recursion-0.3)
+       (("rust-async-recursion"
+         ,rust-async-recursion-0.3)
         ("rust-async-trait" ,rust-async-trait-0.1)
         ("rust-bytes" ,rust-bytes-0.5)
+        ("rust-codespan-reporting"
+         ,rust-codespan-reporting-0.11)
         ("rust-derive-new" ,rust-derive-new-0.5)
         ("rust-dirs-next" ,rust-dirs-next-2)
         ("rust-dunce" ,rust-dunce-1)
@@ -1356,15 +1381,15 @@ underline).")
         ("rust-indexmap" ,rust-indexmap-1)
         ("rust-itertools" ,rust-itertools-0.10)
         ("rust-log" ,rust-log-0.4)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.28)
-        ("rust-nu-data" ,rust-nu-data-0.28)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-parser" ,rust-nu-parser-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
-        ("rust-nu-stream" ,rust-nu-stream-0.28)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.28)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
+        ("rust-nu-data" ,rust-nu-data-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-parser" ,rust-nu-parser-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-stream" ,rust-nu-stream-0.29)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
         ("rust-parking-lot" ,rust-parking-lot-0.11)
         ("rust-rayon" ,rust-rayon-1)
         ("rust-serde" ,rust-serde-1)
@@ -1374,34 +1399,36 @@ underline).")
         ("rust-termcolor" ,rust-termcolor-1)
         ("rust-trash" ,rust-trash-1)
         ("rust-umask" ,rust-umask-1)
-        ("rust-users" ,rust-users-0.11))))
+        ("rust-users" ,rust-users-0.11)
+        ("rust-which" ,rust-which-4))))
     (home-page "https://www.nushell.sh")
     (synopsis "Core commands for nushell")
     (description "Core commands for nushell")
     (license license:expat)))
 
-(define-public rust-nu-errors-0.28
+(define-public rust-nu-errors-0.29
   (package
     (name "rust-nu-errors")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-errors" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1zb5mmhzjh5cd27ry4z0vgw99ic9k3badxy3ywjk72nzpr5ra303"))))
+        (base32 "1xxdirdd57x20irn1z1p2987cyyi8l6k6shlblikjjf97d8kjk0n"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bigdecimal" ,rust-bigdecimal-0.2)
-        ("rust-codespan-reporting" ,rust-codespan-reporting-0.11)
+        ("rust-codespan-reporting"
+         ,rust-codespan-reporting-0.11)
         ("rust-derive-new" ,rust-derive-new-0.5)
         ("rust-getset" ,rust-getset-0.1)
         ("rust-glob" ,rust-glob-0.3)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-serde" ,rust-serde-1)
@@ -1413,23 +1440,24 @@ underline).")
     (description "Core error subsystem for Nushell")
     (license license:expat)))
 
-(define-public rust-nu-json-0.28
+(define-public rust-nu-json-0.29
   (package
     (name "rust-nu-json")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-json" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "02w1lp7mp1fg7rf5zpdzllvsmd0jlgmig50xxag6a901ic85ddr7"))))
+        (base32 "1c1xj96gmyznqys3mxgnir4jf88npg4jkcwh9xa420agb03n9gzh"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-lazy-static" ,rust-lazy-static-1)
-        ("rust-linked-hash-map" ,rust-linked-hash-map-0.5)
+        ("rust-linked-hash-map"
+         ,rust-linked-hash-map-0.5)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-regex" ,rust-regex-1)
         ("rust-serde" ,rust-serde-1))))
@@ -1438,33 +1466,36 @@ underline).")
     (description "This package is a fork of @code{serde-hjson}.")
     (license license:expat)))
 
-(define-public rust-nu-parser-0.28
+(define-public rust-nu-parser-0.29
   (package
     (name "rust-nu-parser")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-parser" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0sixgfj7nsg66gmsqchydkqbhf3dzg5igvcri7dz6qdadi578wb5"))))
+        (base32 "1cmqx4gw7xg6ag58y7pq94prwkagc40wcrxbk2vzqj206h97xvmi"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bigdecimal" ,rust-bigdecimal-0.2)
-        ("rust-codespan-reporting" ,rust-codespan-reporting-0.11)
+        ("rust-codespan-reporting"
+         ,rust-codespan-reporting-0.11)
         ("rust-derive-new" ,rust-derive-new-0.5)
-        ("rust-derive-is-enum-variant" ,rust-derive-is-enum-variant-0.1)
+        ("rust-derive-is-enum-variant"
+         ,rust-derive-is-enum-variant-0.1)
         ("rust-dunce" ,rust-dunce-1)
         ("rust-indexmap" ,rust-indexmap-1)
         ("rust-itertools" ,rust-itertools-0.10)
         ("rust-log" ,rust-log-0.4)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
-        ("rust-nu-test-support" ,rust-nu-test-support-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-test-support"
+         ,rust-nu-test-support-0.29)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-serde" ,rust-serde-1)
@@ -1475,10 +1506,10 @@ underline).")
     (description "Nushell parser")
     (license license:expat)))
 
-(define-public rust-nu-plugin-0.28
+(define-public rust-nu-plugin-0.29
   (package
     (name "rust-nu-plugin")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
@@ -1486,19 +1517,19 @@ underline).")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1bkxkffcywaam8r55v8ciq42mgimgxzl4x8vb5qzx49a5gjb1831"))))
+        (base32 "03qqvh4jhpzwb1mh4f8pz2m88sa825giz5g7lr2l96nb0qfya19j"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bigdecimal" ,rust-bigdecimal-0.2)
         ("rust-indexmap" ,rust-indexmap-1)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
         ("rust-nu-test-support"
-         ,rust-nu-test-support-0.28)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.28)
+         ,rust-nu-test-support-0.29)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-serde" ,rust-serde-1)
         ("rust-serde-json" ,rust-serde-json-1))))
@@ -1507,17 +1538,17 @@ underline).")
     (description "Nushell Plugin")
     (license license:expat)))
 
-(define-public rust-nu-plugin-binaryview-0.28
+(define-public rust-nu-plugin-binaryview-0.29
   (package
     (name "rust-nu-plugin-binaryview")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_binaryview" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "055pc3idf1jsrks0hpx55vazaivxdjfncvbqjjsp89dk1011a3yp"))))
+        (base32 "0x7g9lncglbpdjxk1r47k49ha9yir03znis6zs7i25qwsb2sgynz"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -1525,11 +1556,11 @@ underline).")
        (("rust-crossterm" ,rust-crossterm-0.19)
         ("rust-image" ,rust-image-0.22)
         ("rust-neso" ,rust-neso-0.5)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.28)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
         ("rust-pretty-hex" ,rust-pretty-hex-0.2)
         ("rust-rawkey" ,rust-rawkey-0.1))))
     (home-page "https://www.nushell.sh")
@@ -1538,29 +1569,29 @@ underline).")
      "This package provides a binary viewer plugin for Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-chart-0.28
+(define-public rust-nu-plugin-chart-0.29
   (package
     (name "rust-nu-plugin-chart")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_chart" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "114kg6vspympi2fr14sgvwnlinwa7s2vwv8f9a9p1kwqg4qa281s"))))
+        (base32 "1b4zqnm788728jzqxcipik4x3lgj8yf0cjpxznbb10bgyfdp0jxk"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-crossterm" ,rust-crossterm-0.19)
-        ("rust-nu-cli" ,rust-nu-cli-0.28)
-        ("rust-nu-data" ,rust-nu-data-0.28)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.28)
+        ("rust-nu-cli" ,rust-nu-cli-0.29)
+        ("rust-nu-data" ,rust-nu-data-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
         ("rust-tui" ,rust-tui-0.14))))
     (home-page "https://www.nushell.sh")
     (synopsis "Plugin to display charts")
@@ -1568,17 +1599,17 @@ underline).")
      "This package provides a plugin to display charts in Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-fetch-0.28
+(define-public rust-nu-plugin-fetch-0.29
   (package
     (name "rust-nu-plugin-fetch")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_fetch" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1v7pc58m8gi5zscvyviy8j5zbn30hxqlb37c0grgda7635vqhq31"))))
+        (base32 "086z2a2fmi4v95kg6bgzp1ylilbbflxnf242vnkmw6ys5gs8g4dy"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -1586,10 +1617,10 @@ underline).")
        (("rust-base64" ,rust-base64-0.13)
         ("rust-futures" ,rust-futures-0.3)
         ("rust-mime" ,rust-mime-0.3)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
         ("rust-surf" ,rust-surf-2)
         ("rust-url" ,rust-url-2))))
     (home-page "https://www.nushell.sh")
@@ -1597,28 +1628,28 @@ underline).")
     (description "This package provides a URL fetch plugin for Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-from-bson-0.28
+(define-public rust-nu-plugin-from-bson-0.29
   (package
     (name "rust-nu-plugin-from-bson")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_from_bson" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "13k11dh2pc48181qcbqwwgwwqh5d2g99p0rq4ly75l5jwyyazi73"))))
+        (base32 "02932wzrqrg4777cm1lpncig9cxn7s80fmlrkavrkw9dh2lnbbms"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bigdecimal" ,rust-bigdecimal-0.2)
         ("rust-bson" ,rust-bson-0.14)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
         ("rust-num-traits" ,rust-num-traits-0.2))))
     (home-page "https://www.nushell.sh")
     (synopsis "Converter plugin to the bson format for Nushell")
@@ -1627,27 +1658,27 @@ underline).")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-from-sqlite-0.28
+(define-public rust-nu-plugin-from-sqlite-0.29
   (package
     (name "rust-nu-plugin-from-sqlite")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_from_sqlite" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0mpaz3vn7zf1ijccfd9rgrzl0fr3fci6j16w7a81x6dh7pqavxgn"))))
+        (base32 "1mnavx7pa5isic2rnrxd8462axh826rimscjpjxq4nk77wkzp5s8"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bigdecimal" ,rust-bigdecimal-0.2)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-rusqlite" ,rust-rusqlite-0.24)
         ("rust-tempfile" ,rust-tempfile-3))))
@@ -1658,28 +1689,28 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-inc-0.28
+(define-public rust-nu-plugin-inc-0.29
   (package
     (name "rust-nu-plugin-inc")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_inc" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1dbayv8gcjpz46xgvh9b1pka2ygyhyalk1xzh43cvaccqn4qafrb"))))
+        (base32 "0w0dmqa6rv12whpmsvli5nb7pnazrhdp08x2fzrabz60rq1qsfx9"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
+       (("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
         ("rust-nu-test-support"
-         ,rust-nu-test-support-0.28)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.28)
+         ,rust-nu-test-support-0.29)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
         ("rust-semver" ,rust-semver-0.11))))
     (home-page "https://www.nushell.sh")
     (synopsis "Version incrementer plugin for Nushell")
@@ -1688,25 +1719,25 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-match-0.28
+(define-public rust-nu-plugin-match-0.29
   (package
     (name "rust-nu-plugin-match")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_match" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1d19hwrrmbwxx3nn7gjs2wvzf6wfhdai9jsq35n7bgjx2qyip0ma"))))
+        (base32 "0hmxhd3z7p88xg5g75kljl0g6rp5k22ff0k9f2a6j9j7y3rrdlmb"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
+       (("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
         ("rust-regex" ,rust-regex-1))))
     (home-page "https://www.nushell.sh")
     (synopsis "Regex match plugin for Nushell")
@@ -1714,27 +1745,27 @@ Nushell.")
      "This package provides a regex match plugin for Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-post-0.28
+(define-public rust-nu-plugin-post-0.29
   (package
     (name "rust-nu-plugin-post")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_post" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1jha85gl422p9knr0m4xdx353nmm00zrj5yh9w2gdyzs6hbzf80q"))))
+        (base32 "1d2198ks2cw6phg1hdsz75rqh5l49whcsl5hl21g86y2j5sl0hpd"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-base64" ,rust-base64-0.13)
         ("rust-futures" ,rust-futures-0.3)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-serde-json" ,rust-serde-json-1)
         ("rust-surf" ,rust-surf-1)
@@ -1744,27 +1775,27 @@ Nushell.")
     (description "This package is an HTTP POST plugin for Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-ps-0.28
+(define-public rust-nu-plugin-ps-0.29
   (package
     (name "rust-nu-plugin-ps")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_ps" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0akgz7wi85ny2cfkcs9bn4hc97d4wdh9ayrzd6zasmird5kl1lv8"))))
+        (base32 "00dy60fnii1iifv0rh1xm77jn37l068np46fp3izbsbq642vzf7m"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-futures" ,rust-futures-0.3)
         ("rust-futures-timer" ,rust-futures-timer-3)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-sysinfo" ,rust-sysinfo-0.16))))
     (home-page "https://www.nushell.sh")
@@ -1773,80 +1804,80 @@ Nushell.")
      "This package provides a process list plugin for Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-s3-0.28
+(define-public rust-nu-plugin-s3-0.29
   (package
     (name "rust-nu-plugin-s3")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_s3" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "02b71ljsi7z2nbpm9djaxvdg7ql6xn0mqibpnzql0d39wfb0bxc2"))))
+        (base32 "00856l98gmmnv5bfg1vd6mqyk0zpkdrd1xgxqfi2c9nmsy2b1qfa"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-futures" ,rust-futures-0.3)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
         ("rust-s3handler" ,rust-s3handler-0.6))))
     (home-page "https://www.nushell.sh")
     (synopsis "S3 plugin for Nushell")
     (description "This package is an S3 plugin for Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-selector-0.28
+(define-public rust-nu-plugin-selector-0.29
   (package
     (name "rust-nu-plugin-selector")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_selector" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0g1sjlvylclhhp41h6xx6vaa10478albjgh3n7kg3p0s6i8db5a7"))))
+        (base32 "14hn8plcax4kljq5kw96881pngs7w2gy11k3hs1pmaxhr0bi6c8h"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-nipper" ,rust-nipper-0.1)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28))))
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29))))
     (home-page "https://www.nushell.sh")
     (synopsis "Web scraping using CSS selector")
     (description
      "This package provides web scraping using CSS selector.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-start-0.28
+(define-public rust-nu-plugin-start-0.29
   (package
     (name "rust-nu-plugin-start")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_start" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1gqn6b1jpxcfx81c5c4yfs52gzxp9viyqj7hjs7fqvf5czi0bmz7"))))
+        (base32 "002cjbdh4zn81zhc5a0gklfxdjslqbcbp1wcx5ijzpch40c5dyzj"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-glob" ,rust-glob-0.3)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
         ("rust-open" ,rust-open-1)
         ("rust-url" ,rust-url-2))))
     (home-page "https://www.nushell.sh")
@@ -1856,10 +1887,10 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-sys-0.28
+(define-public rust-nu-plugin-sys-0.29
   (package
     (name "rust-nu-plugin-sys")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
@@ -1867,17 +1898,17 @@ Nushell.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "16igj4z9f7kfy3x71ki3vaqdx6064l3k718vqfpabffjkz9qpfp5"))))
+        (base32 "0s2jyaff4lngm1c5446618r5761d8dcbpsrs7p7vzp6g2dic1w69"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-futures" ,rust-futures-0.3)
         ("rust-futures-util" ,rust-futures-util-0.3)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-sysinfo" ,rust-sysinfo-0.16))))
     (home-page "https://www.nushell.sh")
@@ -1885,28 +1916,28 @@ Nushell.")
     (description "This package provides a system info plugin for Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-textview-0.28
+(define-public rust-nu-plugin-textview-0.29
   (package
     (name "rust-nu-plugin-textview")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_textview" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "07m3x9bkq1qliicnshgs6yi6q5fbl6d6gxcd60kqcavkvdknnf8m"))))
+        (base32 "19kwh6rn0xk340yk0w1r3dfm328s9jqln8hgfqw5m3lld1hh1a4v"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bat" ,rust-bat-0.17)
-        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.28)
-        ("rust-nu-data" ,rust-nu-data-0.28)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
+        ("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
+        ("rust-nu-data" ,rust-nu-data-0.29)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
         ("rust-term-size" ,rust-term-size-0.3)
         ("rust-url" ,rust-url-2))))
     (home-page "https://www.nushell.sh")
@@ -1915,27 +1946,27 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-to-bson-0.28
+(define-public rust-nu-plugin-to-bson-0.29
   (package
     (name "rust-nu-plugin-to-bson")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_to_bson" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1rq2kwzrby8rh57gq4s4ljj4fgfgblrhjncjycpmkw2jzn7sa6xi"))))
+        (base32 "1j019frp663s511b7z9sz5vh77pvz0nn3w2asrk50xlyj5hfig55"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bson" ,rust-bson-0.14)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
         ("rust-num-traits" ,rust-num-traits-0.2))))
     (home-page "https://www.nushell.sh")
     (synopsis "Converter plugin to the bson format for Nushell")
@@ -1944,27 +1975,27 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-to-sqlite-0.28
+(define-public rust-nu-plugin-to-sqlite-0.29
   (package
     (name "rust-nu-plugin-to-sqlite")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_to_sqlite" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0q07fv4i4rkzjna54mkcri5bfngqkkmpfj3vmiyzib0x84pvzfjf"))))
+        (base32 "0p86iyag0ci15i1nqyb74kp1lax9mgm73w5g3qkp2v97lihv12pf"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-hex" ,rust-hex-0.4)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
         ("rust-num-traits" ,rust-num-traits-0.2)
         ("rust-rusqlite" ,rust-rusqlite-0.24)
         ("rust-tempfile" ,rust-tempfile-3))))
@@ -1975,26 +2006,26 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-tree-0.28
+(define-public rust-nu-plugin-tree-0.29
   (package
     (name "rust-nu-plugin-tree")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_tree" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0xifcyg0z025n6w0cqjnmrjcbynv437dkxpsxgbvm4iybj558590"))))
+        (base32 "096l86ci540v0aj9xrvwd4ccgg388kabz4rbg88nrpw0rlacrbc3"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-derive-new" ,rust-derive-new-0.5)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
         ("rust-ptree" ,rust-ptree-0.3))))
     (home-page "https://www.nushell.sh")
     (synopsis "Tree viewer plugin for Nushell")
@@ -2002,27 +2033,27 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-plugin-xpath-0.28
+(define-public rust-nu-plugin-xpath-0.29
   (package
     (name "rust-nu-plugin-xpath")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu_plugin_xpath" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0mwajr07489kgv2yhxsk0laydf8m8p736npvkcbsjxaxydnv5a5a"))))
+        (base32 "0459awkffb2sydd2l5gbcx1kz466qkigb1bxn5ka208y9k5qz54v"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-bigdecimal" ,rust-bigdecimal-0.2)
         ("rust-indexmap" ,rust-indexmap-1)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-plugin" ,rust-nu-plugin-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-plugin" ,rust-nu-plugin-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
         ("rust-sxd-document" ,rust-sxd-document-0.3)
         ("rust-sxd-xpath" ,rust-sxd-xpath-0.4))))
     (home-page "https://www.nushell.sh")
@@ -2030,17 +2061,17 @@ Nushell.")
     (description "Traverses XML")
     (license license:expat)))
 
-(define-public rust-nu-protocol-0.28
+(define-public rust-nu-protocol-0.29
   (package
     (name "rust-nu-protocol")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-protocol" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0khpg2dnapyyimyq4ys1nfs1xzysxq2nb1ka2lmjfgdxrbwzrqnj"))))
+        (base32 "1iii3r37dcl7sf870qrzfkdc1iylbbkcycp1k5ifjvd5yxlkfpxx"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -2052,8 +2083,8 @@ Nushell.")
         ("rust-getset" ,rust-getset-0.1)
         ("rust-indexmap" ,rust-indexmap-1)
         ("rust-log" ,rust-log-0.4)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-num-integer" ,rust-num-integer-0.1)
         ("rust-num-traits" ,rust-num-traits-0.2)
@@ -2067,17 +2098,17 @@ Nushell.")
     (description "Core values and protocols for Nushell")
     (license license:expat)))
 
-(define-public rust-nu-source-0.28
+(define-public rust-nu-source-0.29
   (package
     (name "rust-nu-source")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-source" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "13a590iff8bg6p38xs1hh5krmii6qz2w5k7ak57dyh3r3vbhvmmd"))))
+        (base32 "1m8phdw9iwawsq0ip4zn2w8ggjjr45z1ny2sgdb3h1y1awpnvdbq"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -2094,46 +2125,46 @@ Nushell.")
 Nushell.")
     (license license:expat)))
 
-(define-public rust-nu-stream-0.28
+(define-public rust-nu-stream-0.29
   (package
     (name "rust-nu-stream")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-stream" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "02dl4d9gzl2jhg71hfc04x9j4p29iwwcyvm6m9pihwfpwb3q2bhj"))))
+        (base32 "15zx16s4wb23316ih4wqnnpajh1qz5vckpzk3k41qqkmar1w4sah"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-futures" ,rust-futures-0.3)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28))))
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29))))
     (home-page "https://www.nushell.sh")
     (synopsis "Nushell stream")
     (description "This package provides Nushell stream.")
     (license license:expat)))
 
-(define-public rust-nu-table-0.28
+(define-public rust-nu-table-0.29
   (package
     (name "rust-nu-table")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-table" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "15yd0wrl0y0rmjdvq2gmk97nxppdy5r424vy8v85gk876g82gi1s"))))
+        (base32 "1ihrr2406v5yjdfm699q6alx5bh49q8d04x1dzvn6qydgmf6r8z6"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
-       (("rust-nu-ansi-term" ,rust-nu-ansi-term-0.28)
+       (("rust-nu-ansi-term" ,rust-nu-ansi-term-0.29)
         ("rust-regex" ,rust-regex-1)
         ("rust-unicode-width" ,rust-unicode-width-0.1))))
     (home-page "https://www.nushell.sh")
@@ -2141,17 +2172,17 @@ Nushell.")
     (description "Nushell table printing")
     (license license:expat)))
 
-(define-public rust-nu-test-support-0.28
+(define-public rust-nu-test-support-0.29
   (package
     (name "rust-nu-test-support")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
        (uri (crate-uri "nu-test-support" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1qphsvr1wpn26ak5g4bj106csm8bia12srpv1dwy4zif42if57gm"))))
+        (base32 "0dlmhrskpdp82a6064srx1c4bqvfz66madx2i6cgxg56d7x38km6"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
@@ -2161,11 +2192,12 @@ Nushell.")
         ("rust-dunce" ,rust-dunce-1)
         ("rust-getset" ,rust-getset-0.1)
         ("rust-glob" ,rust-glob-0.3)
+        ("rust-hamcrest2" ,rust-hamcrest2-0.3)
         ("rust-indexmap" ,rust-indexmap-1)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
-        ("rust-nu-value-ext" ,rust-nu-value-ext-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
+        ("rust-nu-value-ext" ,rust-nu-value-ext-0.29)
         ("rust-num-bigint" ,rust-num-bigint-0.3)
         ("rust-tempfile" ,rust-tempfile-3))))
     (home-page "https://www.nushell.sh")
@@ -2174,10 +2206,10 @@ Nushell.")
 tests.")
     (license license:expat)))
 
-(define-public rust-nu-value-ext-0.28
+(define-public rust-nu-value-ext-0.29
   (package
     (name "rust-nu-value-ext")
-    (version "0.28.0")
+    (version "0.29.0")
     (source
      (origin
        (method url-fetch)
@@ -2185,16 +2217,16 @@ tests.")
        (file-name
         (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0kwx2s4gyss8gmj72kl0y2yzq5injwv9g9n53bal339b81dd7v90"))))
+        (base32 "1riq3xg6cqwrfb55bwva13m5dn4d7d71g2825dn7z2i96f6vylwi"))))
     (build-system cargo-build-system)
     (arguments
      `(#:skip-build? #t
        #:cargo-inputs
        (("rust-indexmap" ,rust-indexmap-1)
         ("rust-itertools" ,rust-itertools-0.10)
-        ("rust-nu-errors" ,rust-nu-errors-0.28)
-        ("rust-nu-protocol" ,rust-nu-protocol-0.28)
-        ("rust-nu-source" ,rust-nu-source-0.28)
+        ("rust-nu-errors" ,rust-nu-errors-0.29)
+        ("rust-nu-protocol" ,rust-nu-protocol-0.29)
+        ("rust-nu-source" ,rust-nu-source-0.29)
         ("rust-num-traits" ,rust-num-traits-0.2))))
     (home-page "https://www.nushell.sh")
     (synopsis "@code{Extension} traits for values in Nushell")
diff --git a/gnu/packages/speech.scm b/gnu/packages/speech.scm
index 687a3c10cf..093f6f957b 100644
--- a/gnu/packages/speech.scm
+++ b/gnu/packages/speech.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2016 David Thompson <davet@gnu.org>
 ;;; Copyright © 2016, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2018, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018, 2020, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
@@ -55,15 +55,16 @@
 (define-public flite
   (package
     (name "flite")
-    (version "2.1")
+    (version "2.2")
     (source
      (origin
-       (method url-fetch)
-       (uri
-        (string-append "http://www.festvox.org/" name "/packed/" name
-                       "-" version "/" name "-" version "-release.tar.bz2"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/festvox/flite")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "119b7l7pjb1l5raqq24p8rmhdqni49vjh2mgdryrfr575rm3yg67"))))
+        (base32 "1n0p81jzndzc1rzgm66kw9ls189ricy5v1ps11y0p2fk1p56kbjf"))))
     (build-system gnu-build-system)
     (arguments
      ;; XXX:
diff --git a/gnu/packages/sphinx.scm b/gnu/packages/sphinx.scm
index e85e4a0f7e..4aeed10f30 100644
--- a/gnu/packages/sphinx.scm
+++ b/gnu/packages/sphinx.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 David Thompson <davet@gnu.org>
-;;; Copyright © 2015, 2017, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2017, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2016, 2017, 2018, 2019 Marius Bakke <mbakke@fastmail.com>
@@ -216,6 +216,28 @@ to code blocks.")
 @url{Devhelp,https://wiki.gnome.org/Apps/Devhelp} documents.")
     (license license:bsd-2)))
 
+(define-public python-sphinxcontrib-github-alt
+  (package
+    (name "python-sphinxcontrib-github-alt")
+    (version "1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "sphinxcontrib_github_alt" version))
+       (sha256
+        (base32
+         "1x9af78vamjjcdrrhiah3wg613jv7gm8yh9vvqfrmf4vam6mimyg"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-docutils" ,python-docutils)
+       ("python-sphinx" ,python-sphinx)))
+    (home-page "https://github.com/jupyter/sphinxcontrib_github_alt")
+    (synopsis "Link to GitHub pages from Sphinx docs")
+    (description
+     "This package lets you link to GitHub issues, pull requests, commits and
+users from Sphinx docs.")
+    (license license:bsd-2)))
+
 (define-public python-sphinxcontrib-htmlhelp
   (package
     (name "python-sphinxcontrib-htmlhelp")
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index c0e0bd87d8..97b0456004 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -403,48 +403,57 @@ libssh library.")
   (deprecated-package "guile3.0-ssh" guile-ssh))
 
 (define-public corkscrew
-  (package
-    (name "corkscrew")
-    (version "2.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/patpadgett/corkscrew")
-             (commit (string-append "v" version))))
-       (sha256
-        (base32 "0g4pkczrc1zqpnxyyjwcjmyzdj5qqcpzwf1bm3965zdwp94bpppf"))
-       (file-name (git-file-name name version))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           ;; Replace configure phase as the ./configure script does not like
-           ;; CONFIG_SHELL and SHELL passed as parameters.
-           (lambda* (#:key outputs build target #:allow-other-keys)
-             (let* ((out   (assoc-ref outputs "out"))
-                    (bash  (which "bash"))
-                    ;; Set --build and --host flags as the provided config.guess
-                    ;; is not able to detect them.
-                    (flags `(,(string-append "--prefix=" out)
-                             ,(string-append "--build=" build)
-                             ,(string-append "--host=" (or target build)))))
-               (setenv "CONFIG_SHELL" bash)
-               (apply invoke bash "./configure" flags))))
-         (add-after 'install 'install-documentation
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (doc (string-append out "/share/doc/" ,name "-" ,version)))
-               (install-file "README.markdown" doc)
-               #t))))))
-    (home-page "https://github.com/patpadgett/corkscrew")
-    (synopsis "SSH tunneling through HTTP(S) proxies")
-    (description
-     "Corkscrew tunnels SSH connections through most HTTP and HTTPS proxies.
-Proxy authentication is only supported through the plain-text HTTP basic
-authentication scheme.")
-    (license license:gpl2+)))
+  ;; The last 2.0 release hails from 2009.  Use a fork (submitted upstream as
+  ;; <https://github.com/patpadgett/corkscrew/pull/5>) that adds now-essential
+  ;; IPv6 and TLS support.
+  (let ((revision "0")
+        (commit "268b71e88ee51fddceab96d665b327394f1feb12"))
+    (package
+      (name "corkscrew")
+      (version (git-version "2.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/rtgill82/corkscrew")
+               (commit commit)))
+         (sha256
+          (base32 "1rylbimlfig3ii4bqr4r058lkc43pqkxnxqpqdpm31blh3xs0dcw"))
+         (file-name (git-file-name name version))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:configure-flags
+         (list "--enable-ssl")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'update-metadata
+             (lambda _
+               (substitute* "configure.ac"
+                 ;; Our version differs significantly.
+                 (("2.0") (string-append ,version " (Guix)")))
+               (substitute* "corkscrew.c"
+                 ;; This domain's since been squat.
+                 (("\\(agroman@agroman\\.net\\)")
+                  (format #f "<~a>" ,(package-home-page this-package))))))
+           (add-after 'install 'install-documentation
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (doc (string-append out "/share/doc/" ,name "-" ,version)))
+                 (install-file "README.md" doc)
+                 #t))))))
+      (native-inputs
+       `(("autoconf" ,autoconf)
+         ("automake" ,automake)
+         ("pkg-config" ,pkg-config)))
+      (inputs
+       `(("openssl" ,openssl)))
+      (home-page "https://github.com/patpadgett/corkscrew")
+      (synopsis "SSH tunneling through HTTP(S) proxies")
+      (description
+       "Corkscrew tunnels SSH connections through most HTTP and HTTPS proxies.
+It supports proxy authentication through the HTTP basic authentication scheme
+with optional @acronym{TLS, Transport-Level Security} to protect credentials.")
+      (license license:gpl2+))))
 
 (define-public mosh
   (package
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index 915eaeac18..e6ded2257b 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -711,14 +711,14 @@ analysis.")
 (define-public r-survival
   (package
     (name "r-survival")
-    (version "3.2-9")
+    (version "3.2-10")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "survival" version))
        (sha256
         (base32
-         "1dkpdci2lvx141193wd69445y65w8k2pa89lc3l83i5jaj56svdn"))))
+         "19fg7mrrr6chbixq10kwwl5clry2y57v6zl24jlmxx2ylis0vjzd"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-matrix" ,r-matrix)))
@@ -1734,14 +1734,14 @@ database.")
 (define-public r-dbplyr
   (package
     (name "r-dbplyr")
-    (version "2.1.0")
+    (version "2.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "dbplyr" version))
        (sha256
         (base32
-         "1sm0fixfr3bkq18p804mfbfz9z5z801dhzkrpq0spr25jkhpf26l"))))
+         "025wqpmxdhzblb0pf58m3qh5h6bf5x8qvkf47vyl1cjsp13wz95b"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-assertthat" ,r-assertthat)
@@ -2682,13 +2682,13 @@ vectors.")
 (define-public r-catools
   (package
     (name "r-catools")
-    (version "1.18.1")
+    (version "1.18.2")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "caTools" version))
               (sha256
                (base32
-                "1yf98x2gaf84y9m32xrg84g384zlfwsdw7wvywdljpgdpvzs9szz"))))
+                "14q2ry8gaszjl0m97qg62dxv5bpj6k02qwyi7q2lnxgcmwai3mkm"))))
     (properties `((upstream-name . "caTools")))
     (build-system r-build-system)
     (propagated-inputs
@@ -2843,13 +2843,13 @@ a column in data frame.")
 (define-public r-rsqlite
   (package
     (name "r-rsqlite")
-    (version "2.2.4")
+    (version "2.2.5")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "RSQLite" version))
               (sha256
                (base32
-                "050s7gv42v43d15yqj2sdrh82iikfpm32idfnw4nbjjjnlcg7wxf"))))
+                "14cxqh8j5v2rqs6yiargy1miycvx7xj47lppvpnnchi5plimlvyy"))))
     (properties `((upstream-name . "RSQLite")))
     (build-system r-build-system)
     (propagated-inputs
@@ -2917,13 +2917,13 @@ ldap, and also supports cookies, redirects, authentication, etc.")
 (define-public r-xml
   (package
     (name "r-xml")
-    (version "3.99-0.5")
+    (version "3.99-0.6")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "XML" version))
               (sha256
                (base32
-                "19jkpnbjx2ij0h7rxi13sqnjnwsap6wywmd4gnhfnqpic1rrnlk0"))))
+                "0qibvacbfm7gl41ylway3vdyi1qbpa211d48rg3k5i30d48rbf58"))))
     (properties
      `((upstream-name . "XML")))
     (build-system r-build-system)
@@ -3403,17 +3403,18 @@ Stochastic Neighbor Embedding using a Barnes-Hut implementation.")
 (define-public r-e1071
   (package
     (name "r-e1071")
-    (version "1.7-4")
+    (version "1.7-6")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "e1071" version))
        (sha256
         (base32
-         "02935xcscjhb0jmnvh44hxlpjcgladrcr0gpz1jxq07m0qdqgaz6"))))
+         "0blfnv3m5k5xm9bfx1v5awvagqlhqaqpabrvzplf4244c3j259qa"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-class" ,r-class)))
+     `(("r-class" ,r-class)
+       ("r-proxy" ,r-proxy)))
     (home-page "https://cran.r-project.org/web/packages/e1071")
     (synopsis "Miscellaneous functions for probability theory")
     (description
@@ -4143,14 +4144,14 @@ existing packages provide.")
 (define-public r-sfsmisc
   (package
     (name "r-sfsmisc")
-    (version "1.1-8")
+    (version "1.1-10")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sfsmisc" version))
        (sha256
         (base32
-         "198zpkz1gvw954ym8669svrk81yb49j6fyk5i6a7dw07z3snlmdn"))))
+         "1skxahq5jgqdsllpsavzrcpz8l0yj3mfzcf70as8d33jxbiaa4s4"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/sfsmisc")
     (synopsis "Utilities from \"Seminar fuer Statistik\" ETH Zurich")
@@ -5378,14 +5379,14 @@ first and second order derivatives.")
 (define-public r-sn
   (package
     (name "r-sn")
-    (version "1.6-2")
+    (version "2.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "sn" version))
        (sha256
         (base32
-         "179xb7yb8br99aa5awm2yxsy0v5w1kdhv6a7ifaliz2y64677m1g"))))
+         "0sl8qzy9isy5fq8qxh1fg5285jzgy895nbgz8gdq5d0r6zdwrmmb"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-mnormt" ,r-mnormt)
diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm
index eb6cb7b4e3..e800aebda7 100644
--- a/gnu/packages/syncthing.scm
+++ b/gnu/packages/syncthing.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Petter <petter@mykolab.ch>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org>
@@ -44,7 +44,9 @@
 (define-public syncthing
   (package
     (name "syncthing")
-    (version "1.5.0")
+    (version "1.15.1")
+    ; XXX After the go-build-system can use "Go modules", stop using bundled
+    ; dependenices for Syncthing.
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/syncthing/syncthing"
@@ -52,68 +54,12 @@
                                   "/syncthing-source-v" version ".tar.gz"))
               (sha256
                (base32
-                "1394b8y4nllihnjngc0kjpdy7pvyh6v1h09hkn8rdmwxpsdkqkjb"))
-              (modules '((guix build utils)))
-              ;; Delete bundled ("vendored") free software source code.
-              (snippet '(begin
-                          (delete-file-recursively "vendor")
-                          #t))))
+                "04b90zwinl7frxrpjliq41mkbhpnkszmhdc5j2vbqwyhd82warxq"))))
     (build-system go-build-system)
     ;; The primary Syncthing executable goes to "out", while the auxiliary
     ;; server programs and utility tools go to "utils".  This reduces the size
     ;; of "out" by ~80 MiB.
     (outputs '("out" "utils"))
-    ;; When updating Syncthing, check 'go.mod' in the source distribution to
-    ;; ensure we are using the correct versions of these dependencies.
-    (inputs
-     `(("go-github-com-jackpal-go-nat-pmp"
-        ,go-github-com-jackpal-go-nat-pmp)
-       ("go-github-com-bkaradzic-go-lz4" ,go-github-com-bkaradzic-go-lz4)
-       ("go-github-com-calmh-xdr" ,go-github-com-calmh-xdr)
-       ("go-github-com-chmduquesne-rollinghash"
-        ,go-github-com-chmduquesne-rollinghash)
-       ("go-github-com-gobwas-glob" ,go-github-com-gobwas-glob)
-       ("go-github-com-golang-groupcache-lru"
-        ,go-github-com-golang-groupcache-lru)
-       ("go-github-com-jackpal-gateway" ,go-github-com-jackpal-gateway)
-       ("go-github-com-kballard-go-shellquote"
-        ,go-github-com-kballard-go-shellquote)
-       ("go-github-com-lib-pq" ,go-github-com-lib-pq)
-       ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
-       ("go-github-com-oschwald-geoip2-golang"
-        ,go-github-com-oschwald-geoip2-golang)
-       ("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-       ("go-github-com-rcrowley-go-metrics" ,go-github-com-rcrowley-go-metrics)
-       ("go-github-com-sasha-s-go-deadlock" ,go-github-com-sasha-s-go-deadlock)
-       ("go-github-com-syncthing-notify" ,go-github-com-syncthing-notify)
-       ("go-github-com-syndtr-goleveldb" ,go-github-com-syndtr-goleveldb)
-       ("go-github-com-thejerf-suture" ,go-github-com-thejerf-suture)
-       ("go-golang-org-x-time" ,go-golang-org-x-time)
-       ("go-github-com-go-ldap-ldap" ,go-github-com-go-ldap-ldap)
-       ("go-github-com-gogo-protobuf" ,go-github-com-gogo-protobuf)
-       ("go-github-com-shirou-gopsutil" ,go-github-com-shirou-gopsutil)
-       ("go-github-com-prometheus-client-golang"
-        ,go-github-com-prometheus-client-golang)
-       ("go-golang-org-x-net" ,go-golang-org-x-net)
-       ("go-golang-org-x-text" ,go-golang-org-x-text)
-       ("go-github-com-audriusbutkevicius-recli"
-        ,go-github-com-audriusbutkevicius-recli)
-       ("go-github-com-urfave-cli" ,go-github-com-urfave-cli)
-       ("go-github-com-vitrun-qart" ,go-github-com-vitrun-qart)
-       ("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)
-       ("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
-       ("go-github-com-flynn-archive-go-shlex"
-        ,go-github-com-flynn-archive-go-shlex)
-       ("go-github-com-getsentry-raven-go" ,go-github-com-getsentry-raven-go)
-       ("go-github-com-maruel-panicparse" ,go-github-com-maruel-panicparse)
-       ("go-github-com-ccding-go-stun" ,go-github-com-ccding-go-stun)
-       ("go-github-com-audriusbutkevicius-pfilter" ,go-github-com-audriusbutkevicius-pfilter)
-       ("go-github-com-lucas-clemente-quic-go" ,go-github-com-lucas-clemente-quic-go)
-       ("go-github-com-willf-bloom" ,go-github-com-willf-bloom)
-
-       ;; For tests.
-       ("go-github-com-d4l3k-messagediff" ,go-github-com-d4l3k-messagediff)))
-
     (arguments
      `(#:modules ((srfi srfi-26) ; for cut
                   (guix build utils)
@@ -136,8 +82,8 @@
                ;; updater and to build the utilities is to "build all" and then
                ;; "build syncthing" again with -no-upgrade.
                ;; https://github.com/syncthing/syncthing/issues/6118
-               (invoke "go" "run" "build.go" "build" "all")
-               (delete-file "syncthing")
+               (invoke "go" "run" "build.go")
+               (delete-file "bin/syncthing")
                (invoke "go" "run" "build.go" "-no-upgrade" "build" "syncthing"))))
 
          (replace 'check
@@ -149,10 +95,10 @@
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
                    (utils (assoc-ref outputs "utils")))
-               (with-directory-excursion "src/github.com/syncthing/syncthing"
-                 (install-file "syncthing" (string-append out "/bin"))
+               (with-directory-excursion "src/github.com/syncthing/syncthing/bin"
+                 (install-file "../syncthing" (string-append out "/bin"))
                  (for-each (cut install-file <> (string-append utils "/bin/"))
-                           '("stcli" "stcompdirs" "stcrashreceiver"
+                           '("stcompdirs" "stcrashreceiver"
                              "stdisco" "stdiscosrv" "stevents" "stfileinfo"
                              "stfinddevice" "stfindignored" "stgenfiles"
                              "stindex" "strelaypoolsrv" "strelaysrv" "stsigtool"
diff --git a/gnu/packages/tcl.scm b/gnu/packages/tcl.scm
index 709b3dd603..55a95792cb 100644
--- a/gnu/packages/tcl.scm
+++ b/gnu/packages/tcl.scm
@@ -143,7 +143,7 @@
     (description
      "[incr Tcl] is a widely used object-oriented system for Tcl.  The name is
 a play on C++, and [incr Tcl] provides a similar object model, including
-multiple inheritence and public and private classes and variables.")
+multiple inheritance and public and private classes and variables.")
     (license license:public-domain)))
 
 (define-public expect
diff --git a/gnu/packages/telegram.scm b/gnu/packages/telegram.scm
index 82d1dc463c..e6bfe6c4f2 100644
--- a/gnu/packages/telegram.scm
+++ b/gnu/packages/telegram.scm
@@ -611,8 +611,8 @@ Telegram instant messenger.")
                          #:include-regexp ("\\.h$")))
                       args))))))
       (synopsis "Parse tl scheme to tlo")
-      (description "TL-Parser is a tl scheme to tlo file parser.  It was formely
-a part of telegram-cli, but now being maintained separately.")
+      (description "TL-Parser is a tl scheme to tlo file parser.  It was
+formerly a part of telegram-cli, but now being maintained separately.")
       (home-page "https://github.com/vysheng/tl-parser")
       (license license:gpl2+))))
 
diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm
index 5c8d247e68..af7148bf84 100644
--- a/gnu/packages/telephony.scm
+++ b/gnu/packages/telephony.scm
@@ -17,7 +17,7 @@
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2020 Raghav Gururajan <raghavgururajan@disroot.org>
-;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2021 LibreMiami <packaging-guix@libremiami.org>
 ;;;
@@ -723,7 +723,7 @@ your calls and messages.")
 (define-public pjproject
   (package
     (name "pjproject")
-    (version "2.10")
+    (version "2.11")
     (source
      (origin
        (method git-fetch)
@@ -733,12 +733,8 @@ your calls and messages.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1aklicpgwc88578k03i5d5cm5h8mfm7hmx8vfprchbmaa2p8f4z0"))
+         "1kn9g1x1vmh4130ghph8mldz5m89gsjs4vpdzlzm98m3808gk5an"))
        (modules '((guix build utils)))
-       ;; The patches upstream status can be tracked at:
-       ;; https://github.com/pjsip/pjproject/pull/2501.
-       (patches (search-patches "pjproject-correct-the-cflags-field.patch"
-                                "pjproject-fix-pkg-config-ldflags.patch"))
        (snippet
         '(begin
            ;; Remove bundled libraries.
@@ -746,8 +742,7 @@ your calls and messages.")
            (substitute* "aconfigure.ac"
              (("third_party/build/os-auto.mak") ""))
            (substitute* "Makefile"
-             (("third_party/build") ""))
-           #t))))
+             (("third_party/build") ""))))))
     (build-system gnu-build-system)
     (outputs '("out" "debug" "static"))
     (arguments
@@ -785,8 +780,7 @@ your calls and messages.")
            ;; Make all the files writable to prevent the following error:
            ;; "autom4te: cannot open aconfigure: Permission denied".
            (lambda _
-             (for-each make-file-writable (find-files "."))
-             #t))
+             (for-each make-file-writable (find-files "."))))
          (add-before 'build 'build-dep
            (lambda _ (invoke "make" "dep")))
          ;; The check phases is moved after the install phase so to
@@ -800,8 +794,7 @@ your calls and messages.")
                (with-directory-excursion out
                  (for-each (lambda (f)
                              (rename-file f (string-append s "/" (basename f))))
-                           (find-files "." "\\.a$")))
-               #t)))
+                           (find-files "." "\\.a$"))))))
          (add-after 'install 'check
            (assoc-ref %standard-phases 'check))
          (add-before 'patch-source-shebangs 'autoconf
@@ -844,8 +837,7 @@ your calls and messages.")
                ;; Disable the pjnath and pjsua tests, which require an actual
                ;; network and an actual sound card, respectively.
                (("pjnath-test pjmedia-test pjsip-test pjsua-test")
-                "pjmedia-test pjsip-test"))
-             #t)))))
+                "pjmedia-test pjsip-test")))))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index 6a90ba0821..cdb0218acf 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -8188,3 +8188,280 @@ support packages.  Others are cmbright, hvmath and kerkis.")
     (license (list license:silofl1.1 ;for Arev Sans
                    license:lppl1.3a  ;for TeX support files
                    license:gpl2))))  ;for ams-mdbch.sty
+
+(define-public texlive-mathdesign
+  (package
+    (inherit (simple-texlive-package
+              "texlive-mathdesign"
+              (list "/doc/fonts/mathdesign/"
+                    "/dvips/mathdesign/"
+                    "/fonts/enc/dvips/mathdesign/"
+                    "/fonts/map/dvips/mathdesign/"
+                    "/fonts/tfm/public/mathdesign/"
+                    "/fonts/type1/public/mathdesign/"
+                    "/fonts/vf/public/mathdesign/"
+                    "/tex/latex/mathdesign/")
+              (base32
+               "0jcby2sd0l3ank2drxc0qcf5d1cwa8idzh4g91h4nxk8zrzxj8nr")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/mathdesign")
+    (synopsis "Mathematical fonts to fit with particular text fonts")
+    (description "The Math Design project offers free mathematical
+fonts that match with existing text fonts.  To date, three free font
+families are available: Adobe Utopia, URW Garamond and Bitstream
+Charter.  Mathdesign covers the whole LaTeX glyph set including AMS
+symbols.  Both roman and bold versions of these symbols can be used.
+Moreover, there is a choice between three greek fonts (two of them
+created by the Greek Font Society).")
+    (license license:gpl2+)))
+
+(define-public texlive-bera
+  (package
+    (inherit (simple-texlive-package
+              "texlive-bera"
+              (list "/doc/fonts/bera/"
+                    "/fonts/afm/public/bera/"
+                    "/fonts/map/dvips/bera/"
+                    "/fonts/tfm/public/bera/"
+                    "/fonts/type1/public/bera/"
+                    "/fonts/vf/public/bera/"
+                    "/tex/latex/bera/")
+              (base32
+               "1pkmhhr6ah44xhipjr7nianv03hr4w4bn45xcvp264yw6ymqzqwr")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/bera")
+    (synopsis "Bera fonts")
+    (description "The @code{bera} package contains the Bera Type 1
+fonts and files to use the fonts with LaTeX.  Bera is a set of three
+font families: Bera Serif (a slab-serif Roman), Bera Sans (a Frutiger
+descendant) and Bera Mono (monospaced/typewriter).  The Bera family is
+a repackaging, for use with TeX, of the Bitstream Vera family.")
+    (license license:silofl1.1)))
+
+(define-public texlive-fourier
+  (package
+    (inherit (simple-texlive-package
+              "texlive-fourier"
+              (list "/doc/fonts/fourier/"
+                    "/fonts/afm/public/fourier/"
+                    "/fonts/map/dvips/fourier/"
+                    "/fonts/tfm/public/fourier/"
+                    "/fonts/type1/public/fourier/"
+                    "/fonts/vf/public/fourier/"
+                    "/tex/latex/fourier/")
+              (base32
+               "1vs2xdx6f6hd01zlslx3y93g3dsa7k3yhqpnhgkizgjmz0r9ipz1")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/fourier")
+    (synopsis "Utopia fonts for LaTeX documents")
+    (description "Fourier-GUTenberg is a LaTeX typesetting system
+which uses Adobe Utopia as its standard base font.  Fourier-GUTenberg
+provides all complementary typefaces needed to allow Utopia based TeX
+typesetting including an extensive mathematics set and several other
+symbols.  The system is absolutely stand-alone; apart from Utopia and
+Fourier no other typefaces are required.  Utopia is a registered
+trademark of Adobe Systems Incorporated.")
+    (license license:lppl)))
+
+(define-public texlive-utopia
+  (package
+    (inherit (simple-texlive-package
+              "texlive-utopia"
+              (list "/doc/fonts/utopia/"
+                    "/fonts/afm/adobe/utopia/"
+                    "/fonts/tfm/adobe/utopia/"
+                    "/fonts/type1/adobe/utopia/"
+                    "/fonts/vf/adobe/utopia/")
+              (base32
+               "113wgkfz4z0ls2grxxfj17l42a1yv9r5ipcd0156xnfsrqvqzxfc")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/utopia")
+    (synopsis "Adobe Utopia fonts")
+    (description "The Adobe Standard Encoding set of the Utopia font
+family, as contributed to the X Consortium.  The set comprises upright
+and italic shapes in medium and bold weights.  Macro support and
+matching maths fonts are provided by the @code{fourier} and
+@code{mathdesign} font packages.")
+    (license (license:fsf-free
+              "http://mirrors.ctan.org/fonts/utopia/README"))))
+
+(define-public texlive-fontaxes
+  (package
+    (name "texlive-fontaxes")
+    (version "1.0e")
+    (source
+     (origin
+       (method svn-fetch)
+       (uri (texlive-ref "latex" "fontaxes"))
+       (file-name (string-append name "-" version "-checkout"))
+       (sha256
+        (base32
+         "19mhp9l7cjw0sbq55c9lz0l2pffkyhyir3i63jqynifjmglbgkl7"))))
+    (build-system texlive-build-system)
+    (arguments '(#:tex-directory "latex/fontaxes"))
+    (home-page "http://www.ctan.org/pkg/fontaxes")
+    (synopsis "Additional font axes for LaTeX")
+    (description "The @code{fontaxes} package adds several new font
+axes on top of LaTeX's New Font Selection Scheme (NFSS).  In
+particular, it splits the shape axis into a primary and a secondary
+shape axis and it adds three new axes to deal with the different
+figure versions offered by many professional fonts.")
+    (license license:lppl1.3+)))
+
+(define-public texlive-mweights
+  (package
+    (inherit (simple-texlive-package
+              "texlive-mweights"
+              (list "/doc/latex/mweights/"
+                    "/tex/latex/mweights/")
+              (base32
+               "1k2xclk54q3xgn48hji23q52nivkzgwf0s30bmm6k83f7v57qv8h")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/mweights")
+    (synopsis "Support for multiple-weight font packages")
+    (description "Many font families available for use with LaTeX are
+available at multiple weights.  Many Type 1-oriented support packages
+for such fonts re-define the standard @code{\\mddefault} or
+@code{\\bfdefault} macros.  This can create difficulties if the weight
+desired for one font family is not available for another font family,
+or if it differs from the weight desired for another font family.  The
+@code{mweights} package provides a solution to these difficulties.")
+    (license license:lppl)))
+
+(define-public texlive-cabin
+  (package
+    (inherit (simple-texlive-package
+              "texlive-cabin"
+              (list "/doc/fonts/cabin/"
+                    "/fonts/enc/dvips/cabin/"
+                    "/fonts/map/dvips/cabin/"
+                    "/fonts/opentype/impallari/cabin/"
+                    "/fonts/tfm/impallari/cabin/"
+                    "/fonts/type1/impallari/cabin/"
+                    "/fonts/vf/impallari/cabin/"
+                    "/tex/latex/cabin/")
+              (base32
+               "0dfq9gqch80iyvp58spmpmqfc9h61sjvnddm81ba0af1p8ag8sfg")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/cabin")
+    (synopsis "Humanist Sans Serif font with LaTeX support")
+    (description "Cabin is a humanist sans with four weights, true
+italics and small capitals.  According to its designer, Pablo
+Impallari, Cabin was inspired by the typefaces of Edward Johnston and
+Eric Gill.  Cabin incorporates modern proportions, optical adjustments
+and some elements of the geometric sans.  @code{cabin.sty} supports
+use of the font under LaTeX, pdfLaTeX, XeLaTeX and LuaLaTeX.  It uses
+the @code{mweights} package to manage the user's view of all those
+font weights.  An @code{sfdefault} option is provided to enable Cabin
+as the default text font.  The @code{fontaxes} package is required for
+use with [pdf]LaTeX.")
+    (license (list license:silofl1.1 ;for Cabin
+                   license:lppl))))  ;for support files
+
+(define-public texlive-newtx
+  (package
+    (inherit (simple-texlive-package
+              "texlive-newtx"
+              (list "/doc/fonts/newtx/"
+                    "/fonts/afm/public/newtx/"
+                    "/fonts/enc/dvips/newtx/"
+                    "/fonts/map/dvips/newtx/"
+                    "/fonts/opentype/public/newtx/"
+                    "/fonts/tfm/public/newtx/"
+                    "/fonts/type1/public/newtx/"
+                    "/fonts/vf/public/newtx/"
+                    "/tex/latex/newtx/")
+              (base32
+               "0rqjj33m6xkhrjzjhf24kxdg61az5sqsbcl0m7xqkf4akqybn22d")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/newtx")
+    (synopsis "Repackaging of the TX fonts with improved metrics")
+    (description "The @code{newtx} bundle splits
+@code{txfonts.sty} (from the TX fonts distribution) into two
+independent packages, @code{newtxtext.sty} and @code{newtxmath.sty},
+each with fixes and enhancements.  @code{newtxmath}'s metrics have
+been re-evaluated to provide a less tight appearance and to provide a
+@code{libertine} option that substitutes Libertine italic and Greek
+letters for the existing math italic and Greek glyphs, making a
+mathematics package that matches Libertine text quite well.")
+    (license license:lppl1.3)))
+
+(define-public texlive-xcharter
+  (package
+    (inherit (simple-texlive-package
+              "texlive-xcharter"
+              (list "/doc/fonts/xcharter/"
+                    "/fonts/afm/public/xcharter/"
+                    "/fonts/enc/dvips/xcharter/"
+                    "/fonts/map/dvips/xcharter/"
+                    "/fonts/opentype/public/xcharter/"
+                    "/fonts/tfm/public/xcharter/"
+                    "/fonts/type1/public/xcharter/"
+                    "/fonts/vf/public/xcharter/"
+                    "/tex/latex/xcharter/")
+              (base32
+               "0krm4h53lw7h9jbmv5nc89fm4x7i8l574aig1l4mw8w3ziknwmi7")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/xcharter")
+    (synopsis "Extension of the Bitstream Charter fonts")
+    (description "@code{xcharter} repackages Bitstream Charter with an
+extended set of features.  The extension provides small caps, oldstyle
+figures and superior figures in all four styles, accompanied by LaTeX
+font support files.  The fonts themselves are provided in both Adobe
+Type 1 and OTF formats, with supporting files as necessary.")
+    (license (list (license:fsf-free
+                    "http://mirrors.ctan.org/fonts/xcharter/README")
+                   license:lppl1.3))))
+
+(define-public texlive-ly1
+  (package
+    (inherit (simple-texlive-package
+              "texlive-ly1"
+              (list "/doc/fonts/ly1/"
+                    "/fonts/enc/dvips/ly1/"
+                    "/fonts/map/dvips/ly1/"
+                    "/fonts/tfm/adobe/ly1/"
+                    "/fonts/vf/adobe/ly1/"
+                    "/tex/latex/ly1/")
+              (base32
+               "0wjyw0risgvrq97zfciglwy1f4msvfslln6pz0q8yzzx8wsv3zgq")
+              #:trivial? #t))
+    (home-page "https://www.ctan.org/pkg/ly1")
+    (synopsis "Support for LY1 LaTeX encoding")
+    (description "The legacy @emph{texnansi} (TeX and ANSI) encoding
+is known in the LaTeX scheme of things as @emph{LY1} encoding.  The
+@code{ly1} bundle includes metrics and LaTeX macros to use the three
+basic Adobe Type 1 fonts (Times, Helvetica and Courier) in LaTeX using
+LY1 encoding.")
+    (license license:lppl1.0+)))
+
+(define-public texlive-kastrup
+  (package
+    (name "texlive-kastrup")
+    (version (number->string %texlive-revision))
+    (source
+     (origin
+       (method svn-fetch)
+       (uri (texlive-ref "generic" "kastrup"))
+       (file-name (string-append name "-" version "-checkout"))
+       (sha256
+        (base32
+         "1kkshc48brkq2nx3rlbv78a2130izykbf33ri1q2shqr8pjfmmq8"))))
+    (build-system texlive-build-system)
+    (arguments
+     '(#:tex-directory "generic/kastrup"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-generated-file
+           (lambda _
+             (delete-file "binhex.drv")
+             #t)))))
+    (home-page "http://www.ctan.org/pkg/binhex")
+    (synopsis "Convert numbers into binary, octal and hexadecimal")
+    (description "The @code{kastrup} package provides the
+@emph{binhex.tex} file.  This file provides expandable macros for both
+fixed-width and minimum-width numbers to bases 2, 4, 8 and 16.  All
+constructs TeX accepts as arguments to its @code{\\number} primitive
+are valid as arguments for the macros.  The package may be used under
+LaTeX and plain TeX.")
+    (license (license:fsf-free "file:/binhex.dtx"))))
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index 91e37b16d7..47a8fa81c8 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -862,14 +862,14 @@ Octave.  TeXmacs is completely extensible via Guile.")
 (define-public scintilla
   (package
     (name "scintilla")
-    (version "4.4.6")
+    (version "5.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (let ((v (apply string-append (string-split version #\.))))
               (string-append "https://www.scintilla.org/scintilla" v ".tgz")))
        (sha256
-        (base32 "1p62dq2fgdkvdn2clz1xjdj09acv87rbifl67zhlz7skqip31y9d"))))
+        (base32 "0w5550fijkhmzvdydd8770qq9dgnbq1sd0a8rn4g6mwyfpcyhbfy"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags (list "GTK3=1" "CC=gcc" "-Cgtk")
@@ -889,7 +889,8 @@ Octave.  TeXmacs is completely extensible via Guile.")
                          (find-files "include/" "."))
                #t))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("gcc" ,gcc-9)                   ;Code has C++17 requirements
+       ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)))
     (inputs
      `(("gtk+" ,gtk+)))
@@ -966,7 +967,7 @@ The basic features of Geany are:
 (define-public fe
   (package
     (name "fe")
-    ;; Stable release is 1.8.  However, this development version
+    ;; Stable release is 1.9.  However, this development version
     ;; introduces support for UTF-8.
     (version "2.0")
     (source (origin
@@ -975,7 +976,7 @@ The basic features of Geany are:
                                   "fe-" version ".tar.gz"))
               (sha256
                (base32
-                "1hwws7si1752z6hp61zxznvgsb6846lp8zl1hn5ddhsbafwalwb9"))))
+                "10mk5wc3dsdp46b3hkjyd740gcdv6m1gvlr3p8xjxf55b3vfs0la"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ;no test
diff --git a/gnu/packages/time.scm b/gnu/packages/time.scm
index be37ea980e..d6ebb59a1e 100644
--- a/gnu/packages/time.scm
+++ b/gnu/packages/time.scm
@@ -97,14 +97,14 @@ expressions.")
 (define-public python-pytzdata
   (package
     (name "python-pytzdata")
-    (version "2019.3")
+    (version "2020.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytzdata" version))
        (sha256
         (base32
-         "0ppfc6kz4p41mxyqxq1g1zp6gvns99g6b344qj6ih0x9vxy6zh7s"))))
+         "0h0md0ldhb8ghlwjslkzh3wcj4fxg3n43bj5sghqs2m06nri7yiy"))))
     (build-system python-build-system)
     ;; XXX: The PyPI distribution contains no tests, and the upstream
     ;; repository lacks a setup.py!  How to build from git?
@@ -123,14 +123,15 @@ expressions.")
 (define-public python-pytz
   (package
     (name "python-pytz")
-    (version "2020.4")
+    ;; This package should be kept in sync with tzdata in (gnu packages base).
+    (version "2021.1")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "pytz" version))
       (sha256
        (base32
-        "0s72lz9q7rm2xgl2in0nvhn5cp0cyrxa257fpj2919g0s797ssry"))))
+        "1nn459q7zg20n75akxl3ljkykgw1ydc8nb05rx1y4f5zjh4ak943"))))
     (build-system python-build-system)
     (home-page "http://pythonhosted.org/pytz")
     (synopsis "Python timezone library")
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 39ed7d74af..9ae7ff6d81 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -277,7 +277,7 @@ living in the same process.")
     (description
      "GnuTLS is a secure communications library implementing the SSL, TLS
 and DTLS protocols.  It is provided in the form of a C library to support the
-protocols, as well as to parse and write X.5009, PKCS 12, OpenPGP and other
+protocols, as well as to parse and write X.509, PKCS #12, OpenPGP and other
 required structures.")
     (license license:lgpl2.1+)
     (properties '((ftp-server . "ftp.gnutls.org")
@@ -460,7 +460,7 @@ required structures.")
 (define-public openssl/fixed
   (package
    (inherit openssl)
-   (version "1.1.1j")
+   (version "1.1.1k")
    (source (origin
              (method url-fetch)
              (uri (list (string-append "https://www.openssl.org/source/openssl-"
@@ -473,7 +473,7 @@ required structures.")
              (patches (search-patches "openssl-1.1-c-rehash-in.patch"))
              (sha256
               (base32
-               "1gw17520vh13izy1xf5q0a2fqgcayymjjj5bk0dlkxndfnszrwma"))))))
+               "1rdfzcrxy9y38wqdw5942vmdax9hjhgrprzxm42csal7p5shhal9"))))))
 
 (define-public openssl-1.0
   (package
diff --git a/gnu/packages/tmux.scm b/gnu/packages/tmux.scm
index 1537080dd8..b741b99ddd 100644
--- a/gnu/packages/tmux.scm
+++ b/gnu/packages/tmux.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016 Matthew Jordan <matthewjordandevops@yandex.com>
 ;;; Copyright © 2017 Vasile Dumitrascu <va511e@yahoo.com>
 ;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
-;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2019–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com>
@@ -224,7 +224,7 @@ them, etc., by attaching to the corresponding pane in tmux.")
 (define-public tmux-xpanes
   (package
     (name "tmux-xpanes")
-    (version "4.1.2")
+    (version "4.1.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -233,7 +233,7 @@ them, etc., by attaching to the corresponding pane in tmux.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0vm5mi6dqdbg0b5qh4r8sr1plpc00jryd8a2qxpp3a72cigjvvf0"))))
+                "09fmnn1q76r1l4cv7clmfr3j9cjmd053kq238d0qj2i486948ivv"))))
     (build-system trivial-build-system)
     (inputs
      `(("bash" ,bash)))
diff --git a/gnu/packages/upnp.scm b/gnu/packages/upnp.scm
index 33f3fb21c0..2743ba456d 100644
--- a/gnu/packages/upnp.scm
+++ b/gnu/packages/upnp.scm
@@ -96,14 +96,14 @@ over IRC, instant messaging, network games, and most server software.")
 (define-public libupnp
   (package
     (name "libupnp")
-    (version "1.14.2")
+    (version "1.14.5")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "https://github.com/pupnp/pupnp/releases/download"
                           "/release-" version "/libupnp-" version".tar.bz2"))
       (sha256
-       (base32 "0w62sn95fnp12qwz5nid6ksg2h9k0k6rinz00p8m3jd4j5dh9qzz"))))
+       (base32 "16hlcpffmqd4rja57m6km1dpx3abgv91vvmb8971vfg6gd0glzr2"))))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (build-system gnu-build-system)
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 4d4b276a10..f8b88975ac 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -172,14 +172,14 @@ as well as the classic centralized workflow.")
 (define-public git
   (package
    (name "git")
-   (version "2.31.0")
+   (version "2.31.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://kernel.org/software/scm/git/git-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "0h4sg3xqa9pd2agrd7m18sqg319ls978d39qswyf30rjvg5n5wg8"))))
+              "10367n5sv4nsgaxy486pbp7nscx34vjk8vrb06jm9ffm8ix42qcz"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("native-perl" ,perl)
@@ -196,7 +196,7 @@ as well as the classic centralized workflow.")
                 version ".tar.xz"))
           (sha256
            (base32
-            "1v40wwj130k76xf2w6vwhvfpkk765q1gcy5bqcrqssxf66ydqp8q"))))
+            "00n7vbfmd3ywgjksgwrszwj0l2niba64qkaq07ra4p8mawy483ax"))))
       ;; For subtree documentation.
       ("asciidoc" ,asciidoc-py3)
       ("docbook-xsl" ,docbook-xsl)
@@ -2330,7 +2330,7 @@ Mercurial, Bazaar, Darcs, CVS, Fossil, and Veracity.")
 (define-public grokmirror
   (package
     (name "grokmirror")
-    (version "2.0.5")
+    (version "2.0.8")
     (source
      (origin
        (method git-fetch)
@@ -2340,7 +2340,7 @@ Mercurial, Bazaar, Darcs, CVS, Fossil, and Veracity.")
              (commit (string-append "v" version))))
        (file-name (string-append name "-" version "-checkout"))
        (sha256
-        (base32 "006ar3kc6fw1sq300ar9np4a63qzzsdama6cv30wh65v5mqw1mnv"))))
+        (base32 "0zfiwjw02df3mzpawp9jx61iwp0nhcf6y03cs8022l0hkvc7blbr"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f                      ; no test suite
@@ -2722,7 +2722,7 @@ interrupted, published, and collaborated on while in progress.")
 (define-public git-lfs
   (package
     (name "git-lfs")
-    (version "2.13.2")
+    (version "2.13.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2731,7 +2731,7 @@ interrupted, published, and collaborated on while in progress.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0gfpzdya48phwln61746ii78sq55mhzj938lz8x062xkkcsdvbf4"))))
+                "0r7dmqhkhz91d3n7qfpny483x8f1n88yya22j2fvx75rgg33z2sg"))))
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/git-lfs/git-lfs"
@@ -3024,7 +3024,7 @@ If several repos are related, it helps to see their status together.")
 (define-public ghq
   (package
     (name "ghq")
-    (version "1.1.5")
+    (version "1.1.7")
     (home-page "https://github.com/x-motemen/ghq")
     (source (origin
               (method git-fetch)
@@ -3034,7 +3034,7 @@ If several repos are related, it helps to see their status together.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "098fik155viylq07az7crzbgswcvhpx0hr68xpvyx0rpri792jbq"))))
+                "155sfmhmh4ia3iinm1s8fk7fxyn5dxdryad9xkbg7mr3i3ikqjwh"))))
     (build-system go-build-system)
     (arguments
      '(#:install-source? #f
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 6a2de91227..1e90874a1c 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -15,7 +15,7 @@
 ;;; Copyright © 2016, 2018, 2019, 2020 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2017 Feng Shu <tumashu@163.com>
-;;; Copyright © 201–72021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Ethan R. Jones <doubleplusgood23@gmail.com>
@@ -286,7 +286,7 @@ video and audio streams from a DVD.")
 (define-public svt-hevc
   (package
     (name "svt-hevc")
-    (version "1.4.3")
+    (version "1.5.0")
     (source
      (origin
        (method git-fetch)
@@ -296,7 +296,7 @@ video and audio streams from a DVD.")
          (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1sqh3dciqm2p1b66kngcpxqy5fx3ramxlxy8gfcbdwn2i3rsqhs7"))))
+        (base32 "038r3x3axil895vh2dq6223623ybrc45vn58vfmfb7cikz68sy23"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f)) ; Test script is stand-alone
@@ -381,7 +381,7 @@ video decode, encode and filtering on Intel's Gen graphics hardware platforms.")
                #t))))))
     (native-inputs
      `(("dash" ,dash)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)))
     (inputs
      `(("glew" ,glew)
@@ -772,7 +772,7 @@ television and DVD.  It is also known as AC-3.")
 (define-public libaom
   (package
     (name "libaom")
-    (version "2.0.2")
+    (version "3.0.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -781,7 +781,7 @@ television and DVD.  It is also known as AC-3.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0f3i983s9yvh9zc6mpy1ck5sjcg9l09lpw9v4md3mv8gbih9f0z0"))))
+                "178rq1d7i9q4lg40bipkyhdrk18j9wi5k5avpa5bls0zm7g5ifsx"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("perl" ,perl)
@@ -1995,7 +1995,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
 (define-public mpv
   (package
     (name "mpv")
-    (version "0.33.0")
+    (version "0.33.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2004,7 +2004,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "06cmycd2gb826kf2zv470w6nhzyk9sdhjydsdiinbgb902lzcpfy"))))
+                "06rw1f55zcsj78ql8w70j9ljp2qb1pv594xj7q9cmq7i92a7hq45"))))
     (build-system waf-build-system)
     (native-inputs
      `(("perl" ,perl) ; for zsh completion file
@@ -2179,14 +2179,14 @@ To load this plugin, specify the following option when starting mpv:
 (define-public youtube-dl
   (package
     (name "youtube-dl")
-    (version "2021.03.14")
+    (version "2021.04.07")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://youtube-dl.org/downloads/latest/"
                                   "youtube-dl-" version ".tar.gz"))
               (sha256
                (base32
-                "1bh74f9q6dv17ah5x8zcxw03dq6jbh959xd39kw374cf9ifrgnd3"))
+                "02d51l6gdjr3zhhi7ydf5kzv8dv4jzq0ygja7zb2h9k7hnl0l27m"))
               (snippet
                '(begin
                   ;; Delete the pre-generated files, except for the man page
@@ -2686,7 +2686,7 @@ for use with HTML5 video.")
 (define-public avidemux
   (package
     (name "avidemux")
-    (version "2.7.6")
+    (version "2.7.8")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -2694,7 +2694,7 @@ for use with HTML5 video.")
                    "avidemux_" version ".tar.gz"))
              (sha256
               (base32
-               "1kwkn976ppahrcr74bnv6sqx75pzl9y21m1mvr5ksi1m6lgp924s"))
+               "00blv5455ry3bb86zyzk1xmq3rbqmbif62khc0kq3whza97l12k2"))
              (patches (search-patches "avidemux-install-to-lib.patch"))))
     (build-system cmake-build-system)
     (native-inputs
@@ -2727,7 +2727,7 @@ for use with HTML5 video.")
        #:phases
        ;; Make sure files inside the included ffmpeg tarball are
        ;; patch-shebanged.
-       (let ((ffmpeg "ffmpeg-4.2.3"))
+       (let ((ffmpeg "ffmpeg-4.2.4"))
          (modify-phases %standard-phases
            (add-before 'patch-source-shebangs 'unpack-ffmpeg
              (lambda _
@@ -4757,7 +4757,7 @@ transcode or reformat the videos in any way, producing perfect backups.")
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/AOMediaCodec/SVT-AV1")
+             (url "https://gitlab.com/AOMediaCodec/SVT-AV1.git")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
@@ -4783,7 +4783,7 @@ transcode or reformat the videos in any way, producing perfect backups.")
     (description "SVT-AV1 is an AV1 codec implementation.  The encoder is a
 work-in-progress, aiming to support video-on-demand and live streaming
 applications.  It only supports Intel-compatible CPUs (x86).")
-    (home-page "https://github.com/AOMediaCodec/SVT-AV1")
+    (home-page "https://gitlab.com/AOMediaCodec/SVT-AV1")
     (license license:bsd-2)))
 
 (define-public svt-vp9
diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm
index 9a3547bbc9..231fae9298 100644
--- a/gnu/packages/vim.scm
+++ b/gnu/packages/vim.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
@@ -71,7 +71,7 @@
 (define-public vim
   (package
     (name "vim")
-    (version "8.2.2632")
+    (version "8.2.2689")
     (source (origin
              (method git-fetch)
              (uri (git-reference
@@ -80,7 +80,7 @@
              (file-name (git-file-name name version))
              (sha256
               (base32
-               "0f80im1swja58n99696zslyzapsx8pyf545pmpzvy173ymnvm6nq"))))
+               "0l0hkr8cw7fdsfc5zzcxx3q1wmv9k3hrgalvffq0l69lviqdgh0p"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -842,7 +842,7 @@ through its msgpack-rpc API.")
 (define-public vim-asyncrun
   (package
     (name "vim-asyncrun")
-    (version "2.7.5")
+    (version "2.8.5")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -851,7 +851,7 @@ through its msgpack-rpc API.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "02fiqf4rcrxbcgvj02mpd78wkxsrnbi54aciwh9fv5mnz5ka249m"))))
+                "0mxsmjv497h6w8dxw0zvqginlx0yvrvrx4z3jhq2x3y2dfvpcm41"))))
     (build-system copy-build-system)
     (arguments
      '(#:install-plan
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index a2d348ab2c..7691614dfa 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -12,12 +12,13 @@
 ;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2019 Guy Fleury Iteriteka <hoonandon@gmail.com>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
-;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -42,6 +43,7 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages build-tools)
   #:use-module (gnu packages check)
@@ -97,6 +99,7 @@
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages pulseaudio)
+  #:use-module (gnu packages readline)
   #:use-module (gnu packages selinux)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages sphinx)
@@ -948,7 +951,7 @@ Debian or a derivative using @command{debootstrap}.")
     (native-inputs
      `(("glib" ,glib "bin")  ; glib-mkenums, etc.
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("vala" ,vala)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)
@@ -1029,64 +1032,48 @@ manage system or application containers.")
 (define-public libvirt
   (package
     (name "libvirt")
-    (version "5.8.0")
+    (version "7.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://libvirt.org/sources/libvirt-"
                            version ".tar.xz"))
        (sha256
-        (base32 "0m8cqaqflvys5kaqpvb0qr4k365j09jc5xk6x70yvg8qkcl2hcz2"))
-       (patches
-        (search-patches "libvirt-create-machine-cgroup.patch"))))
-    (build-system gnu-build-system)
+        (base32 "1l6i1rz1v9rnp61sgzlrlbsfh03208dbm3b259i0jl5sqz85kx01"))
+       (patches (search-patches "libvirt-add-install-prefix.patch"))))
+    (build-system meson-build-system)
     (arguments
      `(#:configure-flags
-       (list "--with-qemu"
-             "--with-qemu-user=nobody"
-             "--with-qemu-group=kvm"
-             "--with-polkit"
-             (string-append "--docdir=" (assoc-ref %outputs "out") "/share/doc/"
+       (list "-Ddriver_qemu=enabled"
+             "-Dqemu_user=nobody"
+             "-Dqemu_group=kvm"
+             "-Dstorage_disk=enabled"
+             "-Dstorage_dir=enabled"
+             "-Dpolkit=enabled"
+             "-Dnls=enabled"            ;translations
+             (string-append "-Ddocdir=" (assoc-ref %outputs "out") "/share/doc/"
                             ,name "-" ,version)
+             "-Dbash_completion=enabled"
+             (string-append "-Dinstall_prefix=" (assoc-ref %outputs "out"))
              "--sysconfdir=/etc"
              "--localstatedir=/var")
+       #:meson ,meson-0.55
        #:phases
        (modify-phases %standard-phases
-         (add-before 'configure 'fix-BOURNE_SHELL-definition
-           ;; BOURNE_SHELL is hard-#defined to ‘/bin/sh’, causing test failures.
-           (lambda _
-             (substitute* "config.h.in"
-               (("/bin/sh") (which "sh")))
-             #t))
-         (add-before 'configure 'patch-libtirpc-file-names
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; libvirt uses an m4 macro instead of pkg-config to determine where
-             ;; the RPC headers are located.  Tell it to look in the right place.
-             (substitute* "configure"
-               (("/usr/include/tirpc")  ;defined in m4/virt-xdr.m4
-                (string-append (assoc-ref inputs "libtirpc")
-                               "/include/tirpc")))
-             #t))
          (add-before 'configure 'disable-broken-tests
            (lambda _
-             (let ((tests (list "commandtest"      ; hangs idly
-                                "qemuxml2argvtest" ; fails
-                                "qemuhotplugtest"  ; fails
-                                "virnetsockettest" ; tries to network
-                                "virshtest")))     ; fails
-               (substitute* "tests/Makefile.in"
-                 (((format #f "(~a)\\$\\(EXEEXT\\)" (string-join tests "|")))
+             (let ((tests (list "commandtest"           ; hangs idly
+                                "qemuxml2argvtest"      ; fails
+                                "virnetsockettest")))   ; tries to network
+               (substitute* "tests/meson.build"
+                 (((format #f ".*'name': '(~a)'.*" (string-join tests "|")))
                   ""))
                #t)))
-         (replace 'install
-           ;; Since the sysconfdir and localstatedir should be /etc and /var
-           ;; at runtime, we must prevent writing to them at installation
-           ;; time.
-           (lambda* (#:key make-flags #:allow-other-keys)
-             (apply invoke "make" "install"
-                    "sysconfdir=/tmp/etc"
-                    "localstatedir=/tmp/var"
-                    make-flags))))))
+         (add-before 'install 'no-polkit-magic
+           ;; Meson ‘magically’ invokes pkexec, which fails (not setuid).
+           (lambda _
+             (setenv "PKEXEC_UID" "something")
+             #t)))))
     (inputs
      `(("libxml2" ,libxml2)
        ("eudev" ,eudev)
@@ -1095,25 +1082,32 @@ manage system or application containers.")
        ("dbus" ,dbus)
        ("libpcap" ,libpcap)
        ("libnl" ,libnl)
+       ("libssh2" ,libssh2)             ;optional
        ("libtirpc" ,libtirpc)           ;for <rpc/rpc.h>
        ("libuuid" ,util-linux "lib")
        ("lvm2" ,lvm2)                   ;for libdevmapper
        ("curl" ,curl)
        ("openssl" ,openssl)
+       ("readline" ,readline)
        ("cyrus-sasl" ,cyrus-sasl)
        ("libyajl" ,libyajl)
        ("audit" ,audit)
        ("dmidecode" ,dmidecode)
        ("dnsmasq" ,dnsmasq)
        ("ebtables" ,ebtables)
+       ("parted" ,parted)
        ("iproute" ,iproute)
        ("iptables" ,iptables)))
     (native-inputs
-     `(("xsltproc" ,libxslt)
+     `(("bash-completion" ,bash-completion)
+       ("gettext" ,gettext-minimal)
+       ("xsltproc" ,libxslt)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("polkit" ,polkit)
-       ("python" ,python-wrapper)))
+       ("python" ,python-wrapper)
+       ("python-docutils" ,python-docutils) ;for rst2html
+       ("rpcsvc-proto" ,rpcsvc-proto)))     ;for rpcgen
     (home-page "https://libvirt.org")
     (synopsis "Simple API for virtualization")
     (description "Libvirt is a C toolkit to interact with the virtualization
@@ -1125,15 +1119,15 @@ to integrate other virtualization mechanisms if needed.")
 (define-public libvirt-glib
   (package
     (name "libvirt-glib")
-    (version "3.0.0")
+    (version "4.0.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "ftp://libvirt.org/libvirt/glib/"
-                                  "libvirt-glib-" version ".tar.gz"))
+                                  "libvirt-glib-" version ".tar.xz"))
               (sha256
                (base32
-                "1zpbv4ninc57c9rw4zmmkvvqn7154iv1qfr20kyxn8xplalqrzvz"))))
-    (build-system gnu-build-system)
+                "1gdcvqz88qkp402zra9csc6391f2xki1270x683n6ixakl3gf8w4"))))
+    (build-system meson-build-system)
     (inputs
      `(("openssl" ,openssl)
        ("cyrus-sasl" ,cyrus-sasl)
@@ -1167,14 +1161,14 @@ three libraries:
 (define-public python-libvirt
   (package
     (name "python-libvirt")
-    (version "5.8.0")
+    (version "7.2.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://libvirt.org/sources/python/libvirt-python-"
                            version ".tar.gz"))
        (sha256
-        (base32 "0kyz3lx49d8p75mvbzinxc1zgs8g7adn77y9bm15b8b4ad9zl5s6"))))
+        (base32 "1ryfimhf47s9k4n0gys233bh15l68fccs2bvj8bjwqjm9k2vmhy0"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1206,7 +1200,7 @@ virtualization library.")
 (define-public virt-manager
   (package
     (name "virt-manager")
-    (version "2.2.1")
+    (version "3.2.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://virt-manager.org/download/sources"
@@ -1214,11 +1208,10 @@ virtualization library.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "06ws0agxlip6p6n3n43knsnjyd91gqhh2dadgc33wl9lx1k8vn6g"))))
+                "11kvpzcmyir91qz0dsnk7748jbb4wr8mrc744w117qc91pcy6vrb"))))
     (build-system python-build-system)
     (arguments
      `(#:use-setuptools? #f          ; uses custom distutils 'install' command
-       #:test-target "test_ui"
        #:tests? #f                      ; TODO The tests currently fail
                                         ; RuntimeError: Loop condition wasn't
                                         ; met
@@ -1236,12 +1229,6 @@ virtualization library.")
              (substitute* "virtinst/buildconfig.py"
                (("/usr") (assoc-ref outputs "out")))
              #t))
-         (add-after 'unpack 'fix-qemu-img-reference
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "virtconv/formats.py"
-               (("/usr(/bin/qemu-img)" _ suffix)
-                (string-append (assoc-ref inputs "qemu") suffix)))
-             #t))
          (add-after 'unpack 'fix-default-uri
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Xen is not available for now - so only patch qemu.
@@ -1272,11 +1259,12 @@ virtualization library.")
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
                (setenv "HOME" "/tmp")
+               (setenv "XDG_CACHE_HOME" "/tmp")
                (system "Xvfb :1 &")
                (setenv "DISPLAY" ":1")
                ;; Dogtail requires that Assistive Technology support be enabled
                (setenv "GTK_MODULES" "gail:atk-bridge")
-               (invoke "dbus-run-session" "--" "python" "setup.py" "test_ui"))
+               (invoke "dbus-run-session" "--" "pytest" "--uitests"))
              #t))
          (add-after 'install 'glib-or-gtk-compile-schemas
            (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-compile-schemas))
@@ -1306,7 +1294,9 @@ virtualization library.")
        ("gtk+" ,gtk+ "bin")             ; gtk-update-icon-cache
        ("perl" ,perl)                   ; pod2man
        ("intltool" ,intltool)
+       ("rst2man" ,python-docutils)
        ;; The following are required for running the tests
+       ;; ("python-pytest" ,python-pytest)
        ;; ("python-dogtail" ,python-dogtail)
        ;; ("xvfb" ,xorg-server-for-tests)
        ;; ("dbus" ,dbus)
@@ -1528,17 +1518,16 @@ monitor/GPU.")
 (define-public runc
   (package
     (name "runc")
-    (version "1.0.0-rc6")
+    (version "1.0.0-rc93")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "https://github.com/opencontainers/runc/releases/"
                     "download/v" version "/runc.tar.xz"))
               (file-name (string-append name "-" version ".tar.xz"))
-              (patches (search-patches "runc-CVE-2019-5736.patch"))
               (sha256
                (base32
-                "1c7832dq70slkjh8qp2civ1wxhhdd2hrx84pq7db1mmqc9fdr3cc"))))
+                "0b90r1bkvlqli53ca1yc1l488dba0isd3i6l7nlhszxi8p7hzvkh"))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "github.com/opencontainers/runc"
@@ -1548,35 +1537,27 @@ monitor/GPU.")
        #:tests? #f
        #:phases
        (modify-phases %standard-phases
-         (replace 'unpack
-           (lambda* (#:key source import-path #:allow-other-keys)
-             ;; Unpack the tarball into 'runc' instead of 'runc-1.0.0-rc5'.
-             (let ((dest (string-append "src/" import-path)))
-               (mkdir-p dest)
-               (invoke "tar" "-C" (string-append "src/" import-path)
-                       "--strip-components=1"
-                       "-xvf" source))))
          (replace 'build
            (lambda* (#:key import-path #:allow-other-keys)
              (with-directory-excursion (string-append "src/" import-path)
-               ;; XXX: requires 'go-md2man'.
-               ;; (invoke "make" "man")
-               (invoke "make"))))
-         ;; (replace 'check
-         ;;   (lambda _
-         ;;     (invoke "make" "localunittest")))
+               (invoke "make" "all" "man"))))
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "make" "localunittest"))))
          (replace 'install
            (lambda* (#:key import-path outputs #:allow-other-keys)
              (with-directory-excursion (string-append "src/" import-path)
                (let ((out (assoc-ref outputs "out")))
-                 (invoke "make" "install" "install-bash"
+                 (invoke "make" "install" "install-bash" "install-man"
                          (string-append "PREFIX=" out)))))))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     `(("go-md2man" ,go-github-com-go-md2man)
+       ("pkg-config" ,pkg-config)))
     (inputs
      `(("libseccomp" ,libseccomp)))
     (synopsis "Open container initiative runtime")
-    (home-page "https://www.opencontainers.org/")
+    (home-page "https://opencontainers.org/")
     (description
      "@command{runc} is a command line client for running applications
 packaged according to the
@@ -1588,7 +1569,7 @@ Open Container Initiative specification.")
 (define-public umoci
   (package
     (name "umoci")
-    (version "0.4.6")
+    (version "0.4.7")
     (source
      (origin
        (method url-fetch)
@@ -1597,7 +1578,7 @@ Open Container Initiative specification.")
              version "/umoci.tar.xz"))
        (file-name (string-append "umoci-" version ".tar.xz"))
        (sha256
-        (base32 "06q7xfwnqysc013hapx31jhlzmyg8qb467qfkynj673qc7p9bd6h"))))
+        (base32 "0fvljj9k4f83wbqzd8nbijz0p1zaq633f8yxyvl5sy3wjf03ffk9"))))
     (build-system go-build-system)
     (arguments
      '(#:import-path "github.com/opencontainers/umoci"
@@ -1634,7 +1615,7 @@ Open Container Initiative (OCI) image layout and its tagged images.")
 (define-public skopeo
   (package
     (name "skopeo")
-    (version "1.2.1")
+    (version "1.2.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1643,7 +1624,7 @@ Open Container Initiative (OCI) image layout and its tagged images.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1y9pmijazbgxzriymrm7zrifmkd1x1wad9b3zjcj7zwr6c999dhg"))))
+                "03sznybn3rqjyplc6w4b7mfa6gas8db15p5vnmfm1xqw72ldylgc"))))
     (build-system go-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
diff --git a/gnu/packages/visidata.scm b/gnu/packages/visidata.scm
index 4b18e0f41e..966afea849 100644
--- a/gnu/packages/visidata.scm
+++ b/gnu/packages/visidata.scm
@@ -31,14 +31,14 @@
 (define-public visidata
   (package
     (name "visidata")
-    (version "2.2.1")
+    (version "2.4")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "visidata" version))
        (sha256
         (base32
-         "181klx7223q6a600k9iqxrfxpq5w73h1g2ks1cfsnmlv7i6s9v9f"))))
+         "1g9g4gd3mqi23damxghwj76zxi2ig9vf4jv8dnvl7q7ssb7gz60d"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index 2ea04acaa2..adb48b1b97 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -293,24 +293,19 @@ and probably others.")
 (define-public openconnect-sso
   (package
     (name "openconnect-sso")
-    (version "0.6.2")
+    (version "0.7.2")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "openconnect-sso" version))
         (sha256
          (base32
-          "1yybmscka3m5yxfkp1m5pqz2m8jlwdq9b0hx2w5l1jj6bzpl9fsf"))))
+          "0nb40zfpp38mz6389y0qvrr4mmak53swpg7578cldnhnk0g15qni"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f  ; Tests not included, building from git requires poetry.
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'adjust-package-version-requirements
-           (lambda _
-             (substitute* "setup.py"
-               (("(pyxdg>=0.26),<0.27" _ pyxdg) pyxdg))
-             #t))
          (add-after 'unpack 'patch-openconnect
            (lambda _
              (substitute* "openconnect_sso/app.py"
@@ -683,7 +678,7 @@ WireGuard was added to Linux 5.6.")
 (define-public wireguard-tools
   (package
     (name "wireguard-tools")
-    (version "1.0.20210223")
+    (version "1.0.20210315")
     (source
      (origin
        (method git-fetch)
@@ -692,7 +687,7 @@ WireGuard was added to Linux 5.6.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1pz7rir7bzj7rv1lqy45pqnr6jxsb4war31f9492757fql7kcrf4"))))
+        (base32 "1an5gm2dv111n3fylbrnyynxmi2d3iwf2b46zq08hc54kzazxcml"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm
index e5e726ad19..cff761a344 100644
--- a/gnu/packages/web-browsers.scm
+++ b/gnu/packages/web-browsers.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@posteo.ro>
 ;;; Copyright © 2021 Cage <cage-dev@twistfold.it>
 ;;; Copyright © 2021 Benoit Joly <benoit@benoitj.ca>
+;;; Copyright © 2021 Alexander Krotov <krotov@iitp.ru>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -64,20 +65,24 @@
   #:use-module (gnu packages image)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libidn)
+  #:use-module (gnu packages libunistring)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lisp)
   #:use-module (gnu packages lisp-xyz)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages man)
   #:use-module (gnu packages markup)
+  #:use-module (gnu packages mp3)
   #:use-module (gnu packages nano)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
+  #:use-module (gnu packages sdl)
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages webkit)
@@ -173,14 +178,14 @@ older or slower computers and embedded systems.")
 (define-public links
   (package
     (name "links")
-    (version "2.21")
+    (version "2.22")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://links.twibright.com/download/"
                                   "links-" version ".tar.bz2"))
               (sha256
                (base32
-                "0qqdcghsdqm7l6kyi0k752ws3ak5crw85pqkcb11wy67j62yspi8"))))
+                "0k88qbmq0mf6zmk2v158c0rxvqbi7ysn58xyf4qqw7kz79mrhr03"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -717,6 +722,39 @@ key-bindings and is fully configurable and extensible in Common Lisp.")
 (define-public sbcl-next
   (deprecated-package "sbcl-next" nyxt))
 
+(define-public lagrange
+  (package
+    (name "lagrange")
+    (version "1.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "https://git.skyjake.fi/skyjake/lagrange/releases/"
+                       "download/v" version "/lagrange-" version ".tar.gz"))
+       (sha256
+        (base32 "14yj3l3h6i6ygdhyiwdg2cg6y5imlkql09r7dm5v7xm1ja0sr9lp"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #false))                ;no tests
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("libunistring" ,libunistring)
+       ("mpg123" ,mpg123)
+       ("openssl" ,openssl)
+       ("pcre" ,pcre)
+       ("sdl2" ,sdl2)
+       ("zlib" ,zlib)))
+    (home-page "https://gmi.skyjake.fi/lagrange/")
+    (synopsis "Graphical Gemini client")
+    (description
+     "Lagrange is a desktop GUI client for browsing Geminispace.  It offers
+modern conveniences familiar from web browsers, such as smooth scrolling,
+inline image viewing, multiple tabs, visual themes, Unicode fonts, bookmarks,
+history, and page outlines.")
+    (license license:bsd-2)))
+
 (define-public gmni
   (let ((commit "d8f0870446c471a42612d6a8e853ad9b723a6d39")
         (revision "0"))
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 4a7a3bb233..b8bc90a03d 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -22,7 +22,7 @@
 ;;; Copyright © 2017, 2018, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2017 Petter <petter@mykolab.ch>
-;;; Copyright © 2017 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2017, 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2017, 2019, 2020 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2018, 2019 Julien Lepiller <julien@lepiller.eu>
@@ -368,14 +368,14 @@ the same, being completely separated from the Internet.")
     ;; ’stable’ and recommends that “in general you deploy the NGINX mainline
     ;; branch at all times” (https://www.nginx.com/blog/nginx-1-6-1-7-released/)
     ;; Consider updating the nginx-documentation package together with this one.
-    (version "1.19.8")
+    (version "1.19.9")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://nginx.org/download/nginx-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "01cb6hsaik1sfjihbrldmwrcn54gk4plfy350sl1b4rml6qik29h"))))
+                "0hfqqyfgqa6wqazmb3d434nb3r5p8szfisa0m6nfh9lqdbqdyd9f"))))
     (build-system gnu-build-system)
     (inputs `(("openssl" ,openssl)
               ("pcre" ,pcre)
@@ -398,6 +398,7 @@ the same, being completely separated from the Internet.")
                                   "--with-http_v2_module"
                                   "--with-pcre-jit"
                                   "--with-debug"
+                                  "--with-stream"
                                   ;; Even when not cross-building, we pass the
                                   ;; --crossbuild option to avoid customizing for the
                                   ;; kernel version on the build machine.
@@ -458,9 +459,9 @@ and as a proxy to reduce the load on back-end HTTP or mail servers.")
 
 (define-public nginx-documentation
   ;; This documentation should be relevant for the current nginx package.
-  (let ((version "1.19.8")
-        (revision 2673)
-        (changeset "4398fd0f0341"))
+  (let ((version "1.19.9")
+        (revision 2696)
+        (changeset "f85798c1c70a"))
     (package
       (name "nginx-documentation")
       (version (simple-format #f "~A-~A-~A" version revision changeset))
@@ -472,7 +473,7 @@ and as a proxy to reduce the load on back-end HTTP or mail servers.")
                (file-name (string-append name "-" version))
                (sha256
                 (base32
-                 "1pds76h19fadmymyr6pnfh72ql6vizpv2628lqcrpqhxgwa6hcbg"))))
+                 "1ksl32jw6h3qzyxxlsdjag7fcjvk3md3hdxn6ljs8pr2nhk1v6cs"))))
       (build-system gnu-build-system)
       (arguments
        '(#:tests? #f                    ; no test suite
@@ -1332,18 +1333,17 @@ parser written in ANSI C and a small validating JSON generator.")
 (define-public libwebsockets
   (package
     (name "libwebsockets")
-    (version "1.3")
+    (version "4.1.6")
     (source (origin
               ;; The project does not publish tarballs, so we have to take
               ;; things from Git.
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/warmcat/libwebsockets")
-                    (commit (string-append "v" version
-                                           "-chrome37-firefox30"))))
+                    (commit (string-append "v" version))))
               (sha256
                (base32
-                "12fqh2d2098mgf0ls19p9lzibpsqhv7mc5rn1yvrbfnazmcr40g4"))
+                "0x56v4hsx92vm1zibfmnqb5g3v23kzciffn3fjlsc3sly2pknhsg"))
               (file-name (string-append name "-" version))))
 
     (build-system cmake-build-system)
@@ -1555,7 +1555,7 @@ used to validate and fix HTML data.")
 (define-public esbuild
   (package
     (name "esbuild")
-    (version "0.8.51")
+    (version "0.11.9")
     (source
      (origin
        (method git-fetch)
@@ -1564,7 +1564,7 @@ used to validate and fix HTML data.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1j4qza2chng3az1h1fh9zbhxh99q7bfrqbgppyyq5947svi8fvaz"))
+        (base32 "0pi5ydvbcfi8dbq2ryw8z4197pf4jrlz8mj1vzkdff22ga9qcmxy"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -4684,14 +4684,14 @@ their web site.")
 (define-public python-feedparser
   (package
     (name "python-feedparser")
-    (version "5.2.1")
+    (version "6.0.2")
     (source
      (origin
        (method url-fetch)
-       (uri (pypi-uri "feedparser" version ".tar.bz2"))
+       (uri (pypi-uri "feedparser" version ".tar.gz"))
        (sha256
         (base32
-         "00hb4qg2am06g81mygfi1jsbx8830024jm45g6qp9g8fr6am91yf"))))
+         "0x0hm9brh3j71645pydvlkrwxaaca9dnwd7xahwjyjaz882s200v"))))
     (build-system python-build-system)
     (arguments
      '(#:tests? #f))
@@ -4705,11 +4705,32 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
                    license:freebsd-doc)))) ; documentation
 
 (define-public python2-feedparser
-  (package-with-python2 python-feedparser))
+  (package
+    (name "python2-feedparser")
+    (version "5.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "feedparser" version ".tar.bz2"))
+       (sha256
+        (base32
+         "00hb4qg2am06g81mygfi1jsbx8830024jm45g6qp9g8fr6am91yf"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f
+       #:python ,python-2))
+    (home-page
+     "https://github.com/kurtmckee/feedparser")
+    (synopsis "Parse feeds in Python")
+    (description
+     "Universal feed parser which handles RSS 0.9x, RSS 1.0, RSS 2.0,
+CDF, Atom 0.3, and Atom 1.0 feeds.")
+    (license (list license:bsd-2 ; source code
+                   license:freebsd-doc)))) ; documentation
 
 (define-public guix-data-service
-  (let ((commit "b7ba8d0c2ca3aca9ba5b5f9f27b9778ee949d20e")
-        (revision "25"))
+  (let ((commit "df2a0a73f1f35ea53ba6c07a6ad4c5347ba12b8f")
+        (revision "27"))
     (package
       (name "guix-data-service")
       (version (string-append "0.0.1-" revision "." (string-take commit 7)))
@@ -4721,7 +4742,7 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0brv64bsqysl7dncz067blwvmqrlx99c2kwrgpz6k0nqv8nzsa28"))))
+                  "1ss1prr98zdjkm97w24rd04lfnnvcw6xs0gwxqgd40briqisaa5g"))))
       (build-system gnu-build-system)
       (arguments
        '(#:modules ((guix build utils)
@@ -4780,15 +4801,15 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
                  #t)))
            (delete 'strip))))           ; As the .go files aren't compatible
       (inputs
-       `(("guix" ,guile3.0-guix)
-         ("guile-fibers" ,guile3.0-fibers)
-         ("guile-json" ,guile3.0-json)
-         ("guile-email" ,guile3.0-email)
+       `(("guix" ,guix)
+         ("guile-fibers" ,guile-fibers)
+         ("guile-json" ,guile-json-4)
+         ("guile-email" ,guile-email)
          ("guile-prometheus" ,guile-prometheus)
-         ("guile-squee" ,guile3.0-squee)
+         ("guile-squee" ,guile-squee)
          ("ephemeralpg" ,ephemeralpg)
          ("util-linux" ,util-linux)
-         ("postgresql" ,postgresql-11)
+         ("postgresql" ,postgresql-13)
          ("sqitch" ,sqitch)))
       (native-inputs
        `(("guile" ,@(assoc-ref (package-native-inputs guix) "guile"))
@@ -5887,14 +5908,14 @@ tools like SSH (Secure Shell) to reach the outside world.")
 (define-public stunnel
   (package
   (name "stunnel")
-  (version "5.58")
+  (version "5.59")
   (source
     (origin
       (method url-fetch)
       (uri (string-append "https://www.stunnel.org/downloads/stunnel-"
                           version ".tar.gz"))
       (sha256
-       (base32 "0y9vjzjqi340vy6h321r1cskb7l6a4prr9d2ysixqzjpjv04rhfl"))))
+       (base32 "17yf2n47j5hw2y9527mrkx3j7q9jk5vvg46m3hgp1wg8dggpcxqk"))))
   (build-system gnu-build-system)
   (native-inputs
    ;; For tests.
@@ -6819,18 +6840,19 @@ Web Server.")
 (define-public java-eclipse-jetty-util
   (package
     (name "java-eclipse-jetty-util")
-    (version "9.4.6")
+    (version "9.4.39")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/eclipse/jetty.project/"
-                                  "archive/jetty-" version ".v20170531.tar.gz"))
+                                  "archive/jetty-" version ".v20210325.tar.gz"))
               (sha256
                (base32
-                "0x7kbdvkmgr6kbsmbwiiyv3bb0d6wk25frgvld9cf8540136z9p1"))))
+                "0b4hy4zmdmfbqk9bzmxk7v75y2ysqiappkip4z3hb9lxjvjh0b19"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "eclipse-jetty-util.jar"
        #:source-dir "src/main/java"
+       #:tests? #f; require junit 5
        #:test-exclude
        (list "**/Abstract*.java"
              ;; requires network
@@ -6849,11 +6871,6 @@ Web Server.")
     (inputs
      `(("slf4j" ,java-slf4j-api)
        ("servlet" ,java-javaee-servletapi)))
-    (native-inputs
-     `(("junit" ,java-junit)
-       ("hamcrest" ,java-hamcrest-all)
-       ("perf-helper" ,java-eclipse-jetty-perf-helper)
-       ("test-helper" ,java-eclipse-jetty-test-helper)))
     (home-page "https://www.eclipse.org/jetty/")
     (synopsis "Utility classes for Jetty")
     (description "The Jetty Web Server provides an HTTP server and Servlet
@@ -6914,6 +6931,7 @@ or embedded instantiation.  This package provides utility classes.")
      `(#:jar-name "eclipse-jetty-io.jar"
        #:source-dir "src/main/java"
        #:jdk ,icedtea-8
+       #:tests? #f; require junit 5
        #:test-exclude (list "**/Abstract*.java"
                             ;; Abstract class
                             "**/EndPointTest.java")
@@ -6955,6 +6973,7 @@ or embedded instantiation.  This package provides IO-related utility classes."))
      `(#:jar-name "eclipse-jetty-http.jar"
        #:source-dir "src/main/java"
        #:jdk ,icedtea-8
+       #:tests? #f; require junit 5
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'chdir
@@ -7090,9 +7109,6 @@ or embedded instantiation.  This package provides the JMX management.")))
        ("io" ,java-eclipse-jetty-io)
        ("jmx" ,java-eclipse-jetty-jmx)
        ("util" ,java-eclipse-jetty-util)))
-    (native-inputs
-     `(("test-classes" ,java-eclipse-jetty-http-test-classes)
-       ,@(package-native-inputs java-eclipse-jetty-util)))
     (synopsis "Core jetty server artifact")
     (description "The Jetty Web Server provides an HTTP server and Servlet
 container capable of serving static and dynamic content either from a standalone
@@ -7122,6 +7138,7 @@ artifact.")))
      `(#:jar-name "eclipse-jetty-security.jar"
        #:source-dir "src/main/java"
        #:jdk ,icedtea-8
+       #:tests? #f; require junit 5
        #:test-exclude (list "**/ConstraintTest.*") ; This test fails
        #:phases
        (modify-phases %standard-phases
@@ -7135,9 +7152,6 @@ artifact.")))
        ("http" ,java-eclipse-jetty-http)
        ("server" ,java-eclipse-jetty-server)
        ("util" ,java-eclipse-jetty-util)))
-    (native-inputs
-     `(("io" ,java-eclipse-jetty-io)
-       ,@(package-native-inputs java-eclipse-jetty-util)))
     (synopsis "Jetty security infrastructure")
     (description "The Jetty Web Server provides an HTTP server and Servlet
 container capable of serving static and dynamic content either from a standalone
@@ -7158,6 +7172,18 @@ infrastructure")))
      `(("io" ,java-eclipse-jetty-io-9.2)
        ,@(package-native-inputs java-eclipse-jetty-util-9.2)))))
 
+(define-public java-eclipse-jetty-util-ajax
+  (package
+    (inherit java-eclipse-jetty-util)
+    (name "java-eclipse-jetty-util-ajax")
+    (arguments
+     `(#:jar-name "eclipse-jetty-util-ajax.jar"
+       #:source-dir "jetty-util-ajax/src/main/java"
+       #:tests? #f)); require junit 5
+    (inputs
+     `(("java-eclipse-jetty-util" ,java-eclipse-jetty-util)
+       ("java-javaee-servletapi" ,java-javaee-servletapi)))))
+
 (define-public java-eclipse-jetty-servlet
   (package
     (inherit java-eclipse-jetty-util)
@@ -7166,6 +7192,7 @@ infrastructure")))
      `(#:jar-name "eclipse-jetty-servlet.jar"
        #:source-dir "src/main/java"
        #:jdk ,icedtea-8
+       #:tests? #f; require junit 5
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'chdir
@@ -7175,8 +7202,8 @@ infrastructure")))
     (inputs
      `(("slf4j" ,java-slf4j-api)
        ("java-javaee-servletapi" ,java-javaee-servletapi)
+       ("java-eclipse-jetty-util-ajax" ,java-eclipse-jetty-util-ajax)
        ("http" ,java-eclipse-jetty-http)
-       ("http-test" ,java-eclipse-jetty-http-test-classes)
        ("io" ,java-eclipse-jetty-io)
        ("jmx" ,java-eclipse-jetty-jmx)
        ("security" ,java-eclipse-jetty-security)
@@ -7266,6 +7293,7 @@ container.")))
      `(#:jar-name "eclipse-jetty-webapp.jar"
        #:source-dir "src/main/java"
        #:jdk ,icedtea-8
+       #:tests? #f; require junit 5
        ;; One test fails
        #:test-exclude (list "**/WebAppContextTest.java")
        #:phases
@@ -7277,14 +7305,12 @@ container.")))
     (inputs
      `(("java-eclipse-jetty-util" ,java-eclipse-jetty-util)
        ("java-eclipse-jetty-http" ,java-eclipse-jetty-http)
+       ("java-eclipse-jetty-io" ,java-eclipse-jetty-io)
        ("java-eclipse-jetty-server" ,java-eclipse-jetty-server)
        ("java-eclipse-jetty-servlet" ,java-eclipse-jetty-servlet)
        ("java-eclipse-jetty-security" ,java-eclipse-jetty-security)
        ("java-eclipse-jetty-xml" ,java-eclipse-jetty-xml)
-       ("java-javaee-servletapi" ,java-javaee-servletapi)))
-    (native-inputs
-     `(("java-eclipse-jetty-io" ,java-eclipse-jetty-io)
-       ,@(package-native-inputs java-eclipse-jetty-util)))))
+       ("java-javaee-servletapi" ,java-javaee-servletapi)))))
 
 (define-public java-eclipse-jetty-webapp-9.2
   (package
diff --git a/gnu/packages/webkit.scm b/gnu/packages/webkit.scm
index 89eee74def..083c8ccb08 100644
--- a/gnu/packages/webkit.scm
+++ b/gnu/packages/webkit.scm
@@ -174,7 +174,7 @@ engine that uses Wayland for graphics output.")
        ("docbook-xsl" ,docbook-xsl)
        ("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)
@@ -226,14 +226,14 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
 (define-public webkitgtk
   (package
     (name "webkitgtk")
-    (version "2.30.6")
+    (version "2.32.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.webkitgtk.org/releases/"
                                   "webkitgtk-" version ".tar.xz"))
               (sha256
                (base32
-                "07kwkn7gnlfw4idl5vyyzhzbj2bjzvjrclbikn9vaw0pm73nwwsh"))
+                "1w3b0w8izp0i070grhv19j631sdcd0mcqnjnax13k8mdx7dg8zcx"))
               (patches (search-patches "webkitgtk-share-store.patch"
                                        "webkitgtk-bind-all-fonts.patch"))))
     (build-system cmake-build-system)
@@ -244,6 +244,9 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
        #:configure-flags (list
                           "-DPORT=GTK"
                           "-DENABLE_GTKDOC=ON" ; No doc by default
+                          ;; Requires libmanette, new dependency added in 2.32.0.
+                          ;; TODO Decide if we should enable this
+                          "-DENABLE_GAMEPAD=OFF"
                           "-DUSE_SYSTEMD=OFF"
                           (string-append ; uses lib64 by default
                            "-DLIB_INSTALL_DIR="
@@ -301,7 +304,7 @@ acceleration in mind, leveraging common 3D graphics APIs for best performance.")
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("python" ,python-wrapper)
-       ("gtk-doc" ,gtk-doc) ; For documentation generation
+       ("gtk-doc" ,gtk-doc/stable) ; For documentation generation
        ("docbook-xml" ,docbook-xml) ; For documentation generation
        ("ruby" ,ruby)))
     (propagated-inputs
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index 3aec9455e0..4c32d857a7 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -14,7 +14,7 @@
 ;;; Copyright © 2016 Ivan Vilata i Balaguer <ivan@selidor.net>
 ;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com>
 ;;; Copyright © 2017, 2019, 2020 Marius Bakke <marius@gnu.org>
-;;; Copyright © 2017, 2020 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2017, 2020, 2021 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Pierre-Antoine Rouby <contact@parouby.fr>
 ;;; Copyright © 2018, 2019 Meiyo Peng <meiyo@riseup.net>
@@ -44,6 +44,7 @@
 ;;; Copyright © 2021 Zheng Junjie <873216071@qq.com>
 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
+;;; Copyright © 2021 lasnesne <lasnesne@lagunposprasihopre.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1570,7 +1571,7 @@ modules for building a Wayland compositor.")
 (define-public waybar
   (package
     (name "waybar")
-    (version "0.9.4")
+    (version "0.9.5")
     (source
      (origin
        (method git-fetch)
@@ -1579,10 +1580,10 @@ modules for building a Wayland compositor.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "038vnma7y7z81caywp45yr364bc1aq8d01j5vycyiyfv33nm76fy"))))
+        (base32 "1kzrgqaclfk6gcwhknxn28xl74gm5swipgn8kk8avacb4nsw1l9q"))))
     (build-system meson-build-system)
     (inputs `(("date" ,date)
-              ("fmt" ,fmt-6)
+              ("fmt" ,fmt)
               ("gtk-layer-shell" ,gtk-layer-shell)
               ("gtkmm" ,gtkmm)
               ("jsoncpp" ,jsoncpp)
@@ -1591,7 +1592,7 @@ modules for building a Wayland compositor.")
               ("libmpdclent" ,libmpdclient)
               ("libnl" ,libnl)
               ("pulseaudio" ,pulseaudio)
-              ("spdlog" ,spdlog-1.7)
+              ("spdlog" ,spdlog)
               ("wayland" ,wayland)))
     (native-inputs
      `(("glib:bin" ,glib "bin")
@@ -2191,7 +2192,7 @@ support, for easier unicode usage.")))))
 (define-public xclickroot
   (package
     (name "xclickroot")
-    (version "1.2")
+    (version "1.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2200,7 +2201,7 @@ support, for easier unicode usage.")))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1nd5qz0qz5j7gx2jsbcp234giwaa0xmg42vrcjrcf587q9ivakfl"))))
+                "0wnsfxvh4v02r2jjyh2n6jfkbj2dna2hlm6anl4b36lwji749k2k"))))
     (build-system gnu-build-system)
     (inputs
      `(("libx11" ,libx11)))
@@ -2311,16 +2312,16 @@ start-up.")
 (define-public xnotify
   (package
     (name "xnotify")
-    (version "0.7.3")
+    (version "0.8.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/phillbush/xnotify")
-                    (commit version)))
+                    (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "09s29m8z4x3mc3wja2587ik3f6zg16b40adr3nllnpyy1mqnprq5"))))
+                "1jxms4md2mwfjgm2pgg3vakpp33800jbn9hnl0j4jyfc9f1ckbsv"))))
     (build-system gnu-build-system)
     (inputs
      `(("libx11" ,libx11)
@@ -2400,3 +2401,90 @@ for wayland conceptually based on the X11 window manager
      (description "libucl implements a configuration language that is easy to
 read and write, and compatible with JSON.")
     (license license:bsd-2)))
+
+(define-public hikari
+  (package
+    (name "hikari")
+    (version "2.2.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hikari.acmelabs.space/releases/"
+                           "hikari-" version ".tar.gz"))
+       (sha256
+        (base32 "1d023cphzi15k434n60l1rp5awxmdijvsxfrm59fmsvd5rjxh9q7"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bmake" ,bmake)
+       ("pkg-config" ,pkg-config)
+       ("wayland-protocols" ,wayland-protocols)))
+    (inputs
+     `(("cairo" ,cairo)
+       ("libinput" ,libinput)
+       ("libucl" ,libucl)
+       ("libxkbcommon" ,libxkbcommon)
+       ("pam" ,linux-pam)
+       ("pango" ,pango)
+       ("wayland" ,wayland)
+       ("wlroots" ,wlroots)))
+    (arguments
+     `(#:tests? #f                      ; no tests
+       #:make-flags
+       (list
+        (string-append "PREFIX=" (assoc-ref %outputs "out"))
+        (string-append "CC=" ,(cc-for-target))
+        "WITH_XWAYLAND=YES"
+        "WITH_SCREENCOPY=YES"
+        "WITH_LAYERSHELL=YES"
+        "WITH_VIRTUAL_INPUT=YES")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'build
+           (lambda* (#:key inputs outputs make-flags #:allow-other-keys)
+             (apply invoke "bmake" make-flags)))
+         (replace 'install
+           (lambda* (#:key inputs outputs make-flags #:allow-other-keys)
+             (apply invoke "bmake" "install" make-flags))))))
+    (home-page "https://hikari.acmelabs.space/")
+    (synopsis "Stacking Wayland compositor with tiling capabilities")
+    (description
+     "Hikari is a stacking Wayland compositor with additional tiling
+capabilities.  It is heavily inspired by the Calm Window manager(cwm).")
+    (license license:bsd-2)))
+
+(define-public wlogout
+  (package
+    (name "wlogout")
+    (version "1.1.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ArtsyMacaw/wlogout")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1swhzkqkzli59c89pvrakfvicd00x7ga860c3x2pbb4y3xziqfvi"))))
+    (build-system meson-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("scdoc" ,scdoc)))
+    (inputs
+     `(("gtk-layer-shell" ,gtk-layer-shell)
+       ("gtk+" ,gtk+)))
+    (arguments
+     '(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack  'patch-source-paths
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (substitute* "main.c"
+                 (("/usr/share") (string-append out "/share"))
+                 (("/etc") (string-append out "/etc"))))
+             #t)))))
+    (home-page "https://github.com/ArtsyMacaw/wlogout")
+    (synopsis "Logout menu for Wayland")
+    (description "wlogout is a logout menu for Wayland environments.")
+    (license license:expat)))
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index d5d0a2deb8..4202a7168e 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -1475,7 +1475,7 @@ less if you are working in front of the screen at night.")
 (define-public xscreensaver
   (package
     (name "xscreensaver")
-    (version "5.44")
+    (version "5.45")
     (source
      (origin
        (method url-fetch)
@@ -1483,7 +1483,7 @@ less if you are working in front of the screen at night.")
         (string-append "https://www.jwz.org/xscreensaver/xscreensaver-"
                        version ".tar.gz"))
        (sha256
-        (base32 "15bv05vpfjwsrqbazrjmm382jd7vvw0mp6y9vasn6wvxzjf0in3k"))))
+        (base32 "03fmyjlwjinzv7mih6n07glmys8s877snd8zijk2c0ds6rkxy5kh"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no check target
@@ -2251,7 +2251,7 @@ Wayland.")
 (define-public autocutsel
   (package
     (name "autocutsel")
-    (version "0.10.0")
+    (version "0.10.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/sigmike/autocutsel"
@@ -2259,7 +2259,7 @@ Wayland.")
                                   "autocutsel-" version ".tar.gz"))
               (sha256
                (base32
-                "0gsys2dzh4az51ndcsabhlbbrjn2nm75lnjr45kg6r8sm8q66dx2"))))
+                "05zb85imp42birvrc320q20r98qddc5vxx169dnl753l5za0czpi"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f)) ; no "check" target
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index f27e7e6e49..40a3db528f 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -313,7 +313,7 @@ upstream occasionally.")
 (define-public exo
   (package
     (name "exo")
-    (version "4.16.0")
+    (version "4.16.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -321,7 +321,7 @@ upstream occasionally.")
                                   "exo-" version ".tar.bz2"))
               (sha256
                (base32
-                "1k5sfm9cmg8k5zzzv0wb2cciqwwklnpfzcpak7wa32lsxl7b0x8r"))))
+                "0fxm2aczzbi0z4y6x24934964y9jg4cl4frvlnjc5zqmccjsr3aj"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -463,7 +463,7 @@ applications menu, workspace switcher and more.")
 (define-public xfce4-battery-plugin
   (package
     (name "xfce4-battery-plugin")
-    (version "1.1.3")
+    (version "1.1.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/panel-plugins/"
@@ -471,7 +471,7 @@ applications menu, workspace switcher and more.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "18s0s004nidii8cc3ldp5n3jajc18vwn9vhkhmhy3lbbs520mghj"))))
+                "08n2cig9r2lccwvmk6v9vjiz0xqcp6x30m5b3q702v0m6ylg4z8h"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)
                      ("intltool" ,intltool)))
@@ -765,7 +765,7 @@ like appearance, display, keyboard and mouse settings.")
 (define-public thunar
   (package
     (name "thunar")
-    (version "4.16.3")
+    (version "4.16.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -773,7 +773,7 @@ like appearance, display, keyboard and mouse settings.")
                                   "thunar-" version ".tar.bz2"))
               (sha256
                (base32
-                "0wpzs7r79aayg4zbxy514fbkabac1hhvw522cjjr453gva4xq92m"))))
+                "1dq238m2bh938gpb058cr2xmhy6f3qkyyya9l0ya95kiwqzislyb"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -1206,7 +1206,7 @@ of data to either CD/DVD/BD.")
 (define-public mousepad
   (package
     (name "mousepad")
-    (version "0.5.3")
+    (version "0.5.4")
     (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
-                "1a6a3x4h6aisjm59i0afx1w50035s76zjr4a6p9ja5bax6wqn877"))))
+                "189aljqgkrspqk9498izgvssw08pgkyvf7hc7ddmzfhcblp4j3yr"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '(;; Use the GSettings keyfile backend rather than
@@ -1761,7 +1761,7 @@ mounted or when unmounting fails.")
 (define-public xfce4-netload-plugin
   (package
    (name "xfce4-netload-plugin")
-   (version "1.3.2")
+   (version "1.4.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/panel-plugins/"
@@ -1770,7 +1770,7 @@ mounted or when unmounting fails.")
                                   "/xfce4-netload-plugin-" version ".tar.bz2"))
               (sha256
                (base32
-                "0p91875n6s8n88l7wb4w9prqly3wvkyilnr7zq0ppq71rwjh9r12"))))
+                "036pvhfv1iynvj75va0xl8hpvnfckabyqm9jv56pb40p2072cxkc"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("intltool" ,intltool)
@@ -1916,7 +1916,7 @@ freedesktop.org specification.")
 (define-public xfce4-systemload-plugin
   (package
    (name "xfce4-systemload-plugin")
-   (version "1.2.4")
+   (version "1.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/panel-plugins/"
@@ -1925,13 +1925,14 @@ freedesktop.org specification.")
                                   "/xfce4-systemload-plugin-" version ".tar.bz2"))
               (sha256
                (base32
-                "0dcqg13phlcri4i4g9752m4zfkcmidiqpjv4s3l3pfiwjbgvhc85"))))
+                "0lknh5l30qs5c69wwjcblbyhczvdbxs59fqkb8mpqbfm05w01lan"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libxfce4ui" ,libxfce4ui)
+     `(("libgtop" ,libgtop)
+       ("libxfce4ui" ,libxfce4ui)
        ("xfce4-panel" ,xfce4-panel)))
     (home-page
      "https://goodies.xfce.org/projects/panel-plugins/xfce4-systemload-plugin")
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index ac356cb78d..ad5f35ef1e 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -29,6 +29,8 @@
 ;;; Copyright © 2021 Michael Rohleder <mike@rohleder.de>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -77,6 +79,7 @@
   #:use-module (guix build-system meson)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
+  #:use-module (guix utils)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages pkg-config))
 
@@ -99,7 +102,7 @@
      `(#:glib-or-gtk? #t))
     (native-inputs
      `(("gobject-introspection" ,gobject-introspection)
-       ("gtk-doc" ,gtk-doc)
+       ("gtk-doc" ,gtk-doc/stable)
        ("pkg-config" ,pkg-config)))
     (inputs
      `(("appstream-glib" ,appstream-glib)
@@ -221,6 +224,48 @@ hierarchical form with variable field lengths.")
 project (but it is usable outside of the Gnome platform).")
     (license license:x11)))
 
+(define-public libxlsxwriter
+  (package
+    (name "libxlsxwriter")
+    (version "1.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+         (url "https://github.com/jmcnamara/libxlsxwriter")
+         (commit (string-append "RELEASE_" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0dsqv4qdd582fhwj6m80iz50gkyw4m8n9h4mkd2871csa03sbilf"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Remove bundled minizip source
+        '(begin
+           (delete-file-recursively "third_party/minizip")
+           #t))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:test-target "test"
+       #:make-flags
+       (list (string-append "CC=" ,(cc-for-target))
+             (string-append "PREFIX=" (assoc-ref %outputs "out"))
+             "USE_STANDARD_TMPFILE=1"
+             "USE_SYSTEM_MINIZIP=1")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure))))         ; no configure script
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (inputs
+     `(("minizip" ,minizip)))
+    (home-page "https://github.com/jmcnamara/libxlsxwriter")
+    (synopsis "C library for creating Excel XLSX files")
+    (description
+     "Libxlsxwriter is a C library that can be used to write text, numbers,
+formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
+    (license (list license:bsd-2
+                   license:public-domain)))) ; third_party/md5
+
 ;; This is the latest stable release.
 (define-public libxmlplusplus
   (package
diff --git a/gnu/services.scm b/gnu/services.scm
index ddd1bac30c..e7da0a026d 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -109,7 +110,11 @@
 
             %boot-service
             %activation-service
-            etc-service))
+            etc-service)
+  #:re-export (;; Note: Re-export 'delete' to allow for proper syntax matching
+               ;; in 'modify-services' forms.  See
+               ;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=26805#16>.
+               delete))
 
 ;;; Comment:
 ;;;
@@ -279,7 +284,11 @@ singleton service type NAME, of which the returned service is an instance."
     (service type value)))
 
 (define-syntax %modify-service
-  (syntax-rules (=>)
+  (syntax-rules (=> delete)
+    ((_ svc (delete kind) clauses ...)
+     (if (eq? (service-kind svc) kind)
+         #f
+         (%modify-service svc clauses ...)))
     ((_ service)
      service)
     ((_ svc (kind param => exp ...) clauses ...)
@@ -309,16 +318,18 @@ TYPE.  Consider this example:
     (mingetty-service-type config =>
                            (mingetty-configuration
                             (inherit config)
-                            (motd (plain-file \"motd\" \"Hi there!\")))))
+                            (motd (plain-file \"motd\" \"Hi there!\"))))
+    (delete udev-service-type))
 
 It changes the configuration of the GUIX-SERVICE-TYPE instance, and that of
-all the MINGETTY-SERVICE-TYPE instances.
+all the MINGETTY-SERVICE-TYPE instances, and it deletes instances of the
+UDEV-SERVICE-TYPE.
 
-This is a shorthand for (map (lambda (svc) ...) %base-services)."
+This is a shorthand for (filter-map (lambda (svc) ...) %base-services)."
     ((_ services clauses ...)
-     (map (lambda (service)
-            (%modify-service service clauses ...))
-          services))))
+     (filter-map (lambda (service)
+                   (%modify-service service clauses ...))
+                 services))))
 
 
 ;;;
diff --git a/gnu/services/admin.scm b/gnu/services/admin.scm
index b34b990f32..763a4434e4 100644
--- a/gnu/services/admin.scm
+++ b/gnu/services/admin.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -80,7 +80,7 @@
 (define %rotated-files
   ;; Syslog files subject to rotation.
   '("/var/log/messages" "/var/log/secure" "/var/log/debug"
-    "/var/log/maillog"))
+    "/var/log/maillog" "/var/log/mcron.log"))
 
 (define %default-rotations
   (list (log-rotation                             ;syslog files
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index f50bcfdcb4..24b3ea785b 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -13,6 +13,7 @@
 ;;; Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2021 qblade <qblade@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1815,7 +1816,11 @@ proxy of 'guix-daemon'...~%")
 raise a deprecation warning if the 'compression-level' field was used."
   (match (%guix-publish-configuration-compression-level config)
     (#f
-     '(("gzip" 3)))
+     ;; Default to low compression levels when there's no cache so that users
+     ;; get good bandwidth by default.
+     (if (guix-publish-configuration-cache config)
+         '(("gzip" 5) ("zstd" 19))
+         '(("gzip" 3) ("zstd" 3))))               ;zstd compresses faster
     (level
      (warn-about-deprecation 'compression-level properties
                              #:replacement 'compression)
@@ -2304,7 +2309,11 @@ This service is not part of @var{%base-services}."
   (auto-login              kmscon-configuration-auto-login
                            (default #f))
   (hardware-acceleration?  kmscon-configuration-hardware-acceleration?
-                           (default #f))) ; #t causes failure
+                           (default #f))  ; #t causes failure
+  (font-engine             kmscon-configuration-font-engine
+                           (default "pango"))
+  (font-size               kmscon-configuration-font-size
+                           (default 12)))
 
 (define kmscon-service-type
   (shepherd-service-type
@@ -2315,13 +2324,17 @@ This service is not part of @var{%base-services}."
            (login-program (kmscon-configuration-login-program config))
            (login-arguments (kmscon-configuration-login-arguments config))
            (auto-login (kmscon-configuration-auto-login config))
-           (hardware-acceleration? (kmscon-configuration-hardware-acceleration? config)))
+           (hardware-acceleration? (kmscon-configuration-hardware-acceleration? config))
+           (font-engine (kmscon-configuration-font-engine config))
+           (font-size (kmscon-configuration-font-size config)))
 
        (define kmscon-command
          #~(list
             #$(file-append kmscon "/bin/kmscon") "--login"
             "--vt" #$virtual-terminal
             "--no-switchvt" ;Prevent a switch to the virtual terminal.
+            "--font-engine" #$font-engine
+            "--font-size" #$(number->string font-size)
             #$@(if hardware-acceleration? '("--hwaccel") '())
             "--login" "--"
             #$login-program #$@login-arguments
diff --git a/gnu/services/ci.scm b/gnu/services/ci.scm
new file mode 100644
index 0000000000..0b18521e76
--- /dev/null
+++ b/gnu/services/ci.scm
@@ -0,0 +1,127 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018, 2019, 2020, 2021 Christopher Baines <mail@cbaines.net>
+;;;
+;;; 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 services ci)
+  #:use-module (guix gexp)
+  #:use-module (guix records)
+  #:use-module (gnu packages admin)
+  #:use-module (gnu packages ci)
+  #:use-module (gnu services)
+  #:use-module (gnu services base)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu services admin)
+  #:use-module (gnu system shadow)
+  #:use-module (ice-9 match)
+  #:export (laminar-configuration
+            laminar-configuration?
+            laminar-configuration-home-directory
+            laminar-configuration-bind-http
+            laminar-configuration-bind-rpc
+            laminar-configuration-title
+            laminar-configuration-keep-rundirs
+            laminar-configuration-archive-url
+            laminar-configuration-base-url
+
+            laminar-service-type))
+
+;;;; Commentary:
+;;;
+;;; This module implements a service that to run instances of Laminar, a
+;;; continuous integration tool.
+;;;
+;;;; Code:
+
+(define-record-type* <laminar-configuration>
+  laminar-configuration make-laminar-configuration
+  laminar-configuration?
+  (laminar          laminars-configuration-laminar
+                    (default laminar))
+  (home-directory   laminar-configuration-home-directory
+                    (default "/var/lib/laminar"))
+  (bind-http        laminar-configuration-bind-http
+                    (default "*:8080"))
+  (bind-rpc         laminar-configuration-bind-rpc
+                    (default "unix-abstract:laminar"))
+  (title            laminar-configuration-title
+                    (default "Laminar"))
+  (keep-rundirs     laminar-keep-rundirs
+                    (default 0))
+  (archive-url      laminar-archive-url
+                    (default #f))
+  (base-url         laminar-base-url
+                    (default #f)))
+
+(define laminar-shepherd-service
+  (match-lambda
+    (($ <laminar-configuration> laminar home-directory
+                                bind-http bind-rpc
+                                title keep-rundirs archive-url
+                                base-url)
+     (list (shepherd-service
+            (documentation "Run Laminar.")
+            (provision '(laminar))
+            (requirement '(networking))
+            (start #~(make-forkexec-constructor
+                      (list #$(file-append laminar "/sbin/laminard"))
+                      #:environment-variables
+                      `(,(string-append "LAMINAR_HOME="
+                                        #$home-directory)
+                        ,(string-append "LAMINAR_BIND_HTTP="
+                                        #$bind-http)
+                        ,(string-append "LAMINAR_TITLE="
+                                        #$title)
+                        ,(string-append "LAMINAR_KEEP_RUNDIRS="
+                                        #$(number->string
+                                           keep-rundirs))
+                        ,@(if #$archive-url
+                              (list
+                               (string-append "LAMINAR_ARCHIVE_URL="
+                                              #$archive-url))
+                              '())
+                        ,@(if #$base-url
+                              (list
+                               (string-append "LAMINAR_BASE_URL="
+                                              #$base-url))
+                              '()))
+                      #:user "laminar"
+                      #:group "laminar"))
+            (stop #~(make-kill-destructor)))))))
+
+(define (laminar-account config)
+  "Return the user accounts and user groups for CONFIG."
+  (list (user-group
+         (name "laminar")
+         (system? #t))
+        (user-account
+         (name "laminar")
+         (group "laminar")
+         (system? #t)
+         (comment "Laminar privilege separation user")
+         (home-directory (laminar-configuration-home-directory config))
+         (shell #~(string-append #$shadow "/sbin/nologin")))))
+
+(define laminar-service-type
+  (service-type
+   (name 'laminar)
+   (extensions
+    (list
+     (service-extension shepherd-root-service-type laminar-shepherd-service)
+     (service-extension account-service-type laminar-account)))
+   (default-value (laminar-configuration))
+   (description
+    "Run the Laminar continuous integration service.")))
diff --git a/gnu/services/cuirass.scm b/gnu/services/cuirass.scm
index 9de36eb1c9..5b4e24d794 100644
--- a/gnu/services/cuirass.scm
+++ b/gnu/services/cuirass.scm
@@ -60,7 +60,7 @@
 ;;;; Code:
 
 (define %cuirass-default-database
-  "dbname=cuirass host=/var/run/postgresql")
+  "dbname=cuirass host=/tmp")
 
 (define-record-type* <cuirass-remote-server-configuration>
   cuirass-remote-server-configuration make-cuirass-remote-server-configuration
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index a841e7a50e..4a6d36b50b 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -115,7 +115,7 @@ host	all	all	::1/128 	md5"))
   (ident-file        postgresql-config-file-ident-file
                      (default %default-postgres-ident))
   (socket-directory  postgresql-config-file-socket-directory
-                     (default "/var/run/postgresql"))
+                     (default #false))
   (extra-config      postgresql-config-file-extra-config
                      (default '())))
 
@@ -363,7 +363,7 @@ and stores the database cluster in @var{data-directory}."
   postgresql-role-configuration make-postgresql-role-configuration
   postgresql-role-configuration?
   (host             postgresql-role-configuration-host ;string
-                    (default "/var/run/postgresql"))
+                    (default "/tmp"))
   (log              postgresql-role-configuration-log ;string
                     (default "/var/log/postgresql_roles.log"))
   (roles            postgresql-role-configuration-roles
diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm
index c0f6371104..81f692e437 100644
--- a/gnu/services/mail.scm
+++ b/gnu/services/mail.scm
@@ -159,7 +159,7 @@
 (define (serialize-free-form-args field-name val)
   (serialize-field field-name
                    (string-join
-                    (map (match-lambda ((k . v) (format #t "~a=~a" k v))) val)
+                    (map (match-lambda ((k . v) (format #f "~a=~a" k v))) val)
                     " ")))
 
 (define-configuration dict-configuration
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index 231a9f66c7..761820ad2e 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -16,6 +16,7 @@
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2021 Christopher Lemmer Webber <cwebber@dustycloud.org>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -55,6 +56,8 @@
   #:use-module (gnu packages ntp)
   #:use-module (gnu packages wicd)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages ipfs)
+  #:use-module (gnu build linux-container)
   #:use-module (guix gexp)
   #:use-module (guix records)
   #:use-module (guix modules)
@@ -197,6 +200,13 @@
             yggdrasil-configuration-json-config
             yggdrasil-configuration-package
 
+            ipfs-service-type
+            ipfs-configuration
+            ipfs-configuration?
+            ipfs-configuration-package
+            ipfs-configuration-gateway
+            ipfs-configuration-api
+
             keepalived-configuration
             keepalived-configuration?
             keepalived-service-type))
@@ -1878,6 +1888,137 @@ See yggdrasil -genconf for config options.")
 
 
 ;;;
+;;; IPFS
+;;;
+
+(define-record-type* <ipfs-configuration>
+  ipfs-configuration
+  make-ipfs-configuration
+  ipfs-configuration?
+  (package ipfs-configuration-package
+           (default go-ipfs))
+  (gateway ipfs-configuration-gateway
+           (default "/ip4/127.0.0.1/tcp/8082"))
+  (api     ipfs-configuration-api
+           (default "/ip4/127.0.0.1/tcp/5001")))
+
+(define %ipfs-home "/var/lib/ipfs")
+
+(define %ipfs-accounts
+  (list (user-account
+         (name "ipfs")
+         (group "ipfs")
+         (system? #t)
+         (comment "IPFS daemon user")
+         (home-directory "/var/lib/ipfs")
+         (shell (file-append shadow "/sbin/nologin")))
+        (user-group
+         (name "ipfs")
+         (system? #t))))
+
+(define (ipfs-binary config)
+  (file-append (ipfs-configuration-package config) "/bin/ipfs"))
+
+(define %ipfs-home-mapping
+  #~(file-system-mapping
+     (source #$%ipfs-home)
+     (target #$%ipfs-home)
+     (writable? #t)))
+
+(define %ipfs-environment
+  #~(list #$(string-append "HOME=" %ipfs-home)))
+
+(define (ipfs-shepherd-service config)
+  "Return a <shepherd-service> for IPFS with CONFIG."
+  (define ipfs-daemon-command
+    #~(list #$(ipfs-binary config) "daemon"))
+  (list
+   (with-imported-modules (source-module-closure
+                           '((gnu build shepherd)
+                             (gnu system file-systems)))
+     (shepherd-service
+      (provision '(ipfs))
+      ;; While IPFS is most useful when the machine is connected
+      ;; to the network, only loopback is required for starting
+      ;; the service.
+      (requirement '(loopback))
+      (documentation "Connect to the IPFS network")
+      (modules '((gnu build shepherd)
+                 (gnu system file-systems)))
+      (start #~(make-forkexec-constructor/container
+                #$ipfs-daemon-command
+                #:namespaces '#$(fold delq %namespaces '(user net))
+                #:mappings (list #$%ipfs-home-mapping)
+                #:log-file "/var/log/ipfs.log"
+                #:user "ipfs"
+                #:group "ipfs"
+                #:environment-variables #$%ipfs-environment))
+      (stop #~(make-kill-destructor))))))
+
+(define (%ipfs-activation config)
+  "Return an activation gexp for IPFS with CONFIG"
+  (define (ipfs-config-command setting value)
+    #~(#$(ipfs-binary config) "config" #$setting #$value))
+  (define (set-config!-gexp setting value)
+    #~(system* #$@(ipfs-config-command setting value)))
+  (define settings
+    `(("Addresses.API" ,(ipfs-configuration-api config))
+      ("Addresses.Gateway" ,(ipfs-configuration-gateway config))))
+  (define inner-gexp
+    #~(begin
+        (umask #o077)
+        ;; Create $HOME/.ipfs structure
+        (system* #$(ipfs-binary config) "init")
+        ;; Apply settings
+        #$@(map (cute apply set-config!-gexp <>) settings)))
+  (define inner-script
+    (program-file "ipfs-activation-inner" inner-gexp))
+  ;; Run ipfs init and ipfs config from a container,
+  ;; in case the IPFS daemon was compromised at some point
+  ;; and ~/.ipfs is now a symlink to somewhere outside
+  ;; %ipfs-home.
+  (define container-gexp
+    (with-extensions (list shepherd)
+      (with-imported-modules (source-module-closure
+                              '((gnu build shepherd)
+                                (gnu system file-systems)))
+        #~(begin
+            (use-modules (gnu build shepherd)
+                         (gnu system file-systems))
+            (let* ((constructor
+                    (make-forkexec-constructor/container
+                     (list #$inner-script)
+                     #:namespaces '#$(fold delq %namespaces '(user))
+                     #:mappings (list #$%ipfs-home-mapping)
+                     #:user "ipfs"
+                     #:group "ipfs"
+                     #:environment-variables #$%ipfs-environment))
+                   (pid (constructor)))
+              (waitpid pid))))))
+  ;; The activation may happen from the initrd, which uses
+  ;; a statically-linked guile, while the guix container
+  ;; procedures require a working dynamic-link.
+  (define container-script
+    (program-file "ipfs-activation-container" container-gexp))
+  #~(system* #$container-script))
+
+(define ipfs-service-type
+  (service-type
+   (name 'ipfs)
+   (extensions
+    (list (service-extension account-service-type
+                             (const %ipfs-accounts))
+          (service-extension activation-service-type
+                             %ipfs-activation)
+          (service-extension shepherd-root-service-type
+                             ipfs-shepherd-service)))
+   (default-value (ipfs-configuration))
+   (description
+    "Run @command{ipfs daemon}, the reference implementation
+of the IPFS peer-to-peer storage network.")))
+
+
+;;;
 ;;; Keepalived
 ;;;
 
diff --git a/gnu/services/sysctl.scm b/gnu/services/sysctl.scm
index aaea7cc30d..80ed2ff46f 100644
--- a/gnu/services/sysctl.scm
+++ b/gnu/services/sysctl.scm
@@ -25,6 +25,8 @@
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match)
   #:export (sysctl-configuration
+            sysctl-configuration-sysctl
+            sysctl-configuration-settings
             sysctl-service-type
             %default-sysctl-settings))
 
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
index f3df0b979f..8cb5633165 100644
--- a/gnu/services/version-control.scm
+++ b/gnu/services/version-control.scm
@@ -163,7 +163,7 @@ protocol.")
 
 (define* (git-daemon-service #:key (config (git-daemon-configuration)))
   "Return a service that runs @command{git daemon}, a simple TCP server to
-expose repositories over the Git protocol for annoymous access.
+expose repositories over the Git protocol for anonymous access.
 
 The optional @var{config} argument should be a
 @code{<git-daemon-configuration>} object, by default it allows read-only
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index aa688a4328..bfcdfe7421 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -840,8 +840,9 @@ of index files."
             (requirement '(networking))
             (start #~(make-forkexec-constructor
                       '(#$(file-append package "/sbin/fcgiwrap")
-			  "-s" #$socket)
-		      #:user #$user #:group #$group))
+                        "-s" #$socket)
+                      #:user #$user #:group #$group
+                      #:log-file "/var/log/fcgiwrap.log"))
             (stop #~(make-kill-destructor)))))))
 
 (define fcgiwrap-activation
@@ -863,7 +864,7 @@ of index files."
                 (extensions
                  (list (service-extension shepherd-root-service-type
                                           fcgiwrap-shepherd-service)
-		       (service-extension account-service-type
+                       (service-extension account-service-type
                                           fcgiwrap-accounts)
                        (service-extension activation-service-type
                                           fcgiwrap-activation)))
@@ -1946,24 +1947,24 @@ root=/srv/gemini
             (documentation "Run the agate Gemini server.")
             (start (let ((agate (file-append package "/bin/agate")))
                      #~(make-forkexec-constructor
-			(list #$agate
-			      "--content" #$content
-			      "--cert" #$cert
-			      "--key" #$key
-			      "--addr" #$@addr
+                        (list #$agate
+                              "--content" #$content
+                              "--cert" #$cert
+                              "--key" #$key
+                              "--addr" #$@addr
                               #$@(if lang
                                      (list "--lang" lang)
                                      '())
-			      #$@(if hostname
-				     (list "--hostname" hostname)
-				     '())
-			      #$@(if silent? '("--silent") '())
-			      #$@(if serve-secret? '("--serve-secret") '())
-			      #$@(if log-ip? '("--log-ip") '()))
-			#:user #$user #:group #$group
-			#:log-file #$log-file)))
+                              #$@(if hostname
+                                     (list "--hostname" hostname)
+                                     '())
+                              #$@(if silent? '("--silent") '())
+                              #$@(if serve-secret? '("--serve-secret") '())
+                              #$@(if log-ip? '("--log-ip") '()))
+                        #:user #$user #:group #$group
+                        #:log-file #$log-file)))
             (stop #~(make-kill-destructor)))))))
-             
+
 (define agate-accounts
   (match-lambda
     (($ <agate-configuration> _ _ _ _ _
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 60611dc77d..17d983ff8d 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -68,6 +68,8 @@
 
             %default-xorg-modules
             %default-xorg-fonts
+            %default-xorg-server-arguments
+
             xorg-wrapper
             xorg-start-command
             xinitrc
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index db8bc0f49a..753eb9c863 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -88,6 +88,13 @@
 ;;;
 ;;; Code:
 
+;; By default, the msize value is 8 KiB, which according to QEMU is
+;; insufficient and would degrade performance.  The msize value should roughly
+;; match the bandwidth of the system's IO (see:
+;; https://wiki.qemu.org/Documentation/9psetup#msize).  Use 100 MiB as a
+;; conservative default.
+(define %default-msize-value (* 100 (expt 2 20))) ;100 MiB
+
 (define %linux-vm-file-systems
   ;; File systems mounted for 'derivation-in-linux-vm'.  These are shared with
   ;; the host over 9p.
@@ -103,21 +110,23 @@
           (type "9p")
           (needed-for-boot? #t)
           (flags '(read-only))
-          (options "trans=virtio,cache=loose")
+          (options (format #f "trans=virtio,cache=loose,msize=~a"
+                           %default-msize-value))
           (check? #f))
         (file-system
           (mount-point "/xchg")
           (device "xchg")
           (type "9p")
           (needed-for-boot? #t)
-          (options "trans=virtio")
+          (options (format #f "trans=virtio,msize=~a" %default-msize-value))
           (check? #f))
         (file-system
           (mount-point "/tmp")
           (device "tmp")
           (type "9p")
           (needed-for-boot? #t)
-          (options "trans=virtio,cache=loose")
+          (options (format #f "trans=virtio,cache=loose,msize=~a"
+                           %default-msize-value))
           (check? #f))))
 
 (define not-config?
@@ -459,6 +468,7 @@ system that is passed to 'populate-root-file-system'."
 (define* (system-docker-image os
                               #:key
                               (name "guix-docker-image")
+                              (memory-size 256)
                               (register-closures? (has-guix-service-type? os))
                               shared-network?)
   "Build a docker image.  OS is the desired <operating-system>.  NAME is the
@@ -552,6 +562,7 @@ the operating system."
 
     (expression->derivation-in-linux-vm
      name build
+     #:memory-size memory-size
      #:make-disk-image? #f
      #:single-file-output? #t
      #:references-graphs `((,graph ,os)))))
@@ -581,7 +592,8 @@ the operating system."
        (type "9p")
        (flags (if writable? '() '(read-only)))
        (options (string-append "trans=virtio"
-                               (if writable? "" ",cache=loose")))
+                               (if writable? "" ",cache=loose")
+                               ",msize=" (number->string %default-msize-value)))
        (check? #f)
        (create-mount-point? #t)))))
 
diff --git a/gnu/tests.scm b/gnu/tests.scm
index 3b10a6d5ac..eb636873a2 100644
--- a/gnu/tests.scm
+++ b/gnu/tests.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -74,13 +75,24 @@
                     (default "/dev/virtio-ports/org.gnu.guix.port.0"))
   (imported-modules marionette-configuration-imported-modules
                     (default '()))
+  (extensions       marionette-configuration-extensions
+                    (default '())) ; list of packages
   (requirements     marionette-configuration-requirements ;list of symbols
                     (default '())))
 
+;; Hack: avoid indenting code beyond column 80 in marionette-shepherd-service.
+(define-syntax-rule (with-imported-modules-and-extensions imported-modules
+                                                          extensions
+                                                          gexp)
+  (with-imported-modules imported-modules
+    (with-extensions extensions
+      gexp)))
+
 (define (marionette-shepherd-service config)
   "Return the Shepherd service for the marionette REPL"
   (match config
-    (($ <marionette-configuration> device imported-modules requirement)
+    (($ <marionette-configuration> device imported-modules extensions
+                                   requirement)
      (list (shepherd-service
             (provision '(marionette))
 
@@ -90,7 +102,7 @@
             (modules '((ice-9 match)
                        (srfi srfi-9 gnu)))
             (start
-             (with-imported-modules imported-modules
+             (with-imported-modules-and-extensions imported-modules extensions
                #~(lambda ()
                    (define (self-quoting? x)
                      (letrec-syntax ((one-of (syntax-rules ()
@@ -154,11 +166,13 @@
 (define* (marionette-operating-system os
                                       #:key
                                       (imported-modules '())
+                                      (extensions '())
                                       (requirements '()))
   "Return a marionetteed variant of OS such that OS can be used as a
 marionette in a virtual machine--i.e., controlled from the host system.  The
 marionette service in the guest is started after the Shepherd services listed
-in REQUIREMENTS."
+in REQUIREMENTS.  The packages in the list EXTENSIONS are made available from
+the backdoor REPL."
   (operating-system
     (inherit os)
     ;; Make sure the guest dies on error.
@@ -172,6 +186,7 @@ in REQUIREMENTS."
     (services (cons (service marionette-service-type
                              (marionette-configuration
                               (requirements requirements)
+                              (extensions extensions)
                               (imported-modules imported-modules)))
                     (operating-system-user-services os)))))
 
@@ -281,4 +296,9 @@ result."
   "Return the list of system tests."
   (reverse (fold-system-tests cons '())))
 
+
+;; Local Variables:
+;; eval: (put 'with-imported-modules-and-extensions 'scheme-indent-function 2)
+;; End:
+
 ;;; tests.scm ends here
diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm
index e5f9b87b1d..9429a10b75 100644
--- a/gnu/tests/base.scm
+++ b/gnu/tests/base.scm
@@ -555,10 +555,6 @@ functionality tests.")
                               (start-service 'term-tty1))
                            marionette)
           (marionette-type "root\n" marionette)
-          (wait-for-screen-text marionette
-                                (lambda (text)
-                                  (string-contains text "root@komputilo"))
-                                #:ocrad ocrad)
 
           ;; Start tmux and wait for it to be ready.
           (marionette-type "tmux new-session 'echo 1 > /ready; bash'\n"
diff --git a/gnu/tests/ci.scm b/gnu/tests/ci.scm
new file mode 100644
index 0000000000..a8b39fcd01
--- /dev/null
+++ b/gnu/tests/ci.scm
@@ -0,0 +1,128 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2018, 2019, 2020, 2021 Christopher Baines <mail@cbaines.net>
+;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
+;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.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 tests ci)
+  #:use-module (gnu tests)
+  #:use-module (gnu system)
+  #:use-module (gnu system file-systems)
+  #:use-module (gnu system shadow)
+  #:use-module (gnu system vm)
+  #:use-module (gnu services)
+  #:use-module (gnu services ci)
+  #:use-module (gnu services web)
+  #:use-module (gnu services networking)
+  #:use-module (guix gexp)
+  #:use-module (guix store)
+  #:export (%test-laminar))
+
+
+(define %laminar-os
+  ;; Operating system under test.
+  (simple-operating-system
+   (service dhcp-client-service-type)
+   (service laminar-service-type)))
+
+(define* (run-laminar-test #:optional (http-port 8080))
+  "Run tests in %LAMINAR-OS, which has laminar running and listening on
+HTTP-PORT."
+  (define os
+    (marionette-operating-system
+     %laminar-os
+     #:imported-modules '((gnu services herd)
+                          (guix combinators))))
+
+  (define vm
+    (virtual-machine
+     (operating-system os)
+     (port-forwardings `((,http-port . 8080)))))
+
+  (define test
+    (with-imported-modules '((gnu build marionette))
+      #~(begin
+          (use-modules (srfi srfi-11) (srfi srfi-64)
+                       (ice-9 match)
+                       (gnu build marionette)
+                       (web uri)
+                       (web client)
+                       (web response))
+
+          (define marionette
+            ;; Forward the guest's HTTP-PORT, where laminar is listening, to
+            ;; port 8080 in the host.
+            (make-marionette (list #$vm)))
+
+          (mkdir #$output)
+          (chdir #$output)
+
+          (test-begin "laminar")
+
+          (test-assert "service running"
+            (marionette-eval
+             '(begin
+                (use-modules (gnu services herd))
+                (start-service 'laminar))
+             marionette))
+
+          (define* (retry-on-error f #:key times delay)
+            (let loop ((attempt 1))
+              (match (catch
+                      #t
+                      (lambda ()
+                        (cons #t
+                              (f)))
+                      (lambda args
+                        (cons #f
+                              args)))
+                ((#t . return-value)
+                 return-value)
+                ((#f . error-args)
+                 (if (>= attempt times)
+                     error-args
+                     (begin
+                       (sleep delay)
+                       (loop (+ 1 attempt))))))))
+
+          (test-equal "http-get"
+            200
+            (retry-on-error
+             (lambda ()
+               (let-values (((response text)
+                             (http-get #$(format
+                                          #f
+                                          "http://localhost:~A/"
+                                          http-port)
+                                       ;; TODO: Why does decoding fail?
+                                       #:decode-body? #f)))
+                 (response-code response)))
+             #:times 10
+             #:delay 5))
+
+          (test-end)
+          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+
+  (gexp->derivation "laminar-test" test))
+
+(define %test-laminar
+  (system-test
+   (name "laminar")
+   (description "Connect to a running Laminar server.")
+   (value (run-laminar-test))))
diff --git a/gnu/tests/databases.scm b/gnu/tests/databases.scm
index 4bfe4ee282..c8d11e10c0 100644
--- a/gnu/tests/databases.scm
+++ b/gnu/tests/databases.scm
@@ -233,7 +233,7 @@
                 (let* ((port (open-pipe*
                               OPEN_READ
                               #$(file-append postgresql "/bin/psql")
-                              "-tAh" "/var/run/postgresql"
+                              "-tAh" "/tmp"
                               "-c" "SELECT 1 FROM pg_database WHERE
  datname='root'"))
                        (output (get-string-all port)))
diff --git a/gnu/tests/docker.scm b/gnu/tests/docker.scm
index cbb856b016..92611b0a8d 100644
--- a/gnu/tests/docker.scm
+++ b/gnu/tests/docker.scm
@@ -303,5 +303,6 @@ docker-image} inside Docker.")
                                         (inherit (simple-operating-system))
                                         ;; Use locales for a single libc to
                                         ;; reduce space requirements.
-                                        (locale-libcs (list glibc))))
+                                        (locale-libcs (list glibc)))
+                                      #:memory-size 1024)
                  run-docker-system-test)))))
diff --git a/gnu/tests/file-sharing.scm b/gnu/tests/file-sharing.scm
new file mode 100644
index 0000000000..9a8ee6a593
--- /dev/null
+++ b/gnu/tests/file-sharing.scm
@@ -0,0 +1,271 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2021 Simon South <simon@simonsouth.net>
+;;;
+;;; 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/>.
+
+;;;
+;;; The Transmission Daemon service.
+;;;
+
+(define-module (gnu tests file-sharing)
+  #:use-module (gnu packages bittorrent)
+  #:use-module (gnu services)
+  #:use-module (gnu services file-sharing)
+  #:use-module (gnu services networking)
+  #:use-module (gnu system vm)
+  #:use-module (gnu tests)
+  #:use-module (guix gexp)
+  #:export (%test-transmission-daemon))
+
+(define %transmission-daemon-user "transmission")
+(define %transmission-daemon-group "transmission")
+
+(define %transmission-daemon-config-dir "/var/lib/transmission-daemon")
+(define %transmission-daemon-watch-dir
+  (string-append %transmission-daemon-config-dir "/watch"))
+(define %transmission-daemon-incomplete-dir
+  (string-append %transmission-daemon-config-dir "/incomplete"))
+
+(define %transmission-daemon-settings-file
+  (string-append %transmission-daemon-config-dir "/settings.json"))
+
+(define %transmission-daemon-peer-port 51000) ; default is 51413
+
+(define %transmission-daemon-rpc-port 9999)   ; default is 9091
+(define %transmission-daemon-rpc-username "test-username")
+(define %transmission-daemon-rpc-password "test-password")
+
+(define %transmission-daemon-test-configuration
+  (transmission-daemon-configuration
+   (incomplete-dir-enabled? #t)
+   (incomplete-dir %transmission-daemon-incomplete-dir)
+
+   (watch-dir-enabled? #t)
+   (watch-dir %transmission-daemon-watch-dir)
+
+   (peer-port-random-on-start? #f)
+   (peer-port %transmission-daemon-peer-port)
+
+   (rpc-enabled? #t)
+   (rpc-port %transmission-daemon-rpc-port)
+   (rpc-whitelist-enabled? #f)
+   (rpc-authentication-required? #t)
+   (rpc-username %transmission-daemon-rpc-username)
+   (rpc-password (transmission-password-hash %transmission-daemon-rpc-password
+                                             "yEK0q3.X"))))
+
+(define (run-transmission-daemon-test)
+  (define os
+    (marionette-operating-system
+     (simple-operating-system
+      (service dhcp-client-service-type)
+      (service transmission-daemon-service-type
+               %transmission-daemon-test-configuration))
+     #:imported-modules '((gnu services herd)
+                          (json parser))
+     #:requirements '(transmission-daemon)))
+
+  (define test
+    (with-imported-modules '((gnu build marionette))
+      #~(begin
+          (use-modules (gnu build marionette)
+                       (srfi srfi-64))
+
+          (define marionette
+            (make-marionette
+             (list #$(virtual-machine
+                      (operating-system os)
+                      (port-forwardings
+                       `((9091 . ,%transmission-daemon-rpc-port)))))))
+
+          (mkdir #$output)
+          (chdir #$output)
+
+          (test-begin "transmission-daemon")
+
+          ;; Make sure the "transmission" user and group have been created.
+          (test-assert "\"transmission\" user exists"
+            (marionette-eval
+             '(begin
+                (getpwnam #$%transmission-daemon-user)
+                #t)
+             marionette))
+          (test-assert "\"transmission\" group exists"
+            (marionette-eval
+             '(begin
+                (getgrnam #$%transmission-daemon-group)
+                #t)
+             marionette))
+
+          ;; Make sure Transmission Daemon's configuration directory has been
+          ;; created with the correct ownership and permissions.
+          (test-assert "configuration directory exists"
+            (marionette-eval
+             '(eq? (stat:type (stat #$%transmission-daemon-config-dir))
+                   'directory)
+             marionette))
+          (test-assert "configuration directory has correct ownership"
+            (marionette-eval
+             '(let ((config-dir (stat #$%transmission-daemon-config-dir))
+                    (transmission-user (getpwnam #$%transmission-daemon-user)))
+                (and (eqv? (stat:uid config-dir)
+                           (passwd:uid transmission-user))
+                     (eqv? (stat:gid config-dir)
+                           (passwd:gid transmission-user))))
+             marionette))
+          (test-assert "configuration directory has expected permissions"
+            (marionette-eval
+             '(eqv? (stat:perms (stat #$%transmission-daemon-config-dir))
+                    #o750)
+             marionette))
+
+          ;; Make sure the incomplete-downloads and watch directories have been
+          ;; created with the correct ownership and permissions.
+          (test-assert "incomplete-downloads directory exists"
+            (marionette-eval
+             '(eq? (stat:type (stat #$%transmission-daemon-incomplete-dir))
+                   'directory)
+             marionette))
+          (test-assert "incomplete-downloads directory has correct ownership"
+            (marionette-eval
+             '(let ((incomplete-dir
+                     (stat #$%transmission-daemon-incomplete-dir))
+                    (transmission-user
+                     (getpwnam #$%transmission-daemon-user)))
+                (and (eqv? (stat:uid incomplete-dir)
+                           (passwd:uid transmission-user))
+                     (eqv? (stat:gid incomplete-dir)
+                           (passwd:gid transmission-user))))
+             marionette))
+          (test-assert
+              "incomplete-downloads directory has expected permissions"
+            (marionette-eval
+             '(eqv? (stat:perms (stat #$%transmission-daemon-incomplete-dir))
+                    #o750)
+             marionette))
+
+          (test-assert "watch directory exists"
+            (marionette-eval
+             '(eq? (stat:type (stat #$%transmission-daemon-watch-dir))
+                   'directory)
+             marionette))
+          (test-assert "watch directory has correct ownership"
+            (marionette-eval
+             '(let ((watch-dir (stat #$%transmission-daemon-watch-dir))
+                    (transmission-user (getpwnam #$%transmission-daemon-user)))
+                (and (eqv? (stat:uid watch-dir)
+                           (passwd:uid transmission-user))
+                     (eqv? (stat:gid watch-dir)
+                           (passwd:gid transmission-user))))
+             marionette))
+          (test-assert "watch directory has expected permissions"
+            (marionette-eval
+             '(eqv? (stat:perms (stat #$%transmission-daemon-watch-dir))
+                    #o770)
+             marionette))
+
+          ;; Make sure the settings file has been created and appears valid.
+          (test-assert "settings file exists"
+            (marionette-eval
+             '(file-exists? #$%transmission-daemon-settings-file)
+             marionette))
+          (test-assert "settings file is valid JSON"
+            (marionette-eval
+             '(begin
+                (use-modules (json parser))
+                (with-input-from-file #$%transmission-daemon-settings-file
+                  (lambda ()
+                    (json->scm)))
+                #t)
+             marionette))
+          (test-assert "settings file contains a non-empty JSON object"
+            (marionette-eval
+             '(begin
+                (use-modules (json parser)
+                             (srfi srfi-1))
+                (let ((settings (with-input-from-file
+                                    #$%transmission-daemon-settings-file
+                                  (lambda ()
+                                    (json->scm)))))
+                  (and (list? settings)
+                       (not (null? settings))
+                       (every pair? settings))))
+             marionette))
+
+          ;; Make sure Transmission Daemon is running.
+          (test-assert "transmission-daemon is running"
+            (marionette-eval
+             '(begin
+                (use-modules (gnu services herd))
+                (live-service-running
+                 (find (lambda (live-service)
+                         (memq 'transmission-daemon
+                               (live-service-provision live-service)))
+                       (current-services))))
+             marionette))
+
+          ;; Make sure the daemon is listening for peer connections.
+          (test-assert "transmission-daemon is listening for peers"
+            (wait-for-tcp-port #$%transmission-daemon-peer-port marionette))
+
+          ;; Make sure the daemon is listening for RPC-client connections.
+          (test-assert "transmission-daemon is listening for RPC clients"
+            (wait-for-tcp-port #$%transmission-daemon-rpc-port marionette))
+
+          ;; Make sure the RPC-authentication settings are honored.
+          (test-assert "transmission-daemon requires RPC authentication"
+            (let ((transmission-remote
+                   (string-append #+transmission "/bin/transmission-remote")))
+              (with-error-to-port (%make-void-port "w")
+                (lambda ()
+                  (not (zero? (system* transmission-remote
+                                       "--session-info")))))))
+          (test-assert "transmission-daemon rejects incorrect RPC credentials"
+            (let ((transmission-remote
+                   (string-append #+transmission "/bin/transmission-remote"))
+                  (wrong-auth-string
+                   (string-append #$%transmission-daemon-rpc-username
+                                  ":"
+                                  "wrong-"
+                                  #$%transmission-daemon-rpc-password)))
+              (with-error-to-port (%make-void-port "w")
+                (lambda ()
+                  (not (zero? (system* transmission-remote
+                                       "--auth" wrong-auth-string
+                                       "--session-info")))))))
+          (test-assert "transmission-daemon accepts correct RPC credentials"
+            (let ((transmission-remote
+                   (string-append #+transmission "/bin/transmission-remote"))
+                  (auth-string
+                   (string-append #$%transmission-daemon-rpc-username
+                                  ":"
+                                  #$%transmission-daemon-rpc-password)))
+              (with-output-to-port (%make-void-port "w")
+                (lambda ()
+                  (zero? (system* transmission-remote
+                                  "--auth" auth-string
+                                  "--session-info"))))))
+
+          (test-end)
+          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+
+  (gexp->derivation "transmission-daemon-test" test))
+
+(define %test-transmission-daemon
+  (system-test
+   (name "transmission-daemon")
+   (description "Test a running Transmission Daemon service.")
+   (value (run-transmission-daemon-test))))
diff --git a/gnu/tests/guix.scm b/gnu/tests/guix.scm
index 219b8b482f..af7d8f0b21 100644
--- a/gnu/tests/guix.scm
+++ b/gnu/tests/guix.scm
@@ -164,10 +164,7 @@
                             "
 local	all	all			trust
 host	all	all	127.0.0.1/32 	trust
-host	all	all	::1/128 	trust"))
-               ;; XXX: Remove when postgresql default socket directory is
-               ;; changed to /var/run/postgresql.
-               (socket-directory #f)))))
+host	all	all	::1/128 	trust"))))))
    (service guix-data-service-type
             (guix-data-service-configuration
              (host "0.0.0.0")))
diff --git a/gnu/tests/monitoring.scm b/gnu/tests/monitoring.scm
index be69e1c259..8630f5818c 100644
--- a/gnu/tests/monitoring.scm
+++ b/gnu/tests/monitoring.scm
@@ -309,12 +309,7 @@ zabbix||{}
           (service dhcp-client-service-type)
           (service postgresql-service-type
                    (postgresql-configuration
-                    (postgresql postgresql)
-                   ;; XXX: Remove when postgresql default socket directory is
-                    ;; changed to /var/run/postgresql.
-                    (config-file
-                     (postgresql-config-file
-                      (socket-directory #f)))))
+                    (postgresql postgresql)))
           (service zabbix-front-end-service-type
                    (zabbix-front-end-configuration
                     (db-password "zabbix")))
diff --git a/gnu/tests/networking.scm b/gnu/tests/networking.scm
index 022663aa67..453e63f52d 100644
--- a/gnu/tests/networking.scm
+++ b/gnu/tests/networking.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2017, 2020 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,12 +30,15 @@
   #:use-module (guix gexp)
   #:use-module (guix store)
   #:use-module (guix monads)
+  #:use-module (guix modules)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages networking)
+  #:use-module (gnu packages guile)
   #:use-module (gnu services shepherd)
   #:use-module (ice-9 match)
-  #:export (%test-inetd %test-openvswitch %test-dhcpd %test-tor %test-iptables))
+  #:export (%test-inetd %test-openvswitch %test-dhcpd %test-tor %test-iptables
+                        %test-ipfs))
 
 (define %inetd-os
   ;; Operating system with 2 inetd services.
@@ -563,3 +567,89 @@ COMMIT
    (name "iptables")
    (description "Test a running iptables daemon.")
    (value (run-iptables-test))))
+
+
+;;;
+;;; IPFS service
+;;;
+
+(define %ipfs-os
+  (simple-operating-system
+   (service ipfs-service-type)))
+
+(define (run-ipfs-test)
+  (define os
+    (marionette-operating-system %ipfs-os
+                                 #:imported-modules (source-module-closure
+                                                     '((gnu services herd)
+                                                       (guix ipfs)))
+                                 #:extensions (list guile-json-4)
+                                 #:requirements '(ipfs)))
+
+  (define test
+    (with-imported-modules '((gnu build marionette))
+      #~(begin
+          (use-modules (gnu build marionette)
+                       (rnrs bytevectors)
+                       (srfi srfi-64)
+                       (ice-9 binary-ports))
+
+          (define marionette
+            (make-marionette (list #$(virtual-machine os))))
+
+          (define (ipfs-is-alive?)
+            (marionette-eval
+             '(begin
+                (use-modules (gnu services herd)
+                             (srfi srfi-1))
+                (live-service-running
+                 (find (lambda (live)
+                         (memq 'ipfs
+                               (live-service-provision live)))
+                       (current-services))))
+             marionette))
+
+          ;; The default API endpoint port 5001 is used,
+          ;; so there is no need to parameterize %ipfs-base-url.
+          (define (add-data data)
+            (marionette-eval `(content-name (add-data ,data)) marionette))
+          (define (read-contents object)
+            (marionette-eval
+             `(let* ((input (read-contents ,object))
+                     (all-input (get-bytevector-all input)))
+                (close-port input)
+                all-input)
+             marionette))
+
+          (marionette-eval '(use-modules (guix ipfs)) marionette)
+          (mkdir #$output)
+          (chdir #$output)
+
+          (test-begin "ipfs")
+
+          ;; Test the IPFS service.
+
+          (test-assert "ipfs is alive" (ipfs-is-alive?))
+
+          (test-assert "ipfs is listening on the gateway"
+            (let ((default-port 8082))
+              (wait-for-tcp-port default-port marionette)))
+
+          (test-assert "ipfs is listening on the API endpoint"
+            (let ((default-port 5001))
+              (wait-for-tcp-port default-port marionette)))
+
+          (define test-bv (string->utf8 "hello ipfs!"))
+          (test-equal "can upload and download a file to/from ipfs"
+            test-bv
+            (read-contents (add-data test-bv)))
+
+          (test-end)
+          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+  (gexp->derivation "ipfs-test" test))
+
+(define %test-ipfs
+  (system-test
+   (name "ipfs")
+   (description "Test a running IPFS daemon configuration.")
+   (value (run-ipfs-test))))
diff --git a/gnu/tests/nfs.scm b/gnu/tests/nfs.scm
index 5d04af38fb..9b2b785176 100644
--- a/gnu/tests/nfs.scm
+++ b/gnu/tests/nfs.scm
@@ -410,5 +410,5 @@ directories can be mounted.")
   (system-test
    (name "nfs-root-fs")
    (description "Test that an NFS server can be started and the exported
-directory can be used as root filesystem.")
+directory can be used as root file system.")
    (value (run-nfs-root-fs-test))))
diff --git a/gnu/tests/virtualization.scm b/gnu/tests/virtualization.scm
index e95787ee19..9f9d3a5e26 100644
--- a/gnu/tests/virtualization.scm
+++ b/gnu/tests/virtualization.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -92,10 +93,20 @@
             0
             (marionette-eval
              `(begin
+                (chdir "/tmp")
                 (system* ,(string-append #$libvirt "/bin/virsh")
                          "-c" "qemu:///system" "version"))
              marionette))
 
+          (test-eq "connect"
+            0
+            (marionette-eval
+             `(begin
+                (chdir "/tmp")
+                (system* ,(string-append #$libvirt "/bin/virsh")
+                         "-c" "qemu:///system" "connect"))
+             marionette))
+
           (test-end)
           (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
 
diff --git a/gnu/tests/web.scm b/gnu/tests/web.scm
index cc0e79c8b2..7f4518acd2 100644
--- a/gnu/tests/web.scm
+++ b/gnu/tests/web.scm
@@ -569,12 +569,7 @@ HTTP-PORT."
                (listen '("8080"))))))
    (service postgresql-service-type
             (postgresql-configuration
-             (postgresql postgresql-10)
-             ;; XXX: Remove when postgresql default socket directory is
-             ;; changed to /var/run/postgresql.
-             (config-file
-              (postgresql-config-file
-               (socket-directory #f)))))
+             (postgresql postgresql-10)))
    (service patchwork-service-type
             (patchwork-configuration
              (patchwork patchwork)
diff --git a/guix/build-system/go.scm b/guix/build-system/go.scm
index 392f2d9b7b..100d1db4b6 100644
--- a/guix/build-system/go.scm
+++ b/guix/build-system/go.scm
@@ -34,6 +34,7 @@
             go-build
             go-build-system
 
+            go-pseudo-version?
             go-version->git-ref))
 
 ;; Commentary:
@@ -43,17 +44,19 @@
 ;;
 ;; Code:
 
-(define %go-version-rx
+(define %go-pseudo-version-rx
+  ;; Match only the end of the version string; this is so that matching the
+  ;; more complex leading semantic version pattern is not required.
   (make-regexp (string-append
-                "(v?[0-9]\\.[0-9]\\.[0-9])" ;"v" prefix can be omitted in version prefix
-                "(-|-pre\\.0\\.|-0\\.)"     ;separator
-                "([0-9]{14})-"              ;timestamp
-                "([0-9A-Fa-f]{12})")))      ;commit hash
+                "([0-9]{14}-)"                 ;timestamp
+                "([0-9A-Fa-f]{12})"            ;commit hash
+                "(\\+incompatible)?$")))       ;optional +incompatible tag
 
 (define (go-version->git-ref version)
   "Parse VERSION, a \"pseudo-version\" as defined at
 <https://golang.org/ref/mod#pseudo-versions>, and extract the commit hash from
-it, defaulting to full VERSION if a pseudo-version pattern is not recognized."
+it, defaulting to full VERSION (stripped from the \"+incompatible\" suffix if
+present) if a pseudo-version pattern is not recognized."
   ;; A module version like v1.2.3 is introduced by tagging a revision in the
   ;; underlying source repository.  Untagged revisions can be referred to
   ;; using a "pseudo-version" like v0.0.0-yyyymmddhhmmss-abcdefabcdef, where
@@ -68,11 +71,16 @@ it, defaulting to full VERSION if a pseudo-version pattern is not recognized."
           (if (string-suffix? "+incompatible" version)
               (string-drop-right version 13)
               version))
-         (match (regexp-exec %go-version-rx version)))
+         (match (regexp-exec %go-pseudo-version-rx version)))
     (if match
-        (match:substring match 4)
+        (match:substring match 2)
         version)))
 
+(define (go-pseudo-version? version)
+  "True if VERSION is a Go pseudo-version, i.e., a version string made of a
+commit hash and its date rather than a proper release tag."
+  (regexp-exec %go-pseudo-version-rx version))
+
 (define %go-build-system-modules
   ;; Build-side modules imported and used by default.
   `((guix build go-build-system)
diff --git a/guix/build-system/node.scm b/guix/build-system/node.scm
index 73a6f152dd..ae799d1f4e 100644
--- a/guix/build-system/node.scm
+++ b/guix/build-system/node.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Jelle Licht <jlicht@fsfe.org>
+;;; Copyright © 2019 Timothy Sample <samplet@ngyro.com>
 ;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -18,7 +19,6 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (guix build-system node)
-  #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix gexp)
@@ -27,28 +27,21 @@
   #:use-module (guix build-system)
   #:use-module (guix build-system gnu)
   #:use-module (ice-9 match)
-  #:export (npm-meta-uri
-            %node-build-system-modules
+  #:export (%node-build-system-modules
             node-build
             node-build-system))
 
-(define (npm-meta-uri name)
-  "Return a URI string for the metadata of node module NAME found in the npm
-registry."
-  (string-append "https://registry.npmjs.org/" name))
-
 (define %node-build-system-modules
   ;; Build-side modules imported by default.
   `((guix build node-build-system)
     (guix build json)
-    (guix build union)
-    ,@%gnu-build-system-modules)) ;; TODO: Might be not needed
+    ,@%gnu-build-system-modules))
 
 (define (default-node)
   "Return the default Node package."
   ;; Lazily resolve the binding to avoid a circular dependency.
   (let ((node (resolve-interface '(gnu packages node))))
-    (module-ref node 'node)))
+    (module-ref node 'node-lts)))
 
 (define* (lower name
                 #:key source inputs native-inputs outputs system target
@@ -80,6 +73,7 @@ registry."
                      #:key
                      source
                      (npm-flags ''())
+                     (test-target "test")
                      (tests? #t)
                      (phases '%standard-phases)
                      (outputs '("out"))
@@ -88,8 +82,6 @@ registry."
                      (guile #f)
                      (imported-modules %node-build-system-modules)
                      (modules '((guix build node-build-system)
-				(guix build json)
-				(guix build union)
                                 (guix build utils))))
   "Build SOURCE using NODE and INPUTS."
   (define builder
@@ -100,6 +92,7 @@ registry."
                       #:source #+source
                       #:system #$system
                       #:npm-flags #$npm-flags
+                      #:test-target #$test-target
                       #:tests? #$tests?
                       #:phases #$phases
                       #:outputs #$(outputs->gexp outputs)
@@ -117,5 +110,5 @@ registry."
 (define node-build-system
   (build-system
     (name 'node)
-    (description "The standard Node build system")
+    (description "The Node build system")
     (lower lower)))
diff --git a/guix/build/graft.scm b/guix/build/graft.scm
index c119ee71d1..f04c35fa74 100644
--- a/guix/build/graft.scm
+++ b/guix/build/graft.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2016, 2018 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2016, 2021 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -55,6 +55,52 @@
         (string->char-set "0123456789abcdfghijklmnpqrsvwxyz")
         <>))
 
+(define (nix-base32-char-or-nul? c)
+  "Return true if C is a nix-base32 character or NUL, otherwise return false."
+  (or (nix-base32-char? c)
+      (char=? c #\nul)))
+
+(define (possible-utf16-hash? buffer i w)
+  "Return true if (I - W) is large enough to hold a UTF-16 encoded
+nix-base32 hash and if BUFFER contains NULs in all positions where NULs
+are to be expected in a UTF-16 encoded hash+dash pattern whose dash is
+found at position I.  Otherwise, return false."
+  (and (<= (* 2 hash-length) (- i w))
+       (let loop ((j (+ 1 (- i (* 2 hash-length)))))
+         (or (>= j i)
+             (and (zero? (bytevector-u8-ref buffer j))
+                  (loop (+ j 2)))))))
+
+(define (possible-utf32-hash? buffer i w)
+  "Return true if (I - W) is large enough to hold a UTF-32 encoded
+nix-base32 hash and if BUFFER contains NULs in all positions where NULs
+are to be expected in a UTF-32 encoded hash+dash pattern whose dash is
+found at position I.  Otherwise, return false."
+  (and (<= (* 4 hash-length) (- i w))
+       (let loop ((j (+ 1 (- i (* 4 hash-length)))))
+         (or (>= j i)
+             (and (zero? (bytevector-u8-ref buffer j))
+                  (zero? (bytevector-u8-ref buffer (+ j 1)))
+                  (zero? (bytevector-u8-ref buffer (+ j 2)))
+                  (loop (+ j 4)))))))
+
+(define (insert-nuls char-size bv)
+  "Given a bytevector BV, return a bytevector containing the same bytes but
+with (CHAR-SIZE - 1) NULs inserted between every two adjacent bytes from BV.
+For example, (insert-nuls 4 #u8(1 2 3)) => #u8(1 0 0 0 2 0 0 0 3)."
+  (if (= char-size 1)
+      bv
+      (let* ((len (bytevector-length bv))
+             (bv* (make-bytevector (+ 1 (* char-size
+                                           (- len 1)))
+                                   0)))
+        (let loop ((i 0))
+          (when (< i len)
+            (bytevector-u8-set! bv* (* i char-size)
+                                (bytevector-u8-ref bv i))
+            (loop (+ i 1))))
+        bv*)))
+
 (define* (replace-store-references input output replacement-table
                                    #:optional (store (%store-directory)))
   "Read data from INPUT, replacing store references according to
@@ -76,9 +122,9 @@ bytevectors to the same value."
           (list->vector (map pred (iota 256)))
           <>))
 
-  (define nix-base32-byte?
+  (define nix-base32-byte-or-nul?
     (optimize-u8-predicate
-     (compose nix-base32-char?
+     (compose nix-base32-char-or-nul?
               integer->char)))
 
   (define (dash? byte) (= byte 45))
@@ -86,100 +132,153 @@ bytevectors to the same value."
   (define request-size (expt 2 20))  ; 1 MiB
 
   ;; We scan the file for the following 33-byte pattern: 32 bytes of
-  ;; nix-base32 characters followed by a dash.  To accommodate large files,
-  ;; we do not read the entire file, but instead work on buffers of up to
-  ;; 'request-size' bytes.  To ensure that every 33-byte sequence appears
-  ;; entirely within exactly one buffer, adjacent buffers must overlap,
-  ;; i.e. they must share 32 byte positions.  We accomplish this by
-  ;; "ungetting" the last 32 bytes of each buffer before reading the next
-  ;; buffer, unless we know that we've reached the end-of-file.
+  ;; nix-base32 characters followed by a dash.  When we find such a pattern
+  ;; whose hash is in REPLACEMENT-TABLE, we perform the required rewrite and
+  ;; continue scanning.
+  ;;
+  ;; To support UTF-16 and UTF-32 store references, the 33 bytes comprising
+  ;; this hash+dash pattern may optionally be interspersed by extra NUL bytes.
+  ;; This simple approach works because the characters we are looking for are
+  ;; restricted to ASCII.  UTF-16 hashes are interspersed with single NUL
+  ;; bytes ("\0"), and UTF-32 hashes are interspersed with triplets of NULs
+  ;; ("\0\0\0").  Note that we require NULs to be present only *between* the
+  ;; other bytes, and not at either end, in order to be insensitive to byte
+  ;; order.
+  ;;
+  ;; To accommodate large files, we do not read the entire file at once, but
+  ;; instead work on buffers of up to REQUEST-SIZE bytes.  To ensure that
+  ;; every hash+dash pattern appears in its entirety in at least one buffer,
+  ;; adjacent buffers must overlap by one byte less than the maximum size of a
+  ;; hash+dash pattern.  We accomplish this by "ungetting" a suffix of each
+  ;; buffer before reading the next buffer, unless we know that we've reached
+  ;; the end-of-file.
   (let ((buffer (make-bytevector request-size)))
-    (let loop ()
-      ;; Note: We avoid 'get-bytevector-n' to work around
-      ;; <http://bugs.gnu.org/17466>.
+    (define-syntax-rule (byte-at i)
+      (bytevector-u8-ref buffer i))
+    (let outer-loop ()
       (match (get-bytevector-n! input buffer 0 request-size)
         ((? eof-object?) 'done)
         (end
-         ;; We scan the buffer for dashes that might be preceded by a
-         ;; nix-base32 hash.  The key optimization here is that whenever we
-         ;; find a NON-nix-base32 character at position 'i', we know that it
-         ;; cannot be part of a hash, so the earliest position where the next
-         ;; hash could start is i+1 with the following dash at position i+33.
-         ;;
-         ;; Since nix-base32 characters comprise only 1/8 of the 256 possible
-         ;; byte values, and exclude some of the most common letters in
-         ;; English text (e t o u), in practice we can advance by 33 positions
-         ;; most of the time.
-         (let scan-from ((i hash-length) (written 0))
-           ;; 'i' is the first position where we look for a dash.  'written'
-           ;; is the number of bytes in the buffer that have already been
-           ;; written.
+         (define (scan-from i w)
+           ;; Scan the buffer for dashes that might be preceded by nix hashes,
+           ;; where I is the minimum position where such a dash might be
+           ;; found, and W is the number of bytes in the buffer that have been
+           ;; written so far.  We assume that I - W >= HASH-LENGTH.
+           ;;
+           ;; The key optimization here is that whenever we find a byte at
+           ;; position I that cannot occur within a nix hash (because it's
+           ;; neither a nix-base32 character nor NUL), we can infer that the
+           ;; earliest position where the next hash could start is at I + 1,
+           ;; and therefore the earliest position for the following dash is
+           ;; (+ I 1 HASH-LENGTH), which is I + 33.
+           ;;
+           ;; Since nix-base32-or-nul characters comprise only about 1/8 of
+           ;; the 256 possible byte values, and exclude some of the most
+           ;; common letters in English text (e t o u), we can advance 33
+           ;; positions much of the time.
            (if (< i end)
-               (let ((byte (bytevector-u8-ref buffer i)))
-                 (cond ((and (dash? byte)
-                             ;; We've found a dash.  Note that we do not know
-                             ;; whether the preceeding 32 bytes are nix-base32
-                             ;; characters, but we do not need to know.  If
-                             ;; they are not, the following lookup will fail.
-                             (lookup-replacement
-                              (string-tabulate (lambda (j)
-                                                 (integer->char
-                                                  (bytevector-u8-ref buffer
-                                                   (+ j (- i hash-length)))))
-                                               hash-length)))
-                        => (lambda (replacement)
-                             ;; We've found a hash that needs to be replaced.
-                             ;; First, write out all bytes preceding the hash
-                             ;; that have not yet been written.
-                             (put-bytevector output buffer written
-                                             (- i hash-length written))
-                             ;; Now write the replacement string.
-                             (put-bytevector output replacement)
-                             ;; Since the byte at position 'i' is a dash,
-                             ;; which is not a nix-base32 char, the earliest
-                             ;; position where the next hash might start is
-                             ;; i+1, and the earliest position where the
-                             ;; following dash might start is (+ i 1
-                             ;; hash-length).  Also, increase the write
-                             ;; position to account for REPLACEMENT.
-                             (let ((len (bytevector-length replacement)))
-                               (scan-from (+ i 1 len)
-                                          (+ i (- len hash-length))))))
-                       ;; If the byte at position 'i' is a nix-base32 char,
-                       ;; then the dash we're looking for might be as early as
-                       ;; the following byte, so we can only advance by 1.
-                       ((nix-base32-byte? byte)
-                        (scan-from (+ i 1) written))
-                       ;; If the byte at position 'i' is NOT a nix-base32
-                       ;; char, then the earliest position where the next hash
-                       ;; might start is i+1, with the following dash at
-                       ;; position (+ i 1 hash-length).
+               (let ((byte (byte-at i)))
+                 (cond ((dash? byte)
+                        (found-dash i w))
+                       ((nix-base32-byte-or-nul? byte)
+                        (scan-from (+ i 1) w))
                        (else
-                        (scan-from (+ i 1 hash-length) written))))
-
-               ;; We have finished scanning the buffer.  Now we determine how
-               ;; many bytes have not yet been written, and how many bytes to
-               ;; "unget".  If 'end' is less than 'request-size' then we read
-               ;; less than we asked for, which indicates that we are at EOF,
-               ;; so we needn't unget anything.  Otherwise, we unget up to
-               ;; 'hash-length' bytes (32 bytes).  However, we must be careful
-               ;; not to unget bytes that have already been written, because
-               ;; that would cause them to be written again from the next
-               ;; buffer.  In practice, this case occurs when a replacement is
-               ;; made near or beyond the end of the buffer.  When REPLACEMENT
-               ;; went beyond END, we consume the extra bytes from INPUT.
-               (begin
-                 (if (> written end)
-                     (get-bytevector-n! input buffer 0 (- written end))
-                     (let* ((unwritten  (- end written))
-                            (unget-size (if (= end request-size)
-                                            (min hash-length unwritten)
-                                            0))
-                            (write-size (- unwritten unget-size)))
-                       (put-bytevector output buffer written write-size)
-                       (unget-bytevector input buffer (+ written write-size)
-                                         unget-size)))
-                 (loop)))))))))
+                        (not-part-of-hash i w))))
+               (finish-buffer i w)))
+
+         (define (not-part-of-hash i w)
+           ;; Position I is known to not be within a nix hash that we must
+           ;; rewrite.  Therefore, the earliest position where the next hash
+           ;; might start is I + 1, and therefore the earliest position of
+           ;; the following dash is (+ I 1 HASH-LENGTH).
+           (scan-from (+ i 1 hash-length) w))
+
+         (define (found-dash i w)
+           ;; We know that there is a dash '-' at position I, and that
+           ;; I - W >= HASH-LENGTH.  The immediately preceding bytes *might*
+           ;; contain a nix-base32 hash, but that is not yet known.  Here,
+           ;; we rule out all but one possible encoding (ASCII, UTF-16,
+           ;; UTF-32) by counting how many NULs precede the dash.
+           (cond ((not (zero? (byte-at (- i 1))))
+                  ;; The dash is *not* preceded by a NUL, therefore it
+                  ;; cannot possibly be a UTF-16 or UTF-32 hash.  Proceed
+                  ;; to check for an ASCII hash.
+                  (found-possible-hash 1 i w))
+
+                 ((not (zero? (byte-at (- i 2))))
+                  ;; The dash is preceded by exactly one NUL, therefore it
+                  ;; cannot be an ASCII or UTF-32 hash.  Proceed to check
+                  ;; for a UTF-16 hash.
+                  (if (possible-utf16-hash? buffer i w)
+                      (found-possible-hash 2 i w)
+                      (not-part-of-hash i w)))
+
+                 (else
+                  ;; The dash is preceded by at least two NULs, therefore
+                  ;; it cannot be an ASCII or UTF-16 hash.  Proceed to
+                  ;; check for a UTF-32 hash.
+                  (if (possible-utf32-hash? buffer i w)
+                      (found-possible-hash 4 i w)
+                      (not-part-of-hash i w)))))
+
+         (define (found-possible-hash char-size i w)
+           ;; We know that there is a dash '-' at position I, that
+           ;; I - W >= CHAR-SIZE * HASH-LENGTH, and that the only
+           ;; possible encoding for the preceding hash is as indicated by
+           ;; CHAR-SIZE.  Here we check to see if the given hash is in
+           ;; REPLACEMENT-TABLE, and if so, we perform the required
+           ;; rewrite.
+           (let* ((hash (string-tabulate
+                         (lambda (j)
+                           (integer->char
+                            (byte-at (- i (* char-size
+                                             (- hash-length j))))))
+                         hash-length))
+                  (replacement* (lookup-replacement hash))
+                  (replacement (and replacement*
+                                    (insert-nuls char-size replacement*))))
+             (cond
+              ((not replacement)
+               (not-part-of-hash i w))
+              (else
+               ;; We've found a hash that needs to be replaced.
+               ;; First, write out all bytes preceding the hash
+               ;; that have not yet been written.
+               (put-bytevector output buffer w
+                               (- i (* char-size hash-length) w))
+               ;; Now write the replacement string.
+               (put-bytevector output replacement)
+               ;; Now compute the new values of W and I and continue.
+               (let ((w (+ (- i (* char-size hash-length))
+                           (bytevector-length replacement))))
+                 (scan-from (+ w hash-length) w))))))
+
+         (define (finish-buffer i w)
+           ;; We have finished scanning the buffer.  Now we determine how many
+           ;; bytes have not yet been written, and how many bytes to "unget".
+           ;; If END is less than REQUEST-SIZE then we read less than we asked
+           ;; for, which indicates that we are at EOF, so we needn't unget
+           ;; anything.  Otherwise, we unget up to (* 4 HASH-LENGTH) bytes.
+           ;; However, we must be careful not to unget bytes that have already
+           ;; been written, because that would cause them to be written again
+           ;; from the next buffer.  In practice, this case occurs when a
+           ;; replacement is made near or beyond the end of the buffer.  When
+           ;; REPLACEMENT went beyond END, we consume the extra bytes from
+           ;; INPUT.
+           (if (> w end)
+               (get-bytevector-n! input buffer 0 (- w end))
+               (let* ((unwritten  (- end w))
+                      (unget-size (if (= end request-size)
+                                      (min (* 4 hash-length)
+                                           unwritten)
+                                      0))
+                      (write-size (- unwritten unget-size)))
+                 (put-bytevector output buffer w write-size)
+                 (unget-bytevector input buffer (+ w write-size)
+                                   unget-size)))
+           (outer-loop))
+
+         (scan-from hash-length 0))))))
 
 (define (rename-matching-files directory mapping)
   "Apply MAPPING to the names of all the files in DIRECTORY, where MAPPING is
diff --git a/guix/build/julia-build-system.scm b/guix/build/julia-build-system.scm
index 8f57045a8c..d74acf2a05 100644
--- a/guix/build/julia-build-system.scm
+++ b/guix/build/julia-build-system.scm
@@ -101,7 +101,7 @@ Project.toml)."
                              (or (getenv "JULIA_LOAD_PATH")
                                  "")))
       (setenv "HOME" "/tmp")
-      (invoke "julia"
+      (invoke "julia" "--depwarn=yes"
               (string-append builddir "packages/"
                              package "/test/runtests.jl"))))
   #t)
diff --git a/guix/build/node-build-system.scm b/guix/build/node-build-system.scm
index 7799f03595..a55cab237c 100644
--- a/guix/build/node-build-system.scm
+++ b/guix/build/node-build-system.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
-;;; Copyright © 2016 Jelle Licht <jlicht@fsfe.org>
+;;; Copyright © 2016, 2020 Jelle Licht <jlicht@fsfe.org>
+;;; Copyright © 2019, 2021 Timothy Sample <samplet@ngyro.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,144 +20,130 @@
 
 (define-module (guix build node-build-system)
   #:use-module ((guix build gnu-build-system) #:prefix gnu:)
-  #:use-module (guix build json)
-  #:use-module (guix build union)
   #:use-module (guix build utils)
+  #:use-module (guix build json)
+  #:use-module (ice-9 ftw)
   #:use-module (ice-9 match)
-  #:use-module (ice-9 popen)
-  #:use-module (ice-9 regex)
   #:use-module (srfi srfi-1)
-  #:use-module (srfi srfi-26)
   #:export (%standard-phases
             node-build))
 
 ;; Commentary:
 ;;
-;; Builder-side code of the standard Node/npm package build procedure.
+;; Builder-side code of the standard Node/NPM package install procedure.
 ;;
 ;; Code:
 
-(define* (read-package-data #:key (filename "package.json"))
-  (call-with-input-file filename
-    (lambda (port)
-      (read-json port))))
+(define (set-home . _)
+  (with-directory-excursion ".."
+    (let loop ((i 0))
+      (let ((dir (string-append "npm-home-" (number->string i))))
+        (if (directory-exists? dir)
+            (loop (1+ i))
+            (begin
+              (mkdir dir)
+              (setenv "HOME" (string-append (getcwd) "/" dir))
+              (format #t "set HOME to ~s~%" (getenv "HOME")))))))
+  #t)
 
-(define* (build #:key inputs #:allow-other-keys)
-  (define (build-from-package-json? package-file)
-    (let* ((package-data (read-package-data #:filename package-file))
-           (scripts (assoc-ref package-data "scripts")))
-      (assoc-ref scripts "build")))
-  "Build a new node module using the appropriate build system."
-  ;; XXX: Develop a more robust heuristic, allow override
-  (cond ((file-exists? "gulpfile.js")
-         (invoke "gulp"))
-        ((file-exists? "gruntfile.js")
-         (invoke "grunt"))
-        ((file-exists? "Makefile")
-         (invoke "make"))
-        ((and (file-exists? "package.json")
-              (build-from-package-json? "package.json"))
-         (invoke "npm" "run" "build")))
+(define (module-name module)
+  (let* ((package.json (string-append module "/package.json"))
+         (package-meta (call-with-input-file package.json read-json)))
+    (assoc-ref package-meta "name")))
+
+(define (index-modules input-paths)
+  (define (list-modules directory)
+    (append-map (lambda (x)
+                  (if (string-prefix? "@" x)
+                      (list-modules (string-append directory "/" x))
+                      (list (string-append directory "/" x))))
+                (filter (lambda (x)
+                          (not (member x '("." ".."))))
+                        (or (scandir directory) '()))))
+  (let ((index (make-hash-table (* 2 (length input-paths)))))
+    (for-each (lambda (dir)
+                (let ((nm (string-append dir "/lib/node_modules")))
+                  (for-each (lambda (module)
+                              (hash-set! index (module-name module) module))
+                            (list-modules nm))))
+              input-paths)
+    index))
+
+(define* (patch-dependencies #:key inputs #:allow-other-keys)
+
+  (define index (index-modules (map cdr inputs)))
+
+  (define (resolve-dependencies package-meta meta-key)
+    (fold (lambda (key+value acc)
+            (match key+value
+              ('@ acc)
+              ((key . value) (acons key (hash-ref index key value) acc))))
+          '()
+          (or (assoc-ref package-meta meta-key) '())))
+
+  (with-atomic-file-replacement "package.json"
+    (lambda (in out)
+      (let ((package-meta (read-json in)))
+        (assoc-set! package-meta "dependencies"
+                    (append
+                     '(@)
+                     (resolve-dependencies package-meta "dependencies")
+                     (resolve-dependencies package-meta "peerDependencies")))
+        (assoc-set! package-meta "devDependencies"
+                    (append
+                     '(@)
+                     (resolve-dependencies package-meta "devDependencies")))
+        (write-json package-meta out))))
   #t)
 
-(define* (link-npm-dependencies #:key inputs #:allow-other-keys)
-  (define (inputs->node-inputs inputs)
-    "Filter the directory part from INPUTS."
-    (filter (lambda (input)
-              (match input
-                ((name . _) (node-package? name))))
-            inputs))
-  (define (inputs->directories inputs)
-    "Extract the directory part from INPUTS."
-    (match inputs
-      (((names . directories) ...)
-       directories)))
-  (define (make-node-path root)
-    (string-append root "/lib/node_modules/"))
-
-  (let ((input-node-directories (inputs->directories
-                                 (inputs->node-inputs inputs))))
-    (union-build "node_modules"
-                 (map make-node-path input-node-directories))
+(define* (configure #:key outputs inputs #:allow-other-keys)
+  (let ((npm (string-append (assoc-ref inputs "node") "/bin/npm")))
+    (invoke npm "--offline" "--ignore-scripts" "install")
     #t))
 
-(define configure link-npm-dependencies)
+(define* (build #:key inputs #:allow-other-keys)
+  (let ((package-meta (call-with-input-file "package.json" read-json)))
+    (if (and=> (assoc-ref package-meta "scripts")
+               (lambda (scripts)
+                 (assoc-ref scripts "build")))
+        (let ((npm (string-append (assoc-ref inputs "node") "/bin/npm")))
+          (invoke npm "run" "build"))
+        (format #t "there is no build script to run~%"))
+    #t))
 
-(define* (check #:key tests? #:allow-other-keys)
+(define* (check #:key tests? inputs #:allow-other-keys)
   "Run 'npm test' if TESTS?"
   (if tests?
-      ;; Should only be enabled once we know that there are tests
-      (invoke "npm" "test"))
+      (let ((npm (string-append (assoc-ref inputs "node") "/bin/npm")))
+        (invoke npm "test"))
+      (format #t "test suite not run~%"))
   #t)
 
-(define (node-package? name)
-  "Check if NAME correspond to the name of an Node package."
-  (string-prefix? "node-" name))
+(define* (repack #:key inputs #:allow-other-keys)
+  (invoke "tar" "-czf" "../package.tgz" ".")
+  #t)
 
 (define* (install #:key outputs inputs #:allow-other-keys)
-  "Install the node module to the output store item. The module itself is
-installed in a subdirectory of @file{node_modules} and its runtime dependencies
-as defined by @file{package.json} are symlinked into a @file{node_modules}
-subdirectory of the module's directory. Additionally, binaries are installed in
-the @file{bin} directory."
-  (let* ((out                  (assoc-ref outputs "out"))
-         (target               (string-append out "/lib"))
-         (binaries             (string-append out "/bin"))
-         (data                 (read-package-data))
-         (modulename           (assoc-ref data "name"))
-         (binary-configuration (match (assoc-ref data "bin")
-				 (('@ configuration ...) configuration)
-				 ((? string? configuration) configuration)
-				 (#f #f)))
-         (dependencies (match (assoc-ref data "dependencies")
-                         (('@ deps ...) deps)
-                         (#f #f))))
-    (mkdir-p target)
-    (copy-recursively "." (string-append target "/node_modules/" modulename))
-    ;; Remove references to dependencies
-    (delete-file-recursively
-      (string-append target "/node_modules/" modulename "/node_modules"))
-    (cond
-      ((string? binary-configuration)
-       (begin
-         (mkdir-p binaries)
-         (symlink (string-append target "/node_modules/" modulename "/"
-				 binary-configuration)
-                  (string-append binaries "/" modulename))))
-      ((list? binary-configuration)
-       (for-each
-         (lambda (conf)
-           (match conf
-             ((key . value)
-              (begin
-                (mkdir-p (dirname (string-append binaries "/" key)))
-                (symlink (string-append target "/node_modules/" modulename "/"
-					value)
-                         (string-append binaries "/" key))))))
-         binary-configuration)))
-    (when dependencies
-      (mkdir-p
-        (string-append target "/node_modules/" modulename "/node_modules"))
-      (for-each
-        (lambda (dependency)
-          (let ((dependency (car dependency)))
-            (symlink
-              (string-append (assoc-ref inputs (string-append "node-" dependency))
-                             "/lib/node_modules/" dependency)
-              (string-append target "/node_modules/" modulename
-                             "/node_modules/" dependency))))
-        dependencies))
+  "Install the node module to the output store item."
+  (let ((out (assoc-ref outputs "out"))
+        (npm (string-append (assoc-ref inputs "node") "/bin/npm")))
+    (invoke npm "--prefix" out
+            "--global"
+            "--offline"
+            "--loglevel" "info"
+            "--production"
+            "install" "../package.tgz")
     #t))
 
-
 (define %standard-phases
   (modify-phases gnu:%standard-phases
+    (add-after 'unpack 'set-home set-home)
+    (add-before 'configure 'patch-dependencies patch-dependencies)
     (replace 'configure configure)
     (replace 'build build)
-    (replace 'install install)
-    (delete 'check)
-    (add-after 'install 'check check)
-    (delete 'strip)))
+    (replace 'check check)
+    (add-before 'install 'repack repack)
+    (replace 'install install)))
 
 (define* (node-build #:key inputs (phases %standard-phases)
                      #:allow-other-keys #:rest args)
diff --git a/guix/build/qt-build-system.scm b/guix/build/qt-build-system.scm
index 005157b0a4..f59b0c420f 100644
--- a/guix/build/qt-build-system.scm
+++ b/guix/build/qt-build-system.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
-;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2019, 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;;
@@ -49,25 +49,53 @@
 
 (define (variables-for-wrapping base-directories)
 
-  (define (collect-sub-dirs base-directories subdirectory)
-    (filter-map
-     (lambda (dir)
-       (let ((directory (string-append dir subdirectory)))
-         (if (directory-exists? directory) directory #f)))
-     base-directories))
-
-  (filter
-   (lambda (var-to-wrap) (not (null? (last var-to-wrap))))
-   (map
-    (lambda (var-spec)
-      `(,(first var-spec) = ,(collect-sub-dirs base-directories (last var-spec))))
-    (list
-     ;; these shall match the search-path-specification for Qt and KDE
-     ;; libraries
-     '("XDG_DATA_DIRS" "/share")
-     '("XDG_CONFIG_DIRS" "/etc/xdg")
-     '("QT_PLUGIN_PATH" "/lib/qt5/plugins")
-     '("QML2_IMPORT_PATH" "/lib/qt5/qml")))))
+  (define (collect-sub-dirs base-directories file-type subdirectory
+                            selectors)
+    ;; Append SUBDIRECTORY and each of BASE-DIRECTORIES, and return the subset
+    ;; that exists and has at least one of the SELECTORS sub-directories,
+    ;; unless SELECTORS is the empty list.  FILE-TYPE should by 'directory or
+    ;; 'regular file.  For the later, it allows searching for plain files
+    ;; rather than directories.
+    (define exists? (match file-type
+                      ('directory directory-exists?)
+                      ('regular file-exists?)))
+
+    (filter-map (lambda (dir)
+                  (let ((directory (string-append dir subdirectory)))
+                    (and (exists? directory)
+                         (or (null? selectors)
+                             (any (lambda (selector)
+                                    (exists?
+                                     (string-append directory selector)))
+                                  selectors))
+                         directory)))
+                base-directories))
+
+  (filter-map
+   (match-lambda
+     ((variable file-type directory selectors ...)
+      (match (collect-sub-dirs base-directories file-type directory
+                               selectors)
+        (()
+         #f)
+        (directories
+         `(,variable = ,directories)))))
+
+   ;; These shall match the search-path-specification for Qt and KDE
+   ;; libraries.
+   (list '("XDG_DATA_DIRS" directory "/share"
+
+           ;; These are "selectors": consider /share if and only if at least
+           ;; one of these sub-directories exist.  This avoids adding
+           ;; irrelevant packages to XDG_DATA_DIRS just because they have a
+           ;; /share sub-directory.
+           "/glib-2.0/schemas" "/sounds" "/themes"
+           "/cursors" "/wallpapers" "/icons" "/mime")
+         '("XDG_CONFIG_DIRS" directory "/etc/xdg")
+         '("QT_PLUGIN_PATH" directory "/lib/qt5/plugins")
+         '("QML2_IMPORT_PATH"  directory "/lib/qt5/qml")
+         '("QTWEBENGINEPROCESS_PATH" regular
+           "/lib/qt5/libexec/QtWebEngineProcess"))))
 
 (define* (wrap-all-programs #:key inputs outputs
                             (qt-wrap-excluded-outputs '())
diff --git a/guix/channels.scm b/guix/channels.scm
index b812c1b6e5..c40fc0c507 100644
--- a/guix/channels.scm
+++ b/guix/channels.scm
@@ -597,9 +597,24 @@ to '%package-module-path'."
               (string-append #$output "/share/guile/site/"
                              (effective-version)))
 
+            (define optimizations-for-level
+              ;; Guile 3.0 provides this procedure but Guile 2.2 didn't.
+              ;; Since this code may be executed by either version, we can't
+              ;; rely on its availability.
+              (or (and=> (false-if-exception
+                          (resolve-interface '(system base optimize)))
+                         (lambda (iface)
+                           (module-ref iface 'optimizations-for-level)))
+                  (const '())))
+
+            (define -O1
+              ;; Optimize for package module compilation speed.
+              (optimizations-for-level 1))
+
             (let* ((subdir #$directory)
                    (source (string-append #$source subdir)))
-              (compile-files source go (find-files source "\\.scm$"))
+              (compile-files source go (find-files source "\\.scm$")
+                             #:optimization-options (const -O1))
               (mkdir-p (dirname scm))
               (symlink (string-append #$source subdir) scm))
 
diff --git a/guix/git.scm b/guix/git.scm
index a5103547d3..57fa2ca1ee 100644
--- a/guix/git.scm
+++ b/guix/git.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021 Kyle Meyer <kyle@kyleam.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -185,10 +186,9 @@ make sure no empty directory is left behind."
     (lambda ()
       (mkdir-p directory)
 
-      (let ((auth-method (%make-auth-ssh-agent)))
-        (clone url directory
-               (make-clone-options
-                #:fetch-options (make-default-fetch-options)))))
+      (clone url directory
+             (make-clone-options
+              #:fetch-options (make-default-fetch-options))))
     (lambda _
       (false-if-exception (rmdir directory)))))
 
@@ -210,6 +210,9 @@ corresponding Git object."
        (let ((oid (reference-target
                    (branch-lookup repository branch BRANCH-REMOTE))))
          (object-lookup repository oid)))
+      (('symref . symref)
+       (let ((oid (reference-name->oid repository symref)))
+         (object-lookup repository oid)))
       (('commit . commit)
        (let ((len (string-length commit)))
          ;; 'object-lookup-prefix' appeared in Guile-Git in Mar. 2018, so we
@@ -280,13 +283,15 @@ dynamic extent of EXP."
       (report-git-error err))))
 
 (define* (update-submodules repository
-                            #:key (log-port (current-error-port)))
+                            #:key (log-port (current-error-port))
+                            (fetch-options #f))
   "Update the submodules of REPOSITORY, a Git repository object."
   (for-each (lambda (name)
               (let ((submodule (submodule-lookup repository name)))
                 (format log-port (G_ "updating submodule '~a'...~%")
                         name)
-                (submodule-update submodule)
+                (submodule-update submodule
+                                  #:fetch-options fetch-options)
 
                 ;; Recurse in SUBMODULE.
                 (let ((directory (string-append
@@ -294,6 +299,7 @@ dynamic extent of EXP."
                                   "/" (submodule-path submodule))))
                   (with-repository directory repository
                     (update-submodules repository
+                                       #:fetch-options fetch-options
                                        #:log-port log-port)))))
             (repository-submodules repository)))
 
@@ -341,7 +347,7 @@ definitely available in REPOSITORY, false otherwise."
 
 (define* (update-cached-checkout url
                                  #:key
-                                 (ref '(branch . "master"))
+                                 (ref '())
                                  recursive?
                                  (check-out? #t)
                                  starting-commit
@@ -357,6 +363,7 @@ provided) as returned by 'commit-relation'.
 
 REF is pair whose key is [branch | commit | tag | tag-or-commit ] and value
 the associated data: [<branch name> | <sha1> | <tag name> | <string>].
+If REF is the empty list, the remote HEAD is used.
 
 When RECURSIVE? is true, check out submodules as well, if any.
 
@@ -375,6 +382,7 @@ it unchanged."
     ;; made little sense since the cache should be transparent to them.  So
     ;; here we append "origin/" if it's missing and otherwise keep it.
     (match ref
+      (() '(symref . "refs/remotes/origin/HEAD"))
       (('branch . branch)
        `(branch . ,(if (string-prefix? "origin/" branch)
                        branch
@@ -389,11 +397,11 @@ it unchanged."
      ;; Only fetch remote if it has not been cloned just before.
      (when (and cache-exists?
                 (not (reference-available? repository ref)))
-       (let ((auth-method (%make-auth-ssh-agent)))
-         (remote-fetch (remote-lookup repository "origin")
-                       #:fetch-options (make-default-fetch-options))))
+       (remote-fetch (remote-lookup repository "origin")
+                     #:fetch-options (make-default-fetch-options)))
      (when recursive?
-       (update-submodules repository #:log-port log-port))
+       (update-submodules repository #:log-port log-port
+                          #:fetch-options (make-default-fetch-options)))
 
      ;; Note: call 'commit-relation' from here because it's more efficient
      ;; than letting users re-open the checkout later on.
@@ -435,12 +443,13 @@ it unchanged."
                                    (log-port (%make-void-port "w"))
                                    (cache-directory
                                     (%repository-cache-directory))
-                                   (ref '(branch . "master")))
+                                   (ref '()))
   "Return two values: the content of the git repository at URL copied into a
 store directory and the sha1 of the top level commit in this directory.  The
 reference to be checkout, once the repository is fetched, is specified by REF.
 REF is pair whose key is [branch | commit | tag] and value the associated
-data, respectively [<branch name> | <sha1> | <tag name>].
+data, respectively [<branch name> | <sha1> | <tag name>].  If REF is the empty
+list, the remote HEAD is used.
 
 When RECURSIVE? is true, check out submodules as well, if any.
 
@@ -550,7 +559,7 @@ objects: 'ancestor (meaning that OLD is an ancestor of NEW), 'descendant, or
   git-checkout make-git-checkout
   git-checkout?
   (url     git-checkout-url)
-  (branch  git-checkout-branch (default "master"))
+  (branch  git-checkout-branch (default #f))
   (commit  git-checkout-commit (default #f))      ;#f | tag | commit
   (recursive? git-checkout-recursive? (default #f)))
 
@@ -589,9 +598,11 @@ objects: 'ancestor (meaning that OLD is an ancestor of NEW), 'descendant, or
   (match checkout
     (($ <git-checkout> url branch commit recursive?)
      (latest-repository-commit* url
-                                #:ref (if commit
-                                          `(tag-or-commit . ,commit)
-                                          `(branch . ,branch))
+                                #:ref (cond (commit
+                                             `(tag-or-commit . ,commit))
+                                            (branch
+                                             `(branch . ,branch))
+                                            (else '()))
                                 #:recursive? recursive?
                                 #:log-port (current-error-port)))))
 
diff --git a/guix/gnu-maintenance.scm b/guix/gnu-maintenance.scm
index 031a899a6c..fece84b341 100644
--- a/guix/gnu-maintenance.scm
+++ b/guix/gnu-maintenance.scm
@@ -31,7 +31,7 @@
   #:use-module (srfi srfi-34)
   #:use-module (rnrs io ports)
   #:use-module (system foreign)
-  #:use-module (guix http-client)
+  #:use-module ((guix http-client) #:hide (open-socket-for-uri))
   #:use-module (guix ftp-client)
   #:use-module (guix utils)
   #:use-module (guix memoization)
@@ -66,6 +66,7 @@
             %gnu-updater
             %gnu-ftp-updater
             %savannah-updater
+            %sourceforge-updater
             %xorg-updater
             %kernel.org-updater
             %generic-html-updater))
@@ -242,7 +243,7 @@ network to check in GNU's database."
   ;; The "-src" pattern is for "TeXmacs-1.0.7.9-src.tar.gz".
   ;; The "-gnu[0-9]" pattern is for "icecat-38.4.0-gnu1.tar.bz2".
   ;; Accept underscores as in "PKG_1.2.tar.gz" for some non-GNU packages.
-  (make-regexp "^([^.]+)[-_]([0-9]|[^-])+(-(src|gnu[0-9]))?\\.(tar\\.|zip$)"))
+  (make-regexp "^([^.]+)[-_]([0-9]|[^-])+(-(src|[sS]ource|gnu[0-9]))?\\.(tar\\.|zip$)"))
 
 (define %alpha-tarball-rx
   (make-regexp "^.*-.*[0-9](-|~)?(alpha|beta|rc|RC|cvs|svn|git)-?[0-9\\.]*\\.tar\\."))
@@ -595,7 +596,7 @@ list available from %GNU-FILE-LIST-URI over HTTP(S)."
 (define %package-name-rx
   ;; Regexp for a package name, e.g., "foo-X.Y".  Since TeXmacs uses
   ;; "TeXmacs-X.Y-src", the `-src' suffix is allowed.
-  (make-regexp "^(.*)[-_](([0-9]|\\.)+)(-src)?"))
+  (make-regexp "^(.*)[-_](([0-9]|\\.)+)(-src|\\.src|\\.orig)?"))
 
 (define (gnu-package-name->name+version name+version)
   "Return the package name and version number extracted from NAME+VERSION."
@@ -637,9 +638,6 @@ GNOME packages; EMMS is included though, because its releases are on gnu.org."
                           (lambda (urls)
                             (map rewrite-url urls))))))
 
-(define savannah-package?
-  (url-prefix-predicate "mirror://savannah/"))
-
 (define %savannah-base
   ;; One of the Savannah mirrors listed at
   ;; <http://download0.savannah.gnu.org/mirmon/savannah/> that serves valid
@@ -663,6 +661,59 @@ GNOME packages; EMMS is included though, because its releases are on gnu.org."
                                 #:directory directory)
            (cut adjusted-upstream-source <> rewrite))))
 
+(define (latest-sourceforge-release package)
+  "Return the latest release of PACKAGE."
+  (define (uri-append uri extension)
+    ;; Return URI with EXTENSION appended.
+    (build-uri (uri-scheme uri)
+               #:host (uri-host uri)
+               #:path (string-append (uri-path uri) extension)))
+
+  (define (valid-uri? uri port)
+    ;; Return true if URI is reachable.
+    (false-if-exception
+     (case (response-code (http-head uri #:port port #:keep-alive? #t))
+       ((200 302) #t)
+       (else #f))))
+
+  (let* ((name     (package-upstream-name package))
+         (base     (string-append "https://sourceforge.net/projects/"
+                                  name "/files"))
+         (url      (string-append base "/latest/download"))
+         (uri      (string->uri url))
+         (port     (false-if-exception (open-socket-for-uri uri)))
+         (response (and port
+                        (http-head uri #:port port #:keep-alive? #t))))
+    (dynamic-wind
+      (const #t)
+      (lambda ()
+        (and response
+             (= 302 (response-code response))
+             (response-location response)
+             (match (string-tokenize (uri-path (response-location response))
+                                     (char-set-complement (char-set #\/)))
+               ((_ components ...)
+                (let* ((path (string-join components "/"))
+                       (url  (string-append "mirror://sourceforge/" path)))
+                  (and (release-file? name (basename path))
+
+                       ;; Take the heavy-handed approach of probing 3 additional
+                       ;; URLs.  XXX: Would be nicer if this could be avoided.
+                       (let* ((loc (response-location response))
+                              (sig (any (lambda (extension)
+                                          (let ((uri (uri-append loc extension)))
+                                            (and (valid-uri? uri port)
+                                                 (string-append url extension))))
+                                        '(".asc" ".sig" ".sign"))))
+                         (upstream-source
+                          (package name)
+                          (version (tarball->version (basename path)))
+                          (urls (list url))
+                          (signature-urls (and sig (list sig)))))))))))
+      (lambda ()
+        (when port
+          (close-port port))))))
+
 (define (latest-xorg-release package)
   "Return the latest release of PACKAGE."
   (let ((uri (string->uri (origin-uri (package-source package)))))
@@ -706,14 +757,19 @@ GNOME packages; EMMS is included though, because its releases are on gnu.org."
                          "ftp.gnu.org" "download.savannah.gnu.org"
                          "pypi.org" "crates.io" "rubygems.org"
                          "bioconductor.org")))
-    (url-predicate (lambda (url)
-                     (match (string->uri url)
-                       (#f #f)
-                       (uri
-                        (let ((scheme (uri-scheme uri))
-                              (host   (uri-host uri)))
-                          (and (memq scheme '(http https))
-                               (not (member host hosting-sites))))))))))
+    (define http-url?
+      (url-predicate (lambda (url)
+                       (match (string->uri url)
+                         (#f #f)
+                         (uri
+                          (let ((scheme (uri-scheme uri))
+                                (host   (uri-host uri)))
+                            (and (memq scheme '(http https))
+                                 (not (member host hosting-sites)))))))))
+
+    (lambda (package)
+      (or (assoc-ref (package-properties package) 'release-monitoring-url)
+          (http-url? package)))))
 
 (define (latest-html-updatable-release package)
   "Return the latest release of PACKAGE.  Do that by crawling the HTML page of
@@ -772,6 +828,13 @@ the directory containing its source tarball."
    (pred (url-prefix-predicate "mirror://savannah/"))
    (latest latest-savannah-release)))
 
+(define %sourceforge-updater
+  (upstream-updater
+   (name 'sourceforge)
+   (description "Updater for packages hosted on sourceforge.net")
+   (pred (url-prefix-predicate "mirror://sourceforge/"))
+   (latest latest-sourceforge-release)))
+
 (define %xorg-updater
   (upstream-updater
    (name 'xorg)
diff --git a/guix/http-client.scm b/guix/http-client.scm
index 4b4c14ed0b..a2e11a1b73 100644
--- a/guix/http-client.scm
+++ b/guix/http-client.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; 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 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2012, 2015 Free Software Foundation, Inc.
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -147,6 +147,28 @@ Raise an '&http-get-error' condition if downloading fails."
                                 (uri->string uri) code
                                 (response-reason-phrase resp))))))))))))
 
+(define-syntax-rule (false-if-networking-error exp)
+  "Return #f if EXP triggers a network related exception as can occur when
+reusing stale cached connections."
+  ;; FIXME: Duplicated from 'with-cached-connection'.
+  (catch #t
+    (lambda ()
+      exp)
+    (lambda (key . args)
+      ;; If PORT was cached and the server closed the connection in the
+      ;; meantime, we get EPIPE.  In that case, open a fresh connection and
+      ;; retry.  We might also get 'bad-response or a similar exception from
+      ;; (web response) later on, once we've sent the request, or a
+      ;; ERROR/INVALID-SESSION from GnuTLS.
+      (if (or (and (eq? key 'system-error)
+                   (= EPIPE (system-error-errno `(,key ,@args))))
+              (and (eq? key 'gnutls-error)
+                   (eq? (first args) error/invalid-session))
+              (memq key
+                    '(bad-response bad-header bad-header-component)))
+          #f
+          (apply throw key args)))))
+
 (define* (http-multiple-get base-uri proc seed requests
                             #:key port (verify-certificate? #t)
                             (open-connection guix:open-connection-for-uri)
@@ -185,25 +207,15 @@ returning."
         ;; Inherit the HTTP proxying property from P.
         (set-http-proxy-port?! buffer (http-proxy-port? p))
 
-        (catch #t
-          (lambda ()
-            (for-each (cut write-request <> buffer)
-                      batch)
-            (put-bytevector p (get))
-            (force-output p))
-          (lambda (key . args)
-            ;; If PORT becomes unusable, open a fresh connection and
-            ;; retry.
-            (if (or (and (eq? key 'system-error)
-                         (= EPIPE (system-error-errno `(,key ,@args))))
-                    (and (eq? key 'gnutls-error)
-                         (eq? (first args) error/invalid-session)))
-                (begin
-                  (close-port p)    ; close the broken port
-                  (connect #f
-                           requests
-                           result))
-                (apply throw key args)))))
+        (unless (false-if-networking-error
+                 (begin
+                   (for-each (cut write-request <> buffer) batch)
+                   (put-bytevector p (get))
+                   (force-output p)
+                   #t))
+          ;; If PORT becomes unusable, open a fresh connection and retry.
+          (close-port p)                          ; close the broken port
+          (connect #f requests result)))
 
       ;; Now start processing responses.
       (let loop ((sent      batch)
@@ -219,42 +231,27 @@ returning."
              (remainder
               (connect p remainder result))))
           ((head tail ...)
-           (catch #t
-             (lambda ()
-               (let* ((resp   (read-response p))
-                      (body   (response-body-port resp))
-                      (result (proc head resp body result)))
-                 ;; The server can choose to stop responding at any time,
-                 ;; in which case we have to try again.  Check whether
-                 ;; that is the case.  Note that even upon "Connection:
-                 ;; close", we can read from BODY.
-                 (match (assq 'connection (response-headers resp))
-                   (('connection 'close)
-                    (close-port p)
-                    (connect #f                       ;try again
-                             (drop requests (+ 1 processed))
-                             result))
-                   (_
-                    (loop tail (+ 1 processed) result))))) ;keep going
-             (lambda (key . args)
-               ;; If PORT was cached and the server closed the connection
-               ;; in the meantime, we get EPIPE.  In that case, open a
-               ;; fresh connection and retry.  We might also get
-               ;; 'bad-response or a similar exception from (web response)
-               ;; later on, once we've sent the request, or a
-               ;; ERROR/INVALID-SESSION from GnuTLS.
-               (if (or (and (eq? key 'system-error)
-                            (= EPIPE (system-error-errno `(,key ,@args))))
-                       (and (eq? key 'gnutls-error)
-                            (eq? (first args) error/invalid-session))
-                       (memq key
-                             '(bad-response bad-header bad-header-component)))
-                   (begin
-                     (close-port p)
-                     (connect #f      ; try again
-                              (drop requests (+ 1 processed))
-                              result))
-                   (apply throw key args))))))))))
+           (match (false-if-networking-error (read-response p))
+             ((? response? resp)
+              (let* ((body   (response-body-port resp))
+                     (result (proc head resp body result)))
+                ;; The server can choose to stop responding at any time,
+                ;; in which case we have to try again.  Check whether
+                ;; that is the case.  Note that even upon "Connection:
+                ;; close", we can read from BODY.
+                (match (assq 'connection (response-headers resp))
+                  (('connection 'close)
+                   (close-port p)
+                   (connect #f                    ;try again
+                            (drop requests (+ 1 processed))
+                            result))
+                  (_
+                   (loop tail (+ 1 processed) result)))))
+             (#f
+              (close-port p)
+              (connect #f                         ; try again
+                       (drop requests processed)
+                       result)))))))))
 
 
 ;;;
diff --git a/guix/import/go.scm b/guix/import/go.scm
index 7452b4c903..bc53f8f558 100644
--- a/guix/import/go.scm
+++ b/guix/import/go.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2021 François Joulaud <francois.joulaud@radiofrance.com>
 ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,7 +33,7 @@
   #:use-module (guix http-client)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix memoization)
-  #:autoload   (htmlprag) (html->sxml)            ;from Guile-Lib
+  #:use-module (htmlprag)               ;from Guile-Lib
   #:autoload   (guix git) (update-cached-checkout)
   #:autoload   (gcrypt hash) (open-hash-port hash-algorithm sha256)
   #:autoload   (guix serialization) (write-file)
@@ -42,20 +43,29 @@
   #:use-module (ice-9 rdelim)
   #:use-module (ice-9 receive)
   #:use-module (ice-9 regex)
+  #:use-module (ice-9 textual-ports)
   #:use-module ((rnrs io ports) #:select (call-with-port))
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-2)
   #:use-module (srfi srfi-9)
   #:use-module (srfi srfi-11)
   #:use-module (srfi srfi-26)
-  #:use-module (sxml xpath)
+  #:use-module (srfi srfi-34)
+  #:use-module (sxml match)
+  #:use-module ((sxml xpath) #:renamer (lambda (s)
+                                         (if (eq? 'filter s)
+                                             'xfilter
+                                             s)))
   #:use-module (web client)
   #:use-module (web response)
   #:use-module (web uri)
 
-  #:export (go-path-escape
-            go-module->guix-package
+  #:export (go-module->guix-package
             go-module-recursive-import))
 
+;;; Parameterize htmlprag to parse valid HTML more reliably.
+(%strict-tokenizer? #t)
+
 ;;; Commentary:
 ;;;
 ;;; (guix import go) attempts to make it easier to create Guix package
@@ -83,12 +93,18 @@
 ;;; assumption that there will be no collision.
 
 ;;; TODO list
-;;; - get correct hash in vcs->origin
-;;; - print partial result during recursive imports (need to catch
-;;;   exceptions)
+;;; - get correct hash in vcs->origin for Mercurial and Subversion
 
 ;;; Code:
 
+(define http-fetch*
+  ;; Like http-fetch, but memoized and returning the body as a string.
+  (memoize (lambda args
+             (call-with-port (apply http-fetch args) get-string-all))))
+
+(define json-fetch*
+  (memoize json-fetch))
+
 (define (go-path-escape path)
   "Escape a module path by replacing every uppercase letter with an
 exclamation mark followed with its lowercase equivalent, as per the module
@@ -98,54 +114,87 @@ https://godoc.org/golang.org/x/mod/module#hdr-Escaped_Paths)."
     (string-append "!" (string-downcase (match:substring occurrence))))
   (regexp-substitute/global #f "[A-Z]" path 'pre escape 'post))
 
-(define (go-module-latest-version goproxy-url module-path)
-  "Fetch the version number of the latest version for MODULE-PATH from the
-given GOPROXY-URL server."
-  (assoc-ref (json-fetch (format #f "~a/~a/@latest" goproxy-url
-                                 (go-path-escape module-path)))
-             "Version"))
+;; Prevent inlining of this procedure, which is accessed by unit tests.
+(set! go-path-escape go-path-escape)
 
+(define (go.pkg.dev-info name)
+  (http-fetch* (string-append "https://pkg.go.dev/" name)))
+
+(define* (go-module-version-string goproxy name #:key version)
+  "Fetch the version string of the latest version for NAME from the given
+GOPROXY server, or for VERSION when specified."
+  (let ((file (if version
+                  (string-append "@v/" version ".info")
+                  "@latest")))
+    (assoc-ref (json-fetch* (format #f "~a/~a/~a"
+                                    goproxy (go-path-escape name) file))
+               "Version")))
+
+(define* (go-module-available-versions goproxy name)
+  "Retrieve the available versions for a given module from the module proxy.
+Versions are being returned **unordered** and may contain different versioning
+styles for the same package."
+  (let* ((url (string-append goproxy "/" (go-path-escape name) "/@v/list"))
+         (body (http-fetch* url))
+         (versions (remove string-null? (string-split body #\newline))))
+    (if (null? versions)
+        (list (go-module-version-string goproxy name)) ;latest version
+        versions)))
 
 (define (go-package-licenses name)
   "Retrieve the list of licenses that apply to NAME, a Go package or module
-name (e.g. \"github.com/golang/protobuf/proto\").  The data is scraped from
-the https://pkg.go.dev/ web site."
-  (let*-values (((url) (string-append "https://pkg.go.dev/" name
-                                      "?tab=licenses"))
-                ((response body) (http-get url))
-                ;; Extract the text contained in a h2 child node of any
-                ;; element marked with a "License" class attribute.
-                ((select) (sxpath `(// (* (@ (equal? (class "License"))))
-                                       h2 // *text*))))
-    (and (eq? (response-code response) 200)
-         (match (select (html->sxml body))
-           (() #f)                      ;nothing selected
-           (licenses licenses)))))
-
-(define (go.pkg.dev-info name)
-  (http-get (string-append "https://pkg.go.dev/" name)))
-(define go.pkg.dev-info*
-  (memoize go.pkg.dev-info))
+name (e.g. \"github.com/golang/protobuf/proto\")."
+  (let* ((body (go.pkg.dev-info (string-append name "?tab=licenses")))
+         ;; Extract the text contained in a h2 child node of any
+         ;; element marked with a "License" class attribute.
+         (select (sxpath `(// (* (@ (equal? (class "License"))))
+                              h2 // *text*))))
+    (select (html->sxml body))))
+
+(define (sxml->texi sxml-node)
+  "A very basic SXML to Texinfo converter which attempts to preserve HTML
+formatting and links as text."
+  (sxml-match sxml-node
+    ((strong ,text)
+     (format #f "@strong{~a}" text))
+    ((a (@ (href ,url)) ,text)
+     (format #f "@url{~a,~a}" url text))
+    ((code ,text)
+     (format #f "@code{~a}" text))
+    (,something-else something-else)))
 
 (define (go-package-description name)
   "Retrieve a short description for NAME, a Go package name,
-e.g. \"google.golang.org/protobuf/proto\".  The data is scraped from the
-https://pkg.go.dev/ web site."
-  (let*-values (((response body) (go.pkg.dev-info* name))
-                ;; Extract the text contained in a h2 child node of any
-                ;; element marked with a "License" class attribute.
-                ((select) (sxpath
-                           `(// (section
-                                 (@ (equal? (class "Documentation-overview"))))
-                                (p 1)))))
-    (and (eq? (response-code response) 200)
-         (match (select (html->sxml body))
-           (() #f)                      ;nothing selected
-           (((p . strings))
-            ;; The paragraph text is returned as a list of strings embedding
-            ;; newline characters.  Join them and strip the newline
-            ;; characters.
-            (string-delete #\newline (string-join strings)))))))
+e.g. \"google.golang.org/protobuf/proto\"."
+  (let* ((body (go.pkg.dev-info name))
+         (sxml (html->sxml body))
+         (overview ((sxpath
+                     `(//
+                       (* (@ (equal? (class "Documentation-overview"))))
+                       (p 1))) sxml))
+         ;; Sometimes, the first paragraph just contains images/links that
+         ;; has only "\n" for text.  The following filter is designed to
+         ;; omit it.
+         (contains-text? (lambda (node)
+                           (remove string-null?
+                                   (map string-trim-both
+                                        (filter (node-typeof? '*text*)
+                                                (cdr node))))))
+         (select-content (sxpath
+                          `(//
+                            (* (@ (equal? (class "UnitReadme-content"))))
+                            div // p ,(xfilter contains-text?))))
+         ;; Fall-back to use content; this is less desirable as it is more
+         ;; verbose, but not every page has an overview.
+         (description (if (not (null? overview))
+                          overview
+                          (select-content sxml)))
+         (description* (and (not (null? description))
+                            (first description))))
+    (match description*
+      (() #f)                           ;nothing selected
+      ((p elements ...)
+       (apply string-append (filter string? (map sxml->texi elements)))))))
 
 (define (go-package-synopsis module-name)
   "Retrieve a short synopsis for a Go module named MODULE-NAME,
@@ -153,17 +202,17 @@ e.g. \"google.golang.org/protobuf\".  The data is scraped from
 the https://pkg.go.dev/ web site."
   ;; Note: Only the *module* (rather than package) page has the README title
   ;; used as a synopsis on the https://pkg.go.dev web site.
-  (let*-values (((response body) (go.pkg.dev-info* module-name))
-                ;; Extract the text contained in a h2 child node of any
-                ;; element marked with a "License" class attribute.
-                ((select) (sxpath
-                           `(// (div (@ (equal? (class "UnitReadme-content"))))
-                                // h3 *text*))))
-    (and (eq? (response-code response) 200)
-         (match (select (html->sxml body))
-           (() #f)                      ;nothing selected
-           ((title more ...)            ;title is the first string of the list
-            (string-trim-both title))))))
+  (let* ((url (string-append "https://pkg.go.dev/" module-name))
+         (body (http-fetch* url))
+         ;; Extract the text contained in a h2 child node of any
+         ;; element marked with a "License" class attribute.
+         (select-title (sxpath
+                        `(// (div (@ (equal? (class "UnitReadme-content"))))
+                             // h3 *text*))))
+    (match (select-title (html->sxml body))
+      (() #f)                           ;nothing selected
+      ((title more ...)                 ;title is the first string of the list
+       (string-trim-both title)))))
 
 (define (list->licenses licenses)
   "Given a list of LICENSES mostly following the SPDX conventions, return the
@@ -188,13 +237,13 @@ corresponding Guix license or 'unknown-license!"
                          'unknown-license!)))
               licenses))
 
-(define (fetch-go.mod goproxy-url module-path version)
-  "Fetches go.mod from the given GOPROXY-URL server for the given MODULE-PATH
-and VERSION."
-  (let ((url (format #f "~a/~a/@v/~a.mod" goproxy-url
+(define (fetch-go.mod goproxy module-path version)
+  "Fetch go.mod from the given GOPROXY server for the given MODULE-PATH
+and VERSION and return an input port."
+  (let ((url (format #f "~a/~a/@v/~a.mod" goproxy
                      (go-path-escape module-path)
                      (go-path-escape version))))
-    (http-fetch url)))
+    (http-fetch* url)))
 
 (define %go.mod-require-directive-rx
   ;; A line in a require directive is composed of a module path and
@@ -202,118 +251,119 @@ and VERSION."
   ;; the end.
   (make-regexp
    (string-append
-    "^[[:blank:]]*"
-    "([^[:blank:]]+)[[:blank:]]+([^[:blank:]]+)"
-    "([[:blank:]]+//.*)?")))
+    "^[[:blank:]]*([^[:blank:]]+)[[:blank:]]+" ;the module path
+    "([^[:blank:]]+)"                          ;the version
+    "([[:blank:]]+//.*)?")))                   ;an optional comment
 
 (define %go.mod-replace-directive-rx
   ;; ReplaceSpec = ModulePath [ Version ] "=>" FilePath newline
   ;;             | ModulePath [ Version ] "=>" ModulePath Version newline .
   (make-regexp
    (string-append
-    "([^[:blank:]]+)([[:blank:]]+([^[:blank:]]+))?"
-    "[[:blank:]]+" "=>" "[[:blank:]]+"
-    "([^[:blank:]]+)([[:blank:]]+([^[:blank:]]+))?")))
-
-(define (parse-go.mod port)
-  "Parse the go.mod file accessible via the input PORT, returning a list of
-requirements."
-  (define-record-type <results>
-    (make-results requirements replacements)
-    results?
-    (requirements results-requirements)
-    (replacements results-replacements))
+    "([^[:blank:]]+)"                   ;the module path
+    "([[:blank:]]+([^[:blank:]]+))?"    ;optional version
+    "[[:blank:]]+=>[[:blank:]]+"
+    "([^[:blank:]]+)"                   ;the file or module path
+    "([[:blank:]]+([^[:blank:]]+))?"))) ;the version (if a module path)
+
+(define (parse-go.mod content)
+  "Parse the go.mod file CONTENT, returning a list of requirements."
   ;; We parse only a subset of https://golang.org/ref/mod#go-mod-file-grammar
   ;; which we think necessary for our use case.
-  (define (toplevel results)
-    "Main parser, RESULTS is a pair of alist serving as accumulator for
-     all encountered requirements and replacements."
-    (let ((line (read-line port)))
+  (define (toplevel requirements replaced)
+    "This is the main parser.  The results are accumulated in THE REQUIREMENTS
+and REPLACED lists."
+    (let ((line (read-line)))
       (cond
        ((eof-object? line)
         ;; parsing ended, give back the result
-        results)
+        (values requirements replaced))
        ((string=? line "require (")
         ;; a require block begins, delegate parsing to IN-REQUIRE
-        (in-require results))
+        (in-require requirements replaced))
        ((string=? line "replace (")
         ;; a replace block begins, delegate parsing to IN-REPLACE
-        (in-replace results))
+        (in-replace requirements replaced))
        ((string-prefix? "require " line)
-        ;; a standalone require directive
-        (let* ((stripped-line (string-drop line 8))
-               (new-results (require-directive results stripped-line)))
-          (toplevel new-results)))
+        ;; a require directive by itself
+        (let* ((stripped-line (string-drop line 8)))
+          (call-with-values
+              (lambda ()
+                (require-directive requirements replaced stripped-line))
+            toplevel)))
        ((string-prefix? "replace " line)
-        ;; a standalone replace directive
-        (let* ((stripped-line (string-drop line 8))
-               (new-results (replace-directive results stripped-line)))
-          (toplevel new-results)))
+        ;; a replace directive by itself
+        (let* ((stripped-line (string-drop line 8)))
+          (call-with-values
+              (lambda ()
+                (replace-directive requirements replaced stripped-line))
+            toplevel)))
        (#t
         ;; unrecognised line, ignore silently
-        (toplevel results)))))
+        (toplevel requirements replaced)))))
 
-  (define (in-require results)
-    (let ((line (read-line port)))
+  (define (in-require requirements replaced)
+    (let ((line (read-line)))
       (cond
        ((eof-object? line)
         ;; this should never happen here but we ignore silently
-        results)
+        (values requirements replaced))
        ((string=? line ")")
         ;; end of block, coming back to toplevel
-        (toplevel results))
+        (toplevel requirements replaced))
        (#t
-        (in-require (require-directive results line))))))
+        (call-with-values (lambda ()
+                            (require-directive requirements replaced line))
+          in-require)))))
 
-  (define (in-replace results)
-    (let ((line (read-line port)))
+  (define (in-replace requirements replaced)
+    (let ((line (read-line)))
       (cond
        ((eof-object? line)
         ;; this should never happen here but we ignore silently
-        results)
+        (values requirements replaced))
        ((string=? line ")")
         ;; end of block, coming back to toplevel
-        (toplevel results))
+        (toplevel requirements replaced))
        (#t
-        (in-replace (replace-directive results line))))))
-
-  (define (replace-directive results line)
-    "Extract replaced modules and new requirements from replace directive
-    in LINE and add to RESULTS."
-    (match results
-      (($ <results> requirements replaced)
-       (let* ((rx-match (regexp-exec %go.mod-replace-directive-rx line))
-              (module-path (match:substring rx-match 1))
-              (version (match:substring rx-match 3))
-              (new-module-path (match:substring rx-match 4))
-              (new-version (match:substring rx-match 6))
-              (new-replaced (alist-cons module-path version replaced))
-              (new-requirements
-               (if (string-match "^\\.?\\./" new-module-path)
-                   requirements
-                   (alist-cons new-module-path new-version requirements))))
-         (make-results new-requirements new-replaced)))))
-  (define (require-directive results line)
-    "Extract requirement from LINE and add it to RESULTS."
+        (call-with-values (lambda ()
+                            (replace-directive requirements replaced line))
+          in-replace)))))
+
+  (define (replace-directive requirements replaced line)
+    "Extract replaced modules and new requirements from the replace directive
+in LINE and add them to the REQUIREMENTS and REPLACED lists."
+    (let* ((rx-match (regexp-exec %go.mod-replace-directive-rx line))
+           (module-path (match:substring rx-match 1))
+           (version (match:substring rx-match 3))
+           (new-module-path (match:substring rx-match 4))
+           (new-version (match:substring rx-match 6))
+           (new-replaced (cons (list module-path version) replaced))
+           (new-requirements
+            (if (string-match "^\\.?\\./" new-module-path)
+                requirements
+                (cons (list new-module-path new-version) requirements))))
+      (values new-requirements new-replaced)))
+
+  (define (require-directive requirements replaced line)
+    "Extract requirement from LINE and augment the REQUIREMENTS and REPLACED
+lists."
     (let* ((rx-match (regexp-exec %go.mod-require-directive-rx line))
            (module-path (match:substring rx-match 1))
-           ;; we saw double-quoted string in the wild without escape
-           ;; sequences so we just trim the quotes
+           ;; Double-quoted strings were seen in the wild without escape
+           ;; sequences; trim the quotes to be on the safe side.
            (module-path (string-trim-both module-path #\"))
            (version (match:substring rx-match 2)))
-      (match results
-        (($ <results> requirements replaced)
-         (make-results (alist-cons module-path version requirements) replaced)))))
-
-  (let ((results (toplevel (make-results '() '()))))
-    (match results
-      (($ <results> requirements replaced)
-       ;; At last we remove replaced modules from the requirements list
-       (fold
-        (lambda (replacedelem requirements)
-          (alist-delete! (car replacedelem) requirements))
-        requirements
-        replaced)))))
+      (values (cons (list module-path version) requirements) replaced)))
+
+  (with-input-from-string content
+    (lambda ()
+      (receive (requirements replaced)
+          (toplevel '() '())
+        ;; At last remove the replaced modules from the requirements list.
+        (remove (lambda (r)
+                  (assoc (car r) replaced))
+                requirements)))))
 
 ;; Prevent inlining of this procedure, which is accessed by unit tests.
 (set! parse-go.mod parse-go.mod)
@@ -324,8 +374,10 @@ requirements."
   (url-prefix vcs-url-prefix)
   (root-regex vcs-root-regex)
   (type vcs-type))
+
 (define (make-vcs prefix regexp type)
-    (%make-vcs prefix (make-regexp regexp) type))
+  (%make-vcs prefix (make-regexp regexp) type))
+
 (define known-vcs
   ;; See the following URL for the official Go equivalent:
   ;; https://github.com/golang/go/blob/846dce9d05f19a1f53465e62a304dea21b99f910/src/cmd/go/internal/vcs/vcs.go#L1026-L1087
@@ -376,13 +428,27 @@ hence the need to derive this information."
       (vcs-qualified-module-path->root-repo-url module-path)
       module-path))
 
-(define (go-module->guix-package-name module-path)
-  "Converts a module's path to the canonical Guix format for Go packages."
-  (string-downcase (string-append "go-" (string-replace-substring
-                                         (string-replace-substring
-                                          module-path
-                                          "." "-")
-                                         "/" "-"))))
+(define* (go-module->guix-package-name module-path #:optional version)
+  "Converts a module's path to the canonical Guix format for Go packages.
+Optionally include a VERSION string to append to the name."
+  ;; Map dot, slash and underscore characters to hyphens.
+  (let ((module-path* (string-map (lambda (c)
+                                    (if (member c '(#\. #\/ #\_))
+                                        #\-
+                                        c))
+                                  module-path)))
+    (string-downcase (string-append "go-" module-path*
+                                    (if version
+                                        (string-append "-" version)
+                                        "")))))
+
+(define (strip-.git-suffix/maybe repo-url)
+  "Strip a repository URL '.git' suffix from REPO-URL if hosted at GitHub."
+  (match repo-url
+    ((and (? (cut string-prefix? "https://github.com" <>))
+          (? (cut string-suffix? ".git" <>)))
+     (string-drop-right repo-url 4))
+    (_ repo-url)))
 
 (define-record-type <module-meta>
   (make-module-meta import-prefix vcs repo-root)
@@ -396,21 +462,22 @@ hence the need to derive this information."
 because goproxy servers don't currently provide all the information needed to
 build a package."
   ;; <meta name="go-import" content="import-prefix vcs repo-root">
-  (let* ((port (http-fetch (format #f "https://~a?go-get=1" module-path)))
+  (let* ((meta-data (http-fetch* (format #f "https://~a?go-get=1" module-path)))
          (select (sxpath `(// head (meta (@ (equal? (name "go-import"))))
                               // content))))
-    (match (select (call-with-port port html->sxml))
-      (() #f)                         ;nothing selected
+    (match (select (html->sxml meta-data))
+      (() #f)                           ;nothing selected
       (((content content-text))
        (match (string-split content-text #\space)
          ((root-path vcs repo-url)
-          (make-module-meta root-path (string->symbol vcs) repo-url)))))))
+          (make-module-meta root-path (string->symbol vcs)
+                            (strip-.git-suffix/maybe repo-url))))))))
 
-(define (module-meta-data-repo-url meta-data goproxy-url)
+(define (module-meta-data-repo-url meta-data goproxy)
   "Return the URL where the fetcher which will be used can download the
 source."
   (if (member (module-meta-vcs meta-data) '(fossil mod))
-      goproxy-url
+      goproxy
       (module-meta-repo-root meta-data)))
 
 ;; XXX: Copied from (guix scripts hash).
@@ -463,6 +530,9 @@ control system is being used."
           (method git-fetch)
           (uri (git-reference
                 (url ,vcs-repo-url)
+                ;; This is done because the version field of the package,
+                ;; which the generated quoted expression refers to, has been
+                ;; stripped of any 'v' prefixed.
                 (commit ,(if (and plain-version? v-prefixed?)
                              '(string-append "v" version)
                              '(go-version->git-ref version)))))
@@ -500,48 +570,95 @@ control system is being used."
                          vcs-type vcs-repo-url)))))
 
 (define* (go-module->guix-package module-path #:key
-                                  (goproxy-url "https://proxy.golang.org"))
-  (let* ((latest-version (go-module-latest-version goproxy-url module-path))
-         (port (fetch-go.mod goproxy-url module-path latest-version))
-         (dependencies (map car (call-with-port port parse-go.mod)))
+                                  (goproxy "https://proxy.golang.org")
+                                  version
+                                  pin-versions?)
+  "Return the package S-expression corresponding to MODULE-PATH at VERSION, a Go package.
+The meta-data is fetched from the GOPROXY server and https://pkg.go.dev/.
+When VERSION is unspecified, the latest version available is used."
+  (let* ((available-versions (go-module-available-versions goproxy module-path))
+         (version* (or version
+                       (go-module-version-string goproxy module-path))) ;latest
+         ;; Elide the "v" prefix Go uses.
+         (strip-v-prefix (cut string-trim <> #\v))
+         ;; Pseudo-versions do not appear in the versions list; skip the
+         ;; following check.
+         (_ (unless (or (go-pseudo-version? version*)
+                        (member version* available-versions))
+              (error (format #f "error: version ~s is not available
+hint: use one of the following available versions ~a\n"
+                             version* available-versions))))
+         (content (fetch-go.mod goproxy module-path version*))
+         (dependencies+versions (parse-go.mod content))
+         (dependencies (if pin-versions?
+                           dependencies+versions
+                           (map car dependencies+versions)))
          (guix-name (go-module->guix-package-name module-path))
          (root-module-path (module-path->repository-root module-path))
          ;; The VCS type and URL are not included in goproxy information. For
          ;; this we need to fetch it from the official module page.
          (meta-data (fetch-module-meta-data root-module-path))
          (vcs-type (module-meta-vcs meta-data))
-         (vcs-repo-url (module-meta-data-repo-url meta-data goproxy-url))
+         (vcs-repo-url (module-meta-data-repo-url meta-data goproxy))
          (synopsis (go-package-synopsis root-module-path))
          (description (go-package-description module-path))
          (licenses (go-package-licenses module-path)))
     (values
      `(package
         (name ,guix-name)
-        ;; Elide the "v" prefix Go uses
-        (version ,(string-trim latest-version #\v))
+        (version ,(strip-v-prefix version*))
         (source
-         ,(vcs->origin vcs-type vcs-repo-url latest-version))
+         ,(vcs->origin vcs-type vcs-repo-url version*))
         (build-system go-build-system)
         (arguments
          '(#:import-path ,root-module-path))
-        ,@(maybe-inputs (map go-module->guix-package-name dependencies))
+        ,@(maybe-propagated-inputs
+           (map (match-lambda
+                  ((name version)
+                   (go-module->guix-package-name name (strip-v-prefix version)))
+                  (name
+                   (go-module->guix-package-name name)))
+                dependencies))
         (home-page ,(format #f "https://~a" root-module-path))
         (synopsis ,synopsis)
-        (description ,description)
-        (license ,(match (and=> licenses list->licenses)
-                    ((license) license)
-                    ((licenses ...) `(list ,@licenses))
-                    (x x))))
-     dependencies)))
+        (description ,(and=> description beautify-description))
+        (license ,(match (list->licenses licenses)
+                    (() #f)                        ;unknown license
+                    ((license)                     ;a single license
+                     license)
+                    ((license ...)     ;a list of licenses
+                     `(list ,@license)))))
+     (if pin-versions?
+         dependencies+versions
+         dependencies))))
 
 (define go-module->guix-package* (memoize go-module->guix-package))
 
 (define* (go-module-recursive-import package-name
-                                     #:key (goproxy-url "https://proxy.golang.org"))
+                                     #:key (goproxy "https://proxy.golang.org")
+                                     version
+                                     pin-versions?)
+
   (recursive-import
    package-name
-   #:repo->guix-package (lambda* (name . _)
-                          (go-module->guix-package*
-                           name
-                           #:goproxy-url goproxy-url))
-   #:guix-name go-module->guix-package-name))
+   #:repo->guix-package
+   (lambda* (name #:key version repo)
+     ;; Disable output buffering so that the following warning gets printed
+     ;; consistently.
+     (setvbuf (current-error-port) 'none)
+     (guard (c ((http-get-error? c)
+                (warning (G_ "Failed to import package ~s.
+reason: ~s could not be fetched: HTTP error ~a (~s).
+This package and its dependencies won't be imported.~%")
+                         name
+                         (uri->string (http-get-error-uri c))
+                         (http-get-error-code c)
+                         (http-get-error-reason c))
+                (values '() '())))
+       (receive (package-sexp dependencies)
+           (go-module->guix-package* name #:goproxy goproxy
+                                     #:version version
+                                     #:pin-versions? pin-versions?)
+         (values package-sexp dependencies))))
+   #:guix-name go-module->guix-package-name
+   #:version version))
diff --git a/guix/import/print.scm b/guix/import/print.scm
index a2ab810a5c..dcc38abc70 100644
--- a/guix/import/print.scm
+++ b/guix/import/print.scm
@@ -79,7 +79,16 @@ when evaluated."
           (file-name (origin-file-name source))
           (patches   (origin-patches source)))
       `(origin
-         (method ,(procedure-name method))
+         ;; Since 'procedure-name' returns the procedure name within the
+         ;; module where it's defined, not its public name.  Thus, try hard to
+         ;; find its public name and use 'procedure-name' as a last resort.
+         (method ,(or (any (lambda (module)
+                             (variable-name method module))
+                           '((guix download)
+                             (guix git-download)
+                             (guix hg-download)
+                             (guix svn-download)))
+                      (procedure-name method)))
          (uri (string-append ,@(match (factorize-uri uri version)
                                  ((? string? uri) (list uri))
                                  (factorized factorized))))
diff --git a/guix/import/utils.scm b/guix/import/utils.scm
index 64d1385164..d817318a91 100644
--- a/guix/import/utils.scm
+++ b/guix/import/utils.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2019 Robert Vollmert <rob@vllmrt.net>
 ;;; Copyright © 2020 Helio Machado <0x2b3bfa0+guix@googlemail.com>
 ;;; Copyright © 2020 Martin Becze <mjbecze@riseup.net>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -57,6 +58,7 @@
             package-names->package-inputs
             maybe-inputs
             maybe-native-inputs
+            maybe-propagated-inputs
             package->definition
 
             spdx-string->license
@@ -169,6 +171,7 @@ of the string VERSION is replaced by the symbol 'version."
     ("Imlib2"                      'license:imlib2)
     ("IPA"                         'license:ipa)
     ("IPL-1.0"                     'license:ibmpl1.0)
+    ("LAL-1.3"                     'license:lal1.3)
     ("LGPL-2.0"                    'license:lgpl2.0)
     ("LGPL-2.0+"                   'license:lgpl2.0+)
     ("LGPL-2.1"                    'license:lgpl2.1)
@@ -246,27 +249,34 @@ use in an 'inputs' field of a package definition."
          (input (make-input input #f)))
        names))
 
-(define* (maybe-inputs package-names #:optional (output #f))
+(define* (maybe-inputs package-names #:optional (output #f)
+                       #:key (type #f))
   "Given a list of PACKAGE-NAMES, tries to generate the 'inputs' field of a
-package definition."
-  (match (package-names->package-inputs package-names output)
-    (()
-     '())
-    ((package-inputs ...)
-     `((inputs (,'quasiquote ,package-inputs))))))
+package definition.  TYPE can be used to specify the type of the inputs;
+either the 'native or 'propagated symbols are accepted.  Left unspecified, the
+snippet generated is for regular inputs."
+  (let ((field-name (match type
+                      ('native 'native-inputs)
+                      ('propagated 'propagated-inputs)
+                      (_ 'inputs))))
+    (match (package-names->package-inputs package-names output)
+      (()
+       '())
+      ((package-inputs ...)
+       `((,field-name (,'quasiquote ,package-inputs)))))))
 
 (define* (maybe-native-inputs package-names #:optional (output #f))
-  "Given a list of PACKAGE-NAMES, tries to generate the 'inputs' field of a
-package definition."
-  (match (package-names->package-inputs package-names output)
-    (()
-     '())
-    ((package-inputs ...)
-     `((native-inputs (,'quasiquote ,package-inputs))))))
+  "Same as MAYBE-INPUTS, but for native inputs."
+  (maybe-inputs package-names output #:type 'native))
+
+(define* (maybe-propagated-inputs package-names #:optional (output #f))
+  "Same as MAYBE-INPUTS, but for propagated inputs."
+  (maybe-inputs package-names output #:type 'propagated))
 
 (define* (package->definition guix-package #:optional append-version?/string)
-  "If APPEND-VERSION?/STRING is #t, append the package's major+minor
-version. If APPEND-VERSION?/string is a string, append this string."
+  "If APPEND-VERSION?/STRING is #t, append the package's major+minor version.
+If it is the symbol 'full, append the package's complete version.  If
+APPEND-VERSION?/string is a string, append this string."
   (match guix-package
     ((or
       ('package ('name name) ('version version) . rest)
@@ -278,6 +288,8 @@ version. If APPEND-VERSION?/string is a string, append this string."
                          (string-append name "-" append-version?/string))
                         ((eq? append-version?/string #t)
                          (string-append name "-" (version-major+minor version)))
+                        ((eq? 'full append-version?/string)
+                         (string-append name "-" version))
                         (else name)))
         ,guix-package))))
 
@@ -437,8 +449,8 @@ obtain a node's uniquely identifying \"key\"."
   "Return a list of package expressions for PACKAGE-NAME and all its
 dependencies, sorted in topological order.  For each package,
 call (REPO->GUIX-PACKAGE NAME :KEYS version repo), which should return a
-package expression and a list of dependencies; call (GUIX-NAME NAME) to
-obtain the Guix package name corresponding to the upstream name."
+package expression and a list of dependencies; call (GUIX-NAME PACKAGE-NAME)
+to obtain the Guix package name corresponding to the upstream name."
   (define-record-type <node>
     (make-node name version package dependencies)
     node?
diff --git a/guix/ipfs.scm b/guix/ipfs.scm
new file mode 100644
index 0000000000..31a89888a7
--- /dev/null
+++ b/guix/ipfs.scm
@@ -0,0 +1,183 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix ipfs)
+  #:use-module (json)
+  #:use-module (guix base64)
+  #:use-module ((guix build utils) #:select (dump-port))
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-11)
+  #:use-module (srfi srfi-26)
+  #:use-module (rnrs io ports)
+  #:use-module (rnrs bytevectors)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 ftw)
+  #:use-module (web uri)
+  #:use-module (web client)
+  #:use-module (web response)
+  #:export (%ipfs-base-url
+            add-data
+            add-file
+
+            content?
+            content-name
+            content-hash
+            content-size
+
+            add-empty-directory
+            add-to-directory
+            read-contents
+            publish-name))
+
+;;; Commentary:
+;;;
+;;; This module implements bindings for the HTTP interface of the IPFS
+;;; gateway, documented here: <https://docs.ipfs.io/reference/api/http/>.  It
+;;; allows you to add and retrieve files over IPFS, and a few other things.
+;;;
+;;; Code:
+
+(define %ipfs-base-url
+  ;; URL of the IPFS gateway.
+  (make-parameter "http://localhost:5001"))
+
+(define* (call url decode #:optional (method http-post)
+               #:key body (false-if-404? #t) (headers '()))
+  "Invoke the endpoint at URL using METHOD.  Decode the resulting JSON body
+using DECODE, a one-argument procedure that takes an input port; when DECODE
+is false, return the input port.  When FALSE-IF-404? is true, return #f upon
+404 responses."
+  (let*-values (((response port)
+                 (method url #:streaming? #t
+                         #:body body
+
+                         ;; Always pass "Connection: close".
+                         #:keep-alive? #f
+                         #:headers `((connection close)
+                                     ,@headers))))
+    (cond ((= 200 (response-code response))
+           (if decode
+               (let ((result (decode port)))
+                 (close-port port)
+                 result)
+               port))
+          ((and false-if-404?
+                (= 404 (response-code response)))
+           (close-port port)
+           #f)
+          (else
+           (close-port port)
+           (throw 'ipfs-error url response)))))
+
+;; Result of a file addition.
+(define-json-mapping <content> make-content content?
+  json->content
+  (name   content-name "Name")
+  (hash   content-hash "Hash")
+  (bytes  content-bytes "Bytes")
+  (size   content-size "Size" string->number))
+
+;; Result of a 'patch/add-link' operation.
+(define-json-mapping <directory> make-directory directory?
+  json->directory
+  (hash   directory-hash "Hash")
+  (links  directory-links "Links" json->links))
+
+;; A "link".
+(define-json-mapping <link> make-link link?
+  json->link
+  (name   link-name "Name")
+  (hash   link-hash "Hash")
+  (size   link-size "Size" string->number))
+
+;; A "binding", also known as a "name".
+(define-json-mapping <binding> make-binding binding?
+  json->binding
+  (name   binding-name "Name")
+  (value  binding-value "Value"))
+
+(define (json->links json)
+  (match json
+    (#f    '())
+    (links (map json->link links))))
+
+(define %multipart-boundary
+  ;; XXX: We might want to find a more reliable boundary.
+  (string-append (make-string 24 #\-) "2698127afd7425a6"))
+
+(define (bytevector->form-data bv port)
+  "Write to PORT a 'multipart/form-data' representation of BV."
+  (display (string-append "--" %multipart-boundary "\r\n"
+                          "Content-Disposition: form-data\r\n"
+                          "Content-Type: application/octet-stream\r\n\r\n")
+           port)
+  (put-bytevector port bv)
+  (display (string-append "\r\n--" %multipart-boundary "--\r\n")
+           port))
+
+(define* (add-data data #:key (name "file.txt") recursive?)
+  "Add DATA, a bytevector, to IPFS.  Return a content object representing it."
+  (call (string-append (%ipfs-base-url)
+                       "/api/v0/add?arg=" (uri-encode name)
+                       "&recursive="
+                       (if recursive? "true" "false"))
+        json->content
+        #:headers
+        `((content-type
+           . (multipart/form-data
+              (boundary . ,%multipart-boundary))))
+        #:body
+        (call-with-bytevector-output-port
+         (lambda (port)
+           (bytevector->form-data data port)))))
+
+(define (not-dot? entry)
+  (not (member entry '("." ".."))))
+
+(define* (add-file file #:key (name (basename file)))
+  "Add FILE under NAME to the IPFS and return a content object for it."
+  (add-data (match (call-with-input-file file get-bytevector-all)
+              ((? eof-object?) #vu8())
+              (bv bv))
+            #:name name))
+
+(define* (add-empty-directory #:key (name "directory"))
+  "Return a content object for an empty directory."
+  (add-data #vu8() #:recursive? #t #:name name))
+
+(define* (add-to-directory directory file name)
+  "Add FILE to DIRECTORY under NAME, and return the resulting directory.
+DIRECTORY and FILE must be hashes identifying objects in the IPFS store."
+  (call (string-append (%ipfs-base-url)
+                       "/api/v0/object/patch/add-link?arg="
+                       (uri-encode directory)
+                       "&arg=" (uri-encode name) "&arg=" (uri-encode file)
+                       "&create=true")
+        json->directory))
+
+(define* (read-contents object #:key offset length)
+  "Return an input port to read the content of OBJECT from."
+  (call (string-append (%ipfs-base-url)
+                       "/api/v0/cat?arg=" object)
+        #f))
+
+(define* (publish-name object)
+  "Publish OBJECT under the current peer ID."
+  (call (string-append (%ipfs-base-url)
+                       "/api/v0/name/publish?arg=" object)
+        json->binding))
diff --git a/guix/licenses.scm b/guix/licenses.scm
index 0a36067387..4718ccf83f 100644
--- a/guix/licenses.scm
+++ b/guix/licenses.scm
@@ -16,6 +16,7 @@
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2020 André Batista <nandre@riseup.net>
 ;;; Copyright © 2020 Helio Machado <0x2b3bfa0+guix@googlemail.com>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -68,6 +69,7 @@
             imlib2
             ipa
             knuth
+            lal1.3
             lgpl2.0 lgpl2.0+ lgpl2.1 lgpl2.1+ lgpl3 lgpl3+ llgpl
             lppl lppl1.0+ lppl1.1+ lppl1.2 lppl1.2+
             lppl1.3 lppl1.3+
@@ -411,6 +413,11 @@ at URI, which may be a file:// URI pointing the package's tree."
            "http://www.ctan.org/license/knuth"
            "Modification are only permitted under a different name."))
 
+(define lal1.3
+  (license "Free Art License 1.3"
+           "http://artlibre.org/licence/lal/en/"
+           "https://www.gnu.org/licenses/license-list#FreeArt"))
+
 (define lgpl2.0
   (license "LGPL 2.0"
            "https://www.gnu.org/licenses/old-licenses/lgpl-2.0.html"
diff --git a/guix/lint.scm b/guix/lint.scm
index 311bc94cc3..a7d6bbba4f 100644
--- a/guix/lint.scm
+++ b/guix/lint.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2017 Alex Kost <alezost@gmail.com>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018, 2019 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2020 Chris Marusich <cmmarusich@gmail.com>
@@ -170,6 +170,18 @@
   (requires-store? lint-checker-requires-store?
                    (default #f)))
 
+(define (check-name package)
+  "Check whether PACKAGE's name matches our guidelines."
+  (let ((name (package-name package)))
+    ;; Currently checks only whether the name is too short.
+    (if (and (<= (string-length name) 1)
+             (not (string=? name "r"))) ; common-sense exception
+        (list
+         (make-warning package
+                       (G_ "name should be longer than a single character")
+                       #:field 'name))
+        '())))
+
 (define (properly-starts-sentence? s)
   (string-match "^[(\"'`[:upper:][:digit:]]" s))
 
@@ -1179,21 +1191,32 @@ vulnerability records for PACKAGE by calling PACKAGE-VULNERABILITIES."
 
 (define (check-for-updates package)
   "Check if there is an update available for PACKAGE."
-  (match (with-networking-fail-safe
-          (format #f (G_ "while retrieving upstream info for '~a'")
-                  (package-name package))
-          #f
-          (package-latest-release* package))
-    ((? upstream-source? source)
-     (if (version>? (upstream-source-version source)
-                    (package-version package))
-         (list
-          (make-warning package
-                        (G_ "can be upgraded to ~a")
-                        (list (upstream-source-version source))
-                        #:field 'version))
-         '()))
-    (#f '()))) ; cannot find newer upstream release
+  (match (lookup-updater package)
+    (#f
+     (list (make-warning package (G_ "no updater for ~a")
+                         (list (package-name package))
+                         #:field 'source)))
+    ((? upstream-updater? updater)
+     (match (with-networking-fail-safe
+             (format #f (G_ "while retrieving upstream info for '~a'")
+                     (package-name package))
+             #f
+             (package-latest-release package))
+       ((? upstream-source? source)
+        (if (version>? (upstream-source-version source)
+                       (package-version package))
+            (list
+             (make-warning package
+                           (G_ "can be upgraded to ~a")
+                           (list (upstream-source-version source))
+                           #:field 'version))
+            '()))
+       (#f                                       ;cannot find upstream release
+        (list (make-warning package
+                            (G_ "updater '~a' failed to find \
+upstream releases")
+                            (list (upstream-updater-name updater))
+                            #:field 'source)))))))
 
 
 (define (check-archival package)
@@ -1264,7 +1287,8 @@ try again later")
           ((? origin? origin)
            ;; Since "save" origins are not supported for non-VCS source, all
            ;; we can do is tell whether a given tarball is available or not.
-           (if (origin-hash origin)               ;XXX: for ungoogled-chromium
+           (if (and=> (origin-hash origin)          ;XXX: for ungoogled-chromium
+                      content-hash-value)           ;& icecat
                (let ((hash (origin-hash origin)))
                  (match (lookup-content (content-hash-value hash)
                                         (symbol->string
@@ -1446,6 +1470,10 @@ them for PACKAGE."
 (define %local-checkers
   (list
    (lint-checker
+     (name        'name)
+     (description "Validate package names")
+     (check       check-name))
+   (lint-checker
      (name        'description)
      (description "Validate package descriptions")
      (check       check-description-style))
diff --git a/guix/scripts/archive.scm b/guix/scripts/archive.scm
index 91be1b02e1..ceac640432 100644
--- a/guix/scripts/archive.scm
+++ b/guix/scripts/archive.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -63,7 +63,7 @@
     (print-build-trace? . #t)
     (print-extended-build-trace? . #t)
     (multiplexed-build-output? . #t)
-    (verbosity . 2)
+    (verbosity . 3)
     (debug . 0)))
 
 (define (show-help)
diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm
index fa1bbf867d..2decdb45ed 100644
--- a/guix/scripts/build.scm
+++ b/guix/scripts/build.scm
@@ -333,7 +333,7 @@ use '--no-offload' instead~%")))
     (print-build-trace? . #t)
     (print-extended-build-trace? . #t)
     (multiplexed-build-output? . #t)
-    (verbosity . 2)
+    (verbosity . 3)
     (debug . 0)))
 
 (define (show-help)
diff --git a/guix/scripts/copy.scm b/guix/scripts/copy.scm
index 2780d4fbe9..52b476db54 100644
--- a/guix/scripts/copy.scm
+++ b/guix/scripts/copy.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -163,7 +163,7 @@ Copy ITEMS to or from the specified host over SSH.\n"))
     (print-extended-build-trace? . #t)
     (multiplexed-build-output? . #t)
     (debug . 0)
-    (verbosity . 2)))
+    (verbosity . 3)))
 
 
 ;;;
diff --git a/guix/scripts/describe.scm b/guix/scripts/describe.scm
index be2279d254..b5f6249176 100644
--- a/guix/scripts/describe.scm
+++ b/guix/scripts/describe.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2020 Ekaitz Zarraga <ekaitz@elenq.tech>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -286,12 +287,9 @@ text.  The hyperlink links to a web view of COMMIT, when available."
 
 (define-command (guix-describe . args)
   (synopsis "describe the channel revisions currently used")
-  (let* ((opts    (args-fold* args %options
-                              (lambda (opt name arg result)
-                                (leave (G_ "~A: unrecognized option~%")
-                                       name))
-                              cons
-                              %default-options))
+  (let* ((opts    (parse-command-line args %options (list %default-options)
+                              #:build-options? #f
+                              #:argument-handler cons))
          (format  (assq-ref opts 'format))
          (profile (or (assq-ref opts 'profile) (current-profile))))
     (with-error-handling
diff --git a/guix/scripts/discover.scm b/guix/scripts/discover.scm
index 6aade81ed1..be1eaa6e95 100644
--- a/guix/scripts/discover.scm
+++ b/guix/scripts/discover.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2020 Mathieu Othacehe <othacehe@gnu.org>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -127,12 +128,11 @@ to synchronize with the writer."
   (synopsis "discover Guix related services using Avahi")
 
   (with-error-handling
-    (let* ((opts (args-fold* args %options
-                             (lambda (opt name arg result)
-                               (leave (G_ "~A: unrecognized option~%") name))
-                             (lambda (arg result)
-                               (leave (G_ "~A: extraneous argument~%") arg))
-                             %default-options))
+    (let* ((opts (parse-command-line args %options (list %default-options)
+                                     #:build-options? #f
+                                     #:argument-handler
+                                     (lambda (arg result)
+                                       (leave (G_ "~A: extraneous argument~%") arg))))
            (cache (assoc-ref opts 'cache))
            (publish-file (publish-file cache)))
       (parameterize ((%publish-file publish-file))
diff --git a/guix/scripts/download.scm b/guix/scripts/download.scm
index ce8dd8b02c..5a91390358 100644
--- a/guix/scripts/download.scm
+++ b/guix/scripts/download.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2015, 2016, 2017, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -162,15 +163,13 @@ and 'base16' ('hex' and 'hexadecimal' can be used as well).\n"))
 
   (define (parse-options)
     ;; Return the alist of option values.
-    (args-fold* args %options
-                (lambda (opt name arg result)
-                  (leave (G_ "~A: unrecognized option~%") name))
-                (lambda (arg result)
-                  (when (assq 'argument result)
-                    (leave (G_ "~A: extraneous argument~%") arg))
-
-                  (alist-cons 'argument arg result))
-                %default-options))
+    (parse-command-line args %options (list %default-options)
+                        #:build-options? #f
+                        #:argument-handler
+                        (lambda (arg result)
+                          (when (assq 'argument result)
+                            (leave (G_ "~A: extraneous argument~%") arg))
+                          (alist-cons 'argument arg result))))
 
   (with-error-handling
     (let* ((opts  (parse-options))
diff --git a/guix/scripts/edit.scm b/guix/scripts/edit.scm
index 49c9d945b6..b4c0507591 100644
--- a/guix/scripts/edit.scm
+++ b/guix/scripts/edit.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2016, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mathieu Lirzin <mthl@gnu.org>
-;;; Copyright © 2020 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2020, 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -84,11 +84,9 @@ line."
 
   (define (parse-arguments)
     ;; Return the list of package names.
-    (args-fold* args %options
-                (lambda (opt name arg result)
-                  (leave (G_ "~A: unrecognized option~%") name))
-                cons
-                '()))
+    (parse-command-line args %options (list (list))
+                #:build-options? #f
+                #:argument-handler cons))
 
   (with-error-handling
     (let* ((specs     (reverse (parse-arguments)))
diff --git a/guix/scripts/import.scm b/guix/scripts/import.scm
index 1d2b45d942..98554ef79b 100644
--- a/guix/scripts/import.scm
+++ b/guix/scripts/import.scm
@@ -119,7 +119,8 @@ Run IMPORTER with ARGS.\n"))
                                             (current-output-port))))))
            (match (apply (resolve-importer importer) args)
              ((and expr (or ('package _ ...)
-                            ('let _ ...)))
+                            ('let _ ...)
+                            ('define-public _ ...)))
               (print expr))
              ((? list? expressions)
               (for-each (lambda (expr)
diff --git a/guix/scripts/import/cran.scm b/guix/scripts/import/cran.scm
index 4767bc082d..aa3ef324e0 100644
--- a/guix/scripts/import/cran.scm
+++ b/guix/scripts/import/cran.scm
@@ -50,6 +50,8 @@ Import and convert the CRAN package for PACKAGE-NAME.\n"))
   (display (G_ "
   -r, --recursive        import packages recursively"))
   (display (G_ "
+  -s, --style=STYLE      choose output style, either specification or variable"))
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
diff --git a/guix/scripts/import/go.scm b/guix/scripts/import/go.scm
index afdba4e8f1..04b07f80cc 100644
--- a/guix/scripts/import/go.scm
+++ b/guix/scripts/import/go.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright  2020 Katherine Cox-Buday <cox.katherine.e@gmail.com>
+;;; Copyright © 2020 Katherine Cox-Buday <cox.katherine.e@gmail.com>
+;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,34 +22,38 @@
   #:use-module (guix utils)
   #:use-module (guix scripts)
   #:use-module (guix import go)
+  #:use-module (guix import utils)
   #:use-module (guix scripts import)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-11)
+  #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-37)
   #:use-module (ice-9 match)
   #:use-module (ice-9 format)
+  #:use-module (ice-9 receive)
   #:export (guix-import-go))
 
-
+
 ;;;
 ;;; Command-line options.
 ;;;
 
 (define %default-options
-  '())
+  '((goproxy . "https://proxy.golang.org")))
 
 (define (show-help)
-  (display (G_ "Usage: guix import go PACKAGE-PATH
-Import and convert the Go module for PACKAGE-PATH.\n"))
+  (display (G_ "Usage: guix import go PACKAGE-PATH[@VERSION]
+Import and convert the Go module for PACKAGE-PATH.  Optionally, a version
+can be specified after the arobas (@) character.\n"))
   (display (G_ "
   -h, --help             display this help and exit"))
   (display (G_ "
-  -V, --version          display version information and exit"))
-  (display (G_ "
-  -r, --recursive        generate package expressions for all Go modules\
- that are not yet in Guix"))
+  -r, --recursive        generate package expressions for all Go modules
+that are not yet in Guix"))
   (display (G_ "
   -p, --goproxy=GOPROXY  specify which goproxy server to use"))
+  (display (G_ "
+  --pin-versions         use the exact versions of a module's dependencies"))
   (newline)
   (show-bug-report-information))
 
@@ -58,9 +63,6 @@ Import and convert the Go module for PACKAGE-PATH.\n"))
                  (lambda args
                    (show-help)
                    (exit 0)))
-         (option '(#\V "version") #f #f
-                 (lambda args
-                   (show-version-and-exit "guix import go")))
          (option '(#\r "recursive") #f #f
                  (lambda (opt name arg result)
                    (alist-cons 'recursive #t result)))
@@ -69,9 +71,12 @@ Import and convert the Go module for PACKAGE-PATH.\n"))
                    (alist-cons 'goproxy
                                (string->symbol arg)
                                (alist-delete 'goproxy result))))
+         (option '("pin-versions") #f #f
+                 (lambda (opt name arg result)
+                   (alist-cons 'pin-versions? #t result)))
          %standard-import-options))
 
-
+
 ;;;
 ;;; Entry point.
 ;;;
@@ -91,27 +96,31 @@ Import and convert the Go module for PACKAGE-PATH.\n"))
                              (('argument . value)
                               value)
                              (_ #f))
-                           (reverse opts))))
+                           (reverse opts)))
+         ;; Append the full version to the package symbol name when using
+         ;; pinned versions.
+         (package->definition* (if (assoc-ref opts 'pin-versions?)
+                                   (cut package->definition <> 'full)
+                                   package->definition)))
     (match args
-      ((module-name)
-       (if (assoc-ref opts 'recursive)
-           (map (match-lambda
-                  ((and ('package ('name name) . rest) pkg)
-                   `(define-public ,(string->symbol name)
-                      ,pkg))
-                  (_ #f))
-                (go-module-recursive-import module-name
-                                            #:goproxy-url
-                                            (or (assoc-ref opts 'goproxy)
-                                                "https://proxy.golang.org")))
-           (let ((sexp (go-module->guix-package module-name
-                                                #:goproxy-url
-                                                (or (assoc-ref opts 'goproxy)
-                                                    "https://proxy.golang.org"))))
-             (unless sexp
-               (leave (G_ "failed to download meta-data for module '~a'~%")
-                      module-name))
-             sexp)))
+      ((spec)                         ;e.g., github.com/golang/protobuf@v1.3.1
+       (receive (name version)
+           (package-name->name+version spec)
+         (let ((arguments (list name
+                                #:goproxy (assoc-ref opts 'goproxy)
+                                #:version version
+                                #:pin-versions?
+                                (assoc-ref opts 'pin-versions?))))
+           (if (assoc-ref opts 'recursive)
+               ;; Recursive import.
+               (map package->definition*
+                    (apply go-module-recursive-import arguments))
+               ;; Single import.
+               (let ((sexp (apply go-module->guix-package arguments)))
+                 (unless sexp
+                   (leave (G_ "failed to download meta-data for module '~a'~%")
+                          module-name))
+                 (package->definition* sexp))))))
       (()
        (leave (G_ "too few arguments~%")))
       ((many ...)
diff --git a/guix/scripts/publish.scm b/guix/scripts/publish.scm
index fa85088ed0..39bb224cad 100644
--- a/guix/scripts/publish.scm
+++ b/guix/scripts/publish.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2020 by Amar M. Singh <nly@disroot.org>
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1117,12 +1118,11 @@ methods, return the applicable compression."
   (synopsis "publish build results over HTTP")
 
   (with-error-handling
-    (let* ((opts    (args-fold* args %options
-                                (lambda (opt name arg result)
-                                  (leave (G_ "~A: unrecognized option~%") name))
-                                (lambda (arg result)
-                                  (leave (G_ "~A: extraneous argument~%") arg))
-                                %default-options))
+    (let* ((opts    (parse-command-line args %options (list %default-options)
+                                        #:build-options? #f
+                                        #:argument-handler
+                                        (lambda (arg result)
+                                          (leave (G_ "~A: extraneous argument~%") arg))))
            (advertise?  (assoc-ref opts 'advertise?))
            (user        (assoc-ref opts 'user))
            (port        (assoc-ref opts 'port))
diff --git a/guix/scripts/repl.scm b/guix/scripts/repl.scm
index 9f20803efc..50d18c7760 100644
--- a/guix/scripts/repl.scm
+++ b/guix/scripts/repl.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2020 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2020, 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;; Copyright © 2020 Konrad Hinsen <konrad.hinsen@fastmail.net>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -143,14 +143,13 @@ call THUNK."
   (synopsis "read-eval-print loop (REPL) for interactive programming")
 
   (define opts
-    (args-fold* args %options
-                (lambda (opt name arg result)
-                  (leave (G_ "~A: unrecognized option~%") name))
+    (parse-command-line args %options (list %default-options)
+                #:build-options? #f
+                #:argument-handler
                 (lambda (arg result)
                   (append `((script . ,arg)
                             (ignore-dot-guile? . #t))
-                          result))
-                %default-options))
+                          result))))
 
   (define user-config
     (and=> (getenv "HOME")
diff --git a/guix/scripts/search.scm b/guix/scripts/search.scm
index 0c9e6af07b..27b9da5278 100644
--- a/guix/scripts/search.scm
+++ b/guix/scripts/search.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -66,11 +67,9 @@ This is an alias for 'guix package -s'.\n"))
           result))
 
   (define opts
-    (args-fold* args %options
-                (lambda (opt name arg . rest)
-                  (leave (G_ "~A: unrecognized option~%") name))
-                handle-argument
-                '()))
+    (parse-command-line args %options (list (list))
+                        #:build-options? #f
+                        #:argument-handler handle-argument))
 
   (unless (assoc-ref opts 'query)
     (leave (G_ "missing arguments: no regular expressions to search for~%")))
diff --git a/guix/scripts/show.scm b/guix/scripts/show.scm
index 535d03c1a6..c747eedd21 100644
--- a/guix/scripts/show.scm
+++ b/guix/scripts/show.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2019 Simon Tournier <zimon.toutoune@gmail.com>
+;;; Copyright © 2019, 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -66,11 +66,9 @@ This is an alias for 'guix package --show='.\n"))
           result))
 
   (define opts
-    (args-fold* args %options
-                (lambda (opt name arg . rest)
-                  (leave (G_ "~A: unrecognized option~%") name))
-                handle-argument
-                '()))
+    (parse-command-line args %options (list (list))
+                        #:build-options? #f
+                        #:argument-handler handle-argument))
 
   (unless (assoc-ref opts 'query)
     (leave (G_ "missing arguments: no package to show~%")))
diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm
index 46323c7216..48309f9b3a 100755
--- a/guix/scripts/substitute.scm
+++ b/guix/scripts/substitute.scm
@@ -63,7 +63,7 @@
   #:use-module (web uri)
   #:use-module (guix http-client)
   #:export (%allow-unauthenticated-substitutes?
-            %error-to-file-descriptor-4?
+            %reply-file-descriptor
 
             substitute-urls
             guix-substitute))
@@ -279,29 +279,29 @@ Internal tool to substitute a pre-built binary to a local build.\n"))
   "Evaluate EXP...  Return its CPU usage as a fraction between 0 and 1."
   (call-with-cpu-usage-monitoring (lambda () exp ...)))
 
-(define (display-narinfo-data narinfo)
-  "Write to the current output port the contents of NARINFO in the format
-expected by the daemon."
-  (format #t "~a\n~a\n~a\n"
+(define (display-narinfo-data port narinfo)
+  "Write to PORT the contents of NARINFO in the format expected by the
+daemon."
+  (format port "~a\n~a\n~a\n"
           (narinfo-path narinfo)
           (or (and=> (narinfo-deriver narinfo)
                      (cute string-append (%store-prefix) "/" <>))
               "")
           (length (narinfo-references narinfo)))
-  (for-each (cute format #t "~a/~a~%" (%store-prefix) <>)
+  (for-each (cute format port "~a/~a~%" (%store-prefix) <>)
             (narinfo-references narinfo))
 
   (let-values (((uri compression file-size)
                 (narinfo-best-uri narinfo
                                   #:fast-decompression?
                                   %prefer-fast-decompression?)))
-    (format #t "~a\n~a\n"
+    (format port "~a\n~a\n"
             (or file-size 0)
             (or (narinfo-size narinfo) 0))))
 
-(define* (process-query command
+(define* (process-query port command
                         #:key cache-urls acl)
-  "Reply to COMMAND, a query as written by the daemon to this process's
+  "Reply on PORT to COMMAND, a query as written by the daemon to this process's
 standard input.  Use ACL as the access-control list against which to check
 authorized substitutes."
   (define valid?
@@ -338,17 +338,17 @@ authorized substitutes."
                            #:open-connection open-connection-for-uri/cached
                            #:make-progress-reporter make-progress-reporter)))
        (for-each (lambda (narinfo)
-                   (format #t "~a~%" (narinfo-path narinfo)))
+                   (format port "~a~%" (narinfo-path narinfo)))
                  substitutable)
-       (newline)))
+       (newline port)))
     (("info" paths ..1)
      ;; Reply info about PATHS if it's in CACHE-URLS.
      (let ((substitutable (lookup-narinfos/diverse
                            cache-urls paths valid?
                            #:open-connection open-connection-for-uri/cached
                            #:make-progress-reporter make-progress-reporter)))
-       (for-each display-narinfo-data substitutable)
-       (newline)))
+       (for-each (cut display-narinfo-data port <>) substitutable)
+       (newline port)))
     (wtf
      (error "unknown `--query' command" wtf))))
 
@@ -428,14 +428,14 @@ server certificates."
   "Bind PORT with EXP... to a socket connected to URI."
   (call-with-cached-connection uri (lambda (port) exp ...)))
 
-(define* (process-substitution store-item destination
+(define* (process-substitution port store-item destination
                                #:key cache-urls acl
                                deduplicate? print-build-trace?)
   "Substitute STORE-ITEM (a store file name) from CACHE-URLS, and write it to
 DESTINATION as a nar file.  Verify the substitute against ACL, and verify its
 hash against what appears in the narinfo.  When DEDUPLICATE? is true, and if
-DESTINATION is in the store, deduplicate its files.  Print a status line on
-the current output port."
+DESTINATION is in the store, deduplicate its files.  Print a status line to
+PORT."
   (define narinfo
     (lookup-narinfo cache-urls store-item
                     (if (%allow-unauthenticated-substitutes?)
@@ -555,17 +555,20 @@ the current output port."
       (every (compose zero? cdr waitpid) pids)
 
       ;; Skip a line after what 'progress-reporter/file' printed, and another
-      ;; one to visually separate substitutions.
-      (display "\n\n" (current-error-port))
+      ;; one to visually separate substitutions.  When PRINT-BUILD-TRACE? is
+      ;; true, leave it up to (guix status) to prettify things.
+      (newline (current-error-port))
+      (unless print-build-trace?
+        (newline (current-error-port)))
 
       ;; Check whether we got the data announced in NARINFO.
       (let ((actual (get-hash)))
         (if (bytevector=? actual expected)
             ;; Tell the daemon that we're done.
-            (format (current-output-port) "success ~a ~a~%"
+            (format port "success ~a ~a~%"
                     (narinfo-hash narinfo) (narinfo-size narinfo))
             ;; The actual data has a different hash than that in NARINFO.
-            (format (current-output-port) "hash-mismatch ~a ~a ~a~%"
+            (format port "hash-mismatch ~a ~a ~a~%"
                     (hash-algorithm-name algorithm)
                     (bytevector->nix-base32-string expected)
                     (bytevector->nix-base32-string actual)))))))
@@ -655,7 +658,7 @@ is shorter than MAX elements, then it is directly returned."
   ;; If the following option is passed to the daemon, use the substitutes list
   ;; provided by "guix discover" process.
   (let* ((option (find-daemon-option "discover"))
-         (discover? (and option (string=? option "yes"))))
+         (discover? (and option (string=? option "true"))))
     (if discover?
      (randomize-substitute-urls (read-substitute-urls))
      '())))
@@ -679,28 +682,10 @@ default value."
   (unless (string->uri uri)
     (leave (G_ "~a: invalid URI~%") uri)))
 
-(define %error-to-file-descriptor-4?
-  ;; Whether to direct 'current-error-port' to file descriptor 4 like
-  ;; 'guix-daemon' expects.
-  (make-parameter #t))
-
-;; The daemon's agent code opens file descriptor 4 for us and this is where
-;; stderr should go.
-(define-syntax-rule (with-redirected-error-port exp ...)
-  "Evaluate EXP... with the current error port redirected to file descriptor 4
-if needed, as expected by the daemon's agent."
-  (let ((thunk (lambda () exp ...)))
-    (if (%error-to-file-descriptor-4?)
-        (parameterize ((current-error-port (fdopen 4 "wl")))
-          ;; Redirect diagnostics to file descriptor 4 as well.
-          (guix-warning-port (current-error-port))
-
-          ;; 'with-continuation-barrier' captures the initial value of
-          ;; 'current-error-port' to report backtraces in case of uncaught
-          ;; exceptions.  Without it, backtraces would be printed to FD 2,
-          ;; thereby confusing the daemon.
-          (with-continuation-barrier thunk))
-        (thunk))))
+(define %reply-file-descriptor
+  ;; The file descriptor where replies to the daemon must be sent, or #f to
+  ;; use the current output port instead.
+  (make-parameter 4))
 
 (define-command (guix-substitute . args)
   (category internal)
@@ -716,68 +701,73 @@ if needed, as expected by the daemon's agent."
   (define deduplicate?
     (find-daemon-option "deduplicate"))
 
-  (with-redirected-error-port
-    (mkdir-p %narinfo-cache-directory)
-    (maybe-remove-expired-cache-entries %narinfo-cache-directory
-                                        cached-narinfo-files
-                                        #:entry-expiration
-                                        cached-narinfo-expiration-time
-                                        #:cleanup-period
-                                        %narinfo-expired-cache-entry-removal-delay)
-    (check-acl-initialized)
-
-    ;; Sanity-check SUBSTITUTE-URLS so we can provide a meaningful error
-    ;; message.
-    (for-each validate-uri (substitute-urls))
-
-    ;; Attempt to install the client's locale so that messages are suitably
-    ;; translated.  LC_CTYPE must be a UTF-8 locale; it's the case by default
-    ;; so don't change it.
-    (match (or (find-daemon-option "untrusted-locale")
-               (find-daemon-option "locale"))
-      (#f     #f)
-      (locale (false-if-exception (setlocale LC_MESSAGES locale))))
-
-    (catch 'system-error
-      (lambda ()
-        (set-thread-name "guix substitute"))
-      (const #t))                                 ;GNU/Hurd lacks 'prctl'
-
-    (with-networking
-     (with-error-handling                         ; for signature errors
-       (match args
-         (("--query")
-          (let ((acl (current-acl)))
-            (let loop ((command (read-line)))
-              (or (eof-object? command)
-                  (begin
-                    (process-query command
-                                   #:cache-urls (substitute-urls)
-                                   #:acl acl)
-                    (loop (read-line)))))))
-         (("--substitute")
-          ;; Download STORE-PATH and store it as a Nar in file DESTINATION.
-          ;; Specify the number of columns of the terminal so the progress
-          ;; report displays nicely.
-          (parameterize ((current-terminal-columns (client-terminal-columns)))
-            (let loop ()
-              (match (read-line)
-                ((? eof-object?)
-                 #t)
-                ((= string-tokenize ("substitute" store-path destination))
-                 (process-substitution store-path destination
-                                       #:cache-urls (substitute-urls)
-                                       #:acl (current-acl)
-                                       #:deduplicate? deduplicate?
-                                       #:print-build-trace?
-                                       print-build-trace?)
-                 (loop))))))
-         ((or ("-V") ("--version"))
-          (show-version-and-exit "guix substitute"))
-         (("--help")
-          (show-help))
-         (opts
-          (leave (G_ "~a: unrecognized options~%") opts)))))))
+  (define reply-port
+    ;; Port used to reply to the daemon.
+    (if (%reply-file-descriptor)
+        (fdopen (%reply-file-descriptor) "wl")
+        (current-output-port)))
+
+  (mkdir-p %narinfo-cache-directory)
+  (maybe-remove-expired-cache-entries %narinfo-cache-directory
+                                      cached-narinfo-files
+                                      #:entry-expiration
+                                      cached-narinfo-expiration-time
+                                      #:cleanup-period
+                                      %narinfo-expired-cache-entry-removal-delay)
+  (check-acl-initialized)
+
+  ;; Sanity-check SUBSTITUTE-URLS so we can provide a meaningful error
+  ;; message.
+  (for-each validate-uri (substitute-urls))
+
+  ;; Attempt to install the client's locale so that messages are suitably
+  ;; translated.  LC_CTYPE must be a UTF-8 locale; it's the case by default
+  ;; so don't change it.
+  (match (or (find-daemon-option "untrusted-locale")
+             (find-daemon-option "locale"))
+    (#f     #f)
+    (locale (false-if-exception (setlocale LC_MESSAGES locale))))
+
+  (catch 'system-error
+    (lambda ()
+      (set-thread-name "guix substitute"))
+    (const #t))                                   ;GNU/Hurd lacks 'prctl'
+
+  (with-networking
+   (with-error-handling                           ; for signature errors
+     (match args
+       (("--query")
+        (let ((acl (current-acl)))
+          (let loop ((command (read-line)))
+            (or (eof-object? command)
+                (begin
+                  (process-query reply-port command
+                                 #:cache-urls (substitute-urls)
+                                 #:acl acl)
+                  (loop (read-line)))))))
+       (("--substitute")
+        ;; Download STORE-PATH and store it as a Nar in file DESTINATION.
+        ;; Specify the number of columns of the terminal so the progress
+        ;; report displays nicely.
+        (parameterize ((current-terminal-columns (client-terminal-columns)))
+          (let loop ()
+            (match (read-line)
+              ((? eof-object?)
+               #t)
+              ((= string-tokenize ("substitute" store-path destination))
+               (process-substitution reply-port store-path destination
+                                     #:cache-urls (substitute-urls)
+                                     #:acl (current-acl)
+                                     #:deduplicate? deduplicate?
+                                     #:print-build-trace?
+                                     print-build-trace?)
+               (loop))))))
+       ((or ("-V") ("--version"))
+        (show-version-and-exit "guix substitute"))
+       (("--help")
+        (show-help))
+       (opts
+        (leave (G_ "~a: unrecognized options~%") opts))))))
 
 ;;; Local Variables:
 ;;; eval: (put 'with-timeout 'scheme-indent-function 1)
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index c226f08371..0a051ee4e3 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -1145,7 +1145,7 @@ Some ACTIONS support additional ARGS.\n"))
   "Return the verbosity level based on OPTS, the alist of parsed options."
   (or (assoc-ref opts 'verbosity)
       (if (eq? (assoc-ref opts 'action) 'build)
-          2 1)))
+          3 1)))
 
 
 ;;;
diff --git a/guix/status.scm b/guix/status.scm
index d47bf1700c..362ae2882c 100644
--- a/guix/status.scm
+++ b/guix/status.scm
@@ -403,10 +403,12 @@ the current build phase."
                             #:optional (port (current-error-port))
                             #:key
                             (colorize? (color-output? port))
+                            (print-urls? #t)
                             (print-log? #t))
   "Print information about EVENT and STATUS to PORT.  When COLORIZE? is true,
 produce colorful output.  When PRINT-LOG? is true, display the build log in
-addition to build events."
+addition to build events.  When PRINT-URLS? is true, display the URL of
+substitutes being downloaded."
   (define info
     (if colorize?
         (cute colorize-string <> (color BOLD))
@@ -526,9 +528,10 @@ addition to build events."
        (format port (info (G_ "substituting ~a...")) item)
        (newline port)))
     (('download-started item uri _ ...)
-     (erase-current-line*)
-     (format port (info (G_ "downloading from ~a ...")) uri)
-     (newline port))
+     (when print-urls?
+       (erase-current-line*)
+       (format port (info (G_ "downloading from ~a ...")) uri)
+       (newline port)))
     (('download-progress item uri
                          (= string->number size)
                          (= string->number transferred))
@@ -602,6 +605,17 @@ addition to build events."
                                   (colorize? (color-output? port)))
   (print-build-event event old-status status port
                      #:colorize? colorize?
+                     #:print-urls? #f
+                     #:print-log? #f))
+
+(define* (print-build-event/quiet-with-urls event old-status status
+                                            #:optional
+                                            (port (current-error-port))
+                                            #:key
+                                            (colorize? (color-output? port)))
+  (print-build-event event old-status status port
+                     #:colorize? colorize?
+                     #:print-urls? #t             ;show download URLs
                      #:print-log? #f))
 
 (define* (build-status-updater #:optional (on-change (const #t)))
@@ -787,6 +801,7 @@ evaluate EXP... in that context."
   "Return the logging procedure that corresponds to LEVEL."
   (cond ((<= level 0) (const #t))
         ((= level 1)  print-build-event/quiet)
+        ((= level 2)  print-build-event/quiet-with-urls)
         (else         print-build-event)))
 
 (define (call-with-status-verbosity level thunk)
diff --git a/guix/upstream.scm b/guix/upstream.scm
index accd8967d8..632e9ebc4f 100644
--- a/guix/upstream.scm
+++ b/guix/upstream.scm
@@ -264,12 +264,15 @@ them matches."
                                  #:optional
                                  (updaters (force %updaters)))
   "Return an upstream source to update PACKAGE, a <package> object, or #f if
-none of UPDATERS matches PACKAGE.  It is the caller's responsibility to ensure
-that the returned source is newer than the current one."
-  (match (lookup-updater package updaters)
-    ((? upstream-updater? updater)
-     ((upstream-updater-latest updater) package))
-    (_ #f)))
+none of UPDATERS matches PACKAGE.  When several updaters match PACKAGE, try
+them until one of them returns an upstream source.  It is the caller's
+responsibility to ensure that the returned source is newer than the current
+one."
+  (any (match-lambda
+         (($ <upstream-updater> name description pred latest)
+          (and (pred package)
+               (latest package))))
+       updaters))
 
 (define* (package-latest-release* package
                                   #:optional
diff --git a/guix/utils.scm b/guix/utils.scm
index 7db9f52ff6..19990ceb8a 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -712,6 +712,7 @@ VERSIONS.  For example:
 (define (tarball-sans-extension tarball)
   "Return TARBALL without its .tar.* or .zip extension."
   (let ((end (or (string-contains tarball ".tar")
+                 (string-contains tarball ".tgz")
                  (string-contains tarball ".zip"))))
     (substring tarball 0 end)))
 
diff --git a/nix/libstore/build.cc b/nix/libstore/build.cc
index 4f486f0822..5697ae5a43 100644
--- a/nix/libstore/build.cc
+++ b/nix/libstore/build.cc
@@ -3158,13 +3158,13 @@ void SubstitutionGoal::finished()
 void SubstitutionGoal::handleChildOutput(int fd, const string & data)
 {
     if (verbosity >= settings.buildVerbosity
-	&& fd == substituter->builderOut.readSide) {
+	&& fd == substituter->fromAgent.readSide) {
 	writeToStderr(data);
 	/* Don't write substitution output to a log file for now.  We
 	   probably should, though. */
     }
 
-    if (fd == substituter->fromAgent.readSide) {
+    if (fd == substituter->builderOut.readSide) {
 	/* DATA may consist of several lines.  Process them one by one.  */
 	string input = data;
 	while (!input.empty()) {
diff --git a/nix/libstore/local-store.cc b/nix/libstore/local-store.cc
index c304e2ddd1..675d1ba66f 100644
--- a/nix/libstore/local-store.cc
+++ b/nix/libstore/local-store.cc
@@ -780,8 +780,8 @@ Path LocalStore::queryPathFromHashPart(const string & hashPart)
     });
 }
 
-/* Read a line from the substituter's stdout, while also processing
-   its stderr. */
+/* Read a line from the substituter's reply file descriptor, while also
+   processing its stderr. */
 string LocalStore::getLineFromSubstituter(Agent & run)
 {
     string res, err;
@@ -802,9 +802,9 @@ string LocalStore::getLineFromSubstituter(Agent & run)
         }
 
         /* Completely drain stderr before dealing with stdout. */
-        if (FD_ISSET(run.builderOut.readSide, &fds)) {
+        if (FD_ISSET(run.fromAgent.readSide, &fds)) {
             char buf[4096];
-            ssize_t n = read(run.builderOut.readSide, (unsigned char *) buf, sizeof(buf));
+            ssize_t n = read(run.fromAgent.readSide, (unsigned char *) buf, sizeof(buf));
             if (n == -1) {
                 if (errno == EINTR) continue;
                 throw SysError("reading from substituter's stderr");
@@ -822,9 +822,9 @@ string LocalStore::getLineFromSubstituter(Agent & run)
         }
 
         /* Read from stdout until we get a newline or the buffer is empty. */
-        else if (FD_ISSET(run.fromAgent.readSide, &fds)) {
+        else if (FD_ISSET(run.builderOut.readSide, &fds)) {
 	    unsigned char c;
-	    readFull(run.fromAgent.readSide, (unsigned char *) &c, 1);
+	    readFull(run.builderOut.readSide, (unsigned char *) &c, 1);
 	    if (c == '\n') {
 		if (!err.empty()) printMsg(lvlError, "substitute: " + err);
 		return res;
diff --git a/nix/local.mk b/nix/local.mk
index d2ce349d9c..7c438ea78c 100644
--- a/nix/local.mk
+++ b/nix/local.mk
@@ -181,7 +181,7 @@ etc/init.d/guix-daemon: etc/init.d/guix-daemon.in	\
 	mv "$@.tmp" "$@"
 
 # The service script for openrc.
-openrcservicedir = $(sysconfdir)/init.d
+openrcservicedir = $(sysconfdir)/openrc
 nodist_openrcservice_DATA = etc/openrc/guix-daemon
 
 etc/openrc/guix-daemon: etc/openrc/guix-daemon.in	\
diff --git a/nix/nix-daemon/nix-daemon.cc b/nix/nix-daemon/nix-daemon.cc
index 3dd156ba77..497de11a04 100644
--- a/nix/nix-daemon/nix-daemon.cc
+++ b/nix/nix-daemon/nix-daemon.cc
@@ -1046,12 +1046,3 @@ void run(const std::vector<int>& sockets)
 {
     daemonLoop(sockets);
 }
-
-
-void printHelp()
-{
-    showManPage("nix-daemon");
-}
-
-
-string programId = "nix-daemon";
diff --git a/nix/nix-daemon/shared.hh b/nix/nix-daemon/shared.hh
index b45e9f0cfd..98ec97410b 100644
--- a/nix/nix-daemon/shared.hh
+++ b/nix/nix-daemon/shared.hh
@@ -20,18 +20,9 @@
 
 #pragma once
 
-#include <string>
-
 #include <stdlib.h>
 #include <signal.h>
 
-static inline void
-showManPage (const char *name)
-{
-  /* This idea is evil.  Abort.  */
-  abort ();
-}
-
 extern volatile ::sig_atomic_t blockInt;
 
 extern char **argvSaved;
diff --git a/po/guix/LINGUAS b/po/guix/LINGUAS
index 935d03a4b9..72388a07ec 100644
--- a/po/guix/LINGUAS
+++ b/po/guix/LINGUAS
@@ -11,6 +11,7 @@ fr
 hu
 pl
 pt_BR
+sk
 sr
 sv
 ta
diff --git a/po/guix/sk.po b/po/guix/sk.po
new file mode 100644
index 0000000000..06e5d30c21
--- /dev/null
+++ b/po/guix/sk.po
@@ -0,0 +1,7845 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR the authors of Guix (msgids)
+# This file is distributed under the same license as the GNU guix package.
+# Marek Felšöci <marek@felsoci.sk>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU guix\n"
+"Report-Msgid-Bugs-To: bug-guix@gnu.org\n"
+"POT-Creation-Date: 2021-04-13 01:18+0200\n"
+"PO-Revision-Date: 2021-04-12 23:02+0000\n"
+"Last-Translator: Marek Felšöci <marek@felsoci.sk>\n"
+"Language-Team: Slovak <https://translate.fedoraproject.org/projects/guix/"
+"guix/sk/>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Weblate 4.5.3\n"
+
+#: gnu.scm:81
+#, scheme-format
+msgid "module ~a not found"
+msgstr "modul ~a sa nenašiel"
+
+#: gnu.scm:99
+msgid ""
+"You may use @command{guix package --show=foo | grep location} to search\n"
+"for the location of package @code{foo}.\n"
+"If you get the line @code{location: gnu/packages/bar.scm:174:2},\n"
+"add @code{bar} to the @code{use-package-modules} form."
+msgstr ""
+"Pomocou príkazu @command{guix package --show=foo | grep location} môžete\n"
+"vyhľadať umiestnenie balíka @code{foo}.\n"
+"Výsledok @code{location: gnu/packages/bar.scm:174:2} znamená, že\n"
+"treba pridať @code{bar} do @code{use-package-modules}."
+
+#: gnu.scm:107
+#, scheme-format
+msgid "Try adding @code{(use-package-modules ~a)}."
+msgstr "Skúste pridať @code{(use-package-modules ~a)}."
+
+#: gnu.scm:122
+#, scheme-format
+msgid ""
+"You may use @command{guix system search ~a} to search for a service\n"
+"matching @code{~a}.\n"
+"If you get the line @code{location: gnu/services/foo.scm:188:2},\n"
+"add @code{foo} to the @code{use-service-modules} form."
+msgstr ""
+"Pomocou príkazu @command{guix system search ~a} môžete\n"
+"vyhľadať službu @code{~a}.\n"
+"Výsledok @code{location: gnu/services/foo.scm:188:2} znamená, že\n"
+"treba pridať @code{foo} do @code{use-service-modules}."
+
+#: gnu.scm:131
+#, scheme-format
+msgid "Try adding @code{(use-service-modules ~a)}."
+msgstr "Skúste pridať @code{(use-service-modules ~a)}."
+
+#: gnu/packages.scm:96
+#, scheme-format
+msgid "~a: patch not found"
+msgstr "~a: záplata sa nenašla"
+
+#: gnu/packages.scm:480 gnu/packages.scm:521
+#, scheme-format
+msgid "ambiguous package specification `~a'~%"
+msgstr "nejednoznačné určenie balíka „~a“~%"
+
+#: gnu/packages.scm:481 gnu/packages.scm:522
+#, scheme-format
+msgid "choosing ~a@~a from ~a~%"
+msgstr "vyberá sa ~a@~a z ~a~%"
+
+#: gnu/packages.scm:486 guix/scripts/package.scm:214
+#, scheme-format
+msgid "package '~a' has been superseded by '~a'~%"
+msgstr "balík „~a“ bol nahradený balíkom „~a“~%"
+
+#: gnu/packages.scm:493 gnu/packages.scm:510
+#, scheme-format
+msgid "~A: package not found for version ~a~%"
+msgstr "~A: balík sa nenašiel vo verzii ~a~%"
+
+#: gnu/packages.scm:494 gnu/packages.scm:511
+#, scheme-format
+msgid "~A: unknown package~%"
+msgstr "~A: neznámy balík~%"
+
+#: gnu/packages.scm:550
+#, scheme-format
+msgid "package `~a' lacks output `~a'~%"
+msgstr "balík „~a“ postráda výstup „~a“~%"
+
+#: gnu/services.scm:254
+#, scheme-format
+msgid "~a: no value specified for service of type '~a'"
+msgstr "~a: nebola určená žiadna hodnota pre službu typu „~a“"
+
+#: gnu/services.scm:358
+msgid ""
+"Build the operating system top-level directory, which in\n"
+"turn refers to everything the operating system needs: its kernel, initrd,\n"
+"system profile, boot script, and so on."
+msgstr ""
+"Zostaviť koreňový priečinok operačného systému, ktorý\n"
+"odkazuje na všetko čo operačný systém potrebuje: jadro, initrd,\n"
+"systémový profil, zavádzací skript a podobne."
+
+#: gnu/services.scm:388
+msgid ""
+"Produce the operating system's boot script, which is spawned\n"
+"by the initrd once the root file system is mounted."
+msgstr ""
+"Vytvoriť zavádzací skript operačného systému, ktorý initrd\n"
+"spustí po pripojení koreňového súborového systému."
+
+#: gnu/services.scm:504
+msgid ""
+"Store provenance information about the system in the system\n"
+"itself: the channels used when building the system, and its configuration\n"
+"file, when available."
+msgstr ""
+"Uložiť údaje o pôvode systému v systéme\n"
+"samotnom: kanály použité pri zostavení systému a súbor nastavení,\n"
+"ak je dostupný."
+
+#: gnu/services.scm:587
+msgid ""
+"Delete files from @file{/tmp}, @file{/var/run}, and other\n"
+"temporary locations at boot time."
+msgstr ""
+"Odstrániť súbory z @file{/tmp}, @file{/var/run} a iných\n"
+"dočasných umiestnení pri zavedení systému."
+
+#: gnu/services.scm:649
+msgid ""
+"Run @dfn{activation} code at boot time and upon\n"
+"@command{guix system reconfigure} completion."
+msgstr ""
+"Vykonať @dfn{spúšťací} kód pri zavádzaní a po\n"
+"dokončení @command{guix system reconfigure}."
+
+#: gnu/services.scm:737
+msgid ""
+"Add special files to the root file system---e.g.,\n"
+"@file{/usr/bin/env}."
+msgstr ""
+"Pridať osobitné súbory do koreňového súborového\n"
+"systému (napr. @file{/usr/bin/env})."
+
+#: gnu/services.scm:760
+#, scheme-format
+msgid "duplicate '~a' entry for /etc"
+msgstr "/etc už obsahuje záznam „~a“"
+
+#: gnu/services.scm:788
+msgid "Populate the @file{/etc} directory."
+msgstr "Naplniť priečinok @file{/etc}."
+
+#: gnu/services.scm:805
+msgid ""
+"Populate @file{/run/setuid-programs} with the specified\n"
+"executables, making them setuid-root."
+msgstr ""
+"Naplniť @file{/run/setuid-programs} určenými spustiteľnými\n"
+"súbormi a prideliť im setuid-root príznak."
+
+#: gnu/services.scm:831
+msgid ""
+"This is the @dfn{system profile}, available as\n"
+"@file{/run/current-system/profile}.  It contains packages that the sysadmin\n"
+"wants to be globally available to all the system users."
+msgstr ""
+"Toto je @dfn{systémový profil} dostupný prostredníctvom\n"
+"@file{/run/current-system/profile}. Obsahuje balíky, ktoré chce správca\n"
+"sprístupniť pre všetkých používateľov systému."
+
+#: gnu/services.scm:851
+msgid ""
+"Make ``firmware'' files loadable by the operating system\n"
+"kernel.  Firmware may then be uploaded to some of the machine's devices, "
+"such\n"
+"as Wifi cards."
+msgstr ""
+"Označiť súbory „firmware“ ako spustiteľné jadrom operačného systému.\n"
+"Mikroprogramové vybavenie môže byť následne nahraté do zariadení, ako sú\n"
+"napríklad bezdrôtové sieťové karty."
+
+#: gnu/services.scm:882
+msgid ""
+"Register garbage-collector roots---i.e., store items that\n"
+"will not be reclaimed by the garbage collector."
+msgstr ""
+"Zaznamenať korene zberača odpadkov, teda položky\n"
+"úložiska, ktoré sa majú pri čistení zachovať."
+
+#: gnu/services.scm:908
+#, scheme-format
+msgid "no target of type '~a' for service '~a'"
+msgstr "nenašiel sa cieľ typu „~a“ pre službu „~a“"
+
+#: gnu/services.scm:934 gnu/services.scm:1053
+#, scheme-format
+msgid "more than one target service of type '~a'"
+msgstr "viac ako jedna cieľová služba typu „~a“"
+
+#: gnu/services.scm:1043
+#, scheme-format
+msgid "service of type '~a' not found"
+msgstr "nenašla sa služba typu „~a“"
+
+#: gnu/system.scm:351
+#, scheme-format
+msgid "unrecognized uuid ~a at '~a'~%"
+msgstr "nerozpoznané uuid ~a na „~a“~%"
+
+#: gnu/system.scm:433
+#, scheme-format
+msgid "unrecognized crypto-devices ~S at '~a'~%"
+msgstr "nerozpoznané šifrované zariadenia ~S na „~a“~%"
+
+#: gnu/system.scm:450
+#, scheme-format
+msgid "unrecognized boot parameters at '~a'~%"
+msgstr "nerozpoznané predvoľby zavádzania na „~a“~%"
+
+#: gnu/system.scm:563
+#, scheme-format
+msgid "mapped-device '~a' may not be mounted by the bootloader.~%"
+msgstr "zavádzač možno nepripojil mapované zariadenie „~a“.~%"
+
+#: gnu/system.scm:1023
+#, scheme-format
+msgid "using a string for file '~a' is deprecated; use 'plain-file' instead~%"
+msgstr ""
+"použitie reťazca znakov pre súbor „~a“ sa už neodporúča; namiesto toho "
+"použite „plain-file“~%"
+
+#: gnu/system.scm:1039
+#, scheme-format
+msgid ""
+"using a monadic value for '~a' is deprecated; use 'plain-file' instead~%"
+msgstr ""
+"použitie monády pre „~a“ sa už neodporúča; namiesto toho použite „plain-"
+"file“~%"
+
+#: gnu/system.scm:1167
+msgid "missing root file system"
+msgstr "chýba koreňový súborový systém"
+
+#: gnu/system.scm:1243
+#, scheme-format
+msgid "~a: invalid locale name"
+msgstr "~a: neplatný názov miestneho jazykového nastavenia"
+
+#: gnu/services/shepherd.scm:143
+msgid ""
+"Run the GNU Shepherd as PID 1---i.e., the operating system's first\n"
+"process.  The Shepherd takes care of managing services such as daemons by\n"
+"ensuring they are started and stopped in the right order."
+msgstr ""
+"Spustiť GNU Shepherd ako PID 1, teda ako prvý proces operačného\n"
+"systému. Shepherd spravuje služby (napr. démonov) tak, že zaisťuje aby sa\n"
+"spúšťali a ukončovali v správnom poradí."
+
+#: gnu/services/shepherd.scm:235
+#, scheme-format
+msgid "service '~a' provided more than once"
+msgstr "služba „~a“ bola poskytnutá viac ako raz"
+
+#: gnu/services/shepherd.scm:250
+#, scheme-format
+msgid "service '~a' requires '~a', which is not provided by any service"
+msgstr "služba „~a“ vyžaduje „~a“, čo však neposkytuje žiadna služba"
+
+#: gnu/services/shepherd.scm:587
+msgid ""
+"The @code{user-processes} service is responsible for\n"
+"terminating all the processes so that the root file system can be re-"
+"mounted\n"
+"read-only, just before rebooting/halting.  Processes still running after a "
+"few\n"
+"seconds after @code{SIGTERM} has been sent are terminated with\n"
+"@code{SIGKILL}."
+msgstr ""
+"Služba @code{user-processes} je zodpovedná za ukončenie všetkých\n"
+"procesov, aby mohol byť koreňový súborový systém tesne pred reštartom\n"
+"alebo vypnutím opätovne pripojený len na čítanie. Procesy, ktoré zostanú\n"
+"bežať aj niekoľko sekúnd po odoslaní signálu @code{SIGTERM} sa\n"
+"ukončia signálom @code{SIGKILL}."
+
+#: gnu/system/mapped-devices.scm:134
+msgid "Map a device node using Linux's device mapper."
+msgstr "Mapovať zariadenie pomocou mapovača zariadení Linuxu."
+
+#: gnu/system/mapped-devices.scm:163
+#, scheme-format
+msgid "you may need these modules in the initrd for ~a:~{ ~a~}"
+msgstr "mohli by ste tieto moduly potrebovať v initrd kvôli ~a:~{ ~a~}"
+
+#: gnu/system/mapped-devices.scm:168
+#, scheme-format
+msgid ""
+"Try adding them to the\n"
+"@code{initrd-modules} field of your @code{operating-system} declaration, "
+"along\n"
+"these lines:\n"
+"\n"
+"@example\n"
+" (operating-system\n"
+"   ;; @dots{}\n"
+"   (initrd-modules (append (list~{ ~s~})\n"
+"                           %base-initrd-modules)))\n"
+"@end example\n"
+"\n"
+"If you think this diagnostic is inaccurate, use the @option{--skip-checks}\n"
+"option of @command{guix system}.\n"
+msgstr ""
+"Skúste ich pridať do poľa @code{initrd-modules} pod\n"
+"@code{operating-system} asi takto:\n"
+"\n"
+"@example\n"
+" (operating-system\n"
+"   ;; @dots{}\n"
+"   (initrd-modules (append (list~{ ~s~})\n"
+"                           %base-initrd-modules)))\n"
+"@end example\n"
+"\n"
+"Ak považujete toto hlásenie za neopodstatnené, použite prepínač\n"
+"@option{--skip-checks} príkazu @command{guix system}.\n"
+
+#: gnu/system/mapped-devices.scm:251
+#, scheme-format
+msgid "no LUKS partition with UUID '~a'"
+msgstr "žiadny oddiel LUKS s UUID „~a“"
+
+#: gnu/system/shadow.scm:254
+#, scheme-format
+msgid "the following accounts appear more than once:~{ ~a~}~%"
+msgstr "nasledovné účty sa objavujú viac než raz:~{ ~a~}~%"
+
+#: gnu/system/shadow.scm:262
+#, scheme-format
+msgid "the following groups appear more than once:~{ ~a~}~%"
+msgstr "nasledovné skupiny sa objavujú viac než raz:~{ ~a~}~%"
+
+#: gnu/system/shadow.scm:273
+#, scheme-format
+msgid "supplementary group '~a' of user '~a' is undeclared"
+msgstr "doplnková skupina „~a“ používateľa „~a“ sa nenašla"
+
+#: gnu/system/shadow.scm:283
+#, scheme-format
+msgid "primary group '~a' of user '~a' is undeclared"
+msgstr "hlavná skupina „~a“ používateľa „~a“ sa nenašla"
+
+#: gnu/system/shadow.scm:425
+msgid ""
+"Ensure the specified user accounts and groups exist, as well\n"
+"as each account home directory."
+msgstr ""
+"Uistiť sa, že vybrané skupiny a používateľské účty ako aj\n"
+"príslušné domovské priečinky boli vytvorené."
+
+#: guix/import/opam.scm:166
+#, scheme-format
+msgid "Package not found in opam repository: ~a~%"
+msgstr "Balík sa nenašiel v opam repozitári: ~a~%"
+
+#: guix/import/opam.scm:388
+msgid "Updater for OPAM packages"
+msgstr "Nástroj na aktualizáciu balíkov OPAM"
+
+#: gnu/installer.scm:214
+msgid "Locale"
+msgstr "Miestne jazykové nastavenie"
+
+#: gnu/installer.scm:230 gnu/installer/newt/timezone.scm:58
+msgid "Timezone"
+msgstr "Časové pásmo"
+
+#: gnu/installer.scm:247
+msgid "Keyboard mapping selection"
+msgstr "Výber rozloženia klávesnice"
+
+#: gnu/installer.scm:256 gnu/installer/newt/hostname.scm:26
+msgid "Hostname"
+msgstr "Názov počítača"
+
+#: gnu/installer.scm:265
+msgid "Network selection"
+msgstr "Výber sieťového pripojenia"
+
+#: gnu/installer.scm:272
+msgid "Substitute server discovery"
+msgstr "Zisťovanie servera náhrad"
+
+#: gnu/installer.scm:279 gnu/installer/newt/user.scm:68
+#: gnu/installer/newt/user.scm:205
+msgid "User creation"
+msgstr "Vytváranie používateľov"
+
+#: gnu/installer.scm:287
+msgid "Services"
+msgstr "Služby"
+
+#: gnu/installer.scm:298
+msgid "Partitioning"
+msgstr "Rozdelenie disku"
+
+#: gnu/installer.scm:305 gnu/installer/newt/final.scm:53
+msgid "Configuration file"
+msgstr "Súbor nastavení"
+
+#: gnu/installer/connman.scm:196
+msgid "Could not determine the state of connman."
+msgstr "Nepodarilo sa zistiť stav connmana."
+
+#: gnu/installer/connman.scm:322
+msgid "Unable to find expected regexp."
+msgstr "Nepodarilo sa nájsť očakávaný regulárny výraz."
+
+#: gnu/installer/newt.scm:52
+msgid "Press <F1> for installation parameters."
+msgstr "Stlačením <F1> zobrazíte predvoľby inštalácie."
+
+#: gnu/installer/newt.scm:65
+#, scheme-format
+msgid ""
+"The installer has encountered an unexpected problem. The backtrace is "
+"displayed below. Please report it by email to <~a>."
+msgstr ""
+"Sprievodca inštaláciou narazil na neočakávanú chybu. Výpis zásobníka volaní "
+"je zobrazený nižšie. Prosím, nahláste túto chybu na adresu <~a>."
+
+#: gnu/installer/newt.scm:68
+msgid "Unexpected problem"
+msgstr "Neočakávaná chyba"
+
+#: gnu/installer/newt/ethernet.scm:66
+msgid "No ethernet service available, please try again."
+msgstr "Nie je dostupná žiadna drôtová sieť, skúste to znova."
+
+#: gnu/installer/newt/ethernet.scm:67
+msgid "No service"
+msgstr "Žiadna služba"
+
+#: gnu/installer/newt/ethernet.scm:76
+msgid "Please select an ethernet network."
+msgstr "Vyberte drôtové sieťové pripojenie."
+
+#: gnu/installer/newt/ethernet.scm:77
+msgid "Ethernet connection"
+msgstr "Drôtové sieťové pripojenie"
+
+#: gnu/installer/newt/ethernet.scm:81 gnu/installer/newt/keymap.scm:56
+#: gnu/installer/newt/locale.scm:43 gnu/installer/newt/network.scm:63
+#: gnu/installer/newt/network.scm:84 gnu/installer/newt/page.scm:309
+#: gnu/installer/newt/page.scm:673 gnu/installer/newt/page.scm:758
+#: gnu/installer/newt/partition.scm:56 gnu/installer/newt/partition.scm:91
+#: gnu/installer/newt/partition.scm:123 gnu/installer/newt/partition.scm:134
+#: gnu/installer/newt/partition.scm:631 gnu/installer/newt/partition.scm:652
+#: gnu/installer/newt/partition.scm:698 gnu/installer/newt/partition.scm:749
+#: gnu/installer/newt/partition.scm:760 gnu/installer/newt/services.scm:88
+#: gnu/installer/newt/timezone.scm:63 gnu/installer/newt/user.scm:204
+#: gnu/installer/newt/wifi.scm:206
+msgid "Exit"
+msgstr "Ukončiť"
+
+#: gnu/installer/newt/final.scm:46
+#, scheme-format
+msgid ""
+"We're now ready to proceed with the installation! A system configuration "
+"file has been generated, it is displayed below.  This file will be available "
+"as '~a' on the installed system.  The new system will be created from this "
+"file once you've pressed OK.  This will take a few minutes."
+msgstr ""
+"Sme pripravení na inštaláciu! Bol vytvorený súbor nastavení systému "
+"zobrazený nižšie. Tento súbor bude po dokončení inštalácie dostupný v „~a“. "
+"Zostavovanie nového systému z tohto súboru nastavení sa spustí po stlačení "
+"tlačidla Dobre. Bude to trvať niekoľko minút."
+
+#: gnu/installer/newt/final.scm:70
+msgid "Installation complete"
+msgstr "Inštalácia dokončená"
+
+#: gnu/installer/newt/final.scm:71 gnu/installer/newt/parameters.scm:45
+#: gnu/installer/newt/welcome.scm:145
+msgid "Reboot"
+msgstr "Reštartovať"
+
+#: gnu/installer/newt/final.scm:72
+msgid ""
+"Congratulations!  Installation is now complete.  You may remove the device "
+"containing the installation image and press the button to reboot."
+msgstr ""
+"Blahoželáme! Inštalácia je dokončená. Môžete odobrať zariadenie s "
+"inštalačným obrazom a reštartovať počítač."
+
+#: gnu/installer/newt/final.scm:86
+msgid "Installation failed"
+msgstr "Inštalácia zlyhala"
+
+#: gnu/installer/newt/final.scm:87
+msgid "Resume"
+msgstr "Pokračovať"
+
+#: gnu/installer/newt/final.scm:88
+msgid "Restart the installer"
+msgstr "Reštartovať sprievodcu inštaláciou"
+
+#: gnu/installer/newt/final.scm:89
+msgid ""
+"The final system installation step failed.  You can resume from a specific "
+"step, or restart the installer."
+msgstr ""
+"Záverečný inštalačný krok zlyhal. Môžete pokračovať v inštalácii od "
+"vybraného kroku alebo spustiť sprievodcu inštaláciou odznova."
+
+#: gnu/installer/newt/parameters.scm:31
+msgid ""
+"Please enter the HTTP proxy URL. If you enter an empty string, proxy usage "
+"will be disabled."
+msgstr ""
+"Zadajte adresu servera proxy. Ak ponecháte pole prázdne, žiadny server proxy "
+"sa nepoužije."
+
+#: gnu/installer/newt/parameters.scm:33
+msgid "HTTP proxy configuration"
+msgstr "Nastavenie servera proxy"
+
+#: gnu/installer/newt/parameters.scm:43
+msgid "Change keyboard layout"
+msgstr "Zmeniť rozloženie klávesnice"
+
+#: gnu/installer/newt/parameters.scm:44
+msgid "Configure HTTP proxy"
+msgstr "Nastaviť server proxy"
+
+#: gnu/installer/newt/parameters.scm:48
+msgid ""
+"Please choose one of the following parameters or press ‘Back’ to go back to "
+"the installation process."
+msgstr ""
+"Zvoľte jednu z nasledujúcich možností alebo stlačte „Naspäť“ pre návrat k "
+"inštalácii."
+
+#: gnu/installer/newt/parameters.scm:50
+msgid "Installation parameters"
+msgstr "Možnosti inštalácie"
+
+#: gnu/installer/newt/parameters.scm:55 gnu/installer/newt/keymap.scm:74
+#: gnu/installer/newt/locale.scm:63 gnu/installer/newt/locale.scm:78
+#: gnu/installer/newt/locale.scm:94 gnu/installer/newt/partition.scm:588
+#: gnu/installer/newt/timezone.scm:64
+msgid "Back"
+msgstr "Naspäť"
+
+#: gnu/installer/newt/hostname.scm:25
+msgid "Please enter the system hostname."
+msgstr "Zadajte názov počítača."
+
+#: gnu/installer/newt/keymap.scm:38
+msgid "Layout"
+msgstr "Rozloženie"
+
+#: gnu/installer/newt/keymap.scm:43
+msgid ""
+"Please choose your keyboard layout. It will only be used during the "
+"installation process. Non-Latin layouts can be toggled with Alt+Shift."
+msgstr ""
+"Vyberte rozloženie klávesnice, ktoré sa má použiť počas inštalácie. "
+"Nelatinské rozloženia sú dostupné prostredníctvom klávesovej skratky Alt"
+"+Shift."
+
+#: gnu/installer/newt/keymap.scm:46
+msgid ""
+"Please choose your keyboard layout. It will be used during the install "
+"process, and for the installed system. Non-Latin layouts can be toggled with "
+"Alt+Shift. You can switch to a different layout at any time from the "
+"parameters menu."
+msgstr ""
+"Vyberte rozloženie klávesnice, ktoré sa má použiť počas inštalácie ako aj "
+"pre novo-nainštalovaný systém. Nelatinské rozloženia sú dostupné "
+"prostredníctvom klávesovej skratky Alt+Shift. Rozloženie klávesnice môžete "
+"kedykoľvek prepnúť v ponuke možností inštalácie."
+
+#: gnu/installer/newt/keymap.scm:55 gnu/installer/newt/network.scm:62
+#: gnu/installer/newt/page.scm:308
+msgid "Continue"
+msgstr "Pokračovať"
+
+#: gnu/installer/newt/keymap.scm:67
+msgid "Variant"
+msgstr "Klávesnica"
+
+#: gnu/installer/newt/keymap.scm:70
+msgid "Please choose a variant for your keyboard layout."
+msgstr "Vyberte klávesnicu, ktorú chcete použiť."
+
+#: gnu/installer/newt/locale.scm:36
+msgid "Locale language"
+msgstr "Nastavenie jazyka"
+
+#: gnu/installer/newt/locale.scm:37
+msgid ""
+"Choose the language to use for the installation process and for the "
+"installed system."
+msgstr ""
+"Vyberte jazyk používateľského rozhrania, ktorý sa má použiť počas inštalácie "
+"a na novo-nainštalovanom systéme."
+
+#: gnu/installer/newt/locale.scm:57
+msgid "Locale location"
+msgstr "Krajina alebo územie"
+
+#: gnu/installer/newt/locale.scm:60
+msgid "Choose a territory for this language."
+msgstr "Vyberte vaše súčasné umiestnenie."
+
+#: gnu/installer/newt/locale.scm:71
+msgid "Locale codeset"
+msgstr "Kódovanie znakov"
+
+#: gnu/installer/newt/locale.scm:74
+msgid "Choose the locale encoding."
+msgstr "Vyberte kódovanie znakov."
+
+#: gnu/installer/newt/locale.scm:86
+msgid "Locale modifier"
+msgstr "Symbol meny"
+
+#: gnu/installer/newt/locale.scm:89
+msgid ""
+"Choose your locale's modifier. The most frequent modifier is euro. It "
+"indicates that you want to use Euro as the currency symbol."
+msgstr "Vyberte symbol meny. Najčastejšie používaným symbolom je Euro."
+
+#: gnu/installer/newt/locale.scm:190
+msgid "No location"
+msgstr "Žiadne umiestnenie"
+
+#: gnu/installer/newt/locale.scm:217
+msgid "No modifier"
+msgstr "Žiadny symbol meny"
+
+#: gnu/installer/newt/menu.scm:35
+msgid ""
+"Choose where you want to resume the install.  You can also abort the "
+"installation by pressing the Abort button."
+msgstr ""
+"Vyberte odkiaľ chcete pokračovať v inštalácii. Inštaláciu môžete prerušiť "
+"stlačením tlačidla Prerušiť."
+
+#: gnu/installer/newt/menu.scm:37
+msgid "Installation menu"
+msgstr "Ponuka inštalácie"
+
+#: gnu/installer/newt/menu.scm:41
+msgid "Abort"
+msgstr "Prerušiť"
+
+#: gnu/installer/newt/network.scm:61 gnu/installer/newt/network.scm:80
+msgid "Internet access"
+msgstr "Prístup na internet"
+
+#: gnu/installer/newt/network.scm:64
+msgid ""
+"The install process requires Internet access but no network devices were "
+"found. Do you want to continue anyway?"
+msgstr ""
+"Sprievodca inštaláciou vyžaduje prístup na internet, no žiadne sieťové "
+"zariadenie sa nenašlo. Chcete napriek tomu pokračovať v inštalácii?"
+
+#: gnu/installer/newt/network.scm:78
+msgid ""
+"The install process requires Internet access. Please select a network device."
+msgstr ""
+"Sprievodca inštaláciou vyžaduje prístup na internet. Vyberte sieťové "
+"zariadenie, ktoré sa má použiť."
+
+#: gnu/installer/newt/network.scm:103
+msgid "Powering technology"
+msgstr "Spôsob napájania"
+
+#: gnu/installer/newt/network.scm:104
+#, scheme-format
+msgid "Waiting for technology ~a to be powered."
+msgstr "Čaká sa na napájanie prostredníctvom ~a."
+
+#: gnu/installer/newt/network.scm:128
+msgid "Checking connectivity"
+msgstr "Overuje sa spojenie"
+
+#: gnu/installer/newt/network.scm:129
+msgid "Waiting for Internet access establishment..."
+msgstr "Čaká sa na zahájenie internetového spojenia…"
+
+#: gnu/installer/newt/network.scm:139
+msgid ""
+"The selected network does not provide access to the Internet, please try "
+"again."
+msgstr "Zvolená sieť neposkytuje prístup na internet. Skúste to znova."
+
+#: gnu/installer/newt/network.scm:141 gnu/installer/newt/wifi.scm:108
+msgid "Connection error"
+msgstr "Chyba pripojenia"
+
+#: gnu/installer/newt/page.scm:198
+#, scheme-format
+msgid "Connecting to ~a, please wait."
+msgstr "Pripájanie k ~a. Prosím, čakajte."
+
+#: gnu/installer/newt/page.scm:199
+msgid "Connection in progress"
+msgstr "Prebieha pripájanie"
+
+#: gnu/installer/newt/page.scm:218 gnu/installer/newt/user.scm:60
+msgid "Show"
+msgstr "Zobraziť"
+
+#: gnu/installer/newt/page.scm:225 gnu/installer/newt/page.scm:672
+#: gnu/installer/newt/page.scm:757 gnu/installer/newt/partition.scm:451
+#: gnu/installer/newt/partition.scm:630 gnu/installer/newt/partition.scm:651
+#: gnu/installer/newt/partition.scm:690 gnu/installer/newt/user.scm:66
+#: gnu/installer/newt/user.scm:203
+msgid "OK"
+msgstr "Dobre"
+
+#: gnu/installer/newt/page.scm:251
+msgid "Please enter a non empty input."
+msgstr "Zadajte hodnotu."
+
+#: gnu/installer/newt/page.scm:252 gnu/installer/newt/user.scm:123
+msgid "Empty input"
+msgstr "Prázdna hodnota"
+
+#: gnu/installer/newt/page.scm:760
+msgid "Edit"
+msgstr "Upraviť"
+
+#: gnu/installer/newt/partition.scm:47
+msgid "Everything is one partition"
+msgstr "Všetko na jeden oddiel"
+
+#: gnu/installer/newt/partition.scm:48
+msgid "Separate /home partition"
+msgstr "Samostatný oddiel /home"
+
+#: gnu/installer/newt/partition.scm:50
+msgid "Please select a partitioning scheme."
+msgstr "Vyberte spôsob rozdelenia disku."
+
+#: gnu/installer/newt/partition.scm:51
+msgid "Partition scheme"
+msgstr "Spôsob rozdelenia disku"
+
+#. TRANSLATORS: The ~{ and ~} format specifiers are used to iterate the list
+#. of device names of the user partitions that will be formatted.
+#: gnu/installer/newt/partition.scm:65
+#, scheme-format
+msgid ""
+"We are about to write the configured partition table to the disk and format "
+"the partitions listed below.  Their data will be lost.  Do you wish to "
+"continue?~%~%~{ - ~a~%~}"
+msgstr ""
+"Na disk sa zapíše nová tabuľka oddielov a naformátujú sa nižšie uvedené "
+"oddiely. Všetky údaje na týchto oddieloch sa stratia. Chcete pokračovať?"
+"~%~%~{ - ~a~%~}"
+
+#: gnu/installer/newt/partition.scm:71
+msgid "Format disk?"
+msgstr "Formátovať disk?"
+
+#: gnu/installer/newt/partition.scm:74
+msgid "Partition formatting is in progress, please wait."
+msgstr "Prebieha formátovanie oddielov. Prosím, čakajte."
+
+#: gnu/installer/newt/partition.scm:75
+msgid "Preparing partitions"
+msgstr "Pripravujú sa oddiely"
+
+#: gnu/installer/newt/partition.scm:86
+msgid "Please select a disk."
+msgstr "Vyberte disk."
+
+#: gnu/installer/newt/partition.scm:87
+msgid "Disk"
+msgstr "Disková jednotka"
+
+#: gnu/installer/newt/partition.scm:99
+msgid ""
+"Select a new partition table type. Be careful, all data on the disk will be "
+"lost."
+msgstr ""
+"Vyberte typ novej tabuľky oddielov. Buďte opatrní, všetky údaje na disku sa "
+"stratia."
+
+#: gnu/installer/newt/partition.scm:101
+msgid "Partition table"
+msgstr "Tabuľka oddielov"
+
+#: gnu/installer/newt/partition.scm:118
+msgid "Please select a partition type."
+msgstr "Vyberte typ oddielu."
+
+#: gnu/installer/newt/partition.scm:119
+msgid "Partition type"
+msgstr "Typ oddielu"
+
+#: gnu/installer/newt/partition.scm:129
+msgid "Please select the file-system type for this partition."
+msgstr "Vyberte typ súborového systému pre tento oddiel."
+
+#: gnu/installer/newt/partition.scm:130
+msgid "File-system type"
+msgstr "Typ súborového systému"
+
+#: gnu/installer/newt/partition.scm:143
+msgid "Primary partitions count exceeded."
+msgstr "Prekročili ste povolený počet hlavných oddielov."
+
+#: gnu/installer/newt/partition.scm:144 gnu/installer/newt/partition.scm:149
+#: gnu/installer/newt/partition.scm:154
+msgid "Creation error"
+msgstr "Vytváranie zlyhalo"
+
+#: gnu/installer/newt/partition.scm:148
+msgid "Extended partition creation error."
+msgstr "Vyskytla sa chyba pri vytváraní rozšíreného oddielu."
+
+#: gnu/installer/newt/partition.scm:153
+msgid "Logical partition creation error."
+msgstr "Vyskytla sa chyba pri vytváraní logického oddielu."
+
+#: gnu/installer/newt/partition.scm:167
+#, scheme-format
+msgid ""
+"Please enter the password for the encryption of partition ~a (label: ~a)."
+msgstr "Zadajte heslo pre šifrovaný oddiel ~a (menovka: ~a)."
+
+#: gnu/installer/newt/partition.scm:169 gnu/installer/newt/wifi.scm:92
+msgid "Password required"
+msgstr "Vyžaduje sa heslo"
+
+#: gnu/installer/newt/partition.scm:174
+#, scheme-format
+msgid ""
+"Please confirm the password for the encryption of partition ~a (label: ~a)."
+msgstr "Potvrďte heslo pre šifrovaný oddiel ~a (menovka: ~a)."
+
+#: gnu/installer/newt/partition.scm:176 gnu/installer/newt/user.scm:160
+msgid "Password confirmation required"
+msgstr "Vyžaduje sa potvrdenie hesla"
+
+#: gnu/installer/newt/partition.scm:188 gnu/installer/newt/user.scm:168
+msgid "Password mismatch, please try again."
+msgstr "Heslá sa nezhodujú. Skúste to znova."
+
+#: gnu/installer/newt/partition.scm:189 gnu/installer/newt/user.scm:169
+msgid "Password error"
+msgstr "Chyba hesla"
+
+#: gnu/installer/newt/partition.scm:275
+msgid "Please enter the partition gpt name."
+msgstr "Zadajte gpt názov oddielu."
+
+#: gnu/installer/newt/partition.scm:276
+msgid "Partition name"
+msgstr "Názov oddielu"
+
+#: gnu/installer/newt/partition.scm:306
+msgid "Please enter the encrypted label"
+msgstr "Zadajte názov šifrovaného oddielu"
+
+#: gnu/installer/newt/partition.scm:307
+msgid "Encryption label"
+msgstr "Názov šifrovaného oddielu"
+
+#: gnu/installer/newt/partition.scm:324
+#, scheme-format
+msgid "Please enter the size of the partition. The maximum size is ~a."
+msgstr "Zadajte veľkosť oddielu. Najvyššia možná hodnota je ~a."
+
+#: gnu/installer/newt/partition.scm:326
+msgid "Partition size"
+msgstr "Veľkosť oddielu"
+
+#: gnu/installer/newt/partition.scm:344
+msgid "The percentage can not be superior to 100."
+msgstr "Percentuálna hodnota nesmie presiahnuť 100."
+
+#: gnu/installer/newt/partition.scm:345 gnu/installer/newt/partition.scm:350
+#: gnu/installer/newt/partition.scm:355
+msgid "Size error"
+msgstr "Chyba veľkosti"
+
+#: gnu/installer/newt/partition.scm:349
+msgid "The requested size is incorrectly formatted, or too large."
+msgstr ""
+"Požadovaná veľkosť je nesprávne zapísaná alebo je hodnota príliš vysoká."
+
+#: gnu/installer/newt/partition.scm:354
+msgid "The request size is superior to the maximum size."
+msgstr "Požadovaná veľkosť je vyššia ako najvyššia možná hodnota."
+
+#: gnu/installer/newt/partition.scm:374
+msgid ""
+"Please enter the desired mounting point for this partition. Leave this field "
+"empty if you don't want to set a mounting point."
+msgstr ""
+"Zadajte prípojný bod pre tento oddiel. Ak nechcete nastaviť žiadny prípojný "
+"bod, ponechajte toto pole prázdne."
+
+#: gnu/installer/newt/partition.scm:376
+msgid "Mounting point"
+msgstr "Prípojný bod"
+
+#: gnu/installer/newt/partition.scm:440
+#, scheme-format
+msgid "Creating ~a partition starting at ~a of ~a."
+msgstr "Vytvára sa oddiel ~a začínajúci na ~a z ~a."
+
+#: gnu/installer/newt/partition.scm:442
+#, scheme-format
+msgid "You are currently editing partition ~a."
+msgstr "Práve upravujete oddiel ~a."
+
+#: gnu/installer/newt/partition.scm:445
+msgid "Partition creation"
+msgstr "Vytvorenie oddielu"
+
+#: gnu/installer/newt/partition.scm:446
+msgid "Partition edit"
+msgstr "Úprava oddielu"
+
+#: gnu/installer/newt/partition.scm:627
+#, scheme-format
+msgid "Are you sure you want to delete everything on disk ~a?"
+msgstr "Ste si istí, že chcete odstrániť všetky údaje na disku ~a?"
+
+#: gnu/installer/newt/partition.scm:629
+msgid "Delete disk"
+msgstr "Odstrániť disk"
+
+#: gnu/installer/newt/partition.scm:643
+msgid "You cannot delete a free space area."
+msgstr "Nie je možné odstrániť voľné miesto."
+
+#: gnu/installer/newt/partition.scm:644 gnu/installer/newt/partition.scm:650
+msgid "Delete partition"
+msgstr "Odstrániť oddiel"
+
+#: gnu/installer/newt/partition.scm:648
+#, scheme-format
+msgid "Are you sure you want to delete partition ~a?"
+msgstr "Ste si istí, že chcete odstrániť oddiel ~a?"
+
+#: gnu/installer/newt/partition.scm:665
+msgid ""
+"You can change a disk's partition table by selecting it and pressing ENTER. "
+"You can also edit a partition by selecting it and pressing ENTER, or remove "
+"it by pressing DELETE. To create a new partition, select a free space area "
+"and press ENTER.\n"
+"\n"
+"At least one partition must have its mounting point set to '/'."
+msgstr ""
+"Tabuľku oddielov môžete zmeniť vybratím príslušného disku a stlačením "
+"klávesu ENTER. Vybraný oddiel môžete upraviť stlačením klávesu ENTER alebo "
+"odstrániť stlačením klávesu DELETE. Pre vytvorenie nového oddielu vyberte "
+"voľné miesto a stlačte ENTER.\n"
+"\n"
+"Aspoň jeden oddiel musí mať nastavený prípojný bod na „/“."
+
+#: gnu/installer/newt/partition.scm:671
+#, scheme-format
+msgid ""
+"This is the proposed partitioning. It is still possible to edit it or to go "
+"back to install menu by pressing the Exit button.~%~%"
+msgstr ""
+"Toto je navrhované rozdelenie disku. Môžete ho upraviť alebo sa vrátiť k "
+"inštalácii stlačením tlačidla Ukončiť.~%~%"
+
+#: gnu/installer/newt/partition.scm:681
+msgid "Guided partitioning"
+msgstr "Sprievodca rozdelením disku"
+
+#: gnu/installer/newt/partition.scm:682
+msgid "Manual partitioning"
+msgstr "Ručné rozdelenie"
+
+#: gnu/installer/newt/partition.scm:707
+msgid "No root mount point found."
+msgstr "Nenašiel sa koreňový prípojný bod."
+
+#: gnu/installer/newt/partition.scm:708
+msgid "Missing mount point"
+msgstr "Postráda sa prípojný bod"
+
+#: gnu/installer/newt/partition.scm:739
+msgid "Guided - using the entire disk"
+msgstr "Sprievodca - použiť celý disk"
+
+#: gnu/installer/newt/partition.scm:740
+msgid "Guided - using the entire disk with encryption"
+msgstr "Sprievodca - použiť celý disk so šifrovaním"
+
+#: gnu/installer/newt/partition.scm:741
+msgid "Manual"
+msgstr "Ručne"
+
+#: gnu/installer/newt/partition.scm:743
+msgid "Please select a partitioning method."
+msgstr "Vyberte spôsob rozdelenia disku."
+
+#: gnu/installer/newt/partition.scm:744
+msgid "Partitioning method"
+msgstr "Spôsob rozdelenia disku"
+
+#: gnu/installer/newt/services.scm:38
+msgid ""
+"Please select the desktop environment(s) you wish to install.  If you select "
+"multiple desktop environments here, you will be able to choose from them "
+"later when you log in."
+msgstr ""
+"Vyberte, ktoré používateľské rozhrania sa majú nainštalovať. Ak označíte "
+"viaceré rozhrania, pri prihlasovaní si budete môcť spomedzi nich vybrať to, "
+"ktoré chcete použiť."
+
+#: gnu/installer/newt/services.scm:41
+msgid "Desktop environment"
+msgstr "Používateľské rozhranie"
+
+#: gnu/installer/newt/services.scm:58
+msgid "You can now select networking services to run on your system."
+msgstr ""
+"Teraz si môžete vybrať sieťové služby, ktoré chcete spúšťať na vašom systéme."
+
+#: gnu/installer/newt/services.scm:60
+msgid "Network service"
+msgstr "Sieťová služba"
+
+#: gnu/installer/newt/services.scm:73
+msgid "Network management"
+msgstr "Správa siete"
+
+#: gnu/installer/newt/services.scm:76
+msgid ""
+"Choose the method to manage network connections.\n"
+"\n"
+"We recommend NetworkManager or Connman for a WiFi-capable laptop; the DHCP "
+"client may be enough for a server."
+msgstr ""
+"Vyberte spôsob správy sieťových pripojení.\n"
+"\n"
+"Odporúča sa NetworkManager alebo Connman v prípade prenosného počítača s "
+"bezdrôtovým pripojením. Pre server by mal stačiť DHCP klient."
+
+#: gnu/installer/newt/substitutes.scm:31
+msgid "Substitute server discovery."
+msgstr "Zisťovanie servera náhrad."
+
+#: gnu/installer/newt/substitutes.scm:32
+msgid "Enable"
+msgstr "Povoliť"
+
+#: gnu/installer/newt/substitutes.scm:32
+msgid "Disable"
+msgstr "Nepovoliť"
+
+#: gnu/installer/newt/substitutes.scm:33
+msgid ""
+" By turning this option on, you allow Guix to fetch substitutes (pre-built "
+"binaries) during installation from servers discovered on your local area "
+"network (LAN) in addition to the official server.  This can increase "
+"download throughput.\n"
+"\n"
+" There are no security risks: only genuine substitutes may be retrieved from "
+"those servers.  However, eavesdroppers on your LAN may be able to see what "
+"software you are installing."
+msgstr ""
+" Ak povolíte túto možnosť, systém Guix bude môcť počas inštalácie sťahovať "
+"náhrady (pred-zostavené binárne súbory) nie len z oficiálneho servera náhrad "
+"ale aj zo serverov vo vašej miestnej sieti (LAN). Môže to zvýšiť rýchlosť "
+"sťahovania.\n"
+"\n"
+"Nie je to bezpečnostná hrozba. Systém Guix môže z týchto serverov sťahovať "
+"iba pravé náhrady. Avšak, hocikto vo vašej miestnej sieti môže vidieť aké "
+"balíky inštalujete."
+
+#: gnu/installer/newt/timezone.scm:59
+msgid "Please select a timezone."
+msgstr "Vyberte časové pásmo."
+
+#: gnu/installer/newt/user.scm:45
+msgid "Name"
+msgstr "Meno"
+
+#: gnu/installer/newt/user.scm:47
+msgid "Real name"
+msgstr "Celé meno"
+
+#: gnu/installer/newt/user.scm:49
+msgid "Home directory"
+msgstr "Domovský priečinok"
+
+#: gnu/installer/newt/user.scm:51
+msgid "Password"
+msgstr "Heslo"
+
+#: gnu/installer/newt/user.scm:122
+msgid "Empty inputs are not allowed."
+msgstr "Prázdne hodnoty nie sú povolené."
+
+#: gnu/installer/newt/user.scm:159
+msgid "Please confirm the password."
+msgstr "Potvrďte heslo."
+
+#. TRANSLATORS: Leave "root" untranslated: it refers to the name of the
+#. system administrator account.
+#: gnu/installer/newt/user.scm:176
+msgid "Please choose a password for the system administrator (\"root\")."
+msgstr "Zvoľte heslo pre účet správcu systému („root“)."
+
+#: gnu/installer/newt/user.scm:178
+msgid "System administrator password"
+msgstr "Heslo pre účet správcu systému"
+
+#: gnu/installer/newt/user.scm:191
+msgid "Please add at least one user to system using the 'Add' button."
+msgstr "Pridajte aspoň jedného používateľa stlačením tlačidla „Pridať“."
+
+#: gnu/installer/newt/user.scm:194
+msgid "Add"
+msgstr "Pridať"
+
+#: gnu/installer/newt/user.scm:195
+msgid "Delete"
+msgstr "Odstrániť"
+
+#: gnu/installer/newt/user.scm:255
+msgid "Please create at least one user."
+msgstr "Vytvorte aspoň jedného používateľa."
+
+#: gnu/installer/newt/user.scm:256
+msgid "No user"
+msgstr "Žiadny používateľ"
+
+#: gnu/installer/newt/welcome.scm:125
+msgid "GNU Guix install"
+msgstr "Sprievodca inštaláciou systému GNU Guix"
+
+#: gnu/installer/newt/welcome.scm:126
+msgid ""
+"Welcome to GNU Guix system installer!\n"
+"\n"
+"You will be guided through a graphical installation program.\n"
+"\n"
+"If you are familiar with GNU/Linux and you want tight control over the "
+"installation process, you can instead choose manual installation.  "
+"Documentation is accessible at any time by pressing Ctrl-Alt-F2."
+msgstr ""
+"Víta vás sprievodca inštaláciou systému GNU Guix!\n"
+"\n"
+"Tento sprievodca vás prevedie celým procesom inštalácie.\n"
+"\n"
+"Ak ste skúseným používateľom systému GNU/Linux a chcete mať väčšiu kontrolu "
+"nad inštalačným procesom, môžete si vybrať ručnú inštaláciu. Pomocníka je "
+"možné kedykoľvek vyvolať prostredníctvom klávesovej skratky Ctrl+Alt+F2."
+
+#: gnu/installer/newt/welcome.scm:135
+msgid "Graphical install using a terminal based interface"
+msgstr "Použiť sprievodcu inštaláciou"
+
+#: gnu/installer/newt/welcome.scm:138
+msgid "Install using the shell based process"
+msgstr "Inštalovať ručne z príkazového riadku"
+
+#: gnu/installer/newt/wifi.scm:82
+msgid "Unable to find a wifi technology"
+msgstr "Nepodarilo sa nájsť žiadne zariadenie bezdrôtového pripojenia"
+
+#: gnu/installer/newt/wifi.scm:86
+msgid "Scanning wifi for available networks, please wait."
+msgstr "Vyhľadávajú sa dostupné bezdrôtové siete. Prosím, čakajte."
+
+#: gnu/installer/newt/wifi.scm:87
+msgid "Scan in progress"
+msgstr "Prebieha vyhľadávanie"
+
+#: gnu/installer/newt/wifi.scm:91
+msgid "Please enter the wifi password."
+msgstr "Zdajte heslo bezdrôtovej siete."
+
+#: gnu/installer/newt/wifi.scm:98
+#, scheme-format
+msgid "The password you entered for ~a is incorrect."
+msgstr "Zadané heslo pre ~a je nesprávne."
+
+#: gnu/installer/newt/wifi.scm:100
+msgid "Wrong password"
+msgstr "Nesprávne heslo"
+
+#: gnu/installer/newt/wifi.scm:106
+#, scheme-format
+msgid "An error occurred while trying to connect to ~a, please retry."
+msgstr "Počas pripájania k ~a sa vyskytla chyba. Skúste to znova."
+
+#: gnu/installer/newt/wifi.scm:201
+msgid "Please select a wifi network."
+msgstr "Vyberte bezdrôtovú sieť."
+
+#: gnu/installer/newt/wifi.scm:207
+msgid "Scan"
+msgstr "Vyhľadať"
+
+#: gnu/installer/newt/wifi.scm:212
+msgid "No wifi detected"
+msgstr "Nezistili sa žiadne bezdrôtové siete"
+
+#: gnu/installer/newt/wifi.scm:227
+msgid "Wifi"
+msgstr "Bezdrôtové pripojenie"
+
+#: gnu/installer/parted.scm:402 gnu/installer/parted.scm:439
+msgid "Free space"
+msgstr "Voľné miesto"
+
+#: gnu/installer/parted.scm:528
+#, scheme-format
+msgid "Name: ~a"
+msgstr "Meno: ~a"
+
+#: gnu/installer/parted.scm:529 gnu/installer/parted.scm:575
+msgid "None"
+msgstr "Žiadne"
+
+#: gnu/installer/parted.scm:534
+#, scheme-format
+msgid "Type: ~a"
+msgstr "Typ: ~a"
+
+#: gnu/installer/parted.scm:538
+#, scheme-format
+msgid "File system type: ~a"
+msgstr "Typ súborového systému: ~a"
+
+#: gnu/installer/parted.scm:544
+#, scheme-format
+msgid "Bootable flag: ~:[off~;on~]"
+msgstr "Zavádzací (boot) príznak: ~:[vypnutý~;zapnutý~]"
+
+#: gnu/installer/parted.scm:548
+#, scheme-format
+msgid "ESP flag: ~:[off~;on~]"
+msgstr "ESP príznak: ~:[vypnutý~;zapnutý~]"
+
+#: gnu/installer/parted.scm:554
+#, scheme-format
+msgid "Size: ~a"
+msgstr "Veľkosť: ~a"
+
+#: gnu/installer/parted.scm:560
+#, scheme-format
+msgid "Encryption: ~:[No~a~;Yes (label '~a')~]"
+msgstr "Šifrovanie: ~:[Nie~a~;Áno (menovka „~a“)~]"
+
+#: gnu/installer/parted.scm:566
+#, scheme-format
+msgid "Format the partition? ~:[No~;Yes~]"
+msgstr "Formátovať oddiel? ~:[Nie~;Áno~]"
+
+#: gnu/installer/parted.scm:572
+#, scheme-format
+msgid "Mount point: ~a"
+msgstr "Prípojný bod: ~a"
+
+#: gnu/installer/parted.scm:1395
+#, scheme-format
+msgid "Device ~a is still in use."
+msgstr "Zariadenie ~a sa stále používa."
+
+#: gnu/installer/services.scm:94
+msgid "OpenSSH secure shell daemon (sshd)"
+msgstr "Démon OpenSSH (sshd)"
+
+#: gnu/installer/services.scm:98
+msgid "Tor anonymous network router"
+msgstr "Smerovač anonymnej siete Tor"
+
+#: gnu/installer/services.scm:102
+msgid "Mozilla NSS certificates, for HTTPS access"
+msgstr "Certifikáty Mozilla NSS, pre prístup cez HTTPS"
+
+#: gnu/installer/services.scm:109
+msgid "NetworkManager network connection manager"
+msgstr "Správca sieťových pripojení NetworkManager"
+
+#: gnu/installer/services.scm:114
+msgid "Connman network connection manager"
+msgstr "Správca sieťových pripojení Connman"
+
+#: gnu/installer/services.scm:119
+msgid "DHCP client (dynamic IP address assignment)"
+msgstr "Klient DHCP (dynamické prideľovanie IP adries)"
+
+#: gnu/installer/timezone.scm:110
+#, scheme-format
+msgid "Unable to locate path: ~a."
+msgstr "Nepodarilo sa nájsť cestu: ~a."
+
+#: gnu/installer/utils.scm:83
+#, scheme-format
+msgid "Press Enter to continue.~%"
+msgstr "Stlačte Enter pre pokračovanie.~%"
+
+#: gnu/installer/utils.scm:108
+#, scheme-format
+msgid "Command failed with exit code ~a.~%"
+msgstr "Príkaz zlyhal s návratovou hodnotou ~a.~%"
+
+#: gnu/machine/ssh.scm:114
+#, scheme-format
+msgid "<machine-ssh-configuration> without a 'host-key' is deprecated~%"
+msgstr "použitie <machine-ssh-configuration> bez „host-key“ sa už neodporúča~%"
+
+#: gnu/machine/ssh.scm:189
+#, scheme-format
+msgid "device '~a' not found: ~a"
+msgstr "zariadenie „~a“ sa nenašlo: ~a"
+
+#: gnu/machine/ssh.scm:204
+#, scheme-format
+msgid "no file system with label '~a'"
+msgstr "žiadny súborový systém s menovkou „~a“"
+
+#: gnu/machine/ssh.scm:223
+#, scheme-format
+msgid "no file system with UUID '~a'"
+msgstr "žiadny súborový systém s UUID „~a“"
+
+#: gnu/machine/ssh.scm:273
+#, scheme-format
+msgid "missing modules for ~a:~{ ~a~}~%"
+msgstr "chýbajúce moduly pre ~a:~{ ~a~}~%"
+
+#: gnu/machine/ssh.scm:308
+#, scheme-format
+msgid ""
+"incorrect target system ('~a' was given, while the system reports that it is "
+"'~a')~%"
+msgstr ""
+"nesprávny cieľový systém (bol určený „~a“ zatiaľ čo systém hlási, že je "
+"„~a“)~%"
+
+#: gnu/machine/ssh.scm:434
+#, scheme-format
+msgid "no signing key '~a'. have you run 'guix archive --generate-key?'"
+msgstr ""
+"žiadny kľúč na podpísanie „~a“. Vykonali ste „guix archive --generate-key?“"
+
+#: gnu/machine/ssh.scm:485
+msgid "could not roll-back machine"
+msgstr "nepodarilo sa vrátiť počítač do pôvodného stavu"
+
+#: gnu/machine/ssh.scm:526
+msgid ""
+"Provisioning for machines that are accessible over SSH\n"
+"and have a known host-name. This entails little more than maintaining an "
+"SSH\n"
+"connection to the host."
+msgstr ""
+"Spôsob nasadenia pre počítače prístupné cez SSH a so známym\n"
+"názvom hostiteľa. Toto vyžaduje o niečo viac ako udržiavanie SSH\n"
+"pripojenia k hostiteľovi."
+
+#: gnu/machine/ssh.scm:536
+#, scheme-format
+msgid ""
+"unsupported machine configuration '~a'\n"
+"for environment of type '~a'"
+msgstr ""
+"nepodporované nastavenie počítača „~a“\n"
+"pre prostredie typu „~a“"
+
+#: gnu/packages/bootstrap.scm:165
+#, scheme-format
+msgid "could not find bootstrap binary '~a' for system '~a'"
+msgstr "nepodarilo sa nájsť zavádzací binárny súbor „~a“ pre systém „~a“"
+
+#: gnu/packages/bootstrap.scm:476
+msgid "Raw build system with direct store access"
+msgstr "Základný zostavovací systém s priamym prístupom k úložisku"
+
+#: gnu/packages/bootstrap.scm:484
+msgid "Pre-built Guile for bootstrapping purposes."
+msgstr "Pred-zostavený Guile pre účely zavádzania."
+
+#: guix/build/utils.scm:715
+#, scheme-format
+msgid "'~a~{ ~a~}' exited with status ~a; output follows:~%~%~{  ~a~%~}"
+msgstr ""
+"„~a~{ ~a~}“ skončil s návratovou hodnotou ~a; nasleduje výstup:~%~%~{  ~a~%~}"
+
+#: guix/scripts.scm:87
+msgid "main commands"
+msgstr "hlavné príkazy"
+
+#: guix/scripts.scm:88
+msgid "software development commands"
+msgstr "vývojové príkazy"
+
+#: guix/scripts.scm:89
+msgid "packaging commands"
+msgstr "príkazy na správu balíkov"
+
+#: guix/scripts.scm:90
+msgid "plumbing commands"
+msgstr "príkazy údržby"
+
+#: guix/scripts.scm:91
+msgid "internal commands"
+msgstr "vnútorné príkazy"
+
+#: guix/scripts.scm:92
+msgid "extension commands"
+msgstr "rozširujúce príkazy"
+
+#: guix/scripts.scm:137
+#, scheme-format
+msgid "invalid argument: ~a~%"
+msgstr "neplatný parameter: ~a~%"
+
+#: guix/scripts.scm:166 guix/scripts/import/cran.scm:91
+#: guix/scripts/import/elpa.scm:85 guix/scripts/import/cpan.scm:71
+#: guix/scripts/import/crate.scm:80 guix/scripts/import/gem.scm:78
+#: guix/scripts/import/gnu.scm:86 guix/scripts/import/go.scm:89
+#: guix/scripts/import/hackage.scm:110 guix/scripts/import/json.scm:79
+#: guix/scripts/import/nix.scm:71 guix/scripts/import/opam.scm:81
+#: guix/scripts/import/pypi.scm:77 guix/scripts/import/stackage.scm:94
+#: guix/scripts/import/texlive.scm:78
+#, scheme-format
+msgid "~A: unrecognized option~%"
+msgstr "~A: nerozpoznaný prepínač~%"
+
+#: guix/scripts.scm:169
+#, scheme-format
+msgid "Did you mean @code{~a}?~%"
+msgstr "Mali ste na mysli @code{~a}?~%"
+
+#: guix/scripts.scm:253
+#, scheme-format
+msgid "Your Guix installation is ~a day old.\n"
+msgid_plural "Your Guix installation is ~a days old.\n"
+msgstr[0] "Vaše vydanie systému Guix má ~a deň.\n"
+msgstr[1] "Vaše vydanie systému Guix má ~a dni.\n"
+msgstr[2] "Vaše vydanie systému Guix má ~a dní.\n"
+
+#: guix/scripts.scm:259
+#, scheme-format
+msgid ""
+"Consider running 'guix pull' followed by\n"
+"'~a' to get up-to-date packages and security updates.\n"
+msgstr ""
+"Zvážte spustenie „guix pull“ nasledované\n"
+"„~a“ pre získanie najnovších balíkov a bezpečnostných aktualizácií.\n"
+
+#: guix/scripts.scm:323
+#, scheme-format
+msgid "only ~,1f GiB of free space available on ~a~%"
+msgstr "zostáva iba ~,1f GiB voľného miesta na ~a~%"
+
+#: guix/scripts.scm:325
+msgid ""
+"Consider deleting old profile\n"
+"generations and collecting garbage, along these lines:\n"
+"\n"
+"@example\n"
+"guix gc --delete-generations=1m\n"
+"@end example\n"
+msgstr ""
+"Zvážte odstránenie starších pokolení profilu\n"
+"a spustenie zberača odpadkov asi takto:\n"
+"\n"
+"@example\n"
+"guix gc --delete-generations=1m\n"
+"@end example\n"
+
+#: guix/scripts/build.scm:85
+#, scheme-format
+msgid "cannot access build log at '~a':~%"
+msgstr "nepodarilo sa získať prístup k záznamu o zostavení v „~a“:~%"
+
+#: guix/scripts/build.scm:139
+#, scheme-format
+msgid "failed to create GC root `~a': ~a~%"
+msgstr "nepodarilo sa vytvoriť koreň zberača odpadkov „~a“: ~a~%"
+
+#: guix/scripts/build.scm:154 guix/scripts/search.scm:42
+#: guix/scripts/show.scm:41 guix/scripts/lint.scm:112 guix/scripts/edit.scm:48
+#: guix/scripts/size.scm:246 guix/scripts/graph.scm:547
+#: guix/scripts/repl.scm:80
+msgid ""
+"\n"
+"  -L, --load-path=DIR    prepend DIR to the package module search path"
+msgstr ""
+"\n"
+"  -L, --load-path=PRIEČINOK    pridať PRIEČINOK na začiatok prehľadávanej "
+"cesty modulov"
+
+#: guix/scripts/build.scm:156
+msgid ""
+"\n"
+"  -K, --keep-failed      keep build tree of failed builds"
+msgstr ""
+"\n"
+"  -K, --keep-failed\tzachovať strom zostavenia v prípade zlyhania"
+
+#: guix/scripts/build.scm:158
+msgid ""
+"\n"
+"  -k, --keep-going       keep going when some of the derivations fail"
+msgstr ""
+"\n"
+"  -k, --keep-going\tpokračovať v zostavovaní aj keď niektoré odvodzovanie "
+"zlyhá"
+
+#: guix/scripts/build.scm:160
+msgid ""
+"\n"
+"  -n, --dry-run          do not build the derivations"
+msgstr ""
+"\n"
+"  -n, --dry-run\tnezostavovať odvodeniny"
+
+#: guix/scripts/build.scm:162
+msgid ""
+"\n"
+"      --fallback         fall back to building when the substituter fails"
+msgstr ""
+"\n"
+"      --fallback\tspoľahnúť sa na miestne zostavenie ak nahrádzanie zlyhá"
+
+#: guix/scripts/build.scm:164
+msgid ""
+"\n"
+"      --no-substitutes   build instead of resorting to pre-built substitutes"
+msgstr ""
+"\n"
+"      --no-substitutes\tzostaviť namiesto získavania pred-zostavených "
+"náhradníkov"
+
+#: guix/scripts/build.scm:166 guix/scripts/size.scm:235
+msgid ""
+"\n"
+"      --substitute-urls=URLS\n"
+"                         fetch substitute from URLS if they are authorized"
+msgstr ""
+"\n"
+"      --substitute-urls=PREPOJENIA\n"
+"                         ak sú povolené, získať náhrady cez PREPOJENIA"
+
+#: guix/scripts/build.scm:169
+msgid ""
+"\n"
+"      --no-grafts        do not graft packages"
+msgstr ""
+"\n"
+"      --no-grafts        neštepiť balíky"
+
+#: guix/scripts/build.scm:171
+msgid ""
+"\n"
+"      --no-offload       do not attempt to offload builds"
+msgstr ""
+"\n"
+"      --no-offload       nepokúšať sa o vzdialené zostavovanie"
+
+#: guix/scripts/build.scm:173
+msgid ""
+"\n"
+"      --max-silent-time=SECONDS\n"
+"                         mark the build as failed after SECONDS of silence"
+msgstr ""
+"\n"
+"      --max-silent-time=SEKUNDY\n"
+"                         označiť zostavovanie za neúspešné ak SEKÚND "
+"neodpovedá"
+
+#: guix/scripts/build.scm:176
+msgid ""
+"\n"
+"      --timeout=SECONDS  mark the build as failed after SECONDS of activity"
+msgstr ""
+"\n"
+"      --timeout=SEKUNDY  označiť zostavovanie za neúspešné po SEKUNDÁCH "
+"činnosti"
+
+#: guix/scripts/build.scm:178
+msgid ""
+"\n"
+"      --rounds=N         build N times in a row to detect non-determinism"
+msgstr ""
+"\n"
+"      --rounds=N         zostaviť N-krát za sebou za účelom zistenia "
+"nedeterminizmu"
+
+#: guix/scripts/build.scm:180
+msgid ""
+"\n"
+"  -c, --cores=N          allow the use of up to N CPU cores for the build"
+msgstr ""
+"\n"
+"  -c, --cores=N          počas zostavovania povoliť použitie najviac N "
+"jadier procesora"
+
+#: guix/scripts/build.scm:182
+msgid ""
+"\n"
+"  -M, --max-jobs=N       allow at most N build jobs"
+msgstr ""
+"\n"
+"  -M, --max-jobs=N       povoliť najviac N zostavovacích úloh"
+
+#: guix/scripts/build.scm:184
+msgid ""
+"\n"
+"      --debug=LEVEL      produce debugging output at LEVEL"
+msgstr ""
+"\n"
+"      --debug=ÚROVEŇ      zobrazovať výstup ladenia ÚROVNE"
+
+#: guix/scripts/build.scm:201
+msgid "'--keep-failed' ignored since you are talking to a remote daemon\n"
+msgstr ""
+"„--keep-failed“ sa neberie do úvahy keďže ste v spojení so vzdialeným "
+"démonom\n"
+
+#: guix/scripts/build.scm:282
+#, scheme-format
+msgid "'--no-build-hook' is deprecated; use '--no-offload' instead~%"
+msgstr ""
+"použitie „--no-build-hook“ sa už neodporúča; namiesto toho použite „--no-"
+"offload“~%"
+
+#: guix/scripts/build.scm:312 guix/scripts/build.scm:319
+#, scheme-format
+msgid "not a number: '~a' option argument: ~a~%"
+msgstr "neplatná číselná hodnota: „~a“ parameter prepínača: ~a~%"
+
+#: guix/scripts/build.scm:340
+msgid ""
+"Usage: guix build [OPTION]... PACKAGE-OR-DERIVATION...\n"
+"Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"
+msgstr ""
+"Použitie: guix build [PREPÍNAČ]... BALÍK-ALEBO-ODVODENINA...\n"
+"Zostaviť určený BALÍK-ALEBO-ODVODENINU a vrátiť ich výstupné cesty.\n"
+
+#: guix/scripts/build.scm:342 guix/scripts/archive.scm:91
+msgid ""
+"\n"
+"  -e, --expression=EXPR  build the package or derivation EXPR evaluates to"
+msgstr ""
+"\n"
+"  -e, --expression=VÝRAZ  zostaviť balík alebo odvodeninu, ktorá je "
+"výsledkom vyhodnotenia VÝRAZU"
+
+#: guix/scripts/build.scm:344
+msgid ""
+"\n"
+"  -f, --file=FILE        build the package or derivation that the code "
+"within\n"
+"                         FILE evaluates to"
+msgstr ""
+"\n"
+"  -f, --file=SÚBOR        zostaviť balík alebo odvodeninu, ktorá je "
+"výsledkom\n"
+"                         vyhodnotenia kódu v SÚBORE"
+
+#: guix/scripts/build.scm:347
+msgid ""
+"\n"
+"  -m, --manifest=FILE    build the packages that the manifest given in FILE\n"
+"                         evaluates to"
+msgstr ""
+"\n"
+"  -m, --manifest=SÚBOR    zostaviť balíky, ktoré sú výsledkom vyhodnotenia\n"
+"                         kódu v SÚBORE manifestu"
+
+#: guix/scripts/build.scm:350 guix/scripts/archive.scm:93
+msgid ""
+"\n"
+"  -S, --source           build the packages' source derivations"
+msgstr ""
+"\n"
+"  -S, --source           zostaviť odvodeniny zdrojov balíkov"
+
+#: guix/scripts/build.scm:352
+msgid ""
+"\n"
+"      --sources[=TYPE]   build source derivations; TYPE may optionally be "
+"one\n"
+"                         of \"package\", \"all\" (default), or \"transitive\""
+msgstr ""
+"\n"
+"      --sources[=DRUH]   zostaviť odvodeniny zdrojov; DRUH môže byť jeden z\n"
+"                         „package“, „all“ (predvolený), alebo „transitive“"
+
+#: guix/scripts/build.scm:355 guix/scripts/pull.scm:121
+#: guix/scripts/pack.scm:1086 guix/scripts/archive.scm:95
+#: guix/scripts/environment.scm:151
+msgid ""
+"\n"
+"  -s, --system=SYSTEM    attempt to build for SYSTEM--e.g., \"i686-linux\""
+msgstr ""
+"\n"
+"  -s, --system=SYSTÉM    pokúsiť sa o zostavenie pre SYSTÉM, napr. „i686-"
+"linux“"
+
+#: guix/scripts/build.scm:357 guix/scripts/system.scm:1015
+#: guix/scripts/pack.scm:1088 guix/scripts/archive.scm:97
+msgid ""
+"\n"
+"      --target=TRIPLET   cross-build for TRIPLET--e.g., \"armel-linux-gnu\""
+msgstr ""
+"\n"
+"      --target=TROJČLEN   krížovo zostaviť pre TROJČLEN, napr. „armel-linux-"
+"gnu“"
+
+#: guix/scripts/build.scm:359
+msgid ""
+"\n"
+"  -d, --derivations      return the derivation paths of the given packages"
+msgstr ""
+"\n"
+"  -d, --derivations      vrátiť cesty k odvodeninám daných balíkov"
+
+#: guix/scripts/build.scm:361
+msgid ""
+"\n"
+"      --check            rebuild items to check for non-determinism issues"
+msgstr ""
+"\n"
+"      --check            opätovne zostaviť položky za účelom zistenia "
+"nedeterminizmu"
+
+#: guix/scripts/build.scm:363
+msgid ""
+"\n"
+"      --repair           repair the specified items"
+msgstr ""
+"\n"
+"      --repair           opraviť dané položky"
+
+#: guix/scripts/build.scm:365 guix/scripts/pack.scm:1106
+#: guix/scripts/environment.scm:153
+msgid ""
+"\n"
+"  -r, --root=FILE        make FILE a symlink to the result, and register it\n"
+"                         as a garbage collector root"
+msgstr ""
+"\n"
+"  -r, --root=SÚBOR        určiť SÚBOR ako symbolický odkaz na výsledok\n"
+"                         a zaznamenať ho ako koreň zberača odpadkov"
+
+#: guix/scripts/build.scm:368 guix/scripts/package.scm:480
+#: guix/scripts/install.scm:37 guix/scripts/remove.scm:36
+#: guix/scripts/upgrade.scm:39 guix/scripts/pull.scm:119
+#: guix/scripts/system.scm:1017 guix/scripts/copy.scm:115
+#: guix/scripts/pack.scm:1111 guix/scripts/deploy.scm:58
+#: guix/scripts/archive.scm:99 guix/scripts/environment.scm:177
+msgid ""
+"\n"
+"  -v, --verbosity=LEVEL  use the given verbosity LEVEL"
+msgstr ""
+"\n"
+"  -v, --verbosity=ÚROVEŇ  použiť danú ÚROVEŇ presnosti výstupu"
+
+#: guix/scripts/build.scm:370
+msgid ""
+"\n"
+"  -q, --quiet            do not show the build log"
+msgstr ""
+"\n"
+"  -q, --quiet            nezobrazovať záznam zostavovania"
+
+#: guix/scripts/build.scm:372
+msgid ""
+"\n"
+"      --log-file         return the log file names for the given derivations"
+msgstr ""
+"\n"
+"      --log-file         vrátiť názvy súborov so záznamom pre zadané "
+"odvodeniny"
+
+#: guix/scripts/build.scm:379 guix/scripts/download.scm:104
+#: guix/scripts/package.scm:498 guix/scripts/install.scm:44
+#: guix/scripts/remove.scm:41 guix/scripts/upgrade.scm:48
+#: guix/scripts/search.scm:37 guix/scripts/show.scm:36 guix/scripts/gc.scm:88
+#: guix/scripts/git.scm:34 guix/scripts/git/authenticate.scm:110
+#: guix/scripts/hash.scm:65 guix/scripts/import.scm:95
+#: guix/scripts/import/cran.scm:48 guix/scripts/pull.scm:127
+#: guix/scripts/substitute.scm:248 guix/scripts/system.scm:1024
+#: guix/scripts/lint.scm:115 guix/scripts/publish.scm:113
+#: guix/scripts/edit.scm:51 guix/scripts/size.scm:249
+#: guix/scripts/graph.scm:552 guix/scripts/challenge.scm:425
+#: guix/scripts/copy.scm:120 guix/scripts/pack.scm:1116
+#: guix/scripts/weather.scm:302 guix/scripts/describe.scm:96
+#: guix/scripts/processes.scm:301 guix/scripts/deploy.scm:53
+#: guix/scripts/container.scm:35 guix/scripts/container/exec.scm:43
+#: guix/scripts/archive.scm:106 guix/scripts/environment.scm:186
+#: guix/scripts/time-machine.scm:67 guix/scripts/import/cpan.scm:43
+#: guix/scripts/import/crate.scm:49 guix/scripts/import/gem.scm:44
+#: guix/scripts/import/gnu.scm:49 guix/scripts/import/go.scm:48
+#: guix/scripts/import/json.scm:51 guix/scripts/import/nix.scm:43
+#: guix/scripts/import/opam.scm:43 guix/scripts/import/pypi.scm:44
+#: guix/scripts/import/texlive.scm:46 guix/scripts/refresh.scm:186
+#: guix/scripts/repl.scm:83
+msgid ""
+"\n"
+"  -h, --help             display this help and exit"
+msgstr ""
+"\n"
+"  -h, --help             zobraziť túto pomocnú správu a skončiť"
+
+#: guix/scripts/build.scm:381 guix/scripts/download.scm:106
+#: guix/scripts/package.scm:500 guix/scripts/install.scm:46
+#: guix/scripts/remove.scm:43 guix/scripts/upgrade.scm:50
+#: guix/scripts/search.scm:39 guix/scripts/show.scm:38 guix/scripts/gc.scm:90
+#: guix/scripts/git.scm:36 guix/scripts/git/authenticate.scm:112
+#: guix/scripts/hash.scm:67 guix/scripts/import.scm:97
+#: guix/scripts/import/cran.scm:54 guix/scripts/pull.scm:129
+#: guix/scripts/substitute.scm:250 guix/scripts/system.scm:1026
+#: guix/scripts/lint.scm:119 guix/scripts/publish.scm:115
+#: guix/scripts/edit.scm:53 guix/scripts/size.scm:251
+#: guix/scripts/graph.scm:554 guix/scripts/challenge.scm:427
+#: guix/scripts/copy.scm:122 guix/scripts/pack.scm:1118
+#: guix/scripts/weather.scm:304 guix/scripts/describe.scm:98
+#: guix/scripts/processes.scm:303 guix/scripts/deploy.scm:55
+#: guix/scripts/container.scm:37 guix/scripts/container/exec.scm:45
+#: guix/scripts/archive.scm:108 guix/scripts/environment.scm:188
+#: guix/scripts/time-machine.scm:69 guix/scripts/import/cpan.scm:45
+#: guix/scripts/import/crate.scm:51 guix/scripts/import/gem.scm:46
+#: guix/scripts/import/gnu.scm:51 guix/scripts/import/json.scm:53
+#: guix/scripts/import/nix.scm:45 guix/scripts/import/opam.scm:49
+#: guix/scripts/import/pypi.scm:48 guix/scripts/import/texlive.scm:48
+#: guix/scripts/refresh.scm:188 guix/scripts/repl.scm:85
+msgid ""
+"\n"
+"  -V, --version          display version information and exit"
+msgstr ""
+"\n"
+"  -V, --version          zobraziť podrobnosti o verzii a skončiť"
+
+#: guix/scripts/build.scm:408
+#, scheme-format
+msgid ""
+"invalid argument: '~a' option argument: ~a, ~\n"
+"must be one of 'package', 'all', or 'transitive'~%"
+msgstr ""
+"neplatný parameter: „~a“ paramater prepínača: ~a, ~\n"
+"musí byť jeden z „package“, „all“ alebo „transitive“~%"
+
+#: guix/scripts/build.scm:470
+#, scheme-format
+msgid "~s: not something we can build~%"
+msgstr "~s: nie je niečo čo sa dá zostaviť~%"
+
+#: guix/scripts/build.scm:475
+msgid ""
+"If you build from a file, make sure the last Scheme\n"
+"expression returns a package value.  @code{define-public} defines a "
+"variable,\n"
+"but returns @code{#<unspecified>}.  To fix this, add a Scheme expression at\n"
+"the end of the file that consists only of the package's variable name you\n"
+"defined, as in this example:\n"
+"\n"
+"@example\n"
+"(define-public my-package\n"
+"  (package\n"
+"    ...))\n"
+"\n"
+"my-package\n"
+"@end example"
+msgstr ""
+"Ak zostavujete zo súboru, uistite sa, že návratová hodnota posledného\n"
+"Scheme výrazu je balík. @code{define-public} zadáva premennú ale vracia\n"
+"@code{#<unspecified>}. Tomuto sa dá predísť, ak na koniec súboru\n"
+"pridáte Scheme výraz obsahujúci iba názov premennej balíka, ktorý ste\n"
+"zadali. Napríklad:\n"
+"\n"
+"@example\n"
+"(define-public moj-balik\n"
+"  (package\n"
+"    ...))\n"
+"\n"
+"moj-balik\n"
+"@end example"
+
+#: guix/scripts/build.scm:488
+msgid ""
+"If you build from a file, make sure the last\n"
+"Scheme expression returns a package, gexp, derivation or a list of such\n"
+"values."
+msgstr ""
+"Ak zostavujete zo súboru, uistite sa, že návratová hodnota posledného\n"
+"Scheme výrazu je balík, gexp, odvodenina alebo zoznam takýchto\n"
+"hodnôt."
+
+#: guix/scripts/build.scm:574
+#, scheme-format
+msgid "package '~a' has no source~%"
+msgstr "balík „~a“ postráda zdroj~%"
+
+#: guix/scripts/build.scm:622
+#, scheme-format
+msgid "no build log for '~a'~%"
+msgstr "žiadny záznam o zostavení pre „~a“~%"
+
+#: guix/discovery.scm:96
+#, scheme-format
+msgid "cannot access `~a': ~a~%"
+msgstr "nie je možné pristupovať k „~a“: ~a~%"
+
+#: guix/lint.scm:181
+msgid "name should be longer than a single character"
+msgstr "názov by mal obsahovať viac ako jeden znak"
+
+#: guix/lint.scm:202
+msgid "description should not be empty"
+msgstr "popis by nemal zostať prázdny"
+
+#: guix/lint.scm:213
+msgid "Texinfo markup in description is invalid"
+msgstr "značkovanie Texinfo v popise je neplatné"
+
+#: guix/lint.scm:223
+#, scheme-format
+msgid ""
+"description should not contain ~\n"
+"trademark sign '~a' at ~d"
+msgstr ""
+"popis by nemal obsahovať ~\n"
+"znak obchodnej značky „~a“ na ~d"
+
+#. TRANSLATORS: '@code' is Texinfo markup and must be kept
+#. as is.
+#: guix/lint.scm:236
+msgid "use @code or similar ornament instead of quotes"
+msgstr "použite @code alebo podobnú značku namiesto úvodzoviek"
+
+#: guix/lint.scm:248
+msgid "description should start with an upper-case letter or digit"
+msgstr "popis by mal začínať veľkým písmenom alebo číslicou"
+
+#: guix/lint.scm:266
+#, scheme-format
+msgid ""
+"sentences in description should be followed ~\n"
+"by two spaces; possible infraction~p at ~{~a~^, ~}"
+msgstr ""
+"vety v popise by mali byť oddelené ~\n"
+"dvomi medzerami; možné porušenie pravidla~p na ~{~a~^, ~}"
+
+#: guix/lint.scm:287
+#, scheme-format
+msgid "invalid description: ~s"
+msgstr "neplatný popis: ~s"
+
+#: guix/lint.scm:357
+#, scheme-format
+msgid "'~a' should probably be a native input"
+msgstr "„~a“ by mal byť pravdepodobne pôvodným vstupom"
+
+#: guix/lint.scm:372
+#, scheme-format
+msgid "'~a' should probably not be an input at all"
+msgstr "„~a“ by pravdepodobne vôbec nemal byť vstupom"
+
+#: guix/lint.scm:393
+msgid "no period allowed at the end of the synopsis"
+msgstr "súhrnný popis nemôže končiť bodkou"
+
+#: guix/lint.scm:407
+msgid "no article allowed at the beginning of the synopsis"
+msgstr "súhrnný popis nemôže začínať členom"
+
+#: guix/lint.scm:416
+msgid "synopsis should be less than 80 characters long"
+msgstr "súhrnný popis by nemal byť dlhší ako 80 znakov"
+
+#: guix/lint.scm:425
+msgid "synopsis should start with an upper-case letter or digit"
+msgstr "súhrnný popis by mal začínať veľkým písmenom alebo číslicou"
+
+#: guix/lint.scm:433
+msgid "synopsis should not start with the package name"
+msgstr "súhrnný popis by nemal začínať názvom balíka"
+
+#: guix/lint.scm:447
+msgid "Texinfo markup in synopsis is invalid"
+msgstr "značkovanie Texinfo v súhrnnom popise je neplatné"
+
+#: guix/lint.scm:462
+msgid "synopsis should not be empty"
+msgstr "súhrnný popis by nemal zostať prázdny"
+
+#: guix/lint.scm:472
+#, scheme-format
+msgid "invalid synopsis: ~s"
+msgstr "neplatný súhrnný popis: ~s"
+
+#: guix/lint.scm:590
+#, scheme-format
+msgid "URI ~a returned suspiciously small file (~a bytes)"
+msgstr "prepojenie ~a poskytlo podozrivo malý súbor (~a bajtov)"
+
+#: guix/lint.scm:599
+#, scheme-format
+msgid "permanent redirect from ~a to ~a"
+msgstr "stále presmerovanie z ~a na ~a"
+
+#: guix/lint.scm:605
+#, scheme-format
+msgid "invalid permanent redirect from ~a"
+msgstr "neplatné stále presmerovanie z ~a"
+
+#: guix/lint.scm:611 guix/lint.scm:621
+#, scheme-format
+msgid "URI ~a not reachable: ~a (~s)"
+msgstr "prepojenie ~a je neprístupné: ~a (~s)"
+
+#: guix/lint.scm:627
+#, scheme-format
+msgid "URI ~a domain not found: ~a"
+msgstr "doména prepojenia ~a sa nenašla: ~a"
+
+#: guix/lint.scm:633
+#, scheme-format
+msgid "URI ~a unreachable: ~a"
+msgstr "prepojenie ~a nie je prístupné: ~a"
+
+#: guix/lint.scm:641
+#, scheme-format
+msgid "TLS certificate error: ~a"
+msgstr "chyba certifikátu TLS: ~a"
+
+#: guix/lint.scm:668
+msgid "invalid value for home page"
+msgstr "neplatná hodnota pre domovskú stránku"
+
+#: guix/lint.scm:673
+#, scheme-format
+msgid "invalid home page URL: ~s"
+msgstr "neplatné prepojenie na domovskú stránku: ~s"
+
+#: guix/lint.scm:710
+msgid "file names of patches should start with the package name"
+msgstr "názvy súborov záplat by nemali začínať názvom balíka"
+
+#: guix/lint.scm:726
+#, scheme-format
+msgid "~a: file name is too long"
+msgstr "~a: názov súboru je príliš dlhý"
+
+#: guix/lint.scm:747
+#, scheme-format
+msgid "~a: empty patch"
+msgstr "~a: prázdna záplata"
+
+#: guix/lint.scm:755
+#, scheme-format
+msgid "~a: patch lacks comment and upstream status"
+msgstr "~a: záplate chýba komentár a jej stav u poskytovateľa softvéru"
+
+#: guix/lint.scm:816
+#, scheme-format
+msgid "proposed synopsis: ~s~%"
+msgstr "navrhovaný súhrnný popis: ~s~%"
+
+#: guix/lint.scm:830
+#, scheme-format
+msgid "proposed description:~%     \"~a\"~%"
+msgstr "navrhovaný popis:~%     „~a“~%"
+
+#: guix/lint.scm:881
+msgid "all the source URIs are unreachable:"
+msgstr "všetky zdrojové prepojenia sú neprístupné:"
+
+#: guix/lint.scm:910
+msgid "the source file name should contain the package name"
+msgstr "názov zdrojového súboru by nemal obsahovať názov balíka"
+
+#: guix/lint.scm:922
+msgid "the source URI should not be an autogenerated tarball"
+msgstr ""
+"zdrojové prepojenie by nemalo odkazovať na automaticky vygenerovaný tar "
+"archív"
+
+#: guix/lint.scm:946
+#, scheme-format
+msgid "URL should be 'mirror://~a/~a'"
+msgstr "prepojenie by malo byť „zrkadlo://~a/~a“"
+
+#: guix/lint.scm:991
+#, scheme-format
+msgid "URL should be '~a'"
+msgstr "prepojenie by malo byť „~a“"
+
+#: guix/lint.scm:1013 guix/lint.scm:1024 guix/lint.scm:1032
+#, scheme-format
+msgid "failed to create ~a derivation: ~a"
+msgstr "nepodarilo sa vytvoriť odvodeninu pre ~a: ~a"
+
+#: guix/lint.scm:1018 guix/lint.scm:1046
+#, scheme-format
+msgid "failed to create ~a derivation: ~s"
+msgstr "nepodarilo sa vytvoriť odvodeninu pre ~a: ~s"
+
+#: guix/lint.scm:1074
+#, scheme-format
+msgid "propagated inputs ~a and ~a collide"
+msgstr "rozšírený vstup ~a je v rozpore s ~a"
+
+#: guix/lint.scm:1098
+msgid "invalid license field"
+msgstr "neplatné pole licencie"
+
+#: guix/lint.scm:1105
+#, scheme-format
+msgid "~a: HTTP GET error for ~a: ~a (~s)~%"
+msgstr "~a: chyba HTTP GET pre ~a: ~a (~s)~%"
+
+#: guix/lint.scm:1115
+#, scheme-format
+msgid "~a: host lookup failure: ~a~%"
+msgstr "~a: chyba pri zisťovaní názvu hostiteľa: ~a~%"
+
+#: guix/lint.scm:1120
+#, scheme-format
+msgid "~a: TLS certificate error: ~a"
+msgstr "~a: chyba TLS certifikátu: ~a"
+
+#: guix/lint.scm:1131 guix/ui.scm:846 guix/scripts/offload.scm:191
+#, scheme-format
+msgid "~a: ~a~%"
+msgstr "~a: ~a~%"
+
+#: guix/lint.scm:1145
+msgid "while retrieving CVE vulnerabilities"
+msgstr "pri získavaní zraniteľností CVE"
+
+#: guix/lint.scm:1188
+#, scheme-format
+msgid "probably vulnerable to ~a"
+msgstr "pravdepodobne ohrozený ~a"
+
+#: guix/lint.scm:1196
+#, scheme-format
+msgid "no updater for ~a"
+msgstr "žiadny nástroj na aktualizáciu pre ~a"
+
+#: guix/lint.scm:1201 guix/lint.scm:1319
+#, scheme-format
+msgid "while retrieving upstream info for '~a'"
+msgstr "pri získavaní informácií od poskytovateľa o „~a“"
+
+#: guix/lint.scm:1210
+#, scheme-format
+msgid "can be upgraded to ~a"
+msgstr "môže byť aktualizovaný na ~a"
+
+#: guix/lint.scm:1216
+#, scheme-format
+msgid "updater '~a' failed to find upstream releases"
+msgstr "nástroju na aktualizáciu „~a“ sa nepodarilo nájsť dostupné vydania"
+
+#: guix/lint.scm:1233
+msgid "Software Heritage rate limit reached; try again later"
+msgstr ""
+"bol dosiahnutý povolený počet požiadaviek na Software Heritage; skúste to "
+"znova neskôr"
+
+#: guix/lint.scm:1237
+#, scheme-format
+msgid "'~a' returned ~a"
+msgstr "„~a“ vrátil ~a"
+
+#. TRANSLATORS: "Software Heritage" is a proper noun
+#. that must remain untranslated.  See
+#. <https://www.softwareheritage.org>.
+#: guix/lint.scm:1276
+msgid "scheduled Software Heritage archival"
+msgstr "archivovanie v Software Heritage bolo naplánované"
+
+#: guix/lint.scm:1282
+msgid "archival rate limit exceeded; try again later"
+msgstr "počet archivovaní bol prekročený; skúste to znova neskôr"
+
+#: guix/lint.scm:1298
+msgid "source not archived on Software Heritage"
+msgstr "zdroje neboli archivované v Software Heritage"
+
+#: guix/lint.scm:1311
+msgid "while connecting to Software Heritage"
+msgstr "pri pripájaní do Software Heritage"
+
+#: guix/lint.scm:1328
+#, scheme-format
+msgid "ahead of Stackage LTS version ~a"
+msgstr "novší ako verzia Stackage LTS ~a"
+
+#: guix/lint.scm:1345
+#, scheme-format
+msgid "tabulation on line ~a, column ~a"
+msgstr "odsek v riadku ~a, stĺpec ~a"
+
+#: guix/lint.scm:1357
+#, scheme-format
+msgid "trailing white space on line ~a"
+msgstr "medzera na konci riadku ~a"
+
+#: guix/lint.scm:1371
+#, scheme-format
+msgid "line ~a is way too long (~a characters)"
+msgstr "riadok ~a je príliš dlhý (~a znakov)"
+
+#: guix/lint.scm:1385
+msgid "parentheses feel lonely, move to the previous or next line"
+msgstr ""
+"zátvorky sa cítia osamotene, premiestnite ich do predchádzajúceho alebo "
+"nasledujúceho riadku"
+
+#: guix/lint.scm:1462
+msgid "source file not found"
+msgstr "zdrojový súbor sa nenašiel"
+
+#: guix/lint.scm:1474
+msgid "Validate package names"
+msgstr "Overiť názvy balíkov"
+
+#: guix/lint.scm:1478
+msgid "Validate package descriptions"
+msgstr "Overiť popisy balíkov"
+
+#: guix/lint.scm:1482
+msgid "Identify inputs that should be native inputs"
+msgstr "Označiť vstupy, ktoré by mali byť pôvodné"
+
+#: guix/lint.scm:1486
+msgid "Identify inputs that shouldn't be inputs at all"
+msgstr "Označiť vstupy, ktoré by vôbec nemali byť vstupmi"
+
+#. TRANSLATORS: <license> is the name of a data type and must not be
+#. translated.
+#: guix/lint.scm:1492
+msgid "Make sure the 'license' field is a <license> or a list thereof"
+msgstr "Zaistiť, že pole „licence“ obsahuje <licence> alebo ich zoznam"
+
+#: guix/lint.scm:1497
+msgid "Suggest 'mirror://' URLs"
+msgstr "Odporúča zdroje „mirror://“"
+
+#: guix/lint.scm:1501
+msgid "Validate file names of sources"
+msgstr "Overiť názvy zdrojových súborov"
+
+#: guix/lint.scm:1505
+msgid "Check for autogenerated tarballs"
+msgstr "Overiť, či sú prítomné automaticky vytvorené tar archívy"
+
+#: guix/lint.scm:1509
+msgid "Report failure to compile a package to a derivation"
+msgstr "Nahlásiť zlyhanie zostavovania odvodeniny balíka"
+
+#: guix/lint.scm:1514
+msgid "Report collisions that would occur due to propagated inputs"
+msgstr "Nahlásiť rozpory, ktoré by mohli nastať kvôli rozšíreným vstupom"
+
+#: guix/lint.scm:1519
+msgid "Validate file names and availability of patches"
+msgstr "Overiť názvy súborov a dostupnosť záplat"
+
+#: guix/lint.scm:1523
+msgid "Validate patch headers"
+msgstr "Overiť hlavičky záplat"
+
+#: guix/lint.scm:1527
+msgid "Look for formatting issues in the source"
+msgstr "Vyhľadať chyby formátovania v zdrojovom súbore"
+
+#: guix/lint.scm:1534
+msgid "Validate package synopses"
+msgstr "Overiť súhrnné popisy balíkov"
+
+#: guix/lint.scm:1538
+msgid "Validate synopsis & description of GNU packages"
+msgstr "Overiť súhrnné popisy a popisy GNU balíkov"
+
+#: guix/lint.scm:1542
+msgid "Validate home-page URLs"
+msgstr "Overiť prepojenia na domovské stránky"
+
+#: guix/lint.scm:1546
+msgid "Validate source URLs"
+msgstr "Overiť prepojenia na zdroje"
+
+#: guix/lint.scm:1550
+msgid "Suggest GitHub URLs"
+msgstr "Navrhnúť prepojenia na GitHub"
+
+#: guix/lint.scm:1554
+msgid "Check the Common Vulnerabilities and Exposures (CVE) database"
+msgstr "Overiť databázu Všeobecne známych zraniteľností a chýb (CVE)"
+
+#: guix/lint.scm:1559
+msgid "Check the package for new upstream releases"
+msgstr "Vyhľadať novšie vydania balíka"
+
+#: guix/lint.scm:1563
+msgid "Ensure source code archival on Software Heritage"
+msgstr "Zaistiť archivovanie zdrojového kódu v Software Heritage"
+
+#: guix/lint.scm:1567
+msgid "Ensure Haskell packages use Stackage LTS versions"
+msgstr "Zaistiť, že balíky Haskellu používajú verzie Stackage LTS"
+
+#: guix/scripts/download.scm:87
+msgid ""
+"Usage: guix download [OPTION] URL\n"
+"Download the file at URL to the store or to the given file, and print its\n"
+"file name and the hash of its contents.\n"
+msgstr ""
+"Použitie: guix download [PREPÍNAČ] PREPOJENIE\n"
+"Použiť PREPOJENIE na stiahnutie súboru do úložiska alebo do zadaného "
+"umiestnenia\n"
+"a zobraziť jeho názov a odtlačok obsahu.\n"
+
+#: guix/scripts/download.scm:91 guix/scripts/hash.scm:53
+msgid ""
+"Supported formats: 'base64', 'nix-base32' (default), 'base32',\n"
+"and 'base16' ('hex' and 'hexadecimal' can be used as well).\n"
+msgstr ""
+"Podporované formáty: „base64“, „nix-base32“ (predvolený), „base32“,\n"
+"a „base16“ (takisto môžu byť použité aj „hex“ a „hexadecimal“).\n"
+
+#: guix/scripts/download.scm:94 guix/scripts/hash.scm:60
+msgid ""
+"\n"
+"  -f, --format=FMT       write the hash in the given format"
+msgstr ""
+"\n"
+"  -f, --format=FORMÁT       vytvoriť odtlačok vo FORMÁTE"
+
+#: guix/scripts/download.scm:96 guix/scripts/hash.scm:58
+msgid ""
+"\n"
+"  -H, --hash=ALGORITHM   use the given hash ALGORITHM"
+msgstr ""
+"\n"
+"  -H, --hash=ALGORITMUS   použiť ALGORITMUS na vytvorenie odtlačku"
+
+#: guix/scripts/download.scm:98
+msgid ""
+"\n"
+"      --no-check-certificate\n"
+"                         do not validate the certificate of HTTPS servers "
+msgstr ""
+"\n"
+"      --no-check-certificate\n"
+"                         neoverovať certifikáty HTTPS serverov "
+
+#: guix/scripts/download.scm:101
+msgid ""
+"\n"
+"  -o, --output=FILE      download to FILE"
+msgstr ""
+"\n"
+"  -o, --output=SÚBOR      stiahnuť do SÚBORU"
+
+#: guix/scripts/download.scm:126 guix/scripts/hash.scm:97
+#, scheme-format
+msgid "unsupported hash format: ~a~%"
+msgstr "nepodporovaný formát odtlačku: ~a~%"
+
+#: guix/scripts/download.scm:134 guix/scripts/hash.scm:81
+#, scheme-format
+msgid "~a: unknown hash algorithm~%"
+msgstr "~a: neznámy algoritmus na vytváranie odtlačkov~%"
+
+#: guix/scripts/download.scm:171 guix/scripts/package.scm:1072
+#: guix/scripts/pull.scm:760 guix/scripts/publish.scm:1125
+#: guix/scripts/time-machine.scm:123
+#, scheme-format
+msgid "~A: extraneous argument~%"
+msgstr "~A: nadbytočný parameter~%"
+
+#: guix/scripts/download.scm:177
+#, scheme-format
+msgid "no download URI was specified~%"
+msgstr "nebolo zadané žiadne prepojenie sťahovania~%"
+
+#: guix/scripts/download.scm:182
+#, scheme-format
+msgid "~a: failed to parse URI~%"
+msgstr "~a: nepodarilo sa spracovať prepojenie~%"
+
+#: guix/scripts/download.scm:192
+#, scheme-format
+msgid "~a: download failed~%"
+msgstr "~a: sťahovanie zlyhalo~%"
+
+#: guix/scripts/package.scm:128
+#, scheme-format
+msgid "not removing generation ~a, which is current~%"
+msgstr "aktuálne pokolenie ~a nebude odstránené~%"
+
+#: guix/scripts/package.scm:135
+#, scheme-format
+msgid "no matching generation~%"
+msgstr "žiadne pokolenie sa nezhoduje~%"
+
+#: guix/scripts/package.scm:157
+#, scheme-format
+msgid "nothing to be done~%"
+msgstr "nevyžaduje sa žiadna činnosť~%"
+
+#: guix/scripts/package.scm:258
+#, scheme-format
+msgid "package '~a' no longer exists~%"
+msgstr "balík „~a“ už neexistuje~%"
+
+#: guix/scripts/package.scm:313
+#, scheme-format
+msgid ""
+"Consider setting the necessary environment\n"
+"variables by running:\n"
+"\n"
+"@example\n"
+"GUIX_PROFILE=\"~a\"\n"
+". \"$GUIX_PROFILE/etc/profile\"\n"
+"@end example\n"
+"\n"
+"Alternately, see @command{guix package --search-paths -p ~s}."
+msgstr ""
+"Zvážte nastavenie potrebných premenných\n"
+"prostredia pomocou:\n"
+"\n"
+"@example\n"
+"GUIX_PROFILE=\"~a\"\n"
+". \"$GUIX_PROFILE/etc/profile\"\n"
+"@end example\n"
+"\n"
+"Pozri tiež @command{guix package --search-paths -p ~s}."
+
+#: guix/scripts/package.scm:355
+msgid ""
+";; This \"manifest\" file can be passed to 'guix package -m' to reproduce\n"
+";; the content of your profile.  This is \"symbolic\": it only specifies\n"
+";; package names.  To reproduce the exact same profile, you also need to\n"
+";; capture the channels being used, as returned by \"guix describe\".\n"
+";; See the \"Replicating Guix\" section in the manual.\n"
+msgstr ""
+";; Tento „manifest“ súbor môžete pomocou príkazu „guix package -m“ použiť\n"
+";; na napodobnenie vášho profilu. Tento obsah je „symbolický“ a určuje iba "
+"názvy\n"
+";; balíkov. Na napodobnenie rovnakého profilu si budete ešte musieť "
+"zaznamenať\n"
+";; aj použité kanály, ktorých podrobnosti poskytuje príkaz „guix describe“.\n"
+";; Pozri oddiel „Rozmnožovanie systému Guix“ v príručke.\n"
+
+#: guix/scripts/package.scm:387
+#, scheme-format
+msgid "no provenance information for this profile~%"
+msgstr "žiadne údaje o pôvode pre tento profil~%"
+
+#: guix/scripts/package.scm:389
+msgid ""
+";; This channel file can be passed to 'guix pull -C' or to\n"
+";; 'guix time-machine -C' to obtain the Guix revision that was\n"
+";; used to populate this profile.\n"
+msgstr ""
+";; Tento súbor kanálov môžete pomocou príkazu „guix pull -C“\n"
+";; alebo „guix time-machine -C“ použiť na zistenie čísla úpravy\n"
+";; systému Guix, ktorá bola použitá pri vytváraní tohto profilu.\n"
+
+#: guix/scripts/package.scm:401
+#, scheme-format
+msgid ""
+";; Note: these other commits were also used to install some of the packages "
+"in this profile:~%"
+msgstr ""
+";; Poznámka: aj tieto čísla úprav boli použité pri inštalácii niektorých "
+"balíkov tohto profilu:~%"
+
+#: guix/scripts/package.scm:431
+msgid ""
+"Usage: guix package [OPTION]...\n"
+"Install, remove, or upgrade packages in a single transaction.\n"
+msgstr ""
+"Použitie: guix package [PREPÍNAČ]...\n"
+"Inštalovať, odstrániť alebo aktualizovať balíky vrámci jednej nedeliteľnej "
+"úlohy.\n"
+
+#: guix/scripts/package.scm:433
+msgid ""
+"\n"
+"  -i, --install PACKAGE ...\n"
+"                         install PACKAGEs"
+msgstr ""
+"\n"
+"  -i, --install BALÍK ...\n"
+"                         inštalovať BALÍKY"
+
+#: guix/scripts/package.scm:436
+msgid ""
+"\n"
+"  -e, --install-from-expression=EXP\n"
+"                         install the package EXP evaluates to"
+msgstr ""
+"\n"
+"  -e, --install-from-expression=VÝRAZ\n"
+"                         inštalovať balíky, ktorých názvy sú výsledkom "
+"vyhodnotenia VÝRAZU"
+
+#: guix/scripts/package.scm:439
+msgid ""
+"\n"
+"  -f, --install-from-file=FILE\n"
+"                         install the package that the code within FILE\n"
+"                         evaluates to"
+msgstr ""
+"\n"
+"  -f, --install-from-file=SÚBOR\n"
+"                         inštalovať balíky, ktoré sú výsledkom vyhodnotenia\n"
+"                         kódu v SÚBORE"
+
+#: guix/scripts/package.scm:443
+msgid ""
+"\n"
+"  -r, --remove PACKAGE ...\n"
+"                         remove PACKAGEs"
+msgstr ""
+"\n"
+"  -r, --remove BALÍK ...\n"
+"                         odstrániť BALÍKY"
+
+#: guix/scripts/package.scm:446
+msgid ""
+"\n"
+"  -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP"
+msgstr ""
+"\n"
+"  -u, --upgrade[=VÝRAZ] aktualizovať všetky nainštalované balíky, ktorých "
+"názov sa zhoduje s regulárnym VÝRAZOM"
+
+#: guix/scripts/package.scm:448
+msgid ""
+"\n"
+"  -m, --manifest=FILE    create a new profile generation with the manifest\n"
+"                         from FILE"
+msgstr ""
+"\n"
+"  -m, --manifest=SÚBOR    vytvoriť nové pokolenie profilu podľa\n"
+"                         manifestu zo SÚBORU"
+
+#: guix/scripts/package.scm:451 guix/scripts/upgrade.scm:41
+msgid ""
+"\n"
+"      --do-not-upgrade[=REGEXP] do not upgrade any packages matching REGEXP"
+msgstr ""
+"\n"
+"      --do-not-upgrade[=VÝRAZ] neaktualizovať žiadne balíky, ktorých názov "
+"sa zhoduje s regulárnym VÝRAZOM"
+
+#: guix/scripts/package.scm:453 guix/scripts/pull.scm:109
+msgid ""
+"\n"
+"      --roll-back        roll back to the previous generation"
+msgstr ""
+"\n"
+"      --roll-back        vrátiť sa k predchádzajúcemu pokoleniu"
+
+#: guix/scripts/package.scm:455
+msgid ""
+"\n"
+"      --search-paths[=KIND]\n"
+"                         display needed environment variable definitions"
+msgstr ""
+"\n"
+"      --search-paths[=DRUH]\n"
+"                         zobraziť potrebné zadania premenných prostredia"
+
+#: guix/scripts/package.scm:458 guix/scripts/pull.scm:106
+msgid ""
+"\n"
+"  -l, --list-generations[=PATTERN]\n"
+"                         list generations matching PATTERN"
+msgstr ""
+"\n"
+"  -l, --list-generations[=VZOR]\n"
+"                         zobraziť pokolenia zhodujúce sa so VZOROM"
+
+#: guix/scripts/package.scm:461 guix/scripts/pull.scm:111
+msgid ""
+"\n"
+"  -d, --delete-generations[=PATTERN]\n"
+"                         delete generations matching PATTERN"
+msgstr ""
+"\n"
+"  -d, --delete-generations[=VZOR]\n"
+"                         odstrániť pokolenia zhodujúce sa so VZOROM"
+
+#: guix/scripts/package.scm:464 guix/scripts/pull.scm:114
+msgid ""
+"\n"
+"  -S, --switch-generation=PATTERN\n"
+"                         switch to a generation matching PATTERN"
+msgstr ""
+"\n"
+"  -S, --switch-generation=VZOR\n"
+"                         prepnúť na pokolenie zhodujúce sa so VZOROM"
+
+#: guix/scripts/package.scm:467
+msgid ""
+"\n"
+"      --export-manifest  print a manifest for the chosen profile"
+msgstr ""
+"\n"
+"      --export-manifest  zobraziť manifest zodpovedajúci zvolenému profilu"
+
+#: guix/scripts/package.scm:469
+msgid ""
+"\n"
+"      --export-channels  print channels for the chosen profile"
+msgstr ""
+"\n"
+"      --export-channels  zobraziť kanály zvoleného profilu"
+
+#: guix/scripts/package.scm:471 guix/scripts/install.scm:34
+#: guix/scripts/remove.scm:33 guix/scripts/upgrade.scm:37
+msgid ""
+"\n"
+"  -p, --profile=PROFILE  use PROFILE instead of the user's default profile"
+msgstr ""
+"\n"
+"  -p, --profile=PROFIL  použiť PROFIL namiesto predvoleného profilu "
+"používateľa"
+
+#: guix/scripts/package.scm:473
+msgid ""
+"\n"
+"      --list-profiles    list the user's profiles"
+msgstr ""
+"\n"
+"      --list-profiles    zobraziť profily používateľa"
+
+#: guix/scripts/package.scm:476
+msgid ""
+"\n"
+"      --allow-collisions do not treat collisions in the profile as an error"
+msgstr ""
+"\n"
+"      --allow-collisions nepovažovať rozpory v profile za chyby"
+
+#: guix/scripts/package.scm:478
+msgid ""
+"\n"
+"      --bootstrap        use the bootstrap Guile to build the profile"
+msgstr ""
+"\n"
+"      --bootstrap        použiť zavádzací Guile na zostavenie profilu"
+
+#: guix/scripts/package.scm:483
+msgid ""
+"\n"
+"  -s, --search=REGEXP    search in synopsis and description using REGEXP"
+msgstr ""
+"\n"
+"  -s, --search=REGULÁRNY-VÝRAZ    vyhľadávať v súhrnných popisoch a popisoch "
+"s použitím REGULÁRNEHO-VÝRAZU"
+
+#: guix/scripts/package.scm:485
+msgid ""
+"\n"
+"  -I, --list-installed[=REGEXP]\n"
+"                         list installed packages matching REGEXP"
+msgstr ""
+"\n"
+"  -I, --list-installed[=REGULÁRNY-VÝRAZ]\n"
+"                         zobraziť nainštalované balíky, ktorých názvy sa "
+"zhodujú s REGULÁRNYM-VÝRAZOM"
+
+#: guix/scripts/package.scm:488
+msgid ""
+"\n"
+"  -A, --list-available[=REGEXP]\n"
+"                         list available packages matching REGEXP"
+msgstr ""
+"\n"
+"  -A, --list-available[=REGULÁRNY-VÝRAZ]\n"
+"                         zobraziť dostupné balíky, ktorých názov sa zhoduje "
+"s REGULÁRNYM-VÝRAZOM"
+
+#: guix/scripts/package.scm:491
+msgid ""
+"\n"
+"      --show=PACKAGE     show details about PACKAGE"
+msgstr ""
+"\n"
+"      --show=BALÍK     zobraziť podrobnosti BALÍKA"
+
+#: guix/scripts/package.scm:546
+#, scheme-format
+msgid "upgrade regexp '~a' looks like a command-line option~%"
+msgstr "regulárny výraz „~a“ sa podobá na prepínač príkazu~%"
+
+#: guix/scripts/package.scm:549
+#, scheme-format
+msgid "is this intended?~%"
+msgstr "je to úmyselné?~%"
+
+#: guix/scripts/package.scm:599
+#, scheme-format
+msgid "~a: unsupported kind of search path~%"
+msgstr "~a: nepodporovaný druh prehľadávanej cesty~%"
+
+#: guix/scripts/package.scm:733
+#, scheme-format
+msgid "cannot install non-package object: ~s~%"
+msgstr "nedá sa nainštalovať niečo čo nie je balík: ~s~%"
+
+#: guix/scripts/package.scm:914
+#, scheme-format
+msgid "~a~@[@~a~]: package not found~%"
+msgstr "~a~@[@~a~]: balík sa nenašiel~%"
+
+#: guix/scripts/package.scm:961 guix/scripts/pull.scm:689
+#, scheme-format
+msgid "cannot switch to generation '~a'~%"
+msgstr "nepodarilo sa prepnúť na pokolenie „~a“~%"
+
+#: guix/scripts/install.scm:31
+msgid ""
+"Usage: guix install [OPTION] PACKAGES...\n"
+"Install the given PACKAGES.\n"
+"This is an alias for 'guix package -i'.\n"
+msgstr ""
+"Použitie: guix install [PREPÍNAČ] BALÍKY...\n"
+"Inštalovať BALÍKY.\n"
+"Tento príkaz odkazuje na „guix package -i“.\n"
+
+#: guix/scripts/remove.scm:30
+msgid ""
+"Usage: guix remove [OPTION] PACKAGES...\n"
+"Remove the given PACKAGES.\n"
+"This is an alias for 'guix package -r'.\n"
+msgstr ""
+"Použitie: guix remove [PREPÍNAČ] BALÍKY...\n"
+"Odstrániť BALÍKY.\n"
+"Tento príkaz odkazuje na „guix package -r“.\n"
+
+#: guix/scripts/upgrade.scm:34
+msgid ""
+"Usage: guix upgrade [OPTION] [REGEXP]\n"
+"Upgrade packages that match REGEXP.\n"
+"This is an alias for 'guix package -u'.\n"
+msgstr ""
+"Použitie: guix upgrade [PREPÍNAČ] [REGULÁRNY-VÝRAZ]\n"
+"Aktualizovať balíky, ktorých názov sa zhoduje s REGULÁRNYM-VÝRAZOM.\n"
+"Tento príkaz odkazuje na „guix package -u“.\n"
+
+#: guix/scripts/search.scm:32
+msgid ""
+"Usage: guix search [OPTION] REGEXPS...\n"
+"Search for packages matching REGEXPS."
+msgstr ""
+"Použitie: guix search [PREPÍNAČ] REGULÁRNE-VÝRAZY...\n"
+"Vyhľadať balíky, ktorých názov sa zhoduje s REGULÁRNYMI-VÝRAZMI."
+
+#: guix/scripts/search.scm:34
+msgid ""
+"\n"
+"This is an alias for 'guix package -s'.\n"
+msgstr ""
+"\n"
+"Tento príkaz odkazuje na „guix package -s“.\n"
+
+#: guix/scripts/search.scm:75
+#, scheme-format
+msgid "missing arguments: no regular expressions to search for~%"
+msgstr "chýbajúce parametre: žiadne regulárne výrazy pre vyhľadávanie~%"
+
+#: guix/scripts/show.scm:31
+msgid ""
+"Usage: guix show [OPTION] PACKAGE...\n"
+"Show details about PACKAGE."
+msgstr ""
+"Použitie: guix show [PREPÍNAČ] BALÍK...\n"
+"Zobraziť podrobnosti BALÍKA."
+
+#: guix/scripts/show.scm:33
+msgid ""
+"\n"
+"This is an alias for 'guix package --show='.\n"
+msgstr ""
+"\n"
+"Tento príkaz odkazuje na „guix package --show=“.\n"
+
+#: guix/scripts/show.scm:74
+#, scheme-format
+msgid "missing arguments: no package to show~%"
+msgstr "chýbajúce parametre: žiadny balík na zobrazenie~%"
+
+#: guix/scripts/gc.scm:47
+msgid ""
+"Usage: guix gc [OPTION]... PATHS...\n"
+"Invoke the garbage collector.\n"
+msgstr ""
+"Použitie: guix gc [PREPÍNAČ]... CESTY...\n"
+"Spustiť zberač odpadkov (GC).\n"
+
+#: guix/scripts/gc.scm:49
+msgid ""
+"\n"
+"  -C, --collect-garbage[=MIN]\n"
+"                         collect at least MIN bytes of garbage"
+msgstr ""
+"\n"
+"  -C, --collect-garbage[=MIN]\n"
+"                         zozbierať najmenej MIN bajtov odpadu"
+
+#: guix/scripts/gc.scm:52
+msgid ""
+"\n"
+"  -F, --free-space=FREE  attempt to reach FREE available space in the store"
+msgstr ""
+"\n"
+"  -F, --free-space=VOĽNÉ  pokúsiť sa dosiahnuť dostupné VOĽNÉ miesto v "
+"úložisku"
+
+#: guix/scripts/gc.scm:54
+msgid ""
+"\n"
+"  -d, --delete-generations[=PATTERN]\n"
+"                         delete profile generations matching PATTERN"
+msgstr ""
+"\n"
+"  -d, --delete-generations[=VZOR]\n"
+"                         odstrániť pokolenia zhodujúce sa so VZOROM"
+
+#: guix/scripts/gc.scm:57
+msgid ""
+"\n"
+"  -D, --delete           attempt to delete PATHS"
+msgstr ""
+"\n"
+"  -D, --delete           pokúsiť sa odstrániť CESTY"
+
+#: guix/scripts/gc.scm:59
+msgid ""
+"\n"
+"      --list-roots       list the user's garbage collector roots"
+msgstr ""
+"\n"
+"      --list-roots       zobraziť korene zberača odpadkov pre používateľa"
+
+#: guix/scripts/gc.scm:61
+msgid ""
+"\n"
+"      --list-busy        list store items used by running processes"
+msgstr ""
+"\n"
+"      --list-busy        zobraziť položky úložiska používané práve "
+"spustenými procesmi"
+
+#: guix/scripts/gc.scm:63
+msgid ""
+"\n"
+"      --optimize         optimize the store by deduplicating identical files"
+msgstr ""
+"\n"
+"      --optimize         usporiť miesto v úložisku odstránením podvojných "
+"súborov"
+
+#: guix/scripts/gc.scm:65
+msgid ""
+"\n"
+"      --list-dead        list dead paths"
+msgstr ""
+"\n"
+"      --list-dead        zobraziť neplatné cesty"
+
+#: guix/scripts/gc.scm:67
+msgid ""
+"\n"
+"      --list-live        list live paths"
+msgstr ""
+"\n"
+"      --list-live        zobraziť platné cesty"
+
+#: guix/scripts/gc.scm:70
+msgid ""
+"\n"
+"      --references       list the references of PATHS"
+msgstr ""
+"\n"
+"      --references       zobraziť prepojenia na CESTY"
+
+#: guix/scripts/gc.scm:72
+msgid ""
+"\n"
+"  -R, --requisites       list the requisites of PATHS"
+msgstr ""
+"\n"
+"  -R, --requisites       zobraziť požiadavky pre CESTY"
+
+#: guix/scripts/gc.scm:74
+msgid ""
+"\n"
+"      --referrers        list the referrers of PATHS"
+msgstr ""
+"\n"
+"      --referrers        zobraziť odkazy na CESTY"
+
+#: guix/scripts/gc.scm:76
+msgid ""
+"\n"
+"      --derivers         list the derivers of PATHS"
+msgstr ""
+"\n"
+"      --derivers         zobraziť odvodeniny vedúce k CESTÁM"
+
+#: guix/scripts/gc.scm:79
+msgid ""
+"\n"
+"      --verify[=OPTS]    verify the integrity of the store; OPTS is a\n"
+"                         comma-separated combination of 'repair' and\n"
+"                         'contents'"
+msgstr ""
+"\n"
+"      --verify[=MOŽNOSTI]    overiť celistvosť úložiska; MOŽNOSTI sú\n"
+"                         kombináciou „repair“ a „contents“ oddelených\n"
+"                         čiarkou"
+
+#: guix/scripts/gc.scm:83
+msgid ""
+"\n"
+"      --list-failures    list cached build failures"
+msgstr ""
+"\n"
+"      --list-failures    zobraziť neúspešné zostavenia vo vyrovnávacej pamäti"
+
+#: guix/scripts/gc.scm:85
+msgid ""
+"\n"
+"      --clear-failures   remove PATHS from the set of cached failures"
+msgstr ""
+"\n"
+"      --clear-failures   odstrániť CESTY spomedzi zlyhaní vo vyrovnávacej "
+"pamäti"
+
+#: guix/scripts/gc.scm:99
+#, scheme-format
+msgid "~a: invalid '--verify' option~%"
+msgstr "~a: neplatný prepínač „--verify“~%"
+
+#: guix/scripts/gc.scm:142
+#, scheme-format
+msgid "invalid amount of storage: ~a~%"
+msgstr "neplatná veľkosť úložiska: ~a~%"
+
+#: guix/scripts/gc.scm:156
+#, scheme-format
+msgid "'-d' as an alias for '--delete' is deprecated; use '-D'~%"
+msgstr ""
+"používanie „-d“ namiesto „--delete“ sa už neodporúča; namiesto toho použite "
+"„-D“~%"
+
+#: guix/scripts/gc.scm:163
+#, scheme-format
+msgid "~s does not denote a duration~%"
+msgstr "~s neoznačuje trvanie~%"
+
+#: guix/scripts/gc.scm:251
+msgid "already ~h MiBs available on ~a, nothing to do~%"
+msgstr "na ~a už je ~h MiB voľného miesta, žiadna činnosť sa nevyžaduje~%"
+
+#: guix/scripts/gc.scm:254
+msgid "freeing ~h MiBs~%"
+msgstr "uvoľňuje sa ~h MiB~%"
+
+#: guix/scripts/gc.scm:293
+#, scheme-format
+msgid "extraneous arguments: ~{~a ~}~%"
+msgstr "nadbytočné parametre: ~{~a~}~%"
+
+#: guix/scripts/gc.scm:317 guix/scripts/gc.scm:320
+msgid "freed ~h MiBs~%"
+msgstr "uvoľnilo sa ~h MiB~%"
+
+#: guix/scripts/git.scm:26
+msgid ""
+"Usage: guix git COMMAND ARGS...\n"
+"Operate on Git repositories.\n"
+msgstr ""
+"Použitie: guix git PRÍKAZ PARAMETRE...\n"
+"Vykonáva príkazy v Git repozitároch.\n"
+
+#: guix/scripts/git.scm:29 guix/scripts/system.scm:939
+#: guix/scripts/container.scm:30
+msgid "The valid values for ACTION are:\n"
+msgstr "Platné hodnoty pre ČINNOSŤ sú:\n"
+
+#: guix/scripts/git.scm:31
+msgid "   authenticate    verify commit signatures and authorizations\n"
+msgstr "   authenticate    overuje podpisy úprav (commitov) a povolenia\n"
+
+#: guix/scripts/git.scm:57
+#, scheme-format
+msgid "guix git: missing sub-command~%"
+msgstr "guix git: chýba podpríkaz~%"
+
+#: guix/scripts/git.scm:67
+#, scheme-format
+msgid "guix git: invalid sub-command~%"
+msgstr "guix git: neplatný podpríkaz~%"
+
+#: guix/scripts/git/authenticate.scm:81
+#, scheme-format
+msgid "Signing statistics:~%"
+msgstr "Štatistika podpisovania:~%"
+
+#: guix/scripts/git/authenticate.scm:94
+msgid ""
+"Usage: guix git authenticate COMMIT SIGNER [OPTIONS...]\n"
+"Authenticate the given Git checkout using COMMIT/SIGNER as its "
+"introduction.\n"
+msgstr ""
+"Použitie: guix git authenticate ČÍSLO-ÚPRAVY PODPISUJÚCI [PREPÍNAČE...]\n"
+"Overiť daný Git repozitár od vstupného bodu ČÍSLO-ÚPRAVY(commit)/"
+"PODPISUJÚCI.\n"
+
+#: guix/scripts/git/authenticate.scm:96
+msgid ""
+"\n"
+"  -r, --repository=DIRECTORY\n"
+"                         open the Git repository at DIRECTORY"
+msgstr ""
+"\n"
+"  -r, --repository=PRIEČINOK\n"
+"                         otvoriť Git repozitár v PRIEČINKU"
+
+#: guix/scripts/git/authenticate.scm:99
+msgid ""
+"\n"
+"  -k, --keyring=REFERENCE\n"
+"                         load keyring from REFERENCE, a Git branch"
+msgstr ""
+"\n"
+"  -k, --keyring=ODKAZ\n"
+"                         načítať kľúčenku z ODKAZU, Git vetvy"
+
+#: guix/scripts/git/authenticate.scm:102
+msgid ""
+"\n"
+"      --stats            display commit signing statistics upon completion"
+msgstr ""
+"\n"
+"      --stats            po dokončení zobraziť štatistiku podpisovania"
+
+#: guix/scripts/git/authenticate.scm:104
+msgid ""
+"\n"
+"      --cache-key=KEY    cache authenticated commits under KEY"
+msgstr ""
+"\n"
+"      --cache-key=KĽÚČ    uložiť čísla úprav (commity) overené "
+"prostredníctvom KĽÚČA do vyrovnávacej pamäte"
+
+#: guix/scripts/git/authenticate.scm:106
+msgid ""
+"\n"
+"      --historical-authorizations=FILE\n"
+"                         read historical authorizations from FILE"
+msgstr ""
+"\n"
+"      --historical-authorizations=SÚBOR\n"
+"                         prečítať predchádzajúce overenia zo SÚBORU"
+
+#: guix/scripts/git/authenticate.scm:138
+msgid "Authenticating commits ~a to ~a (~h new commits)...~%"
+msgstr "Overovanie úprav (commitov) od ~a po ~a (~h nových úprav)...~%"
+
+#: guix/scripts/git/authenticate.scm:178
+#, scheme-format
+msgid "wrong number of arguments; expected COMMIT and SIGNER~%"
+msgstr ""
+"nesprávny počet parametrov; očakávali sa ČÍSLO-ÚPRAVY(COMMIT) a PODPISUJÚCI~%"
+
+#: guix/scripts/hash.scm:50
+msgid ""
+"Usage: guix hash [OPTION] FILE\n"
+"Return the cryptographic hash of FILE.\n"
+msgstr ""
+"Použitie: guix hash [PREPÍNAČ] SÚBOR\n"
+"Vrátiť kryptografický odtlačok SÚBORU.\n"
+
+#: guix/scripts/hash.scm:56
+msgid ""
+"\n"
+"  -x, --exclude-vcs      exclude version control directories"
+msgstr ""
+"\n"
+"  -x, --exclude-vcs      vylúčiť priečinky zo sledovania verzií"
+
+#: guix/scripts/hash.scm:62
+msgid ""
+"\n"
+"  -r, --recursive        compute the hash on FILE recursively"
+msgstr ""
+"\n"
+"  -r, --recursive        rekurzívne vypočítať odtlačok SÚBORU"
+
+#: guix/scripts/hash.scm:172 guix/ui.scm:398 guix/ui.scm:429 guix/ui.scm:789
+#: guix/ui.scm:837 guix/ui.scm:893
+#, scheme-format
+msgid "~a~%"
+msgstr "~a~%"
+
+#: guix/scripts/hash.scm:175 guix/scripts/system.scm:1298
+#: guix/scripts/system.scm:1314 guix/scripts/system.scm:1321
+#: guix/scripts/system.scm:1327 guix/scripts/import/gnu.scm:103
+#: guix/scripts/import/nix.scm:90 guix/scripts/offload.scm:826
+#: guix/scripts/offload.scm:838
+#, scheme-format
+msgid "wrong number of arguments~%"
+msgstr "nesprávny počet parametrov~%"
+
+#: guix/scripts/import.scm:89
+msgid ""
+"Usage: guix import IMPORTER ARGS ...\n"
+"Run IMPORTER with ARGS.\n"
+msgstr ""
+"Použitie: guix import NAHRÁVAČ PARAMETRE...\n"
+"Spustiť NAHRÁVAČ s PARAMETRAMI.\n"
+
+#: guix/scripts/import.scm:92
+msgid "IMPORTER must be one of the importers listed below:\n"
+msgstr "NAHRÁVAČ musí byť jeden z nahrávačov zobrazených nižšie:\n"
+
+#: guix/scripts/import.scm:109
+#, scheme-format
+msgid "guix import: missing importer name~%"
+msgstr "guix import: chýba názov nahrávača~%"
+
+#: guix/scripts/import.scm:131
+#, scheme-format
+msgid "'~a' import failed~%"
+msgstr "nahrávač „~a“ zlyhal~%"
+
+#: guix/scripts/import.scm:132
+#, scheme-format
+msgid "~a: invalid importer~%"
+msgstr "~a: neplatný nahrávač~%"
+
+#: guix/scripts/import/cran.scm:44
+msgid ""
+"Usage: guix import cran PACKAGE-NAME\n"
+"Import and convert the CRAN package for PACKAGE-NAME.\n"
+msgstr ""
+"Použitie: guix import cran NÁZOV-BALÍKA\n"
+"Nahrať a previesť CRAN balík s NÁZVOM-BALÍKA.\n"
+
+#: guix/scripts/import/cran.scm:46 guix/scripts/import/texlive.scm:44
+msgid ""
+"\n"
+"  -a, --archive=ARCHIVE  specify the archive repository"
+msgstr ""
+"\n"
+"  -a, --archive=ARCHÍV  určiť repozitár archívov"
+
+#: guix/scripts/import/cran.scm:50 guix/scripts/import/crate.scm:46
+#: guix/scripts/import/opam.scm:45 guix/scripts/import/pypi.scm:46
+msgid ""
+"\n"
+"  -r, --recursive        import packages recursively"
+msgstr ""
+"\n"
+"  -r, --recursive        nahrať balíky rekurzívne"
+
+#: guix/scripts/import/cran.scm:52
+msgid ""
+"\n"
+"  -s, --style=STYLE      choose output style, either specification or "
+"variable"
+msgstr ""
+"\n"
+"  -s, --style=ŠTÝL      vybrať štýl výstupu, buď „specification“ alebo "
+"„variable“"
+
+#: guix/scripts/import/cran.scm:116 guix/scripts/import/texlive.scm:95
+#, scheme-format
+msgid "failed to download description for package '~a'~%"
+msgstr "chyba pri sťahovaní popisu balíka „~a“~%"
+
+#: guix/scripts/import/cran.scm:120 guix/scripts/import/elpa.scm:113
+#: guix/scripts/import/cpan.scm:90 guix/scripts/import/crate.scm:107
+#: guix/scripts/import/gem.scm:104 guix/scripts/import/go.scm:125
+#: guix/scripts/import/hackage.scm:161 guix/scripts/import/json.scm:100
+#: guix/scripts/import/opam.scm:110 guix/scripts/import/pypi.scm:105
+#: guix/scripts/import/stackage.scm:133 guix/scripts/import/texlive.scm:99
+#, scheme-format
+msgid "too few arguments~%"
+msgstr "primálo parametrov~%"
+
+#: guix/scripts/import/cran.scm:122 guix/scripts/import/elpa.scm:115
+#: guix/scripts/import/cpan.scm:92 guix/scripts/import/crate.scm:109
+#: guix/scripts/import/gem.scm:106 guix/scripts/import/go.scm:127
+#: guix/scripts/import/hackage.scm:152 guix/scripts/import/hackage.scm:163
+#: guix/scripts/import/json.scm:102 guix/scripts/import/opam.scm:112
+#: guix/scripts/import/pypi.scm:107 guix/scripts/import/stackage.scm:135
+#: guix/scripts/import/texlive.scm:101
+#, scheme-format
+msgid "too many arguments~%"
+msgstr "priveľa parametrov~%"
+
+#: guix/scripts/import/elpa.scm:44
+msgid ""
+"Usage: guix import elpa PACKAGE-NAME\n"
+"Import the latest package named PACKAGE-NAME from an ELPA repository.\n"
+msgstr ""
+"Použitie: guix import elpa NÁZOV-BALÍKA\n"
+"Nahrať najnovší balík s názvom NÁZOV-BALÍKA z repozitára ELPA.\n"
+
+#: guix/scripts/import/elpa.scm:46
+msgid ""
+"\n"
+"  -a, --archive=ARCHIVE          specify the archive repository"
+msgstr ""
+"\n"
+"  -a, --archive=ARCHÍV          určiť repozitár archívov"
+
+#: guix/scripts/import/elpa.scm:48
+msgid ""
+"\n"
+"  -h, --help                     display this help and exit"
+msgstr ""
+"\n"
+"  -h, --help                     zobraziť túto pomôcku a skončiť"
+
+#: guix/scripts/import/elpa.scm:50
+msgid ""
+"\n"
+"  -r, --recursive                generate package expressions for all Emacs "
+"packages that are not yet in Guix"
+msgstr ""
+"\n"
+"  -r, --recursive                vytvoriť výrazy balíkov pre všetky balíky "
+"Emacs, ktoré ešte nie sú dostupné v systéme Guix"
+
+#: guix/scripts/import/elpa.scm:52
+msgid ""
+"\n"
+"  -V, --version                  display version information and exit"
+msgstr ""
+"\n"
+"  -V, --version                  zobraziť podrobnosti o verzii a skončiť"
+
+#: guix/scripts/import/elpa.scm:110
+#, scheme-format
+msgid "failed to download package '~a'~%"
+msgstr "chyba pri sťahovaní balíka „~a“~%"
+
+#: guix/scripts/pull.scm:89
+msgid ""
+"Usage: guix pull [OPTION]...\n"
+"Download and deploy the latest version of Guix.\n"
+msgstr ""
+"Použitie: guix pull [PREPÍNAČ]...\n"
+"Stiahnuť a prejsť na najnovšiu verziu systému Guix.\n"
+
+#: guix/scripts/pull.scm:91 guix/scripts/time-machine.scm:53
+msgid ""
+"\n"
+"  -C, --channels=FILE    deploy the channels defined in FILE"
+msgstr ""
+"\n"
+"  -C, --channels=SÚBOR    použiť kanály zo SÚBORU"
+
+#: guix/scripts/pull.scm:93
+msgid ""
+"\n"
+"      --url=URL          download \"guix\" channel from the Git repository "
+"at URL"
+msgstr ""
+"\n"
+"      --url=PREPOJENIE          stiahnuť Git repozitár kanála „guix“ z "
+"PREPOJENIA"
+
+#: guix/scripts/pull.scm:95
+msgid ""
+"\n"
+"      --commit=COMMIT    download the specified \"guix\" channel COMMIT"
+msgstr ""
+"\n"
+"      --commit=ÚPRAVA    stiahnuť danú úpravu (commit) kanála „guix“"
+
+#: guix/scripts/pull.scm:97
+msgid ""
+"\n"
+"      --branch=BRANCH    download the tip of the specified \"guix\" channel "
+"BRANCH"
+msgstr ""
+"\n"
+"      --branch=VETVA    stiahnuť koniec danej VETVY kanála „guix“"
+
+#: guix/scripts/pull.scm:99
+msgid ""
+"\n"
+"      --allow-downgrades allow downgrades to earlier channel revisions"
+msgstr ""
+"\n"
+"      --allow-downgrades povoliť návrat k predchádzajúcim úpravám kanálov"
+
+#: guix/scripts/pull.scm:101 guix/scripts/time-machine.scm:61
+msgid ""
+"\n"
+"      --disable-authentication\n"
+"                         disable channel authentication"
+msgstr ""
+"\n"
+"      --disable-authentication\n"
+"                         vypnúť overovanie kanálov"
+
+#: guix/scripts/pull.scm:104
+msgid ""
+"\n"
+"  -N, --news             display news compared to the previous generation"
+msgstr ""
+"\n"
+"  -N, --news             zobraziť novinky v tomto pokolení"
+
+#: guix/scripts/pull.scm:117
+#, scheme-format
+msgid ""
+"\n"
+"  -p, --profile=PROFILE  use PROFILE instead of ~/.config/guix/current"
+msgstr ""
+"\n"
+"  -p, --profile=PROFIL  použiť PROFIL namiesto ~/.config/guix/current"
+
+#: guix/scripts/pull.scm:123
+msgid ""
+"\n"
+"      --bootstrap        use the bootstrap Guile to build the new Guix"
+msgstr ""
+"\n"
+"      --bootstrap        použiť zavádzací Guile na zostavenie nového systému "
+"Guix"
+
+#: guix/scripts/pull.scm:212 guix/scripts/system/reconfigure.scm:328
+#, scheme-format
+msgid "rolling back channel '~a' from ~a to ~a~%"
+msgstr "vraciam kanál „~a“ z ~a na ~a~%"
+
+#: guix/scripts/pull.scm:215 guix/scripts/system/reconfigure.scm:331
+#, scheme-format
+msgid "moving channel '~a' from ~a to unrelated commit ~a~%"
+msgstr ""
+"presúvanie kanála „~a“ z ~a k nesúvisiacemu číslu úpravy (commitu) ~a~%"
+
+#: guix/scripts/pull.scm:244
+msgid "New in this revision:\n"
+msgstr "Novinky v tejto úprave:\n"
+
+#. TRANSLATORS: This describes a "channel"; the first placeholder is
+#. the channel name (e.g., "guix") and the second placeholder is its
+#. URL.
+#: guix/scripts/pull.scm:253
+#, scheme-format
+msgid "    ~a at ~a~%"
+msgstr "    ~a na ~a~%"
+
+#: guix/scripts/pull.scm:291
+#, scheme-format
+msgid "    commit ~a~%"
+msgstr "    číslo úpravy (commit) ~a~%"
+
+#: guix/scripts/pull.scm:328
+#, scheme-format
+msgid "News for channel '~a'~%"
+msgstr "Novinky kanála „~a“~%"
+
+#: guix/scripts/pull.scm:354
+#, scheme-format
+msgid "  ~a new channel:~%"
+msgid_plural "  ~a new channels:~%"
+msgstr[0] "  ~a nový kanál:~%"
+msgstr[1] "  ~a nové kanály:~%"
+msgstr[2] "  ~a nových kanálov:~%"
+
+#: guix/scripts/pull.scm:364
+#, scheme-format
+msgid "  ~a channel removed:~%"
+msgid_plural "  ~a channels removed:~%"
+msgstr[0] "  ~a odstránený kanál:~%"
+msgstr[1] "  ~a odstránené kanály:~%"
+msgstr[2] "  ~a odstránených kanálov:~%"
+
+#: guix/scripts/pull.scm:440
+msgid "Run @command{guix pull --news} to read all the news."
+msgstr "Prečítajte si všetky novinky pomocou @command{guix pull --news}."
+
+#: guix/scripts/pull.scm:448
+#, scheme-format
+msgid ""
+"After setting @code{PATH}, run\n"
+"@command{hash guix} to make sure your shell refers to @file{~a}."
+msgstr ""
+"Po nastavení premennej @code{PATH}, použite\n"
+"@command{hash guix}, aby ste sa usitili, že váš shell odkazuje na @file{~a}."
+
+#: guix/scripts/pull.scm:483
+#, scheme-format
+msgid "Migrating profile generations to '~a'...~%"
+msgstr "Premiestňujú sa pokolenia profilu do „~a“...~%"
+
+#: guix/scripts/pull.scm:527
+#, scheme-format
+msgid "while creating symlink '~a': ~a~%"
+msgstr "pri vytváraní symbolického odkazu „~a“: ~a~%"
+
+#: guix/scripts/pull.scm:616
+msgid "  ~h new package: ~a~%"
+msgid_plural "  ~h new packages: ~a~%"
+msgstr[0] "  ~h nový balík: ~a~%"
+msgstr[1] "  ~h nové balíky: ~a~%"
+msgstr[2] "  ~h nových balíkov: ~a~%"
+
+#: guix/scripts/pull.scm:624
+msgid "  ~h package upgraded: ~a~%"
+msgid_plural "  ~h packages upgraded: ~a~%"
+msgstr[0] "  ~h aktualizovaný balík: ~a~%"
+msgstr[1] "  ~h aktualizované balíky: ~a~%"
+msgstr[2] "  ~h aktualizovaných balíkov: ~a~%"
+
+#: guix/scripts/pull.scm:713
+#, scheme-format
+msgid "'~a' did not return a list of channels~%"
+msgstr "„~a“ nevrátil zoznam kanálov~%"
+
+#: guix/scripts/pull.scm:729
+#, scheme-format
+msgid ""
+"The 'GUIX_PULL_URL' environment variable is deprecated.\n"
+"Use '~/.config/guix/channels.scm' instead."
+msgstr ""
+"Premenná prostredia „GUIX_PULL_URL“ sa už nepoužíva.\n"
+"Namiesto nej použite „~/.config/guix/channels.scm“."
+
+#: guix/scripts/pull.scm:802
+#, scheme-format
+msgid "Building from this channel:~%"
+msgid_plural "Building from these channels:~%"
+msgstr[0] "Zostavuje sa z tohto kanála:~%"
+msgstr[1] "Zostavuje sa z týchto kanálov:~%"
+msgstr[2] "Zostavuje sa z týchto kanálov:~%"
+
+#: guix/scripts/substitute.scm:87
+#, scheme-format
+msgid "authentication and authorization of substitutes disabled!~%"
+msgstr "overenie a povolenie náhrad vypnuté!~%"
+
+#: guix/scripts/substitute.scm:222
+#, scheme-format
+msgid "host name lookup error: ~a~%"
+msgstr "zisťovanie názvu hostiteľa zlyhalo: ~a~%"
+
+#: guix/scripts/substitute.scm:227
+#, scheme-format
+msgid "TLS error in procedure '~a': ~a~%"
+msgstr "Chyba TLS v procedúre „~a“: ~a~%"
+
+#: guix/scripts/substitute.scm:238
+msgid ""
+"Usage: guix substitute [OPTION]...\n"
+"Internal tool to substitute a pre-built binary to a local build.\n"
+msgstr ""
+"Použitie: guix substitute [PREPÍNAČ]...\n"
+"Vnútorný nástroj na nahrádzanie miestneho zostavenia pred-zostavenou "
+"binárnou náhradou.\n"
+
+#: guix/scripts/substitute.scm:240
+msgid ""
+"\n"
+"      --query            report on the availability of substitutes for the\n"
+"                         store file names passed on the standard input"
+msgstr ""
+"\n"
+"      --query            zistiť dostupnosť náhrad pre názvy\n"
+"                         súborov úložiska na štandardnom vstupe"
+
+#: guix/scripts/substitute.scm:243
+msgid ""
+"\n"
+"      --substitute STORE-FILE DESTINATION\n"
+"                         download STORE-FILE and store it as a Nar in file\n"
+"                         DESTINATION"
+msgstr ""
+"\n"
+"      --substitute SÚBOR-ÚLOŽISKA CIEĽOVÝ-SÚBOR\n"
+"                         stiahnuť SÚBOR-ÚLOŽISKA a uložiť ho ako Nar\n"
+"                         do CIEĽOVÉHO-SÚBORU"
+
+#: guix/scripts/substitute.scm:323
+#, scheme-format
+msgid "updating substitutes from '~a'... ~5,1f%"
+msgstr "aktualizujú sa náhrady z „~a“... ~5,1f%"
+
+#: guix/scripts/substitute.scm:462
+#, scheme-format
+msgid "download from '~a' failed: ~a, ~s~%"
+msgstr "sťahovanie z „~a“ zlyhalo: ~a, ~s~%"
+
+#: guix/scripts/substitute.scm:472
+#, scheme-format
+msgid "while fetching ~a: server is somewhat slow~%"
+msgstr "pri získavaní ~a: odozva servera je nízka~%"
+
+#: guix/scripts/substitute.scm:474
+#, scheme-format
+msgid "try `--no-substitutes' if the problem persists~%"
+msgstr "skúste použiť prepínač „--no-substitutes“ ak ťažkosti pretrvávajú~%"
+
+#: guix/scripts/substitute.scm:481
+#, scheme-format
+msgid "unsupported substitute URI scheme: ~a~%"
+msgstr "nepodporované pravidlo nahrádzania prepojení: ~a~%"
+
+#: guix/scripts/substitute.scm:485
+#, scheme-format
+msgid "no valid substitute for '~a'~%"
+msgstr "žiadne platné náhrady za „~a“~%"
+
+#: guix/scripts/substitute.scm:494
+#, scheme-format
+msgid "Downloading ~a...~%"
+msgstr "Sťahuje sa ~a...~%"
+
+#: guix/scripts/substitute.scm:598
+msgid ""
+"ACL for archive imports seems to be uninitialized, substitutes may be "
+"unavailable\n"
+msgstr ""
+"zdá sa, že ACL na načítavanie archívov nebolo nastavené, náhrady možno "
+"nebudú dostupné\n"
+
+#: guix/scripts/substitute.scm:683
+#, scheme-format
+msgid "~a: invalid URI~%"
+msgstr "~a: neplatné prepojenie~%"
+
+#: guix/scripts/substitute.scm:770
+#, scheme-format
+msgid "~a: unrecognized options~%"
+msgstr "~a: nerozpoznané prepínače~%"
+
+#: guix/scripts/authenticate.scm:64
+#, scheme-format
+msgid "failed to load key pair at '~a': ~a~%"
+msgstr "získavanie páru kľúčov zlyhalo na „~a“: ~a~%"
+
+#: guix/scripts/authenticate.scm:86
+#, scheme-format
+msgid "invalid signature: ~a"
+msgstr "neplatný podpis: ~a"
+
+#: guix/scripts/authenticate.scm:89
+#, scheme-format
+msgid "unauthorized public key: ~a"
+msgstr "nepovolený verejný kľúč: ~a"
+
+#: guix/scripts/authenticate.scm:92
+#, scheme-format
+msgid "corrupt signature data: ~a"
+msgstr "poškodený podpis: ~a"
+
+#: guix/scripts/authenticate.scm:184
+msgid ""
+"Usage: guix authenticate OPTION...\n"
+"Sign data or verify signatures.  This tool is meant to be used internally "
+"by\n"
+"'guix-daemon'.\n"
+msgstr ""
+"Použitie: guix authenticate PREPÍNAČ...\n"
+"Podpísať údaje alebo overiť podpisy.  Tento nástroj je určený na vnútorné\n"
+"použitie pre „guix-daemon“.\n"
+
+#: guix/scripts/authenticate.scm:218
+#, scheme-format
+msgid "~s: invalid command; ignoring~%"
+msgstr "~s: neplatný príkaz; preskakujem~%"
+
+#: guix/scripts/authenticate.scm:223
+#, scheme-format
+msgid "wrong arguments~%"
+msgstr "neplatné parametre~%"
+
+#: guix/scripts/system.scm:175
+#, scheme-format
+msgid "copying to '~a'..."
+msgstr "kopírujem do „~a“..."
+
+#: guix/scripts/system.scm:211
+#, scheme-format
+msgid "initializing the current root file system~%"
+msgstr "nastavuje sa súčasný koreňový súborový systém~%"
+
+#: guix/scripts/system.scm:225
+#, scheme-format
+msgid "not running as 'root', so the ownership of '~a' may be incorrect!~%"
+msgstr "sa nespúšťa ako „root“, takže vlastníctvo „~a“ je možno nesprávne!~%"
+
+#: guix/scripts/system.scm:255 guix/scripts/system.scm:751
+#: guix/scripts/system.scm:857
+#, scheme-format
+msgid "bootloader successfully installed on '~a'~%"
+msgstr "zavádzač bol úspešne nainštalovaný na „~a“~%"
+
+#: guix/scripts/system.scm:278
+#, scheme-format
+msgid "while talking to shepherd: ~a~%"
+msgstr "pri spojení so shepherdom: ~a~%"
+
+#: guix/scripts/system.scm:286
+#, scheme-format
+msgid "service '~a' could not be found~%"
+msgstr "služba „~a“ sa nenašla~%"
+
+#: guix/scripts/system.scm:289
+#, scheme-format
+msgid "service '~a' does not have an action '~a'~%"
+msgstr "služba „~a“ postráda činnosť „~a“~%"
+
+#: guix/scripts/system.scm:293
+#, scheme-format
+msgid "exception caught while executing '~a' on service '~a':~%"
+msgstr "výnimka zachytená pri spúšťaní „~a“ v službe „~a“:~%"
+
+#: guix/scripts/system.scm:301
+#, scheme-format
+msgid "something went wrong: ~s~%"
+msgstr "niečo sa pokazilo: ~s~%"
+
+#: guix/scripts/system.scm:304
+#, scheme-format
+msgid "shepherd error~%"
+msgstr "chyba shepherd-a~%"
+
+#: guix/scripts/system.scm:308
+#, scheme-format
+msgid "some services could not be upgraded~%"
+msgstr "niektoré služby sa nepodarilo aktualizovať~%"
+
+#: guix/scripts/system.scm:309
+msgid ""
+"To allow changes to all the system services to take\n"
+"effect, you will need to reboot."
+msgstr ""
+"Na uplatnenie niektorých zmien v systémových službách\n"
+"je nutné reštartovať počítač."
+
+#: guix/scripts/system.scm:375
+#, scheme-format
+msgid "cannot switch to system generation '~a'~%"
+msgstr "nepodarilo sa prepnúť na pokolenie systému „~a“~%"
+
+#: guix/scripts/system.scm:451
+msgid "the DAG of services"
+msgstr "orientovaný acyklický graf služieb"
+
+#: guix/scripts/system.scm:464
+msgid "the dependency graph of shepherd services"
+msgstr "graf závislostí služieb shepherda"
+
+#: guix/scripts/system.scm:479
+#, scheme-format
+msgid "      repository URL: ~a~%"
+msgstr "      prepojenie na repozitár: ~a~%"
+
+#: guix/scripts/system.scm:481
+#, scheme-format
+msgid "      branch: ~a~%"
+msgstr "      vetva: ~a~%"
+
+#: guix/scripts/system.scm:482
+#, scheme-format
+msgid "      commit: ~a~%"
+msgstr "      číslo úpravy (commit): ~a~%"
+
+#: guix/scripts/system.scm:502
+#, scheme-format
+msgid "  file name: ~a~%"
+msgstr "  názov súboru: ~a~%"
+
+#: guix/scripts/system.scm:503
+#, scheme-format
+msgid "  canonical file name: ~a~%"
+msgstr "  normatívny názov súboru: ~a~%"
+
+#. TRANSLATORS: Please preserve the two-space indentation.
+#: guix/scripts/system.scm:505
+#, scheme-format
+msgid "  label: ~a~%"
+msgstr "  menovka: ~a~%"
+
+#: guix/scripts/system.scm:506
+#, scheme-format
+msgid "  bootloader: ~a~%"
+msgstr "  zavádzač: ~a~%"
+
+#. TRANSLATORS: The '~[', '~;', and '~]' sequences in this string must
+#. be preserved.  They denote conditionals, such that the result will
+#. look like:
+#. root device: UUID: 12345-678
+#. or:
+#. root device: label: "my-root"
+#. or just:
+#. root device: /dev/sda3
+#: guix/scripts/system.scm:516
+#, scheme-format
+msgid "  root device: ~[UUID: ~a~;label: ~s~;~a~]~%"
+msgstr "  koreňové zariadenie: ~[UUID: ~a~;menovka: ~s~;~a~]~%"
+
+#: guix/scripts/system.scm:522
+#, scheme-format
+msgid "  kernel: ~a~%"
+msgstr "  jadro: ~a~%"
+
+#: guix/scripts/system.scm:527
+#, scheme-format
+msgid "  multiboot: ~a~%"
+msgstr "  zavedenie viacerých operačných systémov (multiboot): ~a~%"
+
+#. TRANSLATORS: Here "channel" is the same terminology as used in
+#. "guix describe" and "guix pull --channels".
+#: guix/scripts/system.scm:533
+#, scheme-format
+msgid "  channels:~%"
+msgstr "  kanály:~%"
+
+#: guix/scripts/system.scm:536
+#, scheme-format
+msgid "  configuration file: ~a~%"
+msgstr "  súbor nastavení: ~a~%"
+
+#: guix/scripts/system.scm:609
+#, scheme-format
+msgid "device '~a' not found: ~a~%"
+msgstr "zariadenie „~a“ sa nenašlo: ~a~%"
+
+#: guix/scripts/system.scm:612
+#, scheme-format
+msgid ""
+"If '~a' is a file system\n"
+"label, write @code{(file-system-label ~s)} in your @code{device} field."
+msgstr ""
+"Ak „~a“ je menovkou súborového systému,\n"
+"napíšte @code{(file-system-label ~s)} do poľa @code{device}."
+
+#: guix/scripts/system.scm:621
+#, scheme-format
+msgid "file system with label '~a' not found~%"
+msgstr "súborový systém s menovkou „~a“ sa nenašiel~%"
+
+#: guix/scripts/system.scm:627
+#, scheme-format
+msgid "file system with UUID '~a' not found~%"
+msgstr "súborový systém s UUID „~a“ sa nenašiel~%"
+
+#: guix/scripts/system.scm:714
+#, scheme-format
+msgid "'disk-image' is deprecated: use 'image' instead~%"
+msgstr ""
+"použitie „disk-image“ sa už neodporúča: namiesto toho použite „image“~%"
+
+#: guix/scripts/system.scm:716
+#, scheme-format
+msgid "'vm-image' is deprecated: use 'image' instead~%"
+msgstr "použitie „vm-image“ sa už neodporúča; namiesto toho použite „image“~%"
+
+#: guix/scripts/system.scm:729
+#, scheme-format
+msgid "Consider running 'guix pull' before 'reconfigure'.~%"
+msgstr "Zvážte spustenie „guix pull“ pred „reconfigure“.~%"
+
+#: guix/scripts/system.scm:730
+#, scheme-format
+msgid "Failing to do that may downgrade your system!~%"
+msgstr "V opačnom prípade riskujete, že váš systém prejde na staršiu verziu!~%"
+
+#: guix/scripts/system.scm:850
+#, scheme-format
+msgid "activating system...~%"
+msgstr "spúšťa sa systém...~%"
+
+#: guix/scripts/system.scm:861
+msgid ""
+"To complete the upgrade, run 'herd restart SERVICE' to stop,\n"
+"upgrade, and restart each service that was not automatically restarted.\n"
+msgstr ""
+"Aby mohla byť aktualizácia dokončená, spustite „herd restart SLUŽBA“ pre\n"
+"zastavenie, aktualizovanie a reštart každej SLUŽBY, ktorá nebola automaticky "
+"reštartovaná.\n"
+
+#: guix/scripts/system.scm:864
+msgid "Run 'herd status' to view the list of services on your system.\n"
+msgstr ""
+"Spustite „herd status“ pre zobrazenie zoznam služieb na vašom systéme.\n"
+
+#: guix/scripts/system.scm:868
+#, scheme-format
+msgid "initializing operating system under '~a'...~%"
+msgstr "nastavuje sa operačný systém v „~a“...~%"
+
+#: guix/scripts/system.scm:888 guix/scripts/graph.scm:437
+#, scheme-format
+msgid "~a: unknown backend~%"
+msgstr "~a: neznámy nástroj~%"
+
+#: guix/scripts/system.scm:925
+msgid "The available image types are:\n"
+msgstr "Dostupné typy obrazov sú:\n"
+
+#: guix/scripts/system.scm:935
+msgid ""
+"Usage: guix system [OPTION ...] ACTION [ARG ...] [FILE]\n"
+"Build the operating system declared in FILE according to ACTION.\n"
+"Some ACTIONS support additional ARGS.\n"
+msgstr ""
+"Použitie: guix system [PREPÍNAČ ...] ČINNOSŤ [PARAMETER ...] [SÚBOR]\n"
+"Zostaviť operačný systém zapísaný v SÚBORE vzhľadom na ČINNOSŤ.\n"
+"Niektoré ČINNOSTI podporujú dodatočné PARAMETRE.\n"
+
+#: guix/scripts/system.scm:941
+msgid "   search           search for existing service types\n"
+msgstr "   search           hľadať existujúce typy služieb\n"
+
+#: guix/scripts/system.scm:943
+msgid "   reconfigure      switch to a new operating system configuration\n"
+msgstr "   reconfigure      prepnúť na nové nastavenie systému\n"
+
+#: guix/scripts/system.scm:945
+msgid ""
+"   roll-back        switch to the previous operating system configuration\n"
+msgstr "   roll-back        prepnúť na predchádzajúce nastavenie systému\n"
+
+#: guix/scripts/system.scm:947
+msgid "   describe         describe the current system\n"
+msgstr "   describe         popísať súčasný systém\n"
+
+#: guix/scripts/system.scm:949
+msgid "   list-generations list the system generations\n"
+msgstr "   list-generations zobraziť pokolenia systému\n"
+
+#: guix/scripts/system.scm:951
+msgid ""
+"   switch-generation switch to an existing operating system configuration\n"
+msgstr ""
+"   switch-generation prepnúť na niektoré z existujúcich nastavení systému\n"
+
+#: guix/scripts/system.scm:953
+msgid "   delete-generations delete old system generations\n"
+msgstr "   delete-generations odstrániť predchádzajúce pokolenia systému\n"
+
+#: guix/scripts/system.scm:955
+msgid ""
+"   build            build the operating system without installing anything\n"
+msgstr "   build            zostaviť operačný systém ale nič neinštalovať\n"
+
+#: guix/scripts/system.scm:957
+msgid "   container        build a container that shares the host's store\n"
+msgstr "   container        zostaviť kontajner zdieľajúci úložisko hostiteľa\n"
+
+#: guix/scripts/system.scm:959
+msgid ""
+"   vm               build a virtual machine image that shares the host's "
+"store\n"
+msgstr ""
+"   vm               zostaviť virtuálny stroj zdieľajúci úložisko hostiteľa\n"
+
+#: guix/scripts/system.scm:961
+msgid "   image            build a Guix System image\n"
+msgstr "   image            zostaviť obraz systému Guix\n"
+
+#: guix/scripts/system.scm:963
+msgid "   docker-image     build a Docker image\n"
+msgstr "   docker-image     zostaviť Docker obraz\n"
+
+#: guix/scripts/system.scm:965
+msgid "   init             initialize a root file system to run GNU\n"
+msgstr ""
+"   init             nastaviť koreňový súborový systém pre spustenie GNU\n"
+
+#: guix/scripts/system.scm:967
+msgid "   extension-graph  emit the service extension graph in Dot format\n"
+msgstr "   extension-graph  vytvoriť graf rozšírení služieb vo formáte Dot\n"
+
+#: guix/scripts/system.scm:969
+msgid "   shepherd-graph   emit the graph of shepherd services in Dot format\n"
+msgstr "   shepherd-graph   vytvoriť graf služieb shepherda vo formáte Dot\n"
+
+#: guix/scripts/system.scm:973
+msgid ""
+"\n"
+"  -d, --derivation       return the derivation of the given system"
+msgstr ""
+"\n"
+"  -d, --derivation       vrátiť odvodeninu zadaného systému"
+
+#: guix/scripts/system.scm:975
+msgid ""
+"\n"
+"  -e, --expression=EXPR  consider the operating-system EXPR evaluates to\n"
+"                         instead of reading FILE, when applicable"
+msgstr ""
+"\n"
+"  -e, --expression=VÝRAZ  vybrať operačný systém určený VÝRAZOM namiesto\n"
+"                         čítania SÚBORU, ak je to možné"
+
+#: guix/scripts/system.scm:978
+msgid ""
+"\n"
+"      --allow-downgrades for 'reconfigure', allow downgrades to earlier\n"
+"                         channel revisions"
+msgstr ""
+"\n"
+"      --allow-downgrades pre „reconfigure“, povoliť návrat k starším\n"
+"                         úpravám kanálov"
+
+#: guix/scripts/system.scm:981
+msgid ""
+"\n"
+"      --on-error=STRATEGY\n"
+"                         apply STRATEGY (one of nothing-special, backtrace,\n"
+"                         or debug) when an error occurs while reading FILE"
+msgstr ""
+"\n"
+"      --on-error=POSTUP\n"
+"                         uplatniť POSTUP (jeden z nothing-special, "
+"backtrace\n"
+"                         alebo debug) ak sa vyskytne chyba pri čítaní SÚBORU"
+
+#: guix/scripts/system.scm:985
+msgid ""
+"\n"
+"      --list-image-types list available image types"
+msgstr ""
+"\n"
+"      --list-image-types zobraziť dostupné typy obrazov"
+
+#: guix/scripts/system.scm:987
+msgid ""
+"\n"
+"  -t, --image-type=TYPE  for 'image', produce an image of TYPE"
+msgstr ""
+"\n"
+"  -t, --image-type=TYP  „obrazu“, vytvoriť obraz TYPU"
+
+#: guix/scripts/system.scm:989
+msgid ""
+"\n"
+"      --image-size=SIZE  for 'image', produce an image of SIZE"
+msgstr ""
+"\n"
+"      --image-size=VEĽKOSŤ  „obrazu“, vytvoriť obraz o VEĽKOSTI"
+
+#: guix/scripts/system.scm:991
+msgid ""
+"\n"
+"      --no-bootloader    for 'init', do not install a bootloader"
+msgstr ""
+"\n"
+"      --no-bootloader    pre „init“, neinštalovať zavádzač"
+
+#: guix/scripts/system.scm:993
+msgid ""
+"\n"
+"      --volatile         for 'image', make the root file system volatile"
+msgstr ""
+"\n"
+"      --volatile         „obraz“, nastaviť koreňový súborový systém ako "
+"nestály"
+
+#: guix/scripts/system.scm:995
+msgid ""
+"\n"
+"      --label=LABEL      for 'image', label disk image with LABEL"
+msgstr ""
+"\n"
+"      --label=MENOVKA      „obrazu“, označiť obraz disku MENOVKOU"
+
+#: guix/scripts/system.scm:997 guix/scripts/pack.scm:1099
+msgid ""
+"\n"
+"      --save-provenance  save provenance information"
+msgstr ""
+"\n"
+"      --save-provenance  uložiť údaje o pôvode"
+
+#: guix/scripts/system.scm:999
+msgid ""
+"\n"
+"      --share=SPEC       for 'vm' and 'container', share host file system "
+"with\n"
+"                         read/write access according to SPEC"
+msgstr ""
+"\n"
+"      --share=ZADANIE       pre „vm“ a „container“, zdieľať hostiteľský "
+"súborový systém\n"
+"                         na čítanie aj zápis podľa ZADANIA"
+
+#: guix/scripts/system.scm:1002
+msgid ""
+"\n"
+"      --expose=SPEC      for 'vm' and 'container', expose host file system\n"
+"                         directory as read-only according to SPEC"
+msgstr ""
+"\n"
+"      --expose=ZADANIE      pre „vm“ a „container“, sprístupniť hostiteľský "
+"súborový\n"
+"                         systém len na čítanie podľa ZADANIA"
+
+#: guix/scripts/system.scm:1005
+msgid ""
+"\n"
+"  -N, --network          for 'container', allow containers to access the "
+"network"
+msgstr ""
+"\n"
+"  -N, --network          pre „container“, umožniť kontajnerom prístup do "
+"siete"
+
+#: guix/scripts/system.scm:1007
+msgid ""
+"\n"
+"  -r, --root=FILE        for 'vm', 'image', 'container' and 'build',\n"
+"                         make FILE a symlink to the result, and\n"
+"                         register it as a garbage collector root"
+msgstr ""
+"\n"
+"  -r, --root=SÚBOR        pre „vm“, „image“, „container“ a „build“,\n"
+"                         spraviť zo SÚBORU symbolický odkaz na výsledok a\n"
+"                         zaznamenať ho ako koreň zberača odpadkov"
+
+#: guix/scripts/system.scm:1011
+msgid ""
+"\n"
+"      --full-boot        for 'vm', make a full boot sequence"
+msgstr ""
+"\n"
+"      --full-boot        pre „vm“, vykonať úplné zavedenie"
+
+#: guix/scripts/system.scm:1013
+msgid ""
+"\n"
+"      --skip-checks      skip file system and initrd module safety checks"
+msgstr ""
+"\n"
+"      --skip-checks      preskočiť bezpečnostné overenie súborového systému "
+"a initrd"
+
+#: guix/scripts/system.scm:1020
+msgid ""
+"\n"
+"      --graph-backend=BACKEND\n"
+"                         use BACKEND for 'extension-graphs' and 'shepherd-"
+"graph'"
+msgstr ""
+"\n"
+"      --graph-backend=NÁSTROJ\n"
+"                         použiť NÁSTROJ pre „extension-graphs“ a „shepherd-"
+"graph“"
+
+#: guix/scripts/system.scm:1162
+#, scheme-format
+msgid "'~a' does not return an operating system or an image~%"
+msgstr "„~a“ nevracia operačný systém ani obraz~%"
+
+#: guix/scripts/system.scm:1186
+#, scheme-format
+msgid "both file and expression cannot be specified~%"
+msgstr "nie je možné zároveň určiť súbor aj výraz~%"
+
+#: guix/scripts/system.scm:1193
+#, scheme-format
+msgid "no configuration specified~%"
+msgstr "nebolo určené žiadne nastavenie~%"
+
+#: guix/scripts/system.scm:1303
+#, scheme-format
+msgid "no system generation, nothing to describe~%"
+msgstr "žiadne pokolenie systému, nie je k čomu poskytnúť popis~%"
+
+#: guix/scripts/system.scm:1349
+#, scheme-format
+msgid "~a: unknown action~%"
+msgstr "~a: neznáma činnosť~%"
+
+#: guix/scripts/system.scm:1365
+#, scheme-format
+msgid "wrong number of arguments for action '~a'~%"
+msgstr "nesprávny počet parametrov pre činnosť „~a“~%"
+
+#: guix/scripts/system.scm:1370
+#, scheme-format
+msgid "guix system: missing command name~%"
+msgstr "guix system: chýba názov príkazu~%"
+
+#: guix/scripts/system.scm:1372
+#, scheme-format
+msgid "Try 'guix system --help' for more information.~%"
+msgstr "Skúste „guix system --help“ pre viac podrobností.~%"
+
+#: guix/scripts/system/search.scm:93 guix/ui.scm:1544 guix/ui.scm:1562
+msgid "unknown"
+msgstr "neznáme"
+
+#: guix/scripts/lint.scm:58
+#, scheme-format
+msgid "~a@~a: ~a~%"
+msgstr "~a@~a: ~a~%"
+
+#: guix/scripts/lint.scm:82
+#, scheme-format
+msgid "Available checkers:~%"
+msgstr "Dostupné overovače:~%"
+
+#: guix/scripts/lint.scm:100
+msgid ""
+"Usage: guix lint [OPTION]... [PACKAGE]...\n"
+"Run a set of checkers on the specified package; if none is specified,\n"
+"run the checkers on all packages.\n"
+msgstr ""
+"Použitie: guix lint [PREPÍNAČ]... [BALÍK]...\n"
+"Spustiť overovače pre zadaný balík. Ak nie je určený žiadny balík,\n"
+"spustiť overovače pre všetky balíky.\n"
+
+#: guix/scripts/lint.scm:103
+msgid ""
+"\n"
+"  -c, --checkers=CHECKER1,CHECKER2...\n"
+"                         only run the specified checkers"
+msgstr ""
+"\n"
+"  -c, --checkers=OVEROVAČ1,OVEROVAČ2...\n"
+"                         spustiť len zadané overovače"
+
+#: guix/scripts/lint.scm:106
+msgid ""
+"\n"
+"  -x, --exclude=CHECKER1,CHECKER2...\n"
+"                         exclude the specified checkers"
+msgstr ""
+"\n"
+"  -x, --exclude=OVEROVAČ1,OVEROVAČ2...\n"
+"                         vylúčiť zadané overovače"
+
+#: guix/scripts/lint.scm:109
+msgid ""
+"\n"
+"  -n, --no-network       only run checkers that do not access the network"
+msgstr ""
+"\n"
+"  -n, --no-network       spustiť len overovače, ktoré nevyžadujú prístup do "
+"siete"
+
+#: guix/scripts/lint.scm:117
+msgid ""
+"\n"
+"  -l, --list-checkers    display the list of available lint checkers"
+msgstr ""
+"\n"
+"  -l, --list-checkers    zobraziť zoznam dostupných overovačov"
+
+#: guix/scripts/lint.scm:136
+#, scheme-format
+msgid "~a: invalid checker~%"
+msgstr "~a: neplatný overovač~%"
+
+#: guix/scripts/publish.scm:82
+#, scheme-format
+msgid ""
+"Usage: guix publish [OPTION]...\n"
+"Publish ~a over HTTP.\n"
+msgstr ""
+"Použitie: guix publish [PREPÍNAČ]...\n"
+"Uverejniť ~a cez HTTP.\n"
+
+#: guix/scripts/publish.scm:84
+msgid ""
+"\n"
+"  -p, --port=PORT        listen on PORT"
+msgstr ""
+"\n"
+"  -p, --port=PORT        počúvať na PORTE"
+
+#: guix/scripts/publish.scm:86
+msgid ""
+"\n"
+"      --listen=HOST      listen on the network interface for HOST"
+msgstr ""
+"\n"
+"      --listen=HOSTITEĽ      počúvať HOSTITEĽA pomocou sieťového rozhrania"
+
+#: guix/scripts/publish.scm:88
+msgid ""
+"\n"
+"  -u, --user=USER        change privileges to USER as soon as possible"
+msgstr ""
+"\n"
+"  -u, --user=POUŽÍVATEĽ        zmeniť práva POUŽÍVATEĽA hneď keď to bude "
+"možné"
+
+#: guix/scripts/publish.scm:90
+msgid ""
+"\n"
+"  -a, --advertise        advertise on the local network"
+msgstr ""
+"\n"
+"  -a, --advertise        ohlasovať v miestnej sieti"
+
+#: guix/scripts/publish.scm:92
+msgid ""
+"\n"
+"  -C, --compression[=METHOD:LEVEL]\n"
+"                         compress archives with METHOD at LEVEL"
+msgstr ""
+"\n"
+"  -C, --compression[=SPÔSOB:ÚROVEŇ]\n"
+"                         komprimovať archívy SPÔSOBOM a na ÚROVNI"
+
+#: guix/scripts/publish.scm:95
+msgid ""
+"\n"
+"  -c, --cache=DIRECTORY  cache published items to DIRECTORY"
+msgstr ""
+"\n"
+"  -c, --cache=PRIEČINOK  použiť PRIEČINOK ako vyrovnávaciu pamäť pre "
+"uverejnené položky"
+
+#: guix/scripts/publish.scm:97
+msgid ""
+"\n"
+"      --cache-bypass-threshold=SIZE\n"
+"                         serve store items below SIZE even when not cached"
+msgstr ""
+"\n"
+"      --cache-bypass-threshold=VEĽKOSŤ\n"
+"                         poskytovať položky úložiska menšie ako VEĽKOSŤ aj "
+"keď sa nenachádzajú vo vyrovnávacej pamäti"
+
+#: guix/scripts/publish.scm:100
+msgid ""
+"\n"
+"      --workers=N        use N workers to bake items"
+msgstr ""
+"\n"
+"      --workers=N        použiť N vlákien na prípravu položiek"
+
+#: guix/scripts/publish.scm:102
+msgid ""
+"\n"
+"      --ttl=TTL          announce narinfos can be cached for TTL seconds"
+msgstr ""
+"\n"
+"      --ttl=TTL          oznámenia narinfos môžu byť uložené do vyrovnávacej "
+"pamäte na TTL sekúnd"
+
+#: guix/scripts/publish.scm:104
+msgid ""
+"\n"
+"      --nar-path=PATH    use PATH as the prefix for nar URLs"
+msgstr ""
+"\n"
+"      --nar-path=CESTA    použiť CESTU ako predponu prepojení nar"
+
+#: guix/scripts/publish.scm:106
+msgid ""
+"\n"
+"      --public-key=FILE  use FILE as the public key for signatures"
+msgstr ""
+"\n"
+"      --public-key=SÚBOR  použiť SÚBOR ako verejný kľúč na podpisovanie"
+
+#: guix/scripts/publish.scm:108
+msgid ""
+"\n"
+"      --private-key=FILE use FILE as the private key for signatures"
+msgstr ""
+"\n"
+"      --private-key=SÚBOR použiť SÚBOR ako súkromný kľúč na podpisovanie"
+
+#: guix/scripts/publish.scm:110
+msgid ""
+"\n"
+"  -r, --repl[=PORT]      spawn REPL server on PORT"
+msgstr ""
+"\n"
+"  -r, --repl[=PORT]      spustiť REPL server na PORTE"
+
+#: guix/scripts/publish.scm:126
+#, scheme-format
+msgid "lookup of host '~a' failed: ~a~%"
+msgstr "vyhľadávanie hostiteľa „~a“ zlyhalo: ~a~%"
+
+#: guix/scripts/publish.scm:183
+#, scheme-format
+msgid "lookup of host '~a' returned nothing"
+msgstr "vyhľadávanie hostiteľa „~a“ bolo bezvýsledné"
+
+#: guix/scripts/publish.scm:206
+#, scheme-format
+msgid "~a: unsupported compression type~%"
+msgstr "~a: nepodporovaný spôsob kompresie~%"
+
+#: guix/scripts/publish.scm:224
+#, scheme-format
+msgid "~a: invalid duration~%"
+msgstr "~a: neplatné trvanie~%"
+
+#: guix/scripts/publish.scm:1077
+#, scheme-format
+msgid "Advertising ~a~%."
+msgstr "Ohlasuje sa ~a~%."
+
+#: guix/scripts/publish.scm:1108
+#, scheme-format
+msgid "user '~a' not found: ~a~%"
+msgstr "používateľ „~a“ sa nenašiel: ~a~%"
+
+#: guix/scripts/publish.scm:1160
+#, scheme-format
+msgid "server running as root; consider using the '--user' option!~%"
+msgstr "server je spustený ako správca; zvážte použitie prepínača „--user“!~%"
+
+#: guix/scripts/publish.scm:1168
+#, scheme-format
+msgid "publishing ~a on ~a, port ~d~%"
+msgstr "uverejňuje sa ~a na ~a, port ~d~%"
+
+#: guix/scripts/publish.scm:1174
+#, scheme-format
+msgid "using '~a' compression method, level ~a~%"
+msgstr "používa sa spôsob kompresie „~a“, úroveň ~a~%"
+
+#: guix/scripts/edit.scm:45
+msgid ""
+"Usage: guix edit PACKAGE...\n"
+"Start $VISUAL or $EDITOR to edit the definitions of PACKAGE...\n"
+msgstr ""
+"Použitie: guix edit BALÍK...\n"
+"Upraviť zadanie BALÍKA pomocou $VISUAL alebo $EDITOR...\n"
+
+#: guix/scripts/edit.scm:68
+#, scheme-format
+msgid "file '~a' not found in search path ~s~%"
+msgstr "súbor „~a“ sa v prehľadávanej ceste nenašiel ~s~%"
+
+#: guix/scripts/edit.scm:104
+#, scheme-format
+msgid "failed to launch '~a': ~a~%"
+msgstr "nepodarilo sa spustiť „~a“: ~a~%"
+
+#: guix/scripts/size.scm:71
+#, scheme-format
+msgid "no available substitute information for '~a'~%"
+msgstr "žiadne údaje o náhradách pre „~a“~%"
+
+#: guix/scripts/size.scm:93
+msgid "store item"
+msgstr "položka úložiska"
+
+#: guix/scripts/size.scm:93
+msgid "total"
+msgstr "celkovo"
+
+#: guix/scripts/size.scm:93
+msgid "self"
+msgstr "sám"
+
+#: guix/scripts/size.scm:101
+#, scheme-format
+msgid "total: ~,1f MiB~%"
+msgstr "spolu: ~,1f MiB~%"
+
+#. TRANSLATORS: This is the title of a graph, meaning that the graph
+#. represents a profile of the store (the "store" being the place where
+#. packages are stored.)
+#: guix/scripts/size.scm:224
+msgid "store profile"
+msgstr "znázornenie úložiska"
+
+#: guix/scripts/size.scm:233
+msgid ""
+"Usage: guix size [OPTION]... PACKAGE|STORE-ITEM\n"
+"Report the size of the PACKAGE or STORE-ITEM, with its dependencies.\n"
+msgstr ""
+"Použitie: guix size [PREPÍNAČ]... BALÍK|POLOŽKA-ÚLOŽISKA\n"
+"Zistiť veľkosť BALÍKA alebo POLOŽKY-ÚLOŽISKA aj so závislosťami.\n"
+
+#: guix/scripts/size.scm:238
+msgid ""
+"\n"
+"  -s, --system=SYSTEM    consider packages for SYSTEM--e.g., \"i686-linux\""
+msgstr ""
+"\n"
+"  -s, --system=SYSTÉM    vziať do úvahy balíky pre SYSTÉM, napr. „i686-linux“"
+
+#. TRANSLATORS: "closure" and "self" must not be translated.
+#: guix/scripts/size.scm:241
+msgid ""
+"\n"
+"      --sort=KEY         sort according to KEY--\"closure\" or \"self\""
+msgstr ""
+"\n"
+"      --sort=KĽÚČ         triediť podľa KĽÚČA: „closure“ alebo „self“"
+
+#: guix/scripts/size.scm:243
+msgid ""
+"\n"
+"  -m, --map-file=FILE    write to FILE a graphical map of disk usage"
+msgstr ""
+"\n"
+"  -m, --map-file=SÚBOR    zapísať grafické znázornenie využitia disku do "
+"SÚBORU"
+
+#: guix/scripts/size.scm:277
+#, scheme-format
+msgid "~a: invalid sorting key~%"
+msgstr "~a: neplatný triediaci kľúč~%"
+
+#: guix/scripts/size.scm:318
+msgid "missing store item argument\n"
+msgstr "chýba parameter položky úložiska\n"
+
+#: guix/scripts/graph.scm:95
+#, scheme-format
+msgid "~a: invalid argument (package name expected)"
+msgstr "~a: neplatný parameter (očakával sa názov balíka)"
+
+#: guix/scripts/graph.scm:106
+msgid "the DAG of packages, excluding implicit inputs"
+msgstr "orientovaný acyklický graf balíkov, okrem nepriamych vstupov"
+
+#: guix/scripts/graph.scm:142
+msgid "the reverse DAG of packages"
+msgstr "obrátený orientovaný acyklický graf balíkov"
+
+#: guix/scripts/graph.scm:192
+msgid "the DAG of packages, including implicit inputs"
+msgstr "orientovaný acyklický graf balíkov, vrátane nepriamych vstupov"
+
+#: guix/scripts/graph.scm:202
+msgid "the DAG of packages and origins, including implicit inputs"
+msgstr ""
+"orientovaný acyklický graf balíkov a zdrojov, vrátane nepriamych vstupov"
+
+#: guix/scripts/graph.scm:232
+msgid "same as 'bag', but without the bootstrap nodes"
+msgstr "ako „bag“, ale bez zavádzacích uzlov"
+
+#: guix/scripts/graph.scm:249
+msgid "the reverse DAG of packages, including implicit inputs"
+msgstr ""
+"obrátený orientovaný acyklický graf balíkov, vrátane nepriamych vstupov"
+
+#: guix/scripts/graph.scm:288
+msgid "the DAG of derivations"
+msgstr "orientovaný acyklický graf odvodenín"
+
+#: guix/scripts/graph.scm:300
+msgid "unsupported argument for derivation graph"
+msgstr "neplatný parameter pre graf odvodenín"
+
+#: guix/scripts/graph.scm:334
+msgid "unsupported argument for this type of graph"
+msgstr "neplatný parameter pre tento typ grafu"
+
+#: guix/scripts/graph.scm:348
+#, scheme-format
+msgid "references for '~a' are not known~%"
+msgstr "odkazy na „~a“ nie sú známe~%"
+
+#: guix/scripts/graph.scm:355
+msgid "the DAG of run-time dependencies (store references)"
+msgstr ""
+"orientovaný acyklický graf závislostí pri spúšťaní (odkazy na úložisko)"
+
+#: guix/scripts/graph.scm:371
+msgid "the DAG of referrers in the store"
+msgstr "orientovaný acyklický graf cieľov odkazov v úložisku"
+
+#: guix/scripts/graph.scm:401
+msgid "the graph of package modules"
+msgstr "graf modulov balíkov"
+
+#: guix/scripts/graph.scm:430
+#, scheme-format
+msgid "~a: unknown node type~%"
+msgstr "~a: neznámy typ uzla~%"
+
+#: guix/scripts/graph.scm:441
+msgid "The available node types are:\n"
+msgstr "Dostupné typy uzlov sú:\n"
+
+#: guix/scripts/graph.scm:451
+msgid "The available backend types are:\n"
+msgstr "Dostupné typy nástrojov grafov sú:\n"
+
+#: guix/scripts/graph.scm:478
+#, scheme-format
+msgid "no path from '~a' to '~a'~%"
+msgstr "žiadna cesta z „~a“ do „~a“~%"
+
+#. TRANSLATORS: Here 'dot' is the name of a program; it must not be
+#. translated.
+#: guix/scripts/graph.scm:530
+msgid ""
+"Usage: guix graph PACKAGE...\n"
+"Emit a representation of the dependency graph of PACKAGE...\n"
+msgstr ""
+"Použiť: guix graph BALÍK...\n"
+"Vytvoriť znázornenie grafu závislostí BALÍKA...\n"
+
+#: guix/scripts/graph.scm:532
+msgid ""
+"\n"
+"  -b, --backend=TYPE     produce a graph with the given backend TYPE"
+msgstr ""
+"\n"
+"  -b, --backend=TYP     vytvoriť graf pomocou daného TYPU nástroja"
+
+#: guix/scripts/graph.scm:534
+msgid ""
+"\n"
+"      --list-backends    list the available graph backends"
+msgstr ""
+"\n"
+"      --list-backends    zobraziť zoznam dostupných typov nástrojov grafov"
+
+#: guix/scripts/graph.scm:536
+msgid ""
+"\n"
+"  -t, --type=TYPE        represent nodes of the given TYPE"
+msgstr ""
+"\n"
+"  -t, --type=TYP        znázorniť uzly TYPU"
+
+#: guix/scripts/graph.scm:538
+msgid ""
+"\n"
+"      --list-types       list the available graph types"
+msgstr ""
+"\n"
+"      --list-types       zobraziť zoznam dostupných typov grafov"
+
+#: guix/scripts/graph.scm:540
+msgid ""
+"\n"
+"      --path             display the shortest path between the given nodes"
+msgstr ""
+"\n"
+"      --path             zobraziť najkratšiu cestu medzi danými uzlami"
+
+#: guix/scripts/graph.scm:542 guix/scripts/pack.scm:1084
+#: guix/scripts/refresh.scm:149
+msgid ""
+"\n"
+"  -e, --expression=EXPR  consider the package EXPR evaluates to"
+msgstr ""
+"\n"
+"  -e, --expression=VÝRAZ  vziať do úvahy balík, ktorý je výsledkom "
+"vyhodnotenia VÝRAZU"
+
+#: guix/scripts/graph.scm:544
+msgid ""
+"\n"
+"  -s, --system=SYSTEM    consider the graph for SYSTEM--e.g., \"i686-linux\""
+msgstr ""
+"\n"
+"  -s, --system=SYSTÉM    vziať do úvahy graf pre SYSTÉM, napr. „i686-linux“"
+
+#: guix/scripts/graph.scm:607
+#, scheme-format
+msgid "'--path' option requires exactly two nodes (given ~a)~%"
+msgstr "prepínač „--path“ vyžaduje presne dva uzly (zadali ste ~a)~%"
+
+#: guix/scripts/challenge.scm:303
+#, scheme-format
+msgid "  differing file:~%"
+msgid_plural "  differing files:~%"
+msgstr[0] "  rozdielny súbor:~%"
+msgstr[1] "  rozdielne súbory:~%"
+msgstr[2] "  rozdielnych súborov:~%"
+
+#: guix/scripts/challenge.scm:372
+#, scheme-format
+msgid "  local hash: ~a~%"
+msgstr "  miestny odtlačok: ~a~%"
+
+#: guix/scripts/challenge.scm:373
+#, scheme-format
+msgid "  no local build for '~a'~%"
+msgstr "  žiadne miestne zostavenie pre „~a“~%"
+
+#: guix/scripts/challenge.scm:375
+#, scheme-format
+msgid "  ~50a: ~a~%"
+msgstr "  ~50a: ~a~%"
+
+#: guix/scripts/challenge.scm:383
+#, scheme-format
+msgid "~a contents differ:~%"
+msgstr "obsah ~a sa nezhoduje:~%"
+
+#: guix/scripts/challenge.scm:387
+#, scheme-format
+msgid "could not challenge '~a': no local build~%"
+msgstr "nepodarilo sa preskúšať „~a“: žiadne miestne zostavenie~%"
+
+#: guix/scripts/challenge.scm:389
+#, scheme-format
+msgid "could not challenge '~a': no substitutes~%"
+msgstr "nepodarilo sa preskúšať „~a“: žiadne náhrady~%"
+
+#: guix/scripts/challenge.scm:392
+#, scheme-format
+msgid "~a contents match:~%"
+msgstr "obsah ~a sa zhoduje:~%"
+
+#: guix/scripts/challenge.scm:401
+msgid "~h store items were analyzed:~%"
+msgstr "~h položiek úložiska bolo preskúmaných:~%"
+
+#: guix/scripts/challenge.scm:402
+msgid "  - ~h (~,1f%) were identical~%"
+msgstr "  - ~h (~,1f%) sa zhodovali~%"
+
+#: guix/scripts/challenge.scm:404
+msgid "  - ~h (~,1f%) differed~%"
+msgstr "  - ~h (~,1f%) sa líšili~%"
+
+#: guix/scripts/challenge.scm:406
+msgid "  - ~h (~,1f%) were inconclusive~%"
+msgstr "  - ~h (~,1f%) sa nepodarilo vyhodnotiť~%"
+
+#: guix/scripts/challenge.scm:415
+msgid ""
+"Usage: guix challenge [PACKAGE...]\n"
+"Challenge the substitutes for PACKAGE... provided by one or more servers.\n"
+msgstr ""
+"Použitie: guix challenge [BALÍK...]\n"
+"Preskúšať náhrady za BALÍK... poskytnuté jedným alebo viacerými servermi.\n"
+
+#: guix/scripts/challenge.scm:417
+msgid ""
+"\n"
+"      --substitute-urls=URLS\n"
+"                         compare build results with those at URLS"
+msgstr ""
+"\n"
+"      --substitute-urls=PREPOJENIA\n"
+"                         porovnať výsledky zostavenia s výsledkami "
+"dostupnými cez PREPOJENIA"
+
+#: guix/scripts/challenge.scm:420
+msgid ""
+"\n"
+"  -v, --verbose          show details about successful comparisons"
+msgstr ""
+"\n"
+"  -v, --verbose          zobraziť podrobnosti o úspešných porovnaniach"
+
+#: guix/scripts/challenge.scm:422
+msgid ""
+"\n"
+"      --diff=MODE        show differences according to MODE"
+msgstr ""
+"\n"
+"      --diff=SPÔSOB        zobraziť rozdiely SPÔSOBOM"
+
+#: guix/scripts/challenge.scm:451
+#, scheme-format
+msgid "~a: unknown diff mode~%"
+msgstr "~a: neznámy spôsob zobrazenia rozdielov~%"
+
+#: guix/scripts/copy.scm:61
+#, scheme-format
+msgid "~a: invalid TCP port number~%"
+msgstr "~a: neplatné číslo TCP portu~%"
+
+#: guix/scripts/copy.scm:63
+#, scheme-format
+msgid "~a: invalid SSH specification~%"
+msgstr "~a: neplatné predvoľby SSH~%"
+
+#: guix/scripts/copy.scm:109
+msgid ""
+"Usage: guix copy [OPTION]... ITEMS...\n"
+"Copy ITEMS to or from the specified host over SSH.\n"
+msgstr ""
+"Použitie: guix copy [PREPÍNAČ]... POLOŽKY...\n"
+"Kopírovať POLOŽKY na alebo zo zadaného hostiteľa cez SSH.\n"
+
+#: guix/scripts/copy.scm:111
+msgid ""
+"\n"
+"      --to=HOST          send ITEMS to HOST"
+msgstr ""
+"\n"
+"      --to=HOSTITEĽ          odoslať POLOŽKY HOSTITEĽOVI"
+
+#: guix/scripts/copy.scm:113
+msgid ""
+"\n"
+"      --from=HOST        receive ITEMS from HOST"
+msgstr ""
+"\n"
+"      --from=HOSTITEĽ        prijať POLOŽKY od HOSTITEĽA"
+
+#: guix/scripts/copy.scm:192
+#, scheme-format
+msgid "use '--to' or '--from'~%"
+msgstr "použite „--to“ alebo „--from“~%"
+
+#: guix/scripts/pack.scm:111
+#, scheme-format
+msgid "~a: compressor not found~%"
+msgstr "~a: nástroj na kompresiu sa nenašiel~%"
+
+#: guix/scripts/pack.scm:323
+#, scheme-format
+msgid "entry point not supported in the '~a' format~%"
+msgstr "vstupný bod nepodporovaný vo formáte „~a“~%"
+
+#: guix/scripts/pack.scm:705
+#, scheme-format
+msgid ""
+"cross-compilation not implemented here;\n"
+"please email '~a'~%"
+msgstr ""
+"krížové zostavovanie tu nie je podporované;\n"
+"pošlite správu na „~a“~%"
+
+#: guix/scripts/pack.scm:965
+msgid "The supported formats for 'guix pack' are:"
+msgstr "Podporované formáty pre „guix pack“ sú:"
+
+#: guix/scripts/pack.scm:967
+msgid ""
+"\n"
+"  tarball       Self-contained tarball, ready to run on another machine"
+msgstr ""
+"\n"
+"  tarball       Samostatný archív spustiteľný na inom počítači"
+
+#: guix/scripts/pack.scm:969
+msgid ""
+"\n"
+"  squashfs      Squashfs image suitable for Singularity"
+msgstr ""
+"\n"
+"  squashfs      Obraz Squashfs vhodný pre Singularity"
+
+#: guix/scripts/pack.scm:971
+msgid ""
+"\n"
+"  docker        Tarball ready for 'docker load'"
+msgstr ""
+"\n"
+"  docker        Archív pripravený na použitie s „docker load“"
+
+#: guix/scripts/pack.scm:1040
+#, scheme-format
+msgid "~a: invalid symlink specification~%"
+msgstr "~a: neplatne zadaný symbolický odkaz~%"
+
+#: guix/scripts/pack.scm:1054
+#, scheme-format
+msgid "~a: unsupported profile name~%"
+msgstr "~a: nepodporovaný názov profilu~%"
+
+#: guix/scripts/pack.scm:1072
+msgid ""
+"Usage: guix pack [OPTION]... PACKAGE...\n"
+"Create a bundle of PACKAGE.\n"
+msgstr ""
+"Použitie: guix pack [PREPÍNAČ]... BALÍK...\n"
+"Vytvoriť zväzok BALÍKOV.\n"
+
+#: guix/scripts/pack.scm:1078
+msgid ""
+"\n"
+"  -f, --format=FORMAT    build a pack in the given FORMAT"
+msgstr ""
+"\n"
+"  -f, --format=FORMÁT    zostaviť zväzok balíkov vo FORMÁTE"
+
+#: guix/scripts/pack.scm:1080
+msgid ""
+"\n"
+"      --list-formats     list the formats available"
+msgstr ""
+"\n"
+"      --list-formats     zobraziť zoznam dostupných formátov"
+
+#: guix/scripts/pack.scm:1082
+msgid ""
+"\n"
+"  -R, --relocatable      produce relocatable executables"
+msgstr ""
+"\n"
+"  -R, --relocatable      vytvoriť premiestniteľné spustiteľné súbory"
+
+#: guix/scripts/pack.scm:1090
+msgid ""
+"\n"
+"  -C, --compression=TOOL compress using TOOL--e.g., \"lzip\""
+msgstr ""
+"\n"
+"  -C, --compression=NÁSTROJ komprimovať s použitím NÁSTROJA, napr. „lzip“"
+
+#: guix/scripts/pack.scm:1092
+msgid ""
+"\n"
+"  -S, --symlink=SPEC     create symlinks to the profile according to SPEC"
+msgstr ""
+"\n"
+"  -S, --symlink=ZADANIE     vytvoriť symbolické odkazy na profil podľa "
+"ZADANIA"
+
+#: guix/scripts/pack.scm:1094
+msgid ""
+"\n"
+"  -m, --manifest=FILE    create a pack with the manifest from FILE"
+msgstr ""
+"\n"
+"  -m, --manifest=SÚBOR    vytvoriť zväzok podľa manifestu zo SÚBORU"
+
+#: guix/scripts/pack.scm:1096
+msgid ""
+"\n"
+"      --entry-point=PROGRAM\n"
+"                         use PROGRAM as the entry point of the pack"
+msgstr ""
+"\n"
+"      --entry-point=PROGRAM\n"
+"                         použiť PROGRAM ako vstupný bod zväzku balíkov"
+
+#: guix/scripts/pack.scm:1101
+msgid ""
+"\n"
+"      --localstatedir    include /var/guix in the resulting pack"
+msgstr ""
+"\n"
+"      --localstatedir    priložiť /var/guix k výslednému zväzku"
+
+#: guix/scripts/pack.scm:1103
+msgid ""
+"\n"
+"      --profile-name=NAME\n"
+"                         populate /var/guix/profiles/.../NAME"
+msgstr ""
+"\n"
+"      --profile-name=NÁZOV\n"
+"                         naplniť /var/guix/profiles/.../NÁZOV"
+
+#: guix/scripts/pack.scm:1109
+msgid ""
+"\n"
+"  -d, --derivation       return the derivation of the pack"
+msgstr ""
+"\n"
+"  -d, --derivation       vrátiť odvodeninu balíka"
+
+#: guix/scripts/pack.scm:1113
+msgid ""
+"\n"
+"      --bootstrap        use the bootstrap binaries to build the pack"
+msgstr ""
+"\n"
+"      --bootstrap        použiť zavádzacie binárne súbory na zostavenie "
+"zväzku"
+
+#: guix/scripts/pack.scm:1167
+#, scheme-format
+msgid "could not determine provenance of package ~a~%"
+msgstr "nepodarilo sa zistiť pôvod balíka ~a~%"
+
+#: guix/scripts/pack.scm:1176
+#, scheme-format
+msgid "both a manifest and a package list were given~%"
+msgstr "naraz ste zadali manifest aj zoznam balíkov~%"
+
+#: guix/scripts/pack.scm:1235
+#, scheme-format
+msgid "~a: unknown pack format~%"
+msgstr "~a: neznámy formát zväzku~%"
+
+#: guix/scripts/pack.scm:1259
+#, scheme-format
+msgid "no packages specified; building an empty pack~%"
+msgstr "neboli určené žiadne balíky; zostaví sa prázdny zväzok~%"
+
+#: guix/scripts/pack.scm:1263
+#, scheme-format
+msgid "Singularity requires you to provide a shell~%"
+msgstr "Singularity vyžaduje shell~%"
+
+#: guix/scripts/pack.scm:1264
+msgid "Add @code{bash} or @code{bash-minimal} to your package list."
+msgstr "Pridajte @code{bash} alebo @code{bash-minimal} do zoznamu balíkov."
+
+#: guix/scripts/weather.scm:93
+msgid "computing ~h package derivations for ~a...~%"
+msgstr "výpočet odvodenín balíkov v počte ~h pre ~a...~%"
+
+#: guix/scripts/weather.scm:181
+msgid "looking for ~h store items on ~a...~%"
+msgstr "vyhľadávanie položiek úložiska v počte ~h na ~a...~%"
+
+#: guix/scripts/weather.scm:201
+msgid "  ~,1f% substitutes available (~h out of ~h)~%"
+msgstr "  ~,1f% dostupných náhrad (~h z ~h)~%"
+
+#: guix/scripts/weather.scm:207
+#, scheme-format
+msgid "  unknown substitute sizes~%"
+msgstr "  neznáme veľkosti náhrad~%"
+
+#: guix/scripts/weather.scm:210
+msgid "  ~,1h MiB of nars (compressed)~%"
+msgstr "  ~,1h MiB súborov nar (komprimovaných)~%"
+
+#: guix/scripts/weather.scm:211
+msgid "  at least ~,1h MiB of nars (compressed)~%"
+msgstr "  najmenej ~,1h MiB súborov nar (komprimovaných)~%"
+
+#: guix/scripts/weather.scm:213
+msgid "  ~,1h MiB on disk (uncompressed)~%"
+msgstr "  ~,1h MiB na disku (bez kompresie)~%"
+
+#: guix/scripts/weather.scm:216
+msgid "  ~,3h seconds per request (~,1h seconds in total)~%"
+msgstr "  ~,3h sekúnd na požiadavku (~,1h sekúnd spolu)~%"
+
+#: guix/scripts/weather.scm:218
+msgid "  ~,1h requests per second~%"
+msgstr "  ~,1h požiadaviek za sekundu~%"
+
+#: guix/scripts/weather.scm:224
+#, scheme-format
+msgid "  (continuous integration information unavailable)~%"
+msgstr "  (poznatky o priebežnej integrácii nedostupné)~%"
+
+#: guix/scripts/weather.scm:227
+#, scheme-format
+msgid "  '~a' returned ~a (~s)~%"
+msgstr "  „~a“ vrátil ~a (~s)~%"
+
+#: guix/scripts/weather.scm:244
+msgid "  ~,1f% (~h out of ~h) of the missing items are queued~%"
+msgstr "  ~,1f% (~h z ~h) chýbajúcich položiek je v rade~%"
+
+#: guix/scripts/weather.scm:250
+msgid "  at least ~h queued builds~%"
+msgstr "  najmenej ~h zostavení v rade~%"
+
+#: guix/scripts/weather.scm:251
+msgid "  ~h queued builds~%"
+msgstr "  ~h zostavení v rade~%"
+
+#: guix/scripts/weather.scm:254
+#, scheme-format
+msgid "      ~a: ~a (~0,1f%)~%"
+msgstr "      ~a: ~a (~0,1f%)~%"
+
+#: guix/scripts/weather.scm:260
+#, scheme-format
+msgid "  build rate: ~1,2f builds per hour~%"
+msgstr "  rýchlosť zostavovania: ~1,2f zostavení za hodinu~%"
+
+#: guix/scripts/weather.scm:264
+#, scheme-format
+msgid "      ~a: ~,2f builds per hour~%"
+msgstr "      ~a: ~,2f zostavení za hodinu~%"
+
+#: guix/scripts/weather.scm:272
+#, scheme-format
+msgid "Substitutes are missing for the following items:~%"
+msgstr "Chýbajú náhrady za nasledovné položky:~%"
+
+#: guix/scripts/weather.scm:285
+msgid ""
+"Usage: guix weather [OPTIONS] [PACKAGES ...]\n"
+"Report the availability of substitutes.\n"
+msgstr ""
+"Použitie: guix weather [PREPÍNAČE] [BALÍKY ...]\n"
+"Zistiť dostupnosť náhrad.\n"
+
+#: guix/scripts/weather.scm:287
+msgid ""
+"\n"
+"      --substitute-urls=URLS\n"
+"                         check for available substitutes at URLS"
+msgstr ""
+"\n"
+"      --substitute-urls=PREPOJENIA\n"
+"                         vyhľadať dostupné náhrady cez PREPOJENIA"
+
+#: guix/scripts/weather.scm:290
+msgid ""
+"\n"
+"  -m, --manifest=MANIFEST\n"
+"                         look up substitutes for packages specified in "
+"MANIFEST"
+msgstr ""
+"\n"
+"  -m, --manifest=MANIFEST\n"
+"                         vyhľadať náhrady za balíky uvedené v MANIFESTE"
+
+#: guix/scripts/weather.scm:293
+msgid ""
+"\n"
+"  -c, --coverage[=COUNT]\n"
+"                         show substitute coverage for packages with at "
+"least\n"
+"                         COUNT dependents"
+msgstr ""
+"\n"
+"  -c, --coverage[=POČET]\n"
+"                         zobraziť pokrytie náhradami pre balíky, na ktorých\n"
+"                         závisí aspoň POČET iných balíkov"
+
+#: guix/scripts/weather.scm:297
+msgid ""
+"\n"
+"      --display-missing  display the list of missing substitutes"
+msgstr ""
+"\n"
+"      --display-missing  zobraziť zoznam chýbajúcich náhrad"
+
+#: guix/scripts/weather.scm:299
+msgid ""
+"\n"
+"  -s, --system=SYSTEM    consider substitutes for SYSTEM--e.g., \"i686-linux"
+"\""
+msgstr ""
+"\n"
+"  -s, --system=SYSTÉM    zohľadniť náhrady pre SYSTÉM, napr. „i686-linux“"
+
+#: guix/scripts/weather.scm:323
+#, scheme-format
+msgid "~a: invalid URL~%"
+msgstr "~a: neplatné prepojenie~%"
+
+#: guix/scripts/weather.scm:456
+#, scheme-format
+msgid "The following ~a package is missing from '~a' for '~a':~%"
+msgid_plural "The following ~a packages are missing from '~a' for '~a':~%"
+msgstr[0] "~a nasledovný balík chýba v „~a“ pre „~a“:~%"
+msgstr[1] "~a nasledovné balíky chýbajú v „~a“ pre „~a“:~%"
+msgstr[2] "~a nasledovných balíkov chýba v „~a“ pre „~a“:~%"
+
+#: guix/scripts/weather.scm:462
+#, scheme-format
+msgid "~a package is missing from '~a' for '~a':~%"
+msgid_plural "~a packages are missing from '~a' for '~a', among which:~%"
+msgstr[0] "~a balík chýba v „~a“ pre „~a“:~%"
+msgstr[1] "~a balíky chýbajú v „~a“ pre „~a“, medzi ktorými:~%"
+msgstr[2] "~a balíkov chýba v „~a“ pre „~a“, medzi ktorými:~%"
+
+#: guix/scripts/describe.scm:53 guix/scripts/processes.scm:291
+msgid "The available formats are:\n"
+msgstr "Dostupné formáty sú:\n"
+
+#: guix/scripts/describe.scm:64 guix/scripts/processes.scm:324
+#, scheme-format
+msgid "~a: unsupported output format~%"
+msgstr "~a: nepodporovaný výstupný formát~%"
+
+#: guix/scripts/describe.scm:87
+msgid ""
+"Usage: guix describe [OPTION]...\n"
+"Display information about the channels currently in use.\n"
+msgstr ""
+"Použitie: guix describe [PREPÍNAČ]...\n"
+"Zobraziť podrobnosti o práve používaných kanáloch.\n"
+
+#: guix/scripts/describe.scm:89
+msgid ""
+"\n"
+"  -f, --format=FORMAT    display information in the given FORMAT"
+msgstr ""
+"\n"
+"  -f, --format=FORMÁT    zobraziť údaje vo FORMÁTE"
+
+#: guix/scripts/describe.scm:91 guix/scripts/processes.scm:308
+msgid ""
+"\n"
+"      --list-formats     display available formats"
+msgstr ""
+"\n"
+"      --list-formats     zobraziť dostupné formáty"
+
+#: guix/scripts/describe.scm:93
+msgid ""
+"\n"
+"  -p, --profile=PROFILE  display information about PROFILE"
+msgstr ""
+"\n"
+"  -p, --profile=PROFIL  zobraziť podrobnosti o PROFILE"
+
+#: guix/scripts/describe.scm:112
+#, scheme-format
+msgid "~%;; warning: GUIX_PACKAGE_PATH=\"~a\"~%"
+msgstr "~%;; upozornenie: GUIX_PACKAGE_PATH=\"~a\"~%"
+
+#: guix/scripts/describe.scm:115
+#, scheme-format
+msgid "'GUIX_PACKAGE_PATH' is set but it is not captured~%"
+msgstr "„GUIX_PACKAGE_PATH“ je nastavená ale nepoužíva sa~%"
+
+#: guix/scripts/describe.scm:155
+#, scheme-format
+msgid "failed to determine origin~%"
+msgstr "zisťovanie pôvodu zlyhalo~%"
+
+#: guix/scripts/describe.scm:156
+#, scheme-format
+msgid ""
+"Perhaps this\n"
+"@command{guix} command was not obtained with @command{guix pull}?  Its "
+"version\n"
+"string is ~a.~%"
+msgstr ""
+"Možno tento\n"
+"@command{guix} príkaz nebol získaný pomocou @command{guix pull}.  Jeho "
+"verzia\n"
+"je ~a.~%"
+
+#: guix/scripts/describe.scm:166
+#, scheme-format
+msgid "Git checkout:~%"
+msgstr "Git repozitár:~%"
+
+#: guix/scripts/describe.scm:167
+#, scheme-format
+msgid "  repository: ~a~%"
+msgstr "  repozitár: ~a~%"
+
+#: guix/scripts/describe.scm:168
+#, scheme-format
+msgid "  branch: ~a~%"
+msgstr "  vetva: ~a~%"
+
+#: guix/scripts/describe.scm:169
+#, scheme-format
+msgid "  commit: ~a~%"
+msgstr "  číslo úpravy (commit): ~a~%"
+
+#: guix/scripts/describe.scm:236
+#, scheme-format
+msgid "    repository URL: ~a~%"
+msgstr "    zdroj repozitára: ~a~%"
+
+#: guix/scripts/describe.scm:239
+#, scheme-format
+msgid "    branch: ~a~%"
+msgstr "    vetva: ~a~%"
+
+#: guix/scripts/describe.scm:241
+#, scheme-format
+msgid "    commit: ~a~%"
+msgstr "    číslo úpravy (commit): ~a~%"
+
+#: guix/scripts/processes.scm:298
+msgid ""
+"Usage: guix processes\n"
+"List the current Guix sessions and their processes."
+msgstr ""
+"Použitie: guix processes\n"
+"Zobraziť zoznam súčasných sedení Guix a ich procesov."
+
+#: guix/scripts/processes.scm:306
+msgid ""
+"\n"
+"  -f, --format=FORMAT    display results as normalized record sets"
+msgstr ""
+"\n"
+"  -f, --format=FORMÁT    zobraziť výsledky ako množinu normalizovaných "
+"záznamov"
+
+#: guix/scripts/deploy.scm:49
+msgid ""
+"Usage: guix deploy [OPTION] FILE...\n"
+"Perform the deployment specified by FILE.\n"
+msgstr ""
+"Použitie: guix deploy [PREPÍNAČ] SÚBOR...\n"
+"Vykonať nasadenie určené SÚBOROM.\n"
+
+#: guix/scripts/deploy.scm:106
+#, scheme-format
+msgid "The following ~d machine will be deployed:~%"
+msgid_plural "The following ~d machines will be deployed:~%"
+msgstr[0] "Nasadí sa nasledovný ~d stroj:~%"
+msgstr[1] "Nasadia sa nasledovné ~d stroje:~%"
+msgstr[2] "Nasadí sa nasledovných ~d strojov:~%"
+
+#: guix/scripts/deploy.scm:120
+#, scheme-format
+msgid "deploying to ~a...~%"
+msgstr "nasadzuje sa na ~a...~%"
+
+#: guix/scripts/deploy.scm:135
+#, scheme-format
+msgid "failed to deploy ~a: ~a~%"
+msgstr "nepodarilo sa nasadiť ~a: ~a~%"
+
+#: guix/scripts/deploy.scm:140
+#, scheme-format
+msgid "rolling back ~a...~%"
+msgstr "vraciam ~a do pôvodného stavu...~%"
+
+#: guix/scripts/deploy.scm:146
+#, scheme-format
+msgid "successfully deployed ~a~%"
+msgstr "nasadzovanie ~a sa podarilo~%"
+
+#: guix/gexp.scm:423
+#, scheme-format
+msgid "resolving '~a' relative to current directory~%"
+msgstr "zisťuje sa „~a“ vzhľadom k súčasnému priečinku~%"
+
+#: guix/gexp.scm:815
+#, scheme-format
+msgid "importing module~{ ~a~} from the host~%"
+msgid_plural "importing modules~{ ~a~} from the host~%"
+msgstr[0] "načítava sa modul~{ ~a~} z hostiteľa~%"
+msgstr[1] "načítavajú sa moduly~{ ~a~} z hostiteľa~%"
+msgstr[2] "načítavajú sa moduly~{ ~a~} z hostiteľa~%"
+
+#: guix/gnu-maintenance.scm:809
+msgid "Updater for GNU packages"
+msgstr "Nástroj na aktualizáciu balíkov GNU"
+
+#: guix/gnu-maintenance.scm:818
+msgid "Updater for GNU packages only available via FTP"
+msgstr "Nástroj na aktualizáciu balíkov GNU je dostupný len cez FTP"
+
+#: guix/gnu-maintenance.scm:827
+msgid "Updater for packages hosted on savannah.gnu.org"
+msgstr "Nástroj na aktualizáciu je dostupný na savannah.gnu.org"
+
+#: guix/gnu-maintenance.scm:834
+msgid "Updater for packages hosted on sourceforge.net"
+msgstr "Nástroj na aktualizáciu balíkov dostupných cez sourceforge.net"
+
+#: guix/gnu-maintenance.scm:841
+msgid "Updater for X.org packages"
+msgstr "Nástroj na aktualizáciu balíkov X.org"
+
+#: guix/gnu-maintenance.scm:848
+msgid "Updater for packages hosted on kernel.org"
+msgstr "Nástroj na aktualizáciu balíkov dostupných cez kernel.org"
+
+#: guix/gnu-maintenance.scm:855
+msgid "Updater that crawls HTML pages."
+msgstr "Nástroj na aktualizáciu balíkov, ktorý prehľadáva HTML stránky."
+
+#: guix/scripts/container.scm:27
+msgid ""
+"Usage: guix container ACTION ARGS...\n"
+"Build and manipulate Linux containers.\n"
+msgstr ""
+"Použitie: guix container ČINNOSŤ PARAMETRE...\n"
+"Zostaviť a narábať s Linuxovými kontajnermi.\n"
+
+#: guix/scripts/container.scm:32
+msgid "   exec            execute a command inside of an existing container\n"
+msgstr "   exec            spustiť príkaz v existujúcom kontajneri\n"
+
+#: guix/scripts/container.scm:58
+#, scheme-format
+msgid "guix container: missing action~%"
+msgstr "guix container: postráda sa činnosť~%"
+
+#: guix/scripts/container.scm:68
+#, scheme-format
+msgid "guix container: invalid action~%"
+msgstr "guix container: neplatná činnosť~%"
+
+#: guix/scripts/container/exec.scm:40
+msgid ""
+"Usage: guix container exec PID COMMAND [ARGS...]\n"
+"Execute COMMAND within the container process PID.\n"
+msgstr ""
+"Použitie: guix container exec PID PRÍKAZ [PARAMETRE...]\n"
+"Vykonať PRÍKAZ vrámci kontajnera s číslom procesu PID.\n"
+
+#: guix/scripts/container/exec.scm:69
+#, scheme-format
+msgid "~a: extraneous argument~%"
+msgstr "~a: nadbytočný parameter~%"
+
+#: guix/scripts/container/exec.scm:87
+#, scheme-format
+msgid "no pid specified~%"
+msgstr "nebolo zadané žiadne číslo procesu~%"
+
+#: guix/scripts/container/exec.scm:90
+#, scheme-format
+msgid "no command specified~%"
+msgstr "nebol zadaný žiadny príkaz~%"
+
+#: guix/scripts/container/exec.scm:93
+#, scheme-format
+msgid "no such process ~d~%"
+msgstr "žiadny proces s číslom ~d~%"
+
+#: guix/scripts/container/exec.scm:105
+#, scheme-format
+msgid "exec failed with status ~d~%"
+msgstr "činnosť exec zlyhala s návratovou hodnotou ~d~%"
+
+#: guix/transformations.scm:178 guix/transformations.scm:246
+#, scheme-format
+msgid "invalid replacement specification: ~s"
+msgstr "neplatné určenie nahradenia: ~s"
+
+#: guix/transformations.scm:227
+#, scheme-format
+msgid "the source of ~a is not a Git reference"
+msgstr "zdroj balíka ~a nie je Git prepojenie"
+
+#: guix/transformations.scm:319
+#, scheme-format
+msgid "~a: invalid Git URL replacement specification"
+msgstr "~a: neplatné určenie nahradenia Git prepojenia"
+
+#: guix/transformations.scm:397
+#, scheme-format
+msgid "~a: invalid toolchain replacement specification"
+msgstr "~a: neplatné určenie nahradenia vývojového reťazca"
+
+#: guix/transformations.scm:501
+#, scheme-format
+msgid "~a: invalid package patch specification"
+msgstr "~a: neplatné určenie záplaty balíka"
+
+#: guix/transformations.scm:524
+#, scheme-format
+msgid "could not determine latest upstream release of '~a'~%"
+msgstr "nepodarilo sa zistiť najnovšie vydanie balíka „~a“ u poskytovateľa~%"
+
+#: guix/transformations.scm:532
+#, scheme-format
+msgid "cannot authenticate source of '~a', version ~a~%"
+msgstr "nepodarilo sa overiť zdroj „~a“, verzia ~a~%"
+
+#: guix/transformations.scm:616
+#, scheme-format
+msgid "Available package transformation options:~%"
+msgstr "Dostupné možnosti premeny balíka:~%"
+
+#: guix/transformations.scm:622
+msgid ""
+"\n"
+"      --with-source=[PACKAGE=]SOURCE\n"
+"                         use SOURCE when building the corresponding package"
+msgstr ""
+"\n"
+"      --with-source=[BALÍK=]ZDROJ\n"
+"                         použiť ZDROJ pri zostavení BALÍKA"
+
+#: guix/transformations.scm:625
+msgid ""
+"\n"
+"      --with-input=PACKAGE=REPLACEMENT\n"
+"                         replace dependency PACKAGE by REPLACEMENT"
+msgstr ""
+"\n"
+"      --with-input=BALÍK=NÁHRADNÝ-BALÍK\n"
+"                         použiť NÁHRADNÝ-BALÍK namiesto BALÍKA závislosti"
+
+#: guix/transformations.scm:628
+msgid ""
+"\n"
+"      --with-graft=PACKAGE=REPLACEMENT\n"
+"                         graft REPLACEMENT on packages that refer to PACKAGE"
+msgstr ""
+"\n"
+"      --with-graft=BALÍK=NÁHRADNÝ-BALÍK\n"
+"                         vštepiť NÁHRADNÝ-BALÍK balíkom, ktoré odkazujú na "
+"BALÍK"
+
+#: guix/transformations.scm:631
+msgid ""
+"\n"
+"      --with-branch=PACKAGE=BRANCH\n"
+"                         build PACKAGE from the latest commit of BRANCH"
+msgstr ""
+"\n"
+"      --with-branch=BALÍK=VETVA\n"
+"                         zostaviť najnovšiu úpravu (commit) BALÍKA z VETVY"
+
+#: guix/transformations.scm:634
+msgid ""
+"\n"
+"      --with-commit=PACKAGE=COMMIT\n"
+"                         build PACKAGE from COMMIT"
+msgstr ""
+"\n"
+"      --with-commit=BALÍK=ÚPRAVA\n"
+"                         zostaviť BALÍK z ÚPRAVY (commitu)"
+
+#: guix/transformations.scm:637
+msgid ""
+"\n"
+"      --with-git-url=PACKAGE=URL\n"
+"                         build PACKAGE from the repository at URL"
+msgstr ""
+"\n"
+"      --with-git-url=BALÍK=PREPOJENIE\n"
+"                         zostaviť BALÍK z repozitára dostupného cez "
+"PREPOJENIE"
+
+#: guix/transformations.scm:640
+msgid ""
+"\n"
+"      --with-patch=PACKAGE=FILE\n"
+"                         add FILE to the list of patches of PACKAGE"
+msgstr ""
+"\n"
+"      --with-patch=BALÍK=SÚBOR\n"
+"                         pridať SÚBOR do zoznamu záplat pre BALÍK"
+
+#: guix/transformations.scm:643
+msgid ""
+"\n"
+"      --with-latest=PACKAGE\n"
+"                         use the latest upstream release of PACKAGE"
+msgstr ""
+"\n"
+"      --with-latest=BALÍK\n"
+"                         použiť najnovšie dostupné vydanie BALÍKA"
+
+#: guix/transformations.scm:646
+msgid ""
+"\n"
+"      --with-c-toolchain=PACKAGE=TOOLCHAIN\n"
+"                         build PACKAGE and its dependents with TOOLCHAIN"
+msgstr ""
+"\n"
+"      --with-c-toolchain=BALÍK=VÝVOJOVÝ-REŤAZEC\n"
+"                         zostaviť BALÍK a jeho závislosti pomocou VÝVOJOVÉHO-"
+"REŤAZCA"
+
+#: guix/transformations.scm:649
+msgid ""
+"\n"
+"      --with-debug-info=PACKAGE\n"
+"                         build PACKAGE and preserve its debug info"
+msgstr ""
+"\n"
+"      --with-debug-info=BALÍK\n"
+"                         zostaviť BALÍK zachovajúc symboly ladenia"
+
+#: guix/transformations.scm:652
+msgid ""
+"\n"
+"      --without-tests=PACKAGE\n"
+"                         build PACKAGE without running its tests"
+msgstr ""
+"\n"
+"      --without-tests=BALÍK\n"
+"                         zostaviť BALÍK vynechajúc testy"
+
+#: guix/transformations.scm:658
+msgid ""
+"\n"
+"      --help-transform   list package transformation options not shown here"
+msgstr ""
+"\n"
+"      --help-transform   ukázať možnosti premeny balíka, ktoré tu nie sú "
+"zobrazené"
+
+#: guix/transformations.scm:707
+#, scheme-format
+msgid "transformation '~a' had no effect on ~a~%"
+msgstr "premena „~a“ nemá dopad na ~a~%"
+
+#: guix/upstream.scm:348
+#, scheme-format
+msgid "failed to download detached signature from ~a~%"
+msgstr "nepodarilo sa stiahnuť samostatný podpis z ~a~%"
+
+#: guix/upstream.scm:352
+#, scheme-format
+msgid "signature verification failed for '~a' (key: ~a)~%"
+msgstr "overenie podpisu pre „~a“ zlyhalo (kľúč: ~a)~%"
+
+#: guix/upstream.scm:356
+#, scheme-format
+msgid "missing public key ~a for '~a'~%"
+msgstr "postráda sa verejný kľúč ~a pre „~a“~%"
+
+#: guix/upstream.scm:370
+#, scheme-format
+msgid "failed to fetch source from '~a'"
+msgstr "získavanie zdroja pre „~a“ zlyhalo"
+
+#: guix/upstream.scm:454
+#, scheme-format
+msgid "cannot download for this method: ~s"
+msgstr "nedá sa sťahovať týmto spôsobom: ~s"
+
+#: guix/upstream.scm:519
+#, scheme-format
+msgid "~a: could not locate source file"
+msgstr "~a: nepodarilo sa nájsť zdrojový súbor"
+
+#: guix/upstream.scm:523
+#, scheme-format
+msgid "~a: no `version' field in source; skipping~%"
+msgstr "~a: postráda sa pole „version“ v zdrojovom súbore; preskakuje sa~%"
+
+#: guix/ui.scm:162
+#, scheme-format
+msgid "error: ~a: unbound variable"
+msgstr "chyba: ~a: neznáma premenná"
+
+#: guix/ui.scm:262
+msgid "entering debugger; type ',bt' for a backtrace\n"
+msgstr "spúšťa sa ladenie; zadajte „,bt“ pre zobrazenie stromu volaní\n"
+
+#: guix/ui.scm:320
+msgid "hint: "
+msgstr "rada: "
+
+#: guix/ui.scm:337
+msgid "Did you forget a @code{use-modules} form?"
+msgstr "Zabudli ste na nejaký @code{use-modules}?"
+
+#: guix/ui.scm:339
+#, scheme-format
+msgid "Did you forget @code{(use-modules ~a)}?"
+msgstr "Zabudli ste na @code{(use-modules ~a)}?"
+
+#: guix/ui.scm:349
+#, scheme-format
+msgid ""
+"File @file{~a} should probably start with:\n"
+"\n"
+"@example\n"
+"(define-module ~a)\n"
+"@end example"
+msgstr ""
+"Súbor @file{~a} by mal pravdepodobne začínať s:\n"
+"\n"
+"@example\n"
+"(define-module ~a)\n"
+"@end example"
+
+#: guix/ui.scm:363
+#, scheme-format
+msgid "module name ~a does not match file name '~a'~%"
+msgstr "názov modulu ~a sa nezhoduje s názvom súboru „~a“~%"
+
+#: guix/ui.scm:367
+#, scheme-format
+msgid "~a: file is empty~%"
+msgstr "~a: súbor je prázdny~%"
+
+#: guix/ui.scm:378 guix/ui.scm:426 guix/ui.scm:434 guix/ui.scm:438
+#, scheme-format
+msgid "failed to load '~a': ~a~%"
+msgstr "nepodarilo sa načítať „~a“: ~a~%"
+
+#: guix/ui.scm:385
+#, scheme-format
+msgid "~amissing closing parenthesis~%"
+msgstr "~achýbajúce pravé zátvorky~%"
+
+#: guix/ui.scm:390
+#, scheme-format
+msgid "~s: ~a~%"
+msgstr "~s: ~a~%"
+
+#: guix/ui.scm:406 guix/ui.scm:902
+#, scheme-format
+msgid "exception thrown: ~s~%"
+msgstr "bola vyhodená výnimka: ~s~%"
+
+#: guix/ui.scm:410 guix/ui.scm:448
+#, scheme-format
+msgid "failed to load '~a':~%"
+msgstr "nepodarilo sa načítať „~a“:~%"
+
+#: guix/ui.scm:445
+#, scheme-format
+msgid "failed to load '~a': exception thrown: ~s~%"
+msgstr "nepodarilo sa načítať „~a“: bola vyhodená výnimka: ~s~%"
+
+#: guix/ui.scm:493
+msgid ""
+"Consider installing the @code{glibc-utf8-locales} or\n"
+"@code{glibc-locales} package and defining @code{GUIX_LOCPATH}, along these\n"
+"lines:\n"
+"\n"
+"@example\n"
+"guix install glibc-utf8-locales\n"
+"export GUIX_LOCPATH=\"$HOME/.guix-profile/lib/locale\"\n"
+"@end example\n"
+"\n"
+"See the \"Application Setup\" section in the manual, for more info.\n"
+msgstr ""
+"Zvážte inštaláciu balíka @code{glibc-utf8-locales} alebo\n"
+"@code{glibc-locales} a nastavenie premennej @code{GUIX_LOCPATH},\n"
+"asi takto:\n"
+"\n"
+"@example\n"
+"guix install glibc-utf8-locales\n"
+"export GUIX_LOCPATH=\"$HOME/.guix-profile/lib/locale\"\n"
+"@end example\n"
+"\n"
+"Viď príručka, oddiel „Nastavenia aplikácií“.\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale.  Otherwise, do not translate "(C)"; leave it as-is.  */
+#: guix/ui.scm:535
+msgid "(C)"
+msgstr "(C)"
+
+#: guix/ui.scm:536
+msgid "the Guix authors\n"
+msgstr "autori Guixu\n"
+
+#: guix/ui.scm:537
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Licenčná dohoda GPLv3+: GNU GPL verzia 3 alebo novšia <http://gnu.org/"
+"licenses/gpl.html>\n"
+"Tento program je slobodný softvér. Môžete ho ďalej upravovať a rozširovať.\n"
+"NEPOSKYTUJÚ SA ŽIADNE ZÁRUKY vrámci rozsahu, ktorý určuje zákon.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address for this
+#. package.  Please add another line saying "Report translation bugs to
+#. ...\n" with the address for translation bugs (typically your translation
+#. team's web or email address).
+#: guix/ui.scm:549
+#, scheme-format
+msgid ""
+"\n"
+"Report bugs to: ~a."
+msgstr ""
+"\n"
+"Chyby hláste na: ~a."
+
+#: guix/ui.scm:551
+#, scheme-format
+msgid ""
+"\n"
+"~a home page: <~a>"
+msgstr ""
+"\n"
+"~a domovská stránka: <~a>"
+
+#: guix/ui.scm:553
+#, scheme-format
+msgid ""
+"\n"
+"General help using Guix and GNU software: <~a>"
+msgstr ""
+"\n"
+"Všeobecný návod na používanie systému Guix a GNU softvéru: <~a>"
+
+#. TRANSLATORS: Change the "/en" bit of this URL appropriately if
+#. the web site is translated in your language.
+#: guix/ui.scm:557
+msgid "https://guix.gnu.org/en/help/"
+msgstr "https://guix.gnu.org/en/help/"
+
+#: guix/ui.scm:611
+#, scheme-format
+msgid "'~a' is not a valid regular expression: ~a~%"
+msgstr "„~a“ nie je platným regulárnym výrazom: ~a~%"
+
+#: guix/ui.scm:617
+#, scheme-format
+msgid "~a: invalid number~%"
+msgstr "~a: neplatná číselná hodnota~%"
+
+#: guix/ui.scm:635
+#, scheme-format
+msgid "invalid number: ~a~%"
+msgstr "neplatná číselná hodnota: ~a~%"
+
+#: guix/ui.scm:658
+#, scheme-format
+msgid "unknown unit: ~a~%"
+msgstr "neznáma jednotka: ~a~%"
+
+#: guix/ui.scm:673
+#, scheme-format
+msgid ""
+"You cannot have two different versions\n"
+"or variants of @code{~a} in the same profile."
+msgstr ""
+"Nemôžete mať dve rozdielne verzie alebo obmeny\n"
+"@code{~a} v rovnakom profile."
+
+#: guix/ui.scm:676
+#, scheme-format
+msgid ""
+"Try upgrading both @code{~a} and @code{~a},\n"
+"or remove one of them from the profile."
+msgstr ""
+"Skúste aktualizovať @code{~a} a @code{~a},\n"
+"alebo jeden z nich odstráňte z profilu."
+
+#: guix/ui.scm:712
+#, scheme-format
+msgid "~a:~a:~a: package `~a' has an invalid input: ~s~%"
+msgstr "~a:~a:~a: balík „~a“ má neplatný vstup: ~s~%"
+
+#: guix/ui.scm:719
+#, scheme-format
+msgid "~a: ~a: build system `~a' does not support cross builds~%"
+msgstr "~a: ~a: zostavovací systém „~a“ nepodporuje krížové zostavovanie~%"
+
+#: guix/ui.scm:725
+#, scheme-format
+msgid "~s: invalid G-expression input~%"
+msgstr "~s: neplatný G-výraz na vstupe~%"
+
+#: guix/ui.scm:728
+#, scheme-format
+msgid "profile '~a' does not exist~%"
+msgstr "profil „~a“ neexistuje~%"
+
+#: guix/ui.scm:731
+#, scheme-format
+msgid "generation ~a of profile '~a' does not exist~%"
+msgstr "pokolenie ~a profilu „~a“ neexistuje~%"
+
+#: guix/ui.scm:736
+#, scheme-format
+msgid "package '~a~@[@~a~]~@[:~a~]' not found in profile~%"
+msgstr "balík „~a~@[@~a~]~@[:~a~]“ sa v profile nenašiel~%"
+
+#: guix/ui.scm:748
+#, scheme-format
+msgid "   ... propagated from ~a@~a~%"
+msgstr "   ... rozšírené z ~a@~a~%"
+
+#: guix/ui.scm:758
+#, scheme-format
+msgid "profile contains conflicting entries for ~a~a~%"
+msgstr "profil obsahuje nezlučiteľné vstupy pre ~a~a~%"
+
+#: guix/ui.scm:761
+#, scheme-format
+msgid "  first entry: ~a@~a~a ~a~%"
+msgstr "  prvý vstup: ~a@~a~a ~a~%"
+
+#: guix/ui.scm:767
+#, scheme-format
+msgid "  second entry: ~a@~a~a ~a~%"
+msgstr "  druhý vstup: ~a@~a~a ~a~%"
+
+#: guix/ui.scm:779
+#, scheme-format
+msgid "corrupt input while restoring '~a' from ~s~%"
+msgstr "poškodený vstup pri obnovovaní „~a“ z ~s~%"
+
+#: guix/ui.scm:781
+#, scheme-format
+msgid "corrupt input while restoring archive from ~s~%"
+msgstr "poškodený vstup pri obnovovaní archívu z ~s~%"
+
+#: guix/ui.scm:784
+#, scheme-format
+msgid "failed to connect to `~a': ~a~%"
+msgstr "nepodarilo sa pripojiť k „~a“': ~a~%"
+
+#: guix/ui.scm:792
+#, scheme-format
+msgid "reference to invalid output '~a' of derivation '~a'~%"
+msgstr "odkaz na neplatný výstup „~a“ odvodeniny „~a“~%"
+
+#: guix/ui.scm:796
+#, scheme-format
+msgid "file '~a' could not be found in these directories:~{ ~a~}~%"
+msgstr "súbor „~a“ sa nepodarilo nájsť v týchto priečinkoch:~{ ~a~}~%"
+
+#: guix/ui.scm:801
+#, scheme-format
+msgid ""
+"program "
+"exited~@[ with non-zero exit status ~a~]~@[ terminated by signal ~a~]~@[ stopped by signal ~a~]: "
+"~s~%"
+msgstr ""
+"program "
+"skončil~@[ s nenulovou návratovou hodnotou ~a~]~@[ ukončený signálom ~a~]~@[ zastavený signálom ~a~]: "
+"~s~%"
+
+#: guix/ui.scm:881
+#, scheme-format
+msgid "failed to read expression ~s: ~s~%"
+msgstr "nepodarilo sa prečítať výraz ~s: ~s~%"
+
+#: guix/ui.scm:887
+#, scheme-format
+msgid "failed to evaluate expression '~a':~%"
+msgstr "nepodarilo sa vyhodnotiť výraz „~a“:~%"
+
+#: guix/ui.scm:890
+#, scheme-format
+msgid "syntax error: ~a~%"
+msgstr "neplatná skladba: ~a~%"
+
+#: guix/ui.scm:914
+#, scheme-format
+msgid "expression ~s does not evaluate to a package~%"
+msgstr "vyhodnotenie výrazu ~s sa nezhoduje so žiadnym balíkom~%"
+
+#: guix/ui.scm:941
+msgid "at least ~,1h MB needed but only ~,1h MB available in ~a~%"
+msgstr "vyžaduje sa najmenej ~,1h MB ale dostupných je iba ~,1h MB v ~a~%"
+
+#: guix/ui.scm:1050
+#, scheme-format
+msgid "~:[The following derivation would be built:~%~{   ~a~%~}~;~]"
+msgid_plural "~:[The following derivations would be built:~%~{   ~a~%~}~;~]"
+msgstr[0] "~:[Zostavila by sa nasledovná odvodenina:~%~{   ~a~%~}~;~]"
+msgstr[1] "~:[Zostavili by sa nasledovné odvodeniny:~%~{   ~a~%~}~;~]"
+msgstr[2] "~:[Zostavili by sa nasledovné odvodeniny:~%~{   ~a~%~}~;~]"
+
+#. TRANSLATORS: "MB" is for "megabyte"; it should be
+#. translated to the corresponding abbreviation.
+#: guix/ui.scm:1059
+msgid "~:[~,1h MB would be downloaded:~%~{   ~a~%~}~;~]"
+msgstr "~:[stiahlo by sa ~,1h MB:~%~{   ~a~%~}~;~]"
+
+#: guix/ui.scm:1065
+#, scheme-format
+msgid "~:[The following file would be downloaded:~%~{   ~a~%~}~;~]"
+msgid_plural "~:[The following files would be downloaded:~%~{   ~a~%~}~;~]"
+msgstr[0] "~:[Stiahol by sa nasledovný súbor:~%~{   ~a~%~}~;~]"
+msgstr[1] "~:[Stiahli by sa nasledovné súbory:~%~{   ~a~%~}~;~]"
+msgstr[2] "~:[Stiahli by sa nasledovné súbory:~%~{   ~a~%~}~;~]"
+
+#: guix/ui.scm:1072
+#, scheme-format
+msgid "~:[The following graft would be made:~%~{   ~a~%~}~;~]"
+msgid_plural "~:[The following grafts would be made:~%~{   ~a~%~}~;~]"
+msgstr[0] "~:[Vykonal by sa nasledovný štep:~%~{   ~a~%~}~;~]"
+msgstr[1] "~:[Vykonali by sa nasledovné štepy:~%~{   ~a~%~}~;~]"
+msgstr[2] "~:[Vykonali by sa nasledovné štepy:~%~{   ~a~%~}~;~]"
+
+#: guix/ui.scm:1077
+#, scheme-format
+msgid "~:[The following profile hook would be built:~%~{   ~a~%~}~;~]"
+msgid_plural "~:[The following profile hooks would be built:~%~{   ~a~%~}~;~]"
+msgstr[0] "~:[Zostavil by sa nasledovný háčik profilu:~%~{   ~a~%~}~;~]"
+msgstr[1] "~:[Zostavili by sa nasledovné háčiky profilu:~%~{   ~a~%~}~;~]"
+msgstr[2] "~:[Zostavili by sa nasledovné háčiky profilu:~%~{   ~a~%~}~;~]"
+
+#. TRANSLATORS: "MB" is for "megabyte"; it should be
+#. translated to the corresponding abbreviation.
+#: guix/ui.scm:1089
+msgid "~:[~,1h MB would be downloaded~%~;~]"
+msgstr "~:[stiahlo by sa ~,1h MB~%~;~]"
+
+#: guix/ui.scm:1093
+msgid "~:[~h item would be downloaded~%~;~]"
+msgid_plural "~:[~h items would be downloaded~%~;~]"
+msgstr[0] "~:[stiahla by sa ~h položka~%~;~]"
+msgstr[1] "~:[stiahli by sa ~h položky~%~;~]"
+msgstr[2] "~:[stiahlo by sa ~h položiek~%~;~]"
+
+#: guix/ui.scm:1101
+#, scheme-format
+msgid "~:[The following derivation will be built:~%~{   ~a~%~}~;~]"
+msgid_plural "~:[The following derivations will be built:~%~{   ~a~%~}~;~]"
+msgstr[0] "~:[Zostaví sa nasledovná odvodenina:~%~{   ~a~%~}~;~]"
+msgstr[1] "~:[Zostavia sa nasledovné odvodeniny:~%~{   ~a~%~}~;~]"
+msgstr[2] "~:[Zostavia sa nasledovné odvodeniny:~%~{   ~a~%~}~;~]"
+
+#. TRANSLATORS: "MB" is for "megabyte"; it should be
+#. translated to the corresponding abbreviation.
+#: guix/ui.scm:1110
+msgid "~:[~,1h MB will be downloaded:~%~{   ~a~%~}~;~]"
+msgstr "~:[stiahne sa ~,1h MB:~%~{   ~a~%~}~;~]"
+
+#: guix/ui.scm:1116
+#, scheme-format
+msgid "~:[The following file will be downloaded:~%~{   ~a~%~}~;~]"
+msgid_plural "~:[The following files will be downloaded:~%~{   ~a~%~}~;~]"
+msgstr[0] "~:[Stiahne sa nasledovný súbor:~%~{   ~a~%~}~;~]"
+msgstr[1] "~:[Stiahnu sa nasledovné súbory:~%~{   ~a~%~}~;~]"
+msgstr[2] "~:[Stiahnu sa nasledovné súbory:~%~{   ~a~%~}~;~]"
+
+#: guix/ui.scm:1123
+#, scheme-format
+msgid "~:[The following graft will be made:~%~{   ~a~%~}~;~]"
+msgid_plural "~:[The following grafts will be made:~%~{   ~a~%~}~;~]"
+msgstr[0] "~:[Vykoná sa nasledovný štep:~%~{   ~a~%~}~;~]"
+msgstr[1] "~:[Vykonajú sa nasledovné štepy:~%~{   ~a~%~}~;~]"
+msgstr[2] "~:[Vykonajú sa nasledovné štepy:~%~{   ~a~%~}~;~]"
+
+#: guix/ui.scm:1128
+#, scheme-format
+msgid "~:[The following profile hook will be built:~%~{   ~a~%~}~;~]"
+msgid_plural "~:[The following profile hooks will be built:~%~{   ~a~%~}~;~]"
+msgstr[0] "~:[Zostaví sa nasledovný háčik profilu:~%~{   ~a~%~}~;~]"
+msgstr[1] "~:[Zostavia sa nasledovné háčiky profilu:~%~{   ~a~%~}~;~]"
+msgstr[2] "~:[Zostavia sa nasledovné háčiky profilu:~%~{   ~a~%~}~;~]"
+
+#. TRANSLATORS: "MB" is for "megabyte"; it should be
+#. translated to the corresponding abbreviation.
+#: guix/ui.scm:1140
+msgid "~:[~,1h MB will be downloaded~%~;~]"
+msgstr "~:[stiahne sa ~,1h MB~%~;~]"
+
+#: guix/ui.scm:1144
+msgid "~:[~h item will be downloaded~%~;~]"
+msgid_plural "~:[~h items will be downloaded~%~;~]"
+msgstr[0] "~:[stiahne sa ~h položka~%~;~]"
+msgstr[1] "~:[stiahnu sa ~h položky~%~;~]"
+msgstr[2] "~:[stiahne sa ~h položiek~%~;~]"
+
+#: guix/ui.scm:1263
+msgid "(dependencies or package changed)"
+msgstr "(balík alebo závislosti sa zmenili)"
+
+#: guix/ui.scm:1282
+#, scheme-format
+msgid "The following package would be removed:~%~{~a~%~}~%"
+msgid_plural "The following packages would be removed:~%~{~a~%~}~%"
+msgstr[0] "Odstránil by sa nasledovný balík:~%~{~a~%~}~%"
+msgstr[1] "Odstránili by sa nasledovné balíky:~%~{~a~%~}~%"
+msgstr[2] "Odstránili by sa nasledovné balíky:~%~{~a~%~}~%"
+
+#: guix/ui.scm:1287
+#, scheme-format
+msgid "The following package will be removed:~%~{~a~%~}~%"
+msgid_plural "The following packages will be removed:~%~{~a~%~}~%"
+msgstr[0] "Odstráni sa nasledovný balík:~%~{~a~%~}~%"
+msgstr[1] "Odstránia sa nasledovné balíky:~%~{~a~%~}~%"
+msgstr[2] "Odstránia sa nasledovné balíky:~%~{~a~%~}~%"
+
+#: guix/ui.scm:1300
+#, scheme-format
+msgid "The following package would be downgraded:~%~{~a~%~}~%"
+msgid_plural "The following packages would be downgraded:~%~{~a~%~}~%"
+msgstr[0] "Nasledovný balík by prešiel na staršiu verziu:~%~{~a~%~}~%"
+msgstr[1] "Nasledovné balíky by prešli na staršie verzie:~%~{~a~%~}~%"
+msgstr[2] "Nasledovné balíky by prešli na staršie verzie:~%~{~a~%~}~%"
+
+#: guix/ui.scm:1305
+#, scheme-format
+msgid "The following package will be downgraded:~%~{~a~%~}~%"
+msgid_plural "The following packages will be downgraded:~%~{~a~%~}~%"
+msgstr[0] "Nasledovný balík prejde na staršiu verziu:~%~{~a~%~}~%"
+msgstr[1] "Nasledovné balíky prejdú na staršie verzie:~%~{~a~%~}~%"
+msgstr[2] "Nasledovné balíky prejdú na staršie verzie:~%~{~a~%~}~%"
+
+#: guix/ui.scm:1318
+#, scheme-format
+msgid "The following package would be upgraded:~%~{~a~%~}~%"
+msgid_plural "The following packages would be upgraded:~%~{~a~%~}~%"
+msgstr[0] "Aktualizoval by sa nasledovný balík:~%~{~a~%~}~%"
+msgstr[1] "Aktualizovali by sa nasledovné balíky:~%~{~a~%~}~%"
+msgstr[2] "Aktualizovali by sa nasledovné balíky:~%~{~a~%~}~%"
+
+#: guix/ui.scm:1323
+#, scheme-format
+msgid "The following package will be upgraded:~%~{~a~%~}~%"
+msgid_plural "The following packages will be upgraded:~%~{~a~%~}~%"
+msgstr[0] "Aktualizuje sa nasledovný balík:~%~{~a~%~}~%"
+msgstr[1] "Aktualizujú sa nasledovné balíky:~%~{~a~%~}~%"
+msgstr[2] "Aktualizujú sa nasledovné balíky:~%~{~a~%~}~%"
+
+#: guix/ui.scm:1334
+#, scheme-format
+msgid "The following package would be installed:~%~{~a~%~}~%"
+msgid_plural "The following packages would be installed:~%~{~a~%~}~%"
+msgstr[0] "Nainštaloval by sa nasledovný balík:~%~{~a~%~}~%"
+msgstr[1] "Nainštalovali by sa nasledovné balíky:~%~{~a~%~}~%"
+msgstr[2] "Nainštalovali by sa nasledovné balíky:~%~{~a~%~}~%"
+
+#: guix/ui.scm:1339
+#, scheme-format
+msgid "The following package will be installed:~%~{~a~%~}~%"
+msgid_plural "The following packages will be installed:~%~{~a~%~}~%"
+msgstr[0] "Nainštaluje sa nasledovný balík:~%~{~a~%~}~%"
+msgstr[1] "Nainštalujú sa nasledovné balíky:~%~{~a~%~}~%"
+msgstr[2] "Nainštalujú sa nasledovné balíky:~%~{~a~%~}~%"
+
+#: guix/ui.scm:1875
+#, scheme-format
+msgid "invalid syntax: ~a~%"
+msgstr "neplatná skladba: ~a~%"
+
+#: guix/ui.scm:1884
+#, scheme-format
+msgid "Generation ~a\t~a"
+msgstr "Pokolenie ~a\t~a"
+
+#. TRANSLATORS: This is a format-string for date->string.
+#. Please choose a format that corresponds to the
+#. usual way of presenting dates in your locale.
+#. See https://www.gnu.org/software/guile/manual/html_node/SRFI_002d19-Date-to-string.html
+#. for details.
+#: guix/ui.scm:1894
+#, scheme-format
+msgid "~b ~d ~Y ~T"
+msgstr "~d. ~B ~Y ~T"
+
+#. TRANSLATORS: The word "current" here is an adjective for
+#. "Generation", as in "current generation".  Use the appropriate
+#. gender where applicable.
+#: guix/ui.scm:1900
+#, scheme-format
+msgid "~a\t(current)~%"
+msgstr "~a\t(súčasné)~%"
+
+#: guix/ui.scm:1934
+#, scheme-format
+msgid "cannot lock profile ~a: ~a~%"
+msgstr "nedá sa uzamknúť profil ~a: ~a~%"
+
+#: guix/ui.scm:1936
+#, scheme-format
+msgid "profile ~a is locked by another process~%"
+msgstr "profil ~a bol uzamknutý iným procesom~%"
+
+#: guix/ui.scm:1963
+#, scheme-format
+msgid "switched from generation ~a to ~a~%"
+msgstr "preplo sa z pokolenia ~a na ~a~%"
+
+#: guix/ui.scm:1979
+#, scheme-format
+msgid "deleting ~a~%"
+msgstr "odstraňuje sa ~a~%"
+
+#: guix/ui.scm:2010
+#, scheme-format
+msgid "Try `guix --help' for more information.~%"
+msgstr "Skúste „guix --help“ pre viac podrobností.~%"
+
+#: guix/ui.scm:2102
+msgid ""
+"Usage: guix COMMAND ARGS...\n"
+"Run COMMAND with ARGS.\n"
+msgstr ""
+"Použitie: guix PRÍKAZ PARAMETRE...\n"
+"Spustiť PRÍKAZ s PARAMETRAMI.\n"
+
+#: guix/ui.scm:2105
+msgid "COMMAND must be one of the sub-commands listed below:\n"
+msgstr "PRÍKAZ musí byť jeden z nižšie uvedených podpríkazov:\n"
+
+#: guix/ui.scm:2147
+#, scheme-format
+msgid "guix: ~a: command not found~%"
+msgstr "guix: ~a: príkaz sa nenašiel~%"
+
+#: guix/ui.scm:2149
+#, scheme-format
+msgid "Did you mean @code{~a}?"
+msgstr "Mali ste na mysli @code{~a}?"
+
+#: guix/ui.scm:2183
+#, scheme-format
+msgid "guix: missing command name~%"
+msgstr "guix: postráda sa názov príkazu~%"
+
+#: guix/ui.scm:2191
+#, scheme-format
+msgid "guix: unrecognized option '~a'~%"
+msgstr "guix: nerozpoznaný prepínač „~a“~%"
+
+#. TRANSLATORS: The word "phase" here denotes a "build phase";
+#. "~a" is a placeholder for the untranslated name of the current
+#. build phase--e.g., 'configure' or 'build'.
+#: guix/status.scm:357
+#, scheme-format
+msgid "'~a' phase"
+msgstr "krok „~a“"
+
+#: guix/status.scm:377
+msgid "building directory of Info manuals..."
+msgstr "zostavuje sa priečinok Info príručiek..."
+
+#: guix/status.scm:379
+msgid "building GHC package cache..."
+msgstr "zostavuje sa vyrovnávacia pamäť GHC balíkov..."
+
+#: guix/status.scm:381
+msgid "building CA certificate bundle..."
+msgstr "zostavuje sa zväzok CA certifikátov…"
+
+#: guix/status.scm:383
+msgid "generating GLib schema cache..."
+msgstr "vytvára sa vyrovnávacia pamäť GLib nákresov…"
+
+#: guix/status.scm:385
+msgid "creating GTK+ icon theme cache..."
+msgstr "vytvára sa vyrovnávacia pamäť tém ikôn GTK+…"
+
+#: guix/status.scm:387
+msgid "building cache files for GTK+ input methods..."
+msgstr "zostavujú sa súbory vyrovnávacej pamäte pre spôsoby vstupu GTK+…"
+
+#: guix/status.scm:389
+msgid "building XDG desktop file cache..."
+msgstr "zostavuje sa vyrovnávacia pamäť súborov pracovnej plochy XDG..."
+
+#: guix/status.scm:391
+msgid "building XDG MIME database..."
+msgstr "zostavuje sa databáza MIME súborov XDG..."
+
+#: guix/status.scm:393
+msgid "building fonts directory..."
+msgstr "zostavuje sa priečinok písiem..."
+
+#: guix/status.scm:395
+msgid "building TeX Live configuration..."
+msgstr "zostavuje sa súbor nastavení TeX Live..."
+
+#: guix/status.scm:397
+msgid "building database for manual pages..."
+msgstr "zostavuje sa databáza stránok pomocníka..."
+
+#: guix/status.scm:399
+msgid "building package cache..."
+msgstr "zostavuje sa vyrovnávacia pamäť balíkov..."
+
+#: guix/status.scm:479
+#, scheme-format
+msgid "applying ~a graft for ~a ..."
+msgid_plural "applying ~a grafts for ~a ..."
+msgstr[0] "vykonáva sa ~a štep pre ~a ..."
+msgstr[1] "vykonávajú sa ~a štepy pre ~a ..."
+msgstr[2] "vykonáva sa ~a štepov pre ~a ..."
+
+#: guix/status.scm:487
+#, scheme-format
+msgid "building profile with ~a package..."
+msgid_plural "building profile with ~a packages..."
+msgstr[0] "zostavuje sa profil s ~a balíkom..."
+msgstr[1] "zostavuje sa profil s ~a balíkmi..."
+msgstr[2] "zostavuje sa profil s ~a balíkmi..."
+
+#: guix/status.scm:496
+#, scheme-format
+msgid "running profile hook of type '~a'..."
+msgstr "spúšťa sa háčik profilu typu „~a“..."
+
+#: guix/status.scm:499
+#, scheme-format
+msgid "building ~a..."
+msgstr "zostavuje sa ~a..."
+
+#: guix/status.scm:504
+#, scheme-format
+msgid "successfully built ~a"
+msgstr "zostavenie ~a prebehlo úspešne"
+
+#: guix/status.scm:510
+#, scheme-format
+msgid "The following build is still in progress:~%~{  ~a~%~}~%"
+msgid_plural "The following builds are still in progress:~%~{  ~a~%~}~%"
+msgstr[0] "Nasledovné zostavovanie stále prebieha:~%~{  ~a~%~}~%"
+msgstr[1] "Nasledovné zostavovania stále prebiehajú:~%~{  ~a~%~}~%"
+msgstr[2] "Nasledovné zostavovania stále prebiehajú:~%~{  ~a~%~}~%"
+
+#: guix/status.scm:516
+#, scheme-format
+msgid "build of ~a failed"
+msgstr "zostavenie ~a zlyhalo"
+
+#: guix/status.scm:520
+#, scheme-format
+msgid "Could not find build log for '~a'."
+msgstr "Nepodarilo sa nájsť záznam zostavovania „~a“."
+
+#: guix/status.scm:523
+#, scheme-format
+msgid "View build log at '~a'."
+msgstr "Záznam zostavovania nájdete v „~a“."
+
+#: guix/status.scm:528
+#, scheme-format
+msgid "substituting ~a..."
+msgstr "nahrádza sa ~a..."
+
+#: guix/status.scm:533
+#, scheme-format
+msgid "downloading from ~a ..."
+msgstr "sťahuje sa z ~a ..."
+
+#: guix/status.scm:559
+#, scheme-format
+msgid "substitution of ~a complete"
+msgstr "nahrádzanie ~a dokončené"
+
+#: guix/status.scm:562
+#, scheme-format
+msgid "substitution of ~a failed"
+msgstr "nahrádzanie ~a zlyhalo"
+
+#. TRANSLATORS: The final string looks like "sha256 hash mismatch for
+#. /gnu/store/…-sth:", where "sha256" is the hash algorithm.
+#: guix/status.scm:567
+#, scheme-format
+msgid "~a hash mismatch for ~a:"
+msgstr "odtlačok ~a nesúhlasí pre ~a:"
+
+#: guix/status.scm:569
+#, scheme-format
+msgid ""
+"  expected hash: ~a\n"
+"  actual hash:   ~a~%"
+msgstr ""
+"  očakávaný odtlačok: ~a\n"
+"  získaný odtlačok:   ~a~%"
+
+#: guix/status.scm:574
+#, scheme-format
+msgid "offloading build of ~a to '~a'"
+msgstr "prenášam zostavenie ~a na „~a“"
+
+#: guix/http-client.scm:134
+#, scheme-format
+msgid "following redirection to `~a'...~%"
+msgstr "presmerovanie na „~a“...~%"
+
+#: guix/http-client.scm:146
+#, scheme-format
+msgid "~a: HTTP download failed: ~a (~s)"
+msgstr "~a: HTTP sťahovanie zlyhalo: ~a (~s)"
+
+#: guix/nar.scm:173
+msgid "signature is not a valid s-expression"
+msgstr "podpis nie je platným s-výrazom"
+
+#: guix/nar.scm:182
+msgid "invalid signature"
+msgstr "neplatný podpis"
+
+#: guix/nar.scm:186
+msgid "invalid hash"
+msgstr "neplatný odtlačok"
+
+#: guix/nar.scm:194
+msgid "unauthorized public key"
+msgstr "nepovolený verejný kľúč"
+
+#: guix/nar.scm:199
+msgid "corrupt signature data"
+msgstr "poškodený podpis"
+
+#: guix/nar.scm:220
+msgid "corrupt file set archive"
+msgstr "poškodené súbory v archíve"
+
+#: guix/nar.scm:230
+#, scheme-format
+msgid "importing file or directory '~a'...~%"
+msgstr "načítava sa súbor alebo priečinok „~a“...~%"
+
+#: guix/nar.scm:241
+#, scheme-format
+msgid "found valid signature for '~a'~%"
+msgstr "našiel sa platný podpis pre „~a“~%"
+
+#: guix/nar.scm:248
+msgid "imported file lacks a signature"
+msgstr "načítaný súbor postráda podpis"
+
+#: guix/nar.scm:287
+msgid "invalid inter-file archive mark"
+msgstr "neplatná značka medzi-súborového archívu"
+
+#: guix/narinfo.scm:102
+#, scheme-format
+msgid "invalid narinfo hash: ~s"
+msgstr "neplatný odtlačok narinfo:~s"
+
+#: guix/narinfo.scm:116
+#, scheme-format
+msgid "signature version must be a number: ~s~%"
+msgstr "verzia podpisu musí byť číslo: ~s~%"
+
+#: guix/narinfo.scm:120
+#, scheme-format
+msgid "unsupported signature version: ~a~%"
+msgstr "nepodporovaná verzia podpisu: ~a~%"
+
+#: guix/narinfo.scm:128
+#, scheme-format
+msgid "signature is not a valid s-expression: ~s~%"
+msgstr "podpis nie je platným s-výrazom: ~s~%"
+
+#: guix/narinfo.scm:132
+#, scheme-format
+msgid "invalid format of the signature field: ~a~%"
+msgstr "neplatný formát poľa podpisu: ~a~%"
+
+#: guix/channels.scm:275
+msgid "unsupported '.guix-channel' version"
+msgstr "nepodporovaná verzia „.guix-channel“"
+
+#: guix/channels.scm:281
+msgid "invalid '.guix-channel' file"
+msgstr "neplatný súbor „.guix-channel“"
+
+#: guix/channels.scm:340
+msgid "Authenticating channel '~a', commits ~a to ~a (~h new commits)...~%"
+msgstr ""
+"Overujem kanál „~a“, úpravy (commity) od ~a po ~a (nové úpravy: ~h)...~%"
+
+#: guix/channels.scm:404
+#, scheme-format
+msgid "channel '~a' lacks an introduction and cannot be authenticated~%"
+msgstr "kanál „~a“ postráda úvod a nemôže byť overený~%"
+
+#: guix/channels.scm:409
+msgid ""
+"Add the missing introduction to your\n"
+"channels file to address the issue.  Alternatively, you can pass\n"
+"@option{--disable-authentication}, at the risk of running unauthenticated "
+"and\n"
+"thus potentially malicious code."
+msgstr ""
+"Pridajte chýbajúci úvod do vášho súboru kanála,\n"
+"aby ste tejto chybe predišli.  Prípadne môžete použiť prepínač\n"
+"@option{--disable-authentication} s rizikom spustenia neovereného\n"
+"a potenciálne škodlivého kódu."
+
+#: guix/channels.scm:413
+#, scheme-format
+msgid "channel authentication disabled~%"
+msgstr "overenie kanála vypnuté~%"
+
+#: guix/channels.scm:438
+#, scheme-format
+msgid ""
+"aborting update of channel '~a' to commit ~a, which is not a descendant of ~a"
+msgstr ""
+"ruší sa aktualizácia kanála „~a“ na úpravu (commit) ~a, ktorá nie je "
+"potomkom ~a"
+
+#: guix/channels.scm:449 guix/scripts/system/reconfigure.scm:318
+msgid ""
+"Use @option{--allow-downgrades} to force\n"
+"this downgrade."
+msgstr ""
+"Použite @option{--allow-downgrades} pre vynútenie prechodu\n"
+"na staršiu úpravu."
+
+#: guix/channels.scm:453
+msgid ""
+"This could indicate that the channel has\n"
+"been tampered with and is trying to force a roll-back, preventing you from\n"
+"getting the latest updates.  If you think this is not the case, explicitly\n"
+"allow non-forward updates."
+msgstr ""
+"Toto môže znamenať, že kanál sa pokúša o návrat k staršej úprave\n"
+"zabraňujúc vám tak v získaní najnovších aktualizácií. Ak si myslíte,\n"
+"že toto nie je ten prípad, ručne povoľte aj tie aktualizácie, ktoré\n"
+"nesmerujú výhradne vpred."
+
+#: guix/channels.scm:506
+#, scheme-format
+msgid "Updating channel '~a' from Git repository at '~a'...~%"
+msgstr "Aktualizuje sa kanál „~a“ z Git repozitára na „~a“...~%"
+
+#: guix/channels.scm:527
+#, scheme-format
+msgid "pulled channel '~a' from a mirror of ~a, which might be stale~%"
+msgstr "kanál „~a“ získaný zo zrkadla ~a, ktoré môže byť zastarané~%"
+
+#: guix/channels.scm:776
+msgid "'guix' channel is lacking"
+msgstr "postráda sa kanál „guix“"
+
+#: guix/channels.scm:778
+msgid ""
+"Make sure your list of channels\n"
+"contains one channel named @code{guix} providing the core of Guix."
+msgstr ""
+"Uistite sa, že váš zoznam kanálov\n"
+"obsahuje aj kanál s názvom @code{guix} poskytujúci jadro systému Guix."
+
+#: guix/channels.scm:1053
+msgid "invalid channel news entry"
+msgstr "neplatná novinka kanála"
+
+#: guix/channels.scm:1071
+msgid "syntactically invalid channel news file"
+msgstr "neplatná skladba súbora noviniek"
+
+#: guix/channels.scm:1074
+msgid "invalid channel news file"
+msgstr "neplatný súbor noviniek"
+
+#: guix/profiles.scm:585
+msgid "unsupported manifest format"
+msgstr "nepodporovaný formát manifestu"
+
+#: guix/profiles.scm:2042
+#, scheme-format
+msgid "while creating directory `~a': ~a"
+msgstr "pri vytváraní priečinka „~a“: ~a"
+
+#: guix/profiles.scm:2047
+#, scheme-format
+msgid "Please create the @file{~a} directory, with you as the owner."
+msgstr "Vytvorte priečinok @file{~a}, ktorého budete vlastníkom."
+
+#: guix/profiles.scm:2056
+#, scheme-format
+msgid "directory `~a' is not owned by you"
+msgstr "nie ste vlastníkom priečinka „~a“"
+
+#: guix/profiles.scm:2060
+#, scheme-format
+msgid "Please change the owner of @file{~a} to user ~s."
+msgstr "Zmeňte vlastníka priečinka @file{~a} na používateľa ~s."
+
+#: guix/git.scm:140
+msgid "receiving objects"
+msgstr "prijímajú sa objekty"
+
+#: guix/git.scm:142
+msgid "indexing objects"
+msgstr "indexujú sa objekty"
+
+#: guix/git.scm:274
+#, scheme-format
+msgid "Git error ~a~%"
+msgstr "Chyba Git ~a~%"
+
+#: guix/git.scm:276 guix/git.scm:487
+#, scheme-format
+msgid "Git error: ~a~%"
+msgstr "Chyba Git: ~a~%"
+
+#: guix/git.scm:290
+#, scheme-format
+msgid "updating submodule '~a'...~%"
+msgstr "aktualizuje sa podmodul „~a“...~%"
+
+#: guix/git.scm:581
+#, scheme-format
+msgid "cannot fetch commit ~a from ~a: ~a"
+msgstr "nedá sa získať úprava (commit) ~a z ~a: ~a"
+
+#: guix/git.scm:584
+#, scheme-format
+msgid "cannot fetch branch '~a' from ~a: ~a"
+msgstr "nedá sa získať vetva „~a“ z ~a: ~a"
+
+#: guix/git.scm:587
+#, scheme-format
+msgid "Git failure while fetching ~a: ~a"
+msgstr "chyba Git pri získavaní ~a: ~a"
+
+#: guix/deprecation.scm:37
+#, scheme-format
+msgid "'~a' is deprecated, use '~a' instead~%"
+msgstr "„~a“ sa už neodporúča, namiesto toho použite „~a“~%"
+
+#: guix/deprecation.scm:39
+#, scheme-format
+msgid "'~a' is deprecated~%"
+msgstr "„~a“ sa už neodporúča~%"
+
+#. TRANSLATORS: 'derivation' must not be translated; it refers to the
+#. 'derivation' procedure.
+#: guix/derivations.scm:775
+#, scheme-format
+msgid "in '~a': deprecated 'derivation' calling convention used~%"
+msgstr "v „~a“: použitá zastaraná skladba volania „derivation“~%"
+
+#: guix/scripts/archive.scm:70
+msgid ""
+"Usage: guix archive [OPTION]... PACKAGE...\n"
+"Export/import one or more packages from/to the store.\n"
+msgstr ""
+"Použitie: guix archive [PREPÍNAČ]... BALÍK...\n"
+"Exportovať/načítať jeden alebo viac balíkov z/do úložiska.\n"
+
+#: guix/scripts/archive.scm:72
+msgid ""
+"\n"
+"      --export           export the specified files/packages to stdout"
+msgstr ""
+"\n"
+"      --export           exportovať zadané súbory/balíky na štandardný výstup"
+
+#: guix/scripts/archive.scm:74
+msgid ""
+"\n"
+"  -r, --recursive        combined with '--export', include dependencies"
+msgstr ""
+"\n"
+"  -r, --recursive        spolu s „--export“, zohľadniť závislosti"
+
+#: guix/scripts/archive.scm:76
+msgid ""
+"\n"
+"      --import           import from the archive passed on stdin"
+msgstr ""
+"\n"
+"      --import           načítať z archívu na štandardnom vstupe"
+
+#: guix/scripts/archive.scm:78
+msgid ""
+"\n"
+"      --missing          print the files from stdin that are missing"
+msgstr ""
+"\n"
+"      --missing          zobraziť chýbajúce súbory zo štandardného vstupu"
+
+#: guix/scripts/archive.scm:80
+msgid ""
+"\n"
+"  -x, --extract=DIR      extract the archive on stdin to DIR"
+msgstr ""
+"\n"
+"  -x, --extract=PRIEČINOK      rozbaliť archív na štandardnom vstupe do "
+"PRIEČINKA"
+
+#: guix/scripts/archive.scm:82
+msgid ""
+"\n"
+"  -t, --list             list the files in the archive on stdin"
+msgstr ""
+"\n"
+"  -t, --list             zobraziť zoznam súborov archívu na štandardnom "
+"vstupe"
+
+#: guix/scripts/archive.scm:85
+msgid ""
+"\n"
+"      --generate-key[=PARAMETERS]\n"
+"                         generate a key pair with the given parameters"
+msgstr ""
+"\n"
+"      --generate-key[=PARAMETRE]\n"
+"                         vytvoriť pár kľúčov s danými PARAMETRAMI"
+
+#: guix/scripts/archive.scm:88
+msgid ""
+"\n"
+"      --authorize        authorize imports signed by the public key on stdin"
+msgstr ""
+"\n"
+"      --authorize        povoliť načítavanie podpísané verejným kľúčom na "
+"štandardnom vstupe"
+
+#: guix/scripts/archive.scm:159
+#, scheme-format
+msgid "invalid key generation parameters: ~a: ~a~%"
+msgstr "neplatné parametre pre vytvorenie kľúča: ~a: ~a~%"
+
+#: guix/scripts/archive.scm:203
+#, scheme-format
+msgid "package `~a' has no source~%"
+msgstr "balík „~a“ nemá zdroj~%"
+
+#: guix/scripts/archive.scm:266
+#, scheme-format
+msgid "unable to export the given packages~%"
+msgstr "zadané balíky sa nedajú vyexportovať~%"
+
+#: guix/scripts/archive.scm:273
+#, scheme-format
+msgid "key pair exists under '~a'; remove it first~%"
+msgstr "nejaký pár kľúčov už v „~a“ existuje; najprv ho odstráňte~%"
+
+#: guix/scripts/archive.scm:277
+#, scheme-format
+msgid ""
+"Please wait while gathering entropy to generate the key pair;\n"
+"this may take time...~%"
+msgstr ""
+"Počkajte kým sa zhromaždí entropia na vytvorenie páru kľúčov;\n"
+"toto môže chvíľu trvať...~%"
+
+#: guix/scripts/archive.scm:284
+#, scheme-format
+msgid "key generation failed: ~a: ~a~%"
+msgstr "vytváranie kľúča zlyhalo: ~a: ~a~%"
+
+#: guix/scripts/archive.scm:311
+#, scheme-format
+msgid "failed to read public key: ~a: ~a~%"
+msgstr "nepodarilo sa prečítať verejný kľúč: ~a: ~a~%"
+
+#: guix/scripts/archive.scm:318
+#, scheme-format
+msgid "replacing symbolic link ~a with a regular file~%"
+msgstr "nahrádza sa symbolický odkaz ~a obyčajným súborom~%"
+
+#: guix/scripts/archive.scm:321
+msgid ""
+"On Guix System, add all @code{authorized-keys} to the\n"
+"@code{guix-service-type} service of your @code{operating-system} instead."
+msgstr ""
+"V systéme Guix skôr pridajte všetky @code{authorized-keys} do služby\n"
+"@code{guix-service-type} vášho @code{operating-system}."
+
+#: guix/scripts/archive.scm:327
+#, scheme-format
+msgid "s-expression does not denote a public key~%"
+msgstr "s-výraz neznázorňuje verejný kľúč~%"
+
+#: guix/scripts/archive.scm:420
+#, scheme-format
+msgid "either '--export' or '--import' must be specified~%"
+msgstr "musíte zadať buď „--export“ alebo „--import“~%"
+
+#: guix/scripts/environment.scm:129
+msgid ""
+"Usage: guix environment [OPTION]... PACKAGE... [-- COMMAND...]\n"
+"Build an environment that includes the dependencies of PACKAGE and execute\n"
+"COMMAND or an interactive shell in that environment.\n"
+msgstr ""
+"Použitie: guix environment [PREPÍNAČ]... BALÍK... [-- PRÍKAZ...]\n"
+"Zostaviť prostredie, ktoré zahŕňa závislosti BALÍKA a spustiť PRÍKAZ alebo\n"
+"interaktívny shell v tomto prostredí.\n"
+
+#: guix/scripts/environment.scm:132
+msgid ""
+"\n"
+"  -e, --expression=EXPR  create environment for the package that EXPR\n"
+"                         evaluates to"
+msgstr ""
+"\n"
+"  -e, --expression=VÝRAZ  vytvoriť prostredie pre balík, ktorý\n"
+"                         je výsledkom vyhodnotenia VÝRAZU"
+
+#: guix/scripts/environment.scm:135
+msgid ""
+"\n"
+"  -l, --load=FILE        create environment for the package that the code "
+"within\n"
+"                         FILE evaluates to"
+msgstr ""
+"\n"
+"  -l, --load=SÚBOR        vytvoriť prostredie pre balík, ktorý je výsledkom\n"
+"                         vyhodnotenia kódu v SÚBORE"
+
+#: guix/scripts/environment.scm:138
+msgid ""
+"\n"
+"  -m, --manifest=FILE    create environment with the manifest from FILE"
+msgstr ""
+"\n"
+"  -m, --manifest=SÚBOR    vytvoriť prostredie na základe manifestu v SÚBORE"
+
+#: guix/scripts/environment.scm:140
+msgid ""
+"\n"
+"  -p, --profile=PATH     create environment from profile at PATH"
+msgstr ""
+"\n"
+"  -p, --profile=CESTA     vytvoriť prostredie z profilu v CESTA"
+
+#: guix/scripts/environment.scm:142
+msgid ""
+"\n"
+"      --ad-hoc           include all specified packages in the environment "
+"instead\n"
+"                         of only their inputs"
+msgstr ""
+"\n"
+"      --ad-hoc           v prostredí sprístupniť všetky zadané balíky\n"
+"                         a nie len ich vstupy"
+
+#: guix/scripts/environment.scm:145
+msgid ""
+"\n"
+"      --pure             unset existing environment variables"
+msgstr ""
+"\n"
+"      --pure             vynechať existujúce premenné prostredia"
+
+#: guix/scripts/environment.scm:147
+msgid ""
+"\n"
+"  -E, --preserve=REGEXP  preserve environment variables that match REGEXP"
+msgstr ""
+"\n"
+"  -E, --preserve=REGULÁRNY-VÝRAZ  zachovať premenné prostredia zhodujúce sa "
+"s REGULÁRNYM-VÝRAZOM"
+
+#: guix/scripts/environment.scm:149
+msgid ""
+"\n"
+"      --search-paths     display needed environment variable definitions"
+msgstr ""
+"\n"
+"      --search-paths     zobraziť potrebné premenné prostredia"
+
+#: guix/scripts/environment.scm:156
+msgid ""
+"\n"
+"  -C, --container        run command within an isolated container"
+msgstr ""
+"\n"
+"  -C, --container        spustiť príkaz v izolovanom kontajneri"
+
+#: guix/scripts/environment.scm:158
+msgid ""
+"\n"
+"  -N, --network          allow containers to access the network"
+msgstr ""
+"\n"
+"  -N, --network          povoliť kontajnerom pristupovať do siete"
+
+#: guix/scripts/environment.scm:160
+#, scheme-format
+msgid ""
+"\n"
+"  -P, --link-profile     link environment profile to ~/.guix-profile within\n"
+"                         an isolated container"
+msgstr ""
+"\n"
+"  -P, --link-profile     prepojiť profil prostredia s ~/.guix-profile "
+"vrámci\n"
+"                         izolovaného kontajnera"
+
+#: guix/scripts/environment.scm:163
+msgid ""
+"\n"
+"  -u, --user=USER        instead of copying the name and home of the "
+"current\n"
+"                         user into an isolated container, use the name USER\n"
+"                         with home directory /home/USER"
+msgstr ""
+"\n"
+"  -u, --user=POUŽÍVATEĽ        namiesto kopírovania mena a domovského "
+"priečinka súčasného\n"
+"                         používateľa do izolovaného kontajnera, použiť meno "
+"POUŽÍVATEĽ\n"
+"                         a domovský priečinok /home/POUŽÍVATEĽ"
+
+#: guix/scripts/environment.scm:167
+msgid ""
+"\n"
+"      --no-cwd           do not share current working directory with an\n"
+"                         isolated container"
+msgstr ""
+"\n"
+"      --no-cwd           nezdieľať súčasný pracovný priečinok\n"
+"                         s izolovaným kontajnerom"
+
+#: guix/scripts/environment.scm:171
+msgid ""
+"\n"
+"      --share=SPEC       for containers, share writable host file system\n"
+"                         according to SPEC"
+msgstr ""
+"\n"
+"      --share=URČENIE       pre kontajnery, zdieľať hostiteľský súborový "
+"systém\n"
+"                         na čítanie aj zápis podľa URČENIA"
+
+#: guix/scripts/environment.scm:174
+msgid ""
+"\n"
+"      --expose=SPEC      for containers, expose read-only host file system\n"
+"                         according to SPEC"
+msgstr ""
+"\n"
+"      --expose=URČENIE      pre kontajnery, sprístupniť hostiteľský súborový "
+"systém\n"
+"                         len na čítanie podľa URČENIA"
+
+#: guix/scripts/environment.scm:179
+msgid ""
+"\n"
+"      --bootstrap        use bootstrap binaries to build the environment"
+msgstr ""
+"\n"
+"      --bootstrap        na zostavenie prostredia použiť binárne súbory "
+"zavádzania"
+
+#: guix/scripts/environment.scm:233
+#, scheme-format
+msgid "'--inherit' is deprecated, use '--preserve' instead~%"
+msgstr ""
+"prepínač „--inherit“ sa už nepoužíva, namiesto toho použite „--preserve“~%"
+
+#: guix/scripts/environment.scm:631
+#, scheme-format
+msgid "cannot link profile: '~a' already exists within container~%"
+msgstr "nedá sa prepojiť profil: „~a“ už existuje vrámci kontajnera~%"
+
+#: guix/scripts/environment.scm:669
+msgid "cannot create container: user namespaces unavailable\n"
+msgstr ""
+"kontajner sa nedá vytvoriť: menné priestory (user namespaces) používateľa sú "
+"nedostupné\n"
+
+#: guix/scripts/environment.scm:670
+msgid "is your kernel version < 3.10?\n"
+msgstr "je vaše jadro staršie ako 3.10?\n"
+
+#: guix/scripts/environment.scm:673
+msgid ""
+"cannot create container: unprivileged user cannot create user namespaces\n"
+msgstr ""
+"kontajner sa nedá vytvoriť: používateľ bez správcovských práv (unprivileged "
+"user) nemôže vytvárať menné priestory\n"
+
+#: guix/scripts/environment.scm:674
+msgid "please set /proc/sys/kernel/unprivileged_userns_clone to \"1\"\n"
+msgstr "nastavte /proc/sys/kernel/unprivileged_userns_clone na „1“\n"
+
+#: guix/scripts/environment.scm:677
+msgid "cannot create container: /proc/self/setgroups does not exist\n"
+msgstr "kontajner sa nedá vytvoriť: /proc/self/setgroups neexistuje\n"
+
+#: guix/scripts/environment.scm:678
+msgid "is your kernel version < 3.19?\n"
+msgstr "je vaše jadro staršie ako 3.19?\n"
+
+#: guix/scripts/environment.scm:731
+#, scheme-format
+msgid "'--link-profile' cannot be used without '--container'~%"
+msgstr "nedá sa použiť „--link-profile“ bez „--container“~%"
+
+#: guix/scripts/environment.scm:733
+#, scheme-format
+msgid "'--user' cannot be used without '--container'~%"
+msgstr "nedá sa použiť „--user“ bez „--container“~%"
+
+#: guix/scripts/environment.scm:735
+#, scheme-format
+msgid "--no-cwd cannot be used without --container~%"
+msgstr "nedá sa použiť --no-cwd bez --container~%"
+
+#: guix/scripts/environment.scm:756
+#, scheme-format
+msgid "'--profile' cannot be used with package options~%"
+msgstr "nedá sa použiť „--profile“ bez prepínačov balíka~%"
+
+#: guix/scripts/time-machine.scm:51
+msgid ""
+"Usage: guix time-machine [OPTION] -- COMMAND ARGS...\n"
+"Execute COMMAND ARGS... in an older version of Guix.\n"
+msgstr ""
+"Použitie: guix time-machine [PREPÍNAČ] -- PRÍKAZ PARAMETRE...\n"
+"Spustiť PRÍKAZ PARAMETRE... v staršej verzii systému Guix.\n"
+
+#: guix/scripts/time-machine.scm:55
+msgid ""
+"\n"
+"      --url=URL          use the Git repository at URL"
+msgstr ""
+"\n"
+"      --url=PREPOJENIE          použiť Git repozitár dostupný cez PREPOJENIE"
+
+#: guix/scripts/time-machine.scm:57
+msgid ""
+"\n"
+"      --commit=COMMIT    use the specified COMMIT"
+msgstr ""
+"\n"
+"      --commit=ÚPRAVA    použiť danú ÚPRAVU (commit)"
+
+#: guix/scripts/time-machine.scm:59
+msgid ""
+"\n"
+"      --branch=BRANCH    use the tip of the specified BRANCH"
+msgstr ""
+"\n"
+"      --branch=VETVA    použiť vrchol danej VETVY"
+
+#: guix/scripts/import/cpan.scm:41
+msgid ""
+"Usage: guix import cpan PACKAGE-NAME\n"
+"Import and convert the CPAN package for PACKAGE-NAME.\n"
+msgstr ""
+"Použiť: guix import cpan NÁZOV-BALÍKA\n"
+"Nahrať a previesť CPAN balík s NÁZVOM-BALÍKA.\n"
+
+#: guix/scripts/import/cpan.scm:86 guix/scripts/import/crate.scm:101
+#: guix/scripts/import/gem.scm:100 guix/scripts/import/opam.scm:106
+#: guix/scripts/import/pypi.scm:101
+#, scheme-format
+msgid "failed to download meta-data for package '~a'~%"
+msgstr "zlyhalo sťahovanie meta-údajov pre balík „~a“~%"
+
+#: guix/scripts/import/crate.scm:44
+msgid ""
+"Usage: guix import crate PACKAGE-NAME\n"
+"Import and convert the crates.io package for PACKAGE-NAME.\n"
+msgstr ""
+"Použitie: guix import crate NÁZOV-BALÍKA\n"
+"Nahrať a previesť crates.io balík s NÁZVOM-BALÍKA.\n"
+
+#: guix/scripts/import/gem.scm:42
+msgid ""
+"Usage: guix import gem PACKAGE-NAME\n"
+"Import and convert the RubyGems package for PACKAGE-NAME.\n"
+msgstr ""
+"Použitie: guix import gem NÁZOV-BALÍKA\n"
+"Nahrať a previesť RubyGems balík s NÁZVOM-BALÍKA.\n"
+
+#: guix/scripts/import/gem.scm:48
+msgid ""
+"\n"
+"  -r, --recursive        generate package expressions for all Gem packages "
+"that are not yet in Guix"
+msgstr ""
+"\n"
+"  -r, --recursive        vytvoriť výrazy balíkov pre všetky Gem balíky, "
+"ktoré ešte nie sú dostupné v systéme Guix"
+
+#: guix/scripts/import/gnu.scm:40
+msgid ""
+"Usage: guix import gnu [OPTION...] PACKAGE\n"
+"Return a package declaration template for PACKAGE, a GNU package.\n"
+msgstr ""
+"Použitie: guix import gnu [PREPÍNAČ...] BALÍK\n"
+"Vytvoriť šablónu zadania pre GNU balík BALÍK.\n"
+
+#: guix/scripts/import/gnu.scm:43 guix/scripts/refresh.scm:177
+msgid ""
+"\n"
+"      --key-download=POLICY\n"
+"                         handle missing OpenPGP keys according to POLICY:\n"
+"                         'always', 'never', and 'interactive', which is "
+"also\n"
+"                         used when 'key-download' is not specified"
+msgstr ""
+"\n"
+"      --key-download=POLITIKA\n"
+"                         spravovať chýbajúce OpenPGP kľúče podľa POLITIKY:\n"
+"                         „always“, „never“, a „interactive“, používa sa aj\n"
+"                         bez „key-download“"
+
+#: guix/scripts/import/gnu.scm:72 guix/scripts/refresh.scm:118
+#, scheme-format
+msgid "unsupported policy: ~a~%"
+msgstr "nepodporovaná politika: ~a~%"
+
+#: guix/scripts/import/go.scm:45
+msgid ""
+"Usage: guix import go PACKAGE-PATH[@VERSION]\n"
+"Import and convert the Go module for PACKAGE-PATH.  Optionally, a version\n"
+"can be specified after the arobas (@) character.\n"
+msgstr ""
+"Použitie: guix import go CESTA-BALÍKA[@VERSION]\n"
+"Nahrať a previesť Go modul z CESTY-BALÍKA. Prípadne je možné určiť\n"
+"aj verziu balíka pridaním zavináča nasledovaného číslom verzie.\n"
+
+#: guix/scripts/import/go.scm:50
+msgid ""
+"\n"
+"  -r, --recursive        generate package expressions for all Go modules\n"
+"that are not yet in Guix"
+msgstr ""
+"\n"
+"  -r, --recursive                vytvoriť zadania balíkov pre všetky moduly "
+"Go,\n"
+"ktoré ešte nie sú dostupné v systéme Guix"
+
+#: guix/scripts/import/go.scm:53
+msgid ""
+"\n"
+"  -p, --goproxy=GOPROXY  specify which goproxy server to use"
+msgstr ""
+"\n"
+"  -p, --goproxy=GOPROXY  určiť, ktorý goproxy server sa má použiť"
+
+#: guix/scripts/import/go.scm:55
+msgid ""
+"\n"
+"  --pin-versions         use the exact versions of a module's dependencies"
+msgstr ""
+"\n"
+"  --pin-versions         použiť presné verzie závislostí modulu"
+
+#: guix/scripts/import/go.scm:121
+#, scheme-format
+msgid "failed to download meta-data for module '~a'~%"
+msgstr "nepodarilo sa stiahnuť meta-údaje modulu „~a“~%"
+
+#: guix/scripts/import/hackage.scm:48
+msgid ""
+"Usage: guix import hackage PACKAGE-NAME\n"
+"Import and convert the Hackage package for PACKAGE-NAME.  If PACKAGE-NAME\n"
+"includes a suffix constituted by a at-sign followed by a numerical version "
+"(as\n"
+"used with Guix packages), then a definition for the specified version of "
+"the\n"
+"package will be generated.  If no version suffix is specified, then the\n"
+"generated package definition will correspond to the latest available\n"
+"version.\n"
+msgstr ""
+"Použitie: guix import hackage NÁZOV-BALÍKA\n"
+"Nahrať a previesť Hackage balík s NÁZVOM-BALÍKA. Ak NÁZOV-BALÍKA\n"
+"obsahuje príponu zloženú zo zavináča nasledovaného číslom verzie (ako\n"
+"v prípade balíkov systému Guix), tak sa vytvorí zadanie pre danú verziu\n"
+"balíka. Ak NÁZOV-BALÍKA neobsahuje príponu s číslom verzie, tak sa\n"
+"vytvorí zadanie pre najnovšiu dostupnú\n"
+"verziu balíka.\n"
+
+#: guix/scripts/import/hackage.scm:55
+msgid ""
+"\n"
+"  -e ALIST, --cabal-environment=ALIST\n"
+"                               specify environment for Cabal evaluation"
+msgstr ""
+"\n"
+"  -e ALIST, --cabal-environment=ALIST\n"
+"                               určiť prostredie pre vyhodnocovanie Cabalu"
+
+#: guix/scripts/import/hackage.scm:58 guix/scripts/import/stackage.scm:49
+msgid ""
+"\n"
+"  -h, --help                   display this help and exit"
+msgstr ""
+"\n"
+"  -h, --help                   zobraziť túto pomôcku a ukončiť"
+
+#: guix/scripts/import/hackage.scm:60 guix/scripts/import/stackage.scm:51
+msgid ""
+"\n"
+"  -r, --recursive              import packages recursively"
+msgstr ""
+"\n"
+"  -r, --recursive              nahrať balíky rekurzívne"
+
+#: guix/scripts/import/hackage.scm:62
+msgid ""
+"\n"
+"  -s, --stdin                  read from standard input"
+msgstr ""
+"\n"
+"  -s, --stdin                  čítať zo štandardného vstupu"
+
+#: guix/scripts/import/hackage.scm:64 guix/scripts/import/stackage.scm:53
+msgid ""
+"\n"
+"  -t, --no-test-dependencies   don't include test-only dependencies"
+msgstr ""
+"\n"
+"  -t, --no-test-dependencies   nezahŕňať závislosti určené výhradne na "
+"testovanie"
+
+#: guix/scripts/import/hackage.scm:66 guix/scripts/import/stackage.scm:55
+msgid ""
+"\n"
+"  -V, --version                display version information and exit"
+msgstr ""
+"\n"
+"  -V, --version                  zobraziť podrobnosti o verzii a skončiť"
+
+#: guix/scripts/import/hackage.scm:149
+#, scheme-format
+msgid "failed to import cabal file from standard input~%"
+msgstr "nepodarilo sa načítať súbor Cabalu zo štandardného vstupu~%"
+
+#: guix/scripts/import/hackage.scm:157 guix/scripts/import/stackage.scm:129
+#, scheme-format
+msgid "failed to download cabal file for package '~a'~%"
+msgstr "nepodarilo sa stiahnuť súbor Cabalu pre balík „~a“~%"
+
+#: guix/scripts/import/json.scm:49
+msgid ""
+"Usage: guix import json PACKAGE-FILE\n"
+"Import and convert the JSON package definition in PACKAGE-FILE.\n"
+msgstr ""
+"Použitie: guix import json SÚBOR-BALÍKA\n"
+"Nahrať a previesť JSON zadanie balíka zo SÚBORU-BALÍKA.\n"
+
+#: guix/scripts/import/json.scm:95
+#, scheme-format
+msgid "invalid JSON in file '~a'~%"
+msgstr "neplatná JSON skladba v súbore „~a“~%"
+
+#: guix/scripts/import/json.scm:97
+#, scheme-format
+msgid "failed to access '~a': ~a~%"
+msgstr "nepodarilo sa spojiť sa s „~a“: ~a~%"
+
+#: guix/scripts/import/nix.scm:41
+msgid ""
+"Usage: guix import nix NIXPKGS ATTRIBUTE\n"
+"Import and convert the Nix expression ATTRIBUTE of NIXPKGS.\n"
+msgstr ""
+"Použitie: guix import nix NIXPKGS PRÍZNAK\n"
+"Nahrať a previesť Nix výraz PRÍZNAK balíkov NIXPKGS.\n"
+
+#: guix/scripts/import/opam.scm:41
+msgid ""
+"Usage: guix import opam PACKAGE-NAME\n"
+"Import and convert the opam package for PACKAGE-NAME.\n"
+msgstr ""
+"Použitie: guix import opam NÁZOV-BALÍKA\n"
+"Nahrať a previesť opam balík s NÁZVOM-BALÍKA.\n"
+
+#: guix/scripts/import/opam.scm:47
+msgid ""
+"\n"
+"      --repo             import packages from this opam repository"
+msgstr ""
+"\n"
+"      --repo             nahrať balíky z tohto repozitára opam"
+
+#: guix/scripts/import/pypi.scm:42
+msgid ""
+"Usage: guix import pypi PACKAGE-NAME\n"
+"Import and convert the PyPI package for PACKAGE-NAME.\n"
+msgstr ""
+"Použitie: guix import pypi NÁZOV-BALÍKA\n"
+"Nahrať a previesť PyPI balík s NÁZVOM-BALÍKA.\n"
+
+#: guix/scripts/import/stackage.scm:44
+msgid ""
+"Usage: guix import stackage PACKAGE-NAME\n"
+"Import and convert the LTS Stackage package for PACKAGE-NAME.\n"
+msgstr ""
+"Použitie: guix import stackage NÁZOV-BALÍKA\n"
+"Nahrať a previesť LTS Stackage balík s NÁZVOM-BALÍKA.\n"
+
+#: guix/scripts/import/stackage.scm:46
+msgid ""
+"\n"
+"  -l VERSION, --lts-version=VERSION\n"
+"                               specify the LTS version to use"
+msgstr ""
+"\n"
+"  -l VERZIA, --lts-version=VERZIA\n"
+"                               určiť verziu LTS, ktorá sa má použiť"
+
+#: guix/scripts/import/texlive.scm:42
+msgid ""
+"Usage: guix import texlive PACKAGE-NAME\n"
+"Import and convert the Texlive package for PACKAGE-NAME.\n"
+msgstr ""
+"Použitie: guix import texlive NÁZOV-BALÍKA\n"
+"Nahrať a previesť Texlive balík s NÁZVOM-BALÍKA.\n"
+
+#: guix/scripts/offload.scm:127
+#, scheme-format
+msgid "The 'system' field is deprecated, please use 'systems' instead.~%"
+msgstr "Pole „system“ sa už nepoužíva, namiesto toho použite „systems“.~%"
+
+#: guix/scripts/offload.scm:135
+msgid ""
+"The build-machine object lacks a value for its 'systems'\n"
+"field."
+msgstr ""
+"Objekt build-machine postráda hodnotu pre\n"
+"pole „systems“."
+
+#: guix/scripts/offload.scm:176
+#, scheme-format
+msgid "'~a' did not return a list of build machines; ignoring it~%"
+msgstr "„~a“ nevrátil zoznam zostavovacích strojov; preskakuje sa~%"
+
+#: guix/scripts/offload.scm:187
+#, scheme-format
+msgid "failed to open machine file '~a': ~a~%"
+msgstr "nepodarilo sa otvoriť súbor stroja „~a“: ~a~%"
+
+#: guix/scripts/offload.scm:194
+#, scheme-format
+msgid "failed to load machine file '~a': ~s~%"
+msgstr "nepodarilo sa nahrať súbor stroja „~a“: ~s~%"
+
+#: guix/scripts/offload.scm:204
+#, scheme-format
+msgid "failed to load SSH private key from '~a': ~a"
+msgstr "nepodarilo sa nahrať súkromný SSH kľúč z „~a“: ~a"
+
+#: guix/scripts/offload.scm:245
+#, scheme-format
+msgid "SSH public key authentication failed for '~a': ~a~%"
+msgstr "overenie verejného SSH kľúča pre „~a“ zlyhalo: ~a~%"
+
+#: guix/scripts/offload.scm:256
+#, scheme-format
+msgid "failed to connect to '~a': ~a~%"
+msgstr "nepodarilo sa spojiť s „~a“: ~a~%"
+
+#: guix/scripts/offload.scm:365
+#, scheme-format
+msgid "derivation '~a' offloaded to '~a' failed: ~a~%"
+msgstr "odvodenina „~a“ prenesená na „~a“ zlyhala: ~a~%"
+
+#: guix/scripts/offload.scm:381
+#, scheme-format
+msgid "build failure may have been caused by lack of free disk space on '~a'~%"
+msgstr ""
+"zlyhanie zostavovania môže byť spôsobené nedostatkom voľného miesta na disku "
+"„~a“~%"
+
+#: guix/scripts/offload.scm:550
+#, scheme-format
+msgid "timeout expired while offloading '~a'~%"
+msgstr "čas vypršal pri prenášaní „~a“~%"
+
+#: guix/scripts/offload.scm:623
+#, scheme-format
+msgid "'~a' is running GNU Guile ~a~%"
+msgstr "„~a“ používa GNU Guile ~a~%"
+
+#: guix/scripts/offload.scm:630
+#, scheme-format
+msgid "failed to run 'guix repl' on '~a'~%"
+msgstr "spustenie „guix repl“ na „~a“ zlyhalo~%"
+
+#: guix/scripts/offload.scm:637
+#, scheme-format
+msgid "(guix) module not usable on remote host '~a'"
+msgstr "(guix) modul nie je možné použiť na vzdialenom hostiteľovi „~a“"
+
+#: guix/scripts/offload.scm:647
+#, scheme-format
+msgid "Guix is usable on '~a' (test returned ~s)~%"
+msgstr "Guix je možné použiť na „~a“ (test vrátil ~s)~%"
+
+#: guix/scripts/offload.scm:650
+#, scheme-format
+msgid "failed to talk to guix-daemon on '~a' (test returned ~s)~%"
+msgstr "zlyhalo spojenie s démonom systému Guix na „~a“ (test vrátil ~s)~%"
+
+#: guix/scripts/offload.scm:670
+#, scheme-format
+msgid "'~a' successfully imported '~a'~%"
+msgstr "„~a“ úspešne nahral „~a“~%"
+
+#: guix/scripts/offload.scm:672
+#, scheme-format
+msgid "'~a' was not properly imported on '~a'~%"
+msgstr "„~a“ sa nepodarilo úspešne nahrať na „~a“~%"
+
+#: guix/scripts/offload.scm:682
+#, scheme-format
+msgid "successfully imported '~a' from '~a'~%"
+msgstr "nahrávanie „~a“ z „~a“ bolo úspešné~%"
+
+#: guix/scripts/offload.scm:684
+#, scheme-format
+msgid "failed to import '~a' from '~a'~%"
+msgstr "nahrávanie „~a“ z „~a“ zlyhalo~%"
+
+#: guix/scripts/offload.scm:699
+#, scheme-format
+msgid "testing ~a build machines defined in '~a'...~%"
+msgstr "testuje sa ~a zostavovacích strojov zadaných v „~a“...~%"
+
+#: guix/scripts/offload.scm:723
+#, scheme-format
+msgid "getting status of ~a build machines defined in '~a'...~%"
+msgstr "získava sa stav ~a zostavovacích strojov zadaných v „~a“...~%"
+
+#: guix/scripts/offload.scm:731
+#, scheme-format
+msgid "failed to run 'guix repl' on machine '~a'~%"
+msgstr "zlyhalo spustenie „guix repl“ na stroji „~a“~%"
+
+#: guix/scripts/offload.scm:742
+#, scheme-format
+msgid "machine '~a' is ~a seconds behind~%"
+msgstr "stroj „~a“ mešká ~a sekúnd~%"
+
+#: guix/scripts/offload.scm:788
+msgid "Guile-SSH lacks zlib support"
+msgstr "Guile-SSH postráda podporu zlib"
+
+#: guix/scripts/offload.scm:789
+msgid "data transfers will *not* be compressed!"
+msgstr "údajové prenosy *nebudú* komprimované!"
+
+#: guix/scripts/offload.scm:814
+#, scheme-format
+msgid "invalid request line: ~s~%"
+msgstr "neplatná požiadavka: ~s~%"
+
+#: guix/scripts/offload.scm:843
+#, scheme-format
+msgid ""
+"Usage: guix offload SYSTEM MAX-SILENT-TIME PRINT-BUILD-TRACE? BUILD-TIMEOUT\n"
+"Process build offload requests written on the standard input, possibly\n"
+"offloading builds to the machines listed in '~a'.~%"
+msgstr ""
+"Použitie: guix offload SYSTÉM NAJV-ČAS-BEZ-ODPOVEDE ZOBRAZIŤ-ZÁZNAM-"
+"ZOSTAVOVANIA? ČAS-NA-ZOSTAVENIE\n"
+"Spracovať požiadavky na vzdialené zostavenie zo štandardného vstupu\n"
+"a prípadne presunúť zostavovania na stroje zadané v „~a“.~%"
+
+#: guix/scripts/offload.scm:848
+msgid ""
+"\n"
+"This tool is meant to be used internally by 'guix-daemon'.\n"
+msgstr ""
+"\n"
+"Tento nástroj je určený na vnútorné použitie procesom „guix-daemon“.\n"
+
+#: guix/scripts/offload.scm:852
+#, scheme-format
+msgid "invalid arguments: ~{~s ~}~%"
+msgstr "neplatné parametre: ~{~s ~}~%"
+
+#: guix/scripts/perform-download.scm:59
+#, scheme-format
+msgid "~a: missing URL~%"
+msgstr "~a: chýbajúce prepojenie~%"
+
+#: guix/scripts/perform-download.scm:67
+#, scheme-format
+msgid "~a is not a fixed-output derivation~%"
+msgstr "~a nie je odvodenina s pevne stanoveným výstupom~%"
+
+#: guix/scripts/perform-download.scm:92
+#, scheme-format
+msgid "refusing to run with elevated privileges (UID ~a)~%"
+msgstr "nemôže sa spustiť so zvýšenými právami (UID ~a)~%"
+
+#: guix/scripts/perform-download.scm:129
+#, scheme-format
+msgid "fixed-output derivation and output file name expected~%"
+msgstr ""
+"očakávaná bola odvodenina s pevne stanoveným výstupom a názov výstupného "
+"súboru~%"
+
+#: guix/scripts/refresh.scm:75
+#, scheme-format
+msgid "~a: invalid selection; expected `core' or `non-core'~%"
+msgstr "~a: neplatný výber; vyberte „core“ alebo „non-core“~%"
+
+#: guix/scripts/refresh.scm:143
+msgid ""
+"Usage: guix refresh [OPTION]... [PACKAGE]...\n"
+"Update package definitions to match the latest upstream version.\n"
+"\n"
+"When PACKAGE... is given, update only the specified packages.  Otherwise\n"
+"update all the packages of the distribution, or the subset thereof\n"
+"specified with `--select'.\n"
+msgstr ""
+"Použitie: guix refresh [PREPÍNAČ]... [BALÍK]...\n"
+"Aktualizovať zadania balíkov tak, aby sa zhodovali s najnovšou dostupnou "
+"verziou.\n"
+"\n"
+"Ak je určený BALÍK…, aktualizovať iba tieto balíky. V opačnom prípade\n"
+"aktualizovať všetky balíky distribúcie, prípadne len podmnožinu určenú "
+"pomocou\n"
+"prepínača „--select“.\n"
+
+#: guix/scripts/refresh.scm:151
+msgid ""
+"\n"
+"  -u, --update           update source files in place"
+msgstr ""
+"\n"
+"  -u, --update           aktualizovať zdrojové súbory na mieste"
+
+#: guix/scripts/refresh.scm:153
+msgid ""
+"\n"
+"  -s, --select=SUBSET    select all the packages in SUBSET, one of\n"
+"                         `core' or `non-core'"
+msgstr ""
+"\n"
+"  -s, --select=PODMNOŽINA    vybrať všetky balíky PODMNOŽINY,\n"
+"                         jedna z „core“ alebo „non-core“"
+
+#: guix/scripts/refresh.scm:156
+msgid ""
+"\n"
+"  -m, --manifest=FILE    select all the packages from the manifest in FILE"
+msgstr ""
+"\n"
+"  -m, --manifest=SÚBOR    vybrať všetky balíky z manifestu v SÚBORE"
+
+#: guix/scripts/refresh.scm:158
+msgid ""
+"\n"
+"  -t, --type=UPDATER,... restrict to updates from the specified updaters\n"
+"                         (e.g., 'gnu')"
+msgstr ""
+"\n"
+"  -t, --type=NÁSTROJ-NA-AKTUALIZÁCIU,... obmedziť na aktualizácie zo "
+"zadaných NÁSTROJOV-NA-AKTUALIZÁCIU\n"
+"                         (napr., „gnu“)"
+
+#: guix/scripts/refresh.scm:161
+msgid ""
+"\n"
+"  -L, --list-updaters    list available updaters and exit"
+msgstr ""
+"\n"
+"  -L, --list-updaters    zobraziť dostupné nástroje na aktualizáciu a skončiť"
+
+#: guix/scripts/refresh.scm:163
+msgid ""
+"\n"
+"  -l, --list-dependent   list top-level dependent packages that would need "
+"to\n"
+"                         be rebuilt as a result of upgrading PACKAGE..."
+msgstr ""
+"\n"
+"  -l, --list-dependent   zobraziť zoznam závislostí najvyššej úrovne, ktoré "
+"by\n"
+"                         bolo potrebné opätovne zostaviť ako následok "
+"aktualizácie BALÍKA..."
+
+#: guix/scripts/refresh.scm:166
+msgid ""
+"\n"
+"  -r, --recursive        check the PACKAGE and its inputs for upgrades"
+msgstr ""
+"\n"
+"  -r, --recursive        zistiť dostupnosť aktualizácií pre BALÍK a jeho "
+"závislosti"
+
+#: guix/scripts/refresh.scm:168
+msgid ""
+"\n"
+"      --list-transitive  list all the packages that PACKAGE depends on"
+msgstr ""
+"\n"
+"      --list-transitive  zobraziť všetky balíky, na ktorých závisí BALÍK"
+
+#: guix/scripts/refresh.scm:171
+msgid ""
+"\n"
+"      --keyring=FILE     use FILE as the keyring of upstream OpenPGP keys"
+msgstr ""
+"\n"
+"      --keyring=SÚBOR     použiť SÚBOR ako kľúčenku pre najnovšie OpenPGP "
+"kľúče"
+
+#: guix/scripts/refresh.scm:173
+msgid ""
+"\n"
+"      --key-server=HOST  use HOST as the OpenPGP key server"
+msgstr ""
+"\n"
+"      --key-server=HOSTITEĽ  použiť HOSTITEĽA ako server OpenPGP kľúčov"
+
+#: guix/scripts/refresh.scm:175
+msgid ""
+"\n"
+"      --gpg=COMMAND      use COMMAND as the GnuPG 2.x command"
+msgstr ""
+"\n"
+"      --gpg=PRÍKAZ      použiť PRÍKAZ ako GnuPG 2.x príkaz"
+
+#: guix/scripts/refresh.scm:183
+msgid ""
+"\n"
+"      --load-path=DIR    prepend DIR to the package module search path"
+msgstr ""
+"\n"
+"      --load-path=PRIEČINOK    pridať PRIEČINOK na začiatok prehľadávanej "
+"cesty modulov balíkov"
+
+#: guix/scripts/refresh.scm:276
+#, scheme-format
+msgid "~a: no such updater~%"
+msgstr "~a: nie je nástrojom na aktualizáciu~%"
+
+#: guix/scripts/refresh.scm:280
+#, scheme-format
+msgid "Available updaters:~%"
+msgstr "Dostupné nástroje na aktualizáciu:~%"
+
+#. TRANSLATORS: The parenthetical expression here is rendered
+#. like "(42% coverage)" and denotes the fraction of packages
+#. covered by the given updater.
+#: guix/scripts/refresh.scm:292
+#, scheme-format
+msgid "  - ~a: ~a (~2,1f% coverage)~%"
+msgstr "  - ~a: ~a (pokrytie ~2,1f%)~%"
+
+#: guix/scripts/refresh.scm:301
+#, scheme-format
+msgid "~2,1f% of the packages are covered by these updaters.~%"
+msgstr "Tieto nástroje na aktualizáciu pokrývajú ~2,1f% balíkov.~%"
+
+#: guix/scripts/refresh.scm:307
+#, scheme-format
+msgid "no updater for ~a~%"
+msgstr "žiadny nástroj na aktualizáciu pre ~a~%"
+
+#: guix/scripts/refresh.scm:327
+#, scheme-format
+msgid "~a: updating from version ~a to version ~a...~%"
+msgstr "~a: aktualizuje sa z verzie ~a na verziu ~a...~%"
+
+#: guix/scripts/refresh.scm:336
+#, scheme-format
+msgid "~a: consider adding this input: ~a~%"
+msgstr "~a: zvážte pridanie tohto vstupu: ~a~%"
+
+#: guix/scripts/refresh.scm:338
+#, scheme-format
+msgid "~a: consider adding this native input: ~a~%"
+msgstr "~a: zvážte pridanie tohto pôvodného vstupu: ~a~%"
+
+#: guix/scripts/refresh.scm:340
+#, scheme-format
+msgid "~a: consider adding this propagated input: ~a~%"
+msgstr "~a: zvážte pridanie tohto rozšíreného vstupu: ~a~%"
+
+#: guix/scripts/refresh.scm:342
+#, scheme-format
+msgid "~a: consider removing this input: ~a~%"
+msgstr "~a: zvážte odobranie tohto vstupu: ~a~%"
+
+#: guix/scripts/refresh.scm:344
+#, scheme-format
+msgid "~a: consider removing this native input: ~a~%"
+msgstr "~a: zvážte odobranie tohto pôvodného vstupu: ~a~%"
+
+#: guix/scripts/refresh.scm:346
+#, scheme-format
+msgid "~a: consider removing this propagated input: ~a~%"
+msgstr "~a: zvážte odobranie tohto rozšíreného vstupu: ~a~%"
+
+#: guix/scripts/refresh.scm:353
+#, scheme-format
+msgid ""
+"~a: version ~a could not be downloaded and authenticated; not updating~%"
+msgstr ""
+"~a: verziu ~a sa nepodarilo stiahnuť a overiť; nebude sa aktualizovať~%"
+
+#: guix/scripts/refresh.scm:370
+#, scheme-format
+msgid "~a would be upgraded from ~a to ~a~%"
+msgstr "~a by sa aktualizoval z ~a na ~a~%"
+
+#: guix/scripts/refresh.scm:376
+#, scheme-format
+msgid "~a is already the latest version of ~a~%"
+msgstr "~a už je najnovšej verzie ~a~%"
+
+#: guix/scripts/refresh.scm:382
+#, scheme-format
+msgid "~a is greater than the latest known version of ~a (~a)~%"
+msgstr "~a je vyššia ako najnovšia známa verzia ~a (~a)~%"
+
+#: guix/scripts/refresh.scm:393
+#, scheme-format
+msgid "'~a' updater failed to determine available releases for ~a~%"
+msgstr ""
+"„~a“ nástroju na aktualizáciu sa nepodarilo zistiť dostupné vydania pre ~a~%"
+
+#: guix/scripts/refresh.scm:432
+#, scheme-format
+msgid "No dependents other than itself: ~{~a~}~%"
+msgid_plural "No dependents other than themselves: ~{~a~^ ~}~%"
+msgstr[0] "Žiadne závislé balíky okrem seba samého: ~{~a~}~%"
+msgstr[1] "Žiadne závislé balíky okrem seba samých: ~{~a~^ ~}~%"
+msgstr[2] "Žiadne závislé balíky okrem seba samých: ~{~a~^ ~}~%"
+
+#: guix/scripts/refresh.scm:439
+#, scheme-format
+msgid "A single dependent package: ~a~%"
+msgstr "Jediný závislý balík: ~a~%"
+
+#: guix/scripts/refresh.scm:443
+#, scheme-format
+msgid ""
+"Building the following ~d package would ensure ~d dependent packages are "
+"rebuilt: ~{~a~^ ~}~%"
+msgid_plural ""
+"Building the following ~d packages would ensure ~d dependent packages are "
+"rebuilt: ~{~a~^ ~}~%"
+msgstr[0] ""
+"Zostavenie nasledovného ~d balíka ~d by zaistilo opätovné zostavenie "
+"závislých balíkov: ~{~a~^ ~}~%"
+msgstr[1] ""
+"Zostavenie nasledovných ~d balíkov ~d by zaistilo opätovné zostavenie "
+"závislých balíkov: ~{~a~^ ~}~%"
+msgstr[2] ""
+"Zostavenie nasledovných ~d balíkov ~d by zaistilo opätovné zostavenie "
+"závislých balíkov: ~{~a~^ ~}~%"
+
+#: guix/scripts/refresh.scm:467
+#, scheme-format
+msgid "~a depends on the following ~d packages: ~{~a~^ ~}~%."
+msgstr "~a závisí na nasledovných balíkoch (~d): ~{~a~^ ~}~%."
+
+#: guix/scripts/refresh.scm:471
+#, scheme-format
+msgid "The following ~d packages all are dependent packages: ~{~a~^ ~}~%"
+msgstr "Všetky nasledovné balíky (~d) sú závislé: ~{~a~^ ~}~%"
+
+#: guix/scripts/repl.scm:70
+msgid ""
+"Usage: guix repl [OPTIONS...] [-- FILE ARGS...]\n"
+"In the Guix execution environment, run FILE as a Guile script with\n"
+"command-line arguments ARGS.  If no FILE is given, start a Guile REPL.\n"
+msgstr ""
+"Použitie: guix repl [PREPÍNAČE...] [-- SÚBOR PARAMETRE...]\n"
+"Spustiť SÚBOR ako Guile skript s PARAMETRAMI v spúšťacom prostredí\n"
+"systému Guix. Ak nie je daný žiadny SÚBOR, spustiť Guile REPL.\n"
+
+#: guix/scripts/repl.scm:73
+msgid ""
+"\n"
+"  -t, --type=TYPE        start a REPL of the given TYPE"
+msgstr ""
+"\n"
+"  -t, --type=TYP        spustiť REPL daného TYPU"
+
+#: guix/scripts/repl.scm:75
+msgid ""
+"\n"
+"      --listen=ENDPOINT  listen to ENDPOINT instead of standard input"
+msgstr ""
+"\n"
+"      --listen=KONCOVÝ-BOD  počúvať na KONCOVOM-BODE namiesto štandardného "
+"vstupu"
+
+#: guix/scripts/repl.scm:77
+#, scheme-format
+msgid ""
+"\n"
+"  -q                     inhibit loading of ~/.guile"
+msgstr ""
+"\n"
+"  -q                     zabrániť nahratiu ~/.guile"
+
+#: guix/scripts/repl.scm:106
+#, scheme-format
+msgid "~A: invalid listen specification~%"
+msgstr "~A: neplatné určenie počúvania~%"
+
+#: guix/scripts/repl.scm:117
+#, scheme-format
+msgid "~A: unsupported protocol family~%"
+msgstr "~A: nepodporovaná rodina protokolov~%"
+
+#: guix/scripts/repl.scm:125
+#, scheme-format
+msgid "accepted connection~%"
+msgstr "spojenie prijaté~%"
+
+#: guix/scripts/repl.scm:126
+#, scheme-format
+msgid "accepted connection from ~a~%"
+msgstr "prijaté spojenie od ~a~%"
+
+#: guix/scripts/repl.scm:137
+#, scheme-format
+msgid "connection closed~%"
+msgstr "spojenie ukončené~%"
+
+#: guix/scripts/repl.scm:210
+#, scheme-format
+msgid "~a: unknown type of REPL~%"
+msgstr "~a: neznámy typ REPL~%"
+
+#: guix/scripts/system/reconfigure.scm:313
+#, scheme-format
+msgid ""
+"aborting reconfiguration because commit ~a of channel '~a' is not a "
+"descendant of ~a"
+msgstr ""
+"ruší sa opätovné nastavenie, pretože úprava (commit) ~a kanála „~a“ nie je "
+"potomkom ~a"
+
+#: guix/scripts/system/reconfigure.scm:372
+#, scheme-format
+msgid "cannot determine provenance for current system~%"
+msgstr "nie je možné zistiť pôvod súčasného systému~%"
+
+#: guix/scripts/system/reconfigure.scm:374
+#, scheme-format
+msgid "cannot determine provenance of ~a~%"
+msgstr "nie je možné zistiť pôvod ~a~%"
+
+#: nix/nix-daemon/guix-daemon.cc:66
+msgid "guix-daemon -- perform derivation builds and store accesses"
+msgstr "guix-daemon -- zostavuje odvodeniny a spravuje prístup k úložisku"
+
+#: nix/nix-daemon/guix-daemon.cc:68
+msgid ""
+"This program is a daemon meant to run in the background.  It serves requests "
+"sent over a Unix-domain socket.  It accesses the store, and builds "
+"derivations on behalf of its clients."
+msgstr ""
+"Tento program je démon, ktorý sa spúšťa v pozadí. Odpovedá na požiadavky "
+"odoslané prostredníctvom sieťových socketov typu Unix-domain. Pristupuje k "
+"úložisku a zostavuje odvodeniny v mene svojich používateľov."
+
+#: nix/nix-daemon/guix-daemon.cc:96
+msgid "SYSTEM"
+msgstr "SYSTÉM"
+
+#: nix/nix-daemon/guix-daemon.cc:97
+msgid "assume SYSTEM as the current system type"
+msgstr "predpokladať SYSTÉM ako typ súčasného systému"
+
+#: nix/nix-daemon/guix-daemon.cc:98 nix/nix-daemon/guix-daemon.cc:101
+msgid "N"
+msgstr "N"
+
+#: nix/nix-daemon/guix-daemon.cc:99
+msgid "use N CPU cores to build each derivation; 0 means as many as available"
+msgstr ""
+"použiť N jadier procesora na zostavenie každej odvodeniny; 0 znamená, že sa "
+"použijú všetky dostupné jadrá"
+
+#: nix/nix-daemon/guix-daemon.cc:102
+msgid "allow at most N build jobs"
+msgstr "povoliť najviac N zostavovacích úloh"
+
+#: nix/nix-daemon/guix-daemon.cc:103 nix/nix-daemon/guix-daemon.cc:105
+msgid "SECONDS"
+msgstr "SEKÚND"
+
+#: nix/nix-daemon/guix-daemon.cc:104
+msgid "mark builds as failed after SECONDS of activity"
+msgstr "označiť zostavenia za neúspešné po SEKUNDÁCH nečinnosti"
+
+#: nix/nix-daemon/guix-daemon.cc:106
+msgid "mark builds as failed after SECONDS of silence"
+msgstr "označiť zostavenia za neúspešné po SEKUNDÁCH bez odpovede"
+
+#: nix/nix-daemon/guix-daemon.cc:108
+msgid "disable chroot builds"
+msgstr "zakázať zostavenia chroot"
+
+#: nix/nix-daemon/guix-daemon.cc:109
+msgid "DIR"
+msgstr "PRIEČINOK"
+
+#: nix/nix-daemon/guix-daemon.cc:110
+msgid "add DIR to the build chroot"
+msgstr "pridať PRIEČINOK do zastavovacieho chrootu"
+
+#: nix/nix-daemon/guix-daemon.cc:111
+msgid "GROUP"
+msgstr "SKUPINA"
+
+#: nix/nix-daemon/guix-daemon.cc:112
+msgid "perform builds as a user of GROUP"
+msgstr "zostaviť ako používateľ SKUPINY"
+
+#: nix/nix-daemon/guix-daemon.cc:114
+msgid "do not use substitutes"
+msgstr "nepoužívať náhrady"
+
+#: nix/nix-daemon/guix-daemon.cc:115
+msgid "URLS"
+msgstr "PREPOJENIA"
+
+#: nix/nix-daemon/guix-daemon.cc:116
+msgid "use URLS as the default list of substitute providers"
+msgstr "použiť PREPOJENIA ako predvolený zoznam poskytovateľov náhrad"
+
+#: nix/nix-daemon/guix-daemon.cc:118 nix/nix-daemon/guix-daemon.cc:121
+msgid "do not attempt to offload builds"
+msgstr "nepokúšať sa o vzdialené zostavenie"
+
+#: nix/nix-daemon/guix-daemon.cc:123
+msgid "cache build failures"
+msgstr "uložiť neúspešné zostavenia do vyrovnávacej pamäte"
+
+#: nix/nix-daemon/guix-daemon.cc:125
+msgid "build each derivation N times in a row"
+msgstr "zostaviť každú odvodeninu N krát za sebou"
+
+#: nix/nix-daemon/guix-daemon.cc:127
+msgid "do not keep build logs"
+msgstr "neukladať záznamy zostavovania"
+
+#: nix/nix-daemon/guix-daemon.cc:130
+msgid "disable compression of the build logs"
+msgstr "zakázať kompresiu záznamov zostavovania"
+
+#: nix/nix-daemon/guix-daemon.cc:132
+msgid "use the specified compression type for build logs"
+msgstr "použiť daný typ kompresie pre záznamy zostavovania"
+
+#: nix/nix-daemon/guix-daemon.cc:134
+msgid "use substitute servers discovered on the local network"
+msgstr "použiť servery náhrad zistené v miestnej sieti"
+
+#: nix/nix-daemon/guix-daemon.cc:139
+msgid "disable automatic file \"deduplication\" in the store"
+msgstr "zakázať automatické čistenie podvojných súborov v úložisku"
+
+#: nix/nix-daemon/guix-daemon.cc:149
+msgid "impersonate Linux 2.6"
+msgstr "predstierať Linux 2.6"
+
+#: nix/nix-daemon/guix-daemon.cc:153
+msgid "tell whether the GC must keep outputs of live derivations"
+msgstr "určiť či má zberač odpadkov ponechávať výstupy živých odvodenín"
+
+#: nix/nix-daemon/guix-daemon.cc:156
+msgid "tell whether the GC must keep derivations corresponding to live outputs"
+msgstr "určiť či má zberač odpadkov uchovávať odvodeniny živých výstupov"
+
+#: nix/nix-daemon/guix-daemon.cc:159
+msgid "SOCKET"
+msgstr "SOCKET"
+
+#: nix/nix-daemon/guix-daemon.cc:160
+msgid "listen for connections on SOCKET"
+msgstr "počúvať spojenia na SOCKETE"
+
+#: nix/nix-daemon/guix-daemon.cc:162
+msgid "produce debugging output"
+msgstr "vytvárať výstup ladenia"
diff --git a/tests/gnu-maintenance.scm b/tests/gnu-maintenance.scm
index a3e48a0933..837b80063a 100644
--- a/tests/gnu-maintenance.scm
+++ b/tests/gnu-maintenance.scm
@@ -19,7 +19,8 @@
 (define-module (test-gnu-maintenance)
   #:use-module (guix gnu-maintenance)
   #:use-module (srfi srfi-1)
-  #:use-module (srfi srfi-64))
+  #:use-module (srfi srfi-64)
+  #:use-module (ice-9 match))
 
 (test-begin "gnu-maintenance")
 
@@ -30,7 +31,10 @@
                 ("texmacs" "TeXmacs-1.0.7.9-src.tar.gz")
                 ("icecat" "icecat-38.4.0-gnu1.tar.bz2")
                 ("mit-scheme" "mit-scheme-9.2.tar.gz")
-                ("mediainfo" "mediainfo_20.09.tar.xz")))
+                ("mediainfo" "mediainfo_20.09.tar.xz")
+                ("exiv2" "exiv2-0.27.3-Source.tar.gz")
+                ("mpg321" "mpg321_0.3.2.orig.tar.gz")
+                ("bvi" "bvi-1.4.1.src.tar.gz")))
        (every (lambda (project+file)
                 (not (apply release-file? project+file)))
               '(("guile" "guile-www-1.1.1.tar.gz")
@@ -39,4 +43,15 @@
                 ("mit-scheme" "mit-scheme-9.2-doc-pdf.tar.gz")
                 ("gnutls" "gnutls-3.2.18-w32.zip")))))
 
+(test-assert "tarball->version"
+  (let ((tarball->version (@@ (guix gnu-maintenance) tarball->version)))
+    (every (match-lambda
+             ((file version)
+              (equal? (tarball->version file) version)))
+           '(("coreutils-8.32.tar.gz" "8.32")
+             ("mediainfo_20.09.tar.xz" "20.09")
+             ("exiv2-0.27.3-Source.tar.gz" "0.27.3")
+             ("mpg321_0.3.2.orig.tar.gz" "0.3.2")
+             ("bvi-1.4.1.src.tar.gz" "1.4.1")))))
+
 (test-end)
diff --git a/tests/go.scm b/tests/go.scm
index 6ab99f508a..e5780e68b0 100644
--- a/tests/go.scm
+++ b/tests/go.scm
@@ -19,7 +19,7 @@
 ;;; Summary
 ;; Tests for guix/import/go.scm
 
-(define-module (test-import-go)
+(define-module (tests-import-go)
   #:use-module (guix base32)
   #:use-module (guix build-system go)
   #:use-module (guix import go)
@@ -147,7 +147,8 @@ require github.com/kr/pretty v0.2.1
       ("https://pkg.go.dev/github.com/go-check/check"
        . ,pkg.go.dev)
       ("https://pkg.go.dev/github.com/go-check/check?tab=licenses"
-       . ,pkg.go.dev-licence))))
+       . ,pkg.go.dev-licence)
+      ("https://proxy.golang.org/github.com/go-check/check/@v/list" . ""))))
 
 (test-begin "go")
 
@@ -169,6 +170,12 @@ require github.com/kr/pretty v0.2.1
   "daa7c04131f5"
   (go-version->git-ref "v1.2.4-0.20191109021931-daa7c04131f5"))
 
+(test-assert "go-pseudo-version? multi-digit version number"
+  (go-pseudo-version? "v1.23.1-0.20200526195155-81db48ad09cc"))
+
+(test-assert "go-pseudo-version? semantic version with rc"
+  (go-pseudo-version? "v1.4.0-rc.4.0.20200313231945-b860323f09d0"))
+
 ;;; Unit tests for (guix import go)
 
 (test-equal "go-path-escape"
@@ -180,46 +187,43 @@ require github.com/kr/pretty v0.2.1
 (define (testing-parse-mod name expected input)
   (define (inf? p1 p2)
     (string<? (car p1) (car p2)))
-  (let ((input-port (open-input-string input)))
-    (test-equal name
-      (sort expected inf?)
-      (sort
-       ( (@@ (guix import go) parse-go.mod)
-         input-port)
-       inf?))))
+  (test-equal name
+    (sort expected inf?)
+    (sort ((@@ (guix import go) parse-go.mod) input) inf?)))
 
 (testing-parse-mod "parse-go.mod-simple"
-                   '(("good/thing" . "v1.4.5")
-                     ("new/thing/v2" . "v2.3.4")
-                     ("other/thing" . "v1.0.2"))
+                   '(("good/thing" "v1.4.5")
+                     ("new/thing/v2" "v2.3.4")
+                     ("other/thing" "v1.0.2"))
                    fixture-go-mod-simple)
 
 (testing-parse-mod "parse-go.mod-with-block"
-                   '(("A" . "v1")
-                     ("B" . "v1.0.0")
-                     ("C" . "v1.0.0")
-                     ("D" . "v1.2.3")
-                     ("E" . "dev"))
+                   '(("A" "v1")
+                     ("B" "v1.0.0")
+                     ("C" "v1.0.0")
+                     ("D" "v1.2.3")
+                     ("E" "dev"))
                    fixture-go-mod-with-block)
 
-(testing-parse-mod "parse-go.mod-complete"
-                   '(("github.com/corp/arbitrary-repo" . "v0.0.2")
-                     ("quoted.example.com/abitrary/repo" . "v0.0.2")
-                     ("one.example.com/abitrary/repo" . "v1.1.111")
-                     ("hub.jazz.net/git/user/project/sub/directory" . "v1.1.19")
-                     ("hub.jazz.net/git/user/project" . "v1.1.18")
-                     ("launchpad.net/~user/project/branch/sub/directory" . "v1.1.17")
-                     ("launchpad.net/~user/project/branch" . "v1.1.16")
-                     ("launchpad.net/project/series/sub/directory" . "v1.1.15")
-                     ("launchpad.net/project/series" . "v1.1.14")
-                     ("launchpad.net/project" . "v1.1.13")
-                     ("bitbucket.org/user/project/sub/directory" . "v1.11.21")
-                     ("bitbucket.org/user/project" . "v1.11.20")
-                     ("k8s.io/kubernetes/subproject" . "v1.1.101")
-                     ("github.com/user/project/sub/directory" . "v1.1.12")
-                     ("github.com/user/project" . "v1.1.11")
-                     ("github.com/go-check/check" . "v0.0.0-20140225173054-eb6ee6f84d0a"))
-                   fixture-go-mod-complete)
+(testing-parse-mod
+ "parse-go.mod-complete"
+ '(("github.com/corp/arbitrary-repo" "v0.0.2")
+   ("quoted.example.com/abitrary/repo" "v0.0.2")
+   ("one.example.com/abitrary/repo" "v1.1.111")
+   ("hub.jazz.net/git/user/project/sub/directory" "v1.1.19")
+   ("hub.jazz.net/git/user/project" "v1.1.18")
+   ("launchpad.net/~user/project/branch/sub/directory" "v1.1.17")
+   ("launchpad.net/~user/project/branch" "v1.1.16")
+   ("launchpad.net/project/series/sub/directory" "v1.1.15")
+   ("launchpad.net/project/series" "v1.1.14")
+   ("launchpad.net/project" "v1.1.13")
+   ("bitbucket.org/user/project/sub/directory" "v1.11.21")
+   ("bitbucket.org/user/project" "v1.11.20")
+   ("k8s.io/kubernetes/subproject" "v1.1.101")
+   ("github.com/user/project/sub/directory" "v1.1.12")
+   ("github.com/user/project" "v1.1.11")
+   ("github.com/go-check/check" "v0.0.0-20140225173054-eb6ee6f84d0a"))
+ fixture-go-mod-complete)
 
 ;;; End-to-end tests for (guix import go)
 (define (mock-http-fetch testcase)
@@ -249,44 +253,43 @@ require github.com/kr/pretty v0.2.1
 
 (test-equal "go-module->guix-package"
   '(package
-    (name "go-github-com-go-check-check")
-    (version "0.0.0-20201130134442-10cb98267c6c")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/go-check/check.git")
-             (commit (go-version->git-ref version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "0sjjj9z1dhilhpc8pq4154czrb79z9cm044jvn75kxcjv6v5l2m5"))))
-    (build-system go-build-system)
-    (arguments
-     (quote (#:import-path "github.com/go-check/check")))
-    (inputs
-     (quasiquote (("go-github-com-kr-pretty"
-                   (unquote go-github-com-kr-pretty)))))
-    (home-page "https://github.com/go-check/check")
-    (synopsis "Instructions")
-    (description #f)
-    (license license:bsd-2))
+     (name "go-github-com-go-check-check")
+     (version "0.0.0-20201130134442-10cb98267c6c")
+     (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+              (url "https://github.com/go-check/check")
+              (commit (go-version->git-ref version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32
+          "0sjjj9z1dhilhpc8pq4154czrb79z9cm044jvn75kxcjv6v5l2m5"))))
+     (build-system go-build-system)
+     (arguments
+      '(#:import-path "github.com/go-check/check"))
+     (propagated-inputs
+      `(("go-github-com-kr-pretty" ,go-github-com-kr-pretty)))
+     (home-page "https://github.com/go-check/check")
+     (synopsis "Instructions")
+     (description "Package check is a rich testing extension for Go's testing \
+package.")
+     (license license:bsd-2))
 
   ;; Replace network resources with sample data.
   (call-with-temporary-directory
    (lambda (checkout)
      (mock ((web client) http-get
             (mock-http-get fixtures-go-check-test))
-           (mock ((guix http-client) http-fetch
-                  (mock-http-fetch fixtures-go-check-test))
-                 (mock ((guix git) update-cached-checkout
-                        (lambda* (url #:key ref)
-                          ;; Return an empty directory and its hash.
-                          (values checkout
-                                  (nix-base32-string->bytevector
-                                   "0sjjj9z1dhilhpc8pq4154czrb79z9cm044jvn75kxcjv6v5l2m5")
-                                  #f)))
-                       (go-module->guix-package "github.com/go-check/check")))))))
+         (mock ((guix http-client) http-fetch
+                (mock-http-fetch fixtures-go-check-test))
+             (mock ((guix git) update-cached-checkout
+                    (lambda* (url #:key ref)
+                      ;; Return an empty directory and its hash.
+                      (values checkout
+                              (nix-base32-string->bytevector
+                               "0sjjj9z1dhilhpc8pq4154czrb79z9cm044jvn75kxcjv6v5l2m5")
+                              #f)))
+                 (go-module->guix-package "github.com/go-check/check")))))))
 
 (test-end "go")
-
diff --git a/tests/grafts.scm b/tests/grafts.scm
index a12c6a5911..7e1959e4a7 100644
--- a/tests/grafts.scm
+++ b/tests/grafts.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -468,4 +469,86 @@
          replacement
          "/gnu/store")))))
 
+(define (insert-nuls char-size str)
+  (string-join (map string (string->list str))
+               (make-string (- char-size 1) #\nul)))
+
+(define (nuls-to-underscores s)
+  (string-replace-substring s "\0" "_"))
+
+(define (annotate-buffer-boundary s)
+  (string-append (string-take s buffer-size)
+                 "|"
+                 (string-drop s buffer-size)))
+
+(define (abbreviate-leading-fill s)
+  (let ((s* (string-trim s #\=)))
+    (format #f "[~a =s]~a"
+            (- (string-length s)
+               (string-length s*))
+            s*)))
+
+(define (prettify-for-display s)
+  (abbreviate-leading-fill
+   (annotate-buffer-boundary
+    (nuls-to-underscores s))))
+
+(define (two-sample-refs-with-gap char-size1 char-size2 gap offset
+                                  char1 name1 char2 name2)
+  (string-append
+   (make-string (- buffer-size offset) #\=)
+   (insert-nuls char-size1
+                (string-append "/gnu/store/" (make-string 32 char1) name1))
+   gap
+   (insert-nuls char-size2
+                (string-append "/gnu/store/" (make-string 32 char2) name2))
+   (list->string (map integer->char (iota 77 33)))))
+
+(define (sample-map-entry old-char new-char new-name)
+  (cons (make-string 32 old-char)
+        (string->utf8 (string-append (make-string 32 new-char)
+                                     new-name))))
+
+(define (test-two-refs-with-gap char-size1 char-size2 gap offset)
+  (test-equal
+      (format #f "test-two-refs-with-gap, char-sizes ~a ~a, gap ~s, offset ~a"
+              char-size1 char-size2 gap offset)
+    (prettify-for-display
+     (two-sample-refs-with-gap char-size1 char-size2 gap offset
+                               #\6 "-BlahBlaH"
+                               #\8"-SoMeTHiNG"))
+    (prettify-for-display
+     (let* ((content (two-sample-refs-with-gap char-size1 char-size2 gap offset
+                                               #\5 "-blahblah"
+                                               #\7 "-something"))
+            (replacement (alist->vhash
+                          (list (sample-map-entry #\5 #\6 "-BlahBlaH")
+                                (sample-map-entry #\7 #\8 "-SoMeTHiNG")))))
+       (call-with-output-string
+         (lambda (output)
+           ((@@ (guix build graft) replace-store-references)
+            (open-input-string content) output
+            replacement
+            "/gnu/store")))))))
+
+(for-each (lambda (char-size1)
+            (for-each (lambda (char-size2)
+                        (for-each (lambda (gap)
+                                    (for-each (lambda (offset)
+                                                (test-two-refs-with-gap char-size1
+                                                                        char-size2
+                                                                        gap
+                                                                        offset))
+                                              ;; offsets to test
+                                              (map (lambda (i)
+                                                     (+ i (* 40 char-size1)))
+                                                   (iota 30))))
+                                  ;; gaps
+                                  '("" "-" " " "a")))
+                      ;; char-size2 values to test
+                      '(1 2)))
+          ;; char-size1 values to test
+          '(1 2 4))
+
+
 (test-end)
diff --git a/tests/ipfs.scm b/tests/ipfs.scm
new file mode 100644
index 0000000000..3b662b22bd
--- /dev/null
+++ b/tests/ipfs.scm
@@ -0,0 +1,55 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (test-ipfs)
+  #:use-module (guix ipfs)
+  #:use-module ((guix utils) #:select (call-with-temporary-directory))
+  #:use-module (guix tests)
+  #:use-module (web uri)
+  #:use-module (srfi srfi-64))
+
+;; Test the (guix ipfs) module.
+
+(define (ipfs-gateway-running?)
+  "Return true if the IPFS gateway is running at %IPFS-BASE-URL."
+  (let* ((uri    (string->uri (%ipfs-base-url)))
+         (socket (socket AF_INET SOCK_STREAM 0)))
+    (define connected?
+      (catch 'system-error
+        (lambda ()
+          (format (current-error-port)
+                  "probing IPFS gateway at localhost:~a...~%"
+                  (uri-port uri))
+          (connect socket AF_INET INADDR_LOOPBACK (uri-port uri))
+          #t)
+        (const #f)))
+
+    (close-port socket)
+    connected?))
+
+(unless (ipfs-gateway-running?)
+  (test-skip 1))
+
+(test-assert "add-file-tree + restore-file-tree"
+  (call-with-temporary-directory
+   (lambda (directory)
+     (let* ((source  (dirname (search-path %load-path "guix/base32.scm")))
+            (target  (string-append directory "/r"))
+            (content (pk 'content (add-file-tree source))))
+       (restore-file-tree (content-name content) target)
+       (file=? source target)))))
diff --git a/tests/publish.scm b/tests/publish.scm
index 52101876b5..3e67c435ac 100644
--- a/tests/publish.scm
+++ b/tests/publish.scm
@@ -452,8 +452,8 @@ References: ~%"
               (wait-for-file cached)
 
               ;; Both the narinfo and nar should be world-readable.
-              (= #o644 (stat:perms (lstat cached)))
-              (= #o644 (stat:perms (lstat nar)))
+              (= #o444 (logand #o444 (stat:perms (lstat cached))))
+              (= #o444 (logand #o444 (stat:perms (lstat nar))))
 
               (let* ((body         (http-get-port url))
                      (compressed   (http-get nar-url))
diff --git a/tests/substitute.scm b/tests/substitute.scm
index 697abc4684..21b513e1d8 100644
--- a/tests/substitute.scm
+++ b/tests/substitute.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2014, 2015, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2017, 2018, 2019, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -198,7 +198,7 @@ a file for NARINFO."
 
 ;; Never use file descriptor 4, unlike what happens when invoked by the
 ;; daemon.
-(%error-to-file-descriptor-4? #f)
+(%reply-file-descriptor #f)
 
 
 (test-equal "query narinfo without signature"